Telegram Bot Builder
ユーザーが「Telegram botを作りたい」「Telegramチャットボットを構築したい」「webhookを設定したい」「インラインキーボードやコールバッククエリを実装したい」「Telegram経由でメディア送信や決済機能を追加したい」と依頼した場合、またはTelegram Bot API・botトークン・getUpdates・setWebhook・node-telegram-bot-api・grammy・python-telegram-bot・aiogram等に言及した場合に使用するスキルです。Node.jsおよびPythonを使用して、本番環境に対応したTelegram botを構築するための包括的なガイダンスを提供します。
description の原文を見る
This skill should be used when the user asks to "create a Telegram bot", "build a Telegram chatbot", "set up a Telegram webhook", "add inline keyboards to a bot", "handle Telegram callback queries", "implement Telegram payments", "send media via Telegram bot", "configure Telegram bot commands", "deploy a Telegram bot", or mentions the Telegram Bot API, telegram bot tokens, getUpdates, setWebhook, or bot frameworks like node-telegram-bot-api, grammy, python-telegram-bot, or aiogram. Provides comprehensive guidance for building production-ready Telegram bots with Node.js and Python.
SKILL.md 本文
Telegram Bot Builder
Bot API (v9.4) を使用した Telegram ボット構築の包括的なガイダンス。Node.js と Python 生態系の両方をカバーし、認証、メッセージング、キーボード、メディア処理、支払い、インラインモード、ウェブフック、デプロイメントの本番対応パターンを提供します。
このスキルの使用時期
以下の場合にこのスキルを使用してください:
- ゼロから新しい Telegram ボットを構築する
- Telegram メッセージングを既存アプリケーションに統合する
- ボット更新用のウェブフックまたはロングポーリングを設定する
- インラインキーボードとコールバッククエリを使用したインタラクティブメニューを作成する
- メディア(写真、ビデオ、ドキュメント、ステッカー)を処理する
- Telegram Payments または Telegram Stars を実装する
- インラインモード機能を構築する
- ボット経由でグループ、チャネル、またはフォーラムトピックを管理する
- ボットを本番環境にデプロイする (Docker、PM2、サーバーレス)
コア概念
認証
すべてのボットは @BotFather から取得した一意のトークンを持っています。トークン形式:123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11。
すべての API 呼び出しは以下に送信されます:https://api.telegram.org/bot<TOKEN>/METHOD_NAME
# .env ファイル
BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
トークンは環境変数に保存します。ソースコードにコミットしないでください。
更新の受け取り:ポーリングとウェブフック
ロングポーリング (getUpdates) - よりシンプル、HTTPS 不要、開発に最適:
// node-telegram-bot-api を使用した Node.js
const bot = new TelegramBot(process.env.BOT_TOKEN, { polling: true });
# python-telegram-bot を使用した Python
app = Application.builder().token(os.getenv("BOT_TOKEN")).build()
app.run_polling()
ウェブフック (setWebhook) - 本番環境に向いている、低レイテンシー、HTTPS が必須(ポート 443、80、88、または 8443):
bot.setWebHook('https://yourdomain.com/webhook', { secret_token: SECRET });
開発と小規模なボットはポーリングを選択します。トラフィックが多い本番環境デプロイメントはウェブフックを選択します。
メッセージタイプとフォーマット
sendMessage でテキストを送信します。サポートされているパースモード:
- HTML:
<b>bold</b>、<i>italic</i>、<code>code</code>、<pre>block</pre>、<a href="url">link</a>、<tg-spoiler>spoiler</tg-spoiler> - MarkdownV2:
*bold*、_italic_、`code`、```block```、[link](url)、||spoiler||。エスケープが必要:_*[]()~>#+-=|{}.!
エスケープが簡単なため HTML を推奨します。よりシンプルなフォーマットで十分な場合は MarkdownV2 を使用してください。
キーボードとインタラクティブ要素
インラインキーボード - メッセージに付属するボタン:
bot.sendMessage(chatId, 'Choose:', {
reply_markup: {
inline_keyboard: [
[{ text: 'Option A', callback_data: 'a' }, { text: 'Option B', callback_data: 'b' }],
[{ text: 'Visit Site', url: 'https://example.com' }]
]
}
});
返信キーボード - 入力フィールド下のカスタムキーボード:
bot.sendMessage(chatId, 'Choose:', {
reply_markup: {
keyboard: [[{ text: '📊 Stats' }, { text: '⚙️ Settings' }]],
resize_keyboard: true,
one_time_keyboard: true
}
});
callback_query でインラインボタン押下を処理します。callback_data フィールドは 64 バイトに制限されています。常に answerCallbackQuery を呼び出してローディングインジケータを消します。
メディアの送信
// 写真 (file_id、URL、またはアップロード)
bot.sendPhoto(chatId, 'https://example.com/photo.jpg', { caption: 'A photo' });
// ドキュメント
bot.sendDocument(chatId, fs.createReadStream('./file.pdf'), { caption: 'Report' });
// アルバム (2~10 項目)
bot.sendMediaGroup(chatId, [
{ type: 'photo', media: 'https://example.com/1.jpg', caption: 'First' },
{ type: 'photo', media: 'https://example.com/2.jpg' }
]);
ファイルを指定する 3 つの方法:file_id(以前アップロードしたファイルを再利用)、HTTP URL(Telegram がダウンロード)、またはマルチパートアップロード。ファイル制限:アップロード 50MB、Bot API 経由でのダウンロード 20MB。
会話状態
複数ステップのインタラクション(登録、フォーム、ウィザード)では、チャットごとに会話状態を保持します:
- Node.js:
Mapまたは Redis を使用してchatIdごとに{ step, data }を追跡 - Python:
python-telegram-botのConversationHandlerを使用(組み込み状態機械)
完全な会話フロー実装については reference/patterns_and_examples.md を参照してください。
エラーハンドリング
一般的なエラーシナリオに対応:
- 429 Too Many Requests: レスポンスから
retry_afterを読み取り、待機後に再試行 - 403 Forbidden: ボットがユーザーからブロックされたか、チャットから削除された
- 400 Bad Request: 無効なパラメータ(
descriptionフィールドを確認) - 409 Conflict: 別のボットインスタンスが同じトークンをポーリングで使用中
レート制限:異なるチャットへは約 30 メッセージ/秒、同じグループへは約 20 メッセージ/分。再試行に指数バックオフを実装してください。
ボットコマンド
Telegram メニューに表示されるコマンドを登録:
bot.setMyCommands([
{ command: 'start', description: 'Start the bot' },
{ command: 'help', description: 'Show help' },
{ command: 'settings', description: 'Bot settings' }
]);
コマンドは BotCommandScope を使用して、特定のチャット、ユーザー、または言語に限定できます。
一般的なパターン
クイックスタート (Node.js)
mkdir my-bot && cd my-bot
npm init -y
npm install node-telegram-bot-api dotenv
echo "BOT_TOKEN=your_token_here" > .env
クイックスタート (Python)
mkdir my-bot && cd my-bot
pip install python-telegram-bot python-dotenv
echo "BOT_TOKEN=your_token_here" > .env
人気のあるライブラリ
| 言語 | ライブラリ | スタイル | 最適用途 |
|---|---|---|---|
| Node.js | node-telegram-bot-api | コールバック型 | シンプルなボット、クイックプロトタイプ |
| Node.js | grammy | ミドルウェア型 | 複雑なボット、プラグイン |
| Node.js | telegraf | ミドルウェア型 | 成熟したエコシステム |
| Python | python-telegram-bot | ハンドラー型 | フル機能、会話 |
| Python | aiogram | Async ファースト | 高性能な非同期ボット |
重要な API メソッドカテゴリ
| カテゴリ | 主要メソッド |
|---|---|
| メッセージ | sendMessage、sendPhoto、sendVideo、sendDocument、editMessageText、deleteMessage |
| キーボード | InlineKeyboardMarkup、ReplyKeyboardMarkup、answerCallbackQuery |
| チャット管理 | getChat、banChatMember、promoteChatMember、setChatPermissions |
| ファイル | getFile、sendMediaGroup、sendDocument |
| インラインモード | answerInlineQuery と InlineQueryResult* タイプ |
| 支払い | sendInvoice、answerPreCheckoutQuery(Telegram Stars は currency: "XTR" を使用) |
| ボット設定 | setMyCommands、setMyDescription、setWebhook |
デプロイメントオプション
- PM2:
pm2 start bot.js --name telegram-bot- 自動再起動機能付きプロセスマネージャー - Docker:
docker-composeを使用したコンテナ化デプロイメント - サーバーレス: Vercel/AWS Lambda 関数としてのウェブフックハンドラー
- VPS: systemd サービスを使用した直接デプロイメント
Docker、PM2、サーバーレスデプロイメント構成については reference/patterns_and_examples.md を参照してください。
セキュリティチェックリスト
BOT_TOKENを環境変数に保存- ウェブフックエンドポイントで
X-Telegram-Bot-Api-Secret-Tokenを検証 - 管理者コマンドのユーザー ID を確認
- ユーザーごとのレート制限を実装
- データベース保存前にユーザー入力をサニタイズ
- すべてのウェブフックエンドポイントに HTTPS を使用
allowed_updatesを必要なタイプのみに制限
参照ファイル
詳細な API ドキュメントと実装パターンについては、以下を参照してください:
- 100 以上の Bot API メソッドの完全なリスト(メッセージング、チャット管理、ステッカー、支払い、インラインモード、ゲーム、フォーラムトピック、ギフト、パスポート等でカテゴリ分け)reference/api_methods.md- 200 以上の Bot API タイプと全フィールドの完全なリスト(Update、Message、Chat、User、キーボード、メディアタイプ、支払いタイプ、チャットメンバー、リアクション等)reference/api_types.md- Node.js と Python の本番対応実装パターン:インラインキーボード、ウェブフック、メディア処理、会話状態管理、データベース統合、管理パネル、多言語サポート、Docker/PM2/サーバーレスデプロイメント、Telegram Stars 支払い、インラインモードreference/patterns_and_examples.md
ボットを構築する際は、まず SKILL.md でコア概念を学び、詳細な API 情報または実装パターンが必要に応じて適切な参照ファイルを読み込んでください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- davila7
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/davila7/claude-code-templates / ライセンス: MIT
関連スキル
doubt-driven-development
重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。
apprun-skills
TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。
desloppify
コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。
debugging-and-error-recovery
テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。
test-driven-development
テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。
incremental-implementation
変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。