Telegram Bot API 初心者ガイド (2026年版)
コード例で学ぶ、ゼロからのTelegram Bot初構築ガイド
Hyperealで構築を始めよう
Kling、Flux、Sora、Veoなどに単一のAPIでアクセス。無料クレジットで開始、数百万規模まで拡張可能。
クレジットカード不要 • 10万人以上の開発者 • エンタープライズ対応
2026年版 Telegram Bot API 初心者ガイド
Telegramボットは、タスクの自動化、通知の送信、決済処理、クイズの実行、さらにはフル機能のAIアシスタントとしての利用まで、すべて Telegram Bot API を通じて実現できます。月間アクティブユーザー数が9億人を超えるTelegramは、実際に人々に使われるボットを構築するための最高のプラットフォームの一つです。
このガイドでは、ボットトークンの取得からコマンドの処理、メディアの送信、そして本番環境へのデプロイまで、Telegramボットをゼロから作成する手順を解説します。
Telegramボットで何ができるのか?
コードを書く前に、Bot API がサポートしている主な機能を確認しましょう。
| 機能 | 説明 |
|---|---|
| テキストメッセージ | プレーンテキストや装飾されたメッセージの送受信 |
| コマンド | /start、/help、およびカスタムコマンドの処理 |
| インラインキーボード | メッセージ内のインタラクティブなボタン |
| メディア | 写真、動画、音声、ドキュメント、ステッカーの送信 |
| 決済 | Telegram内蔵の決済システムを通じた支払い受付 |
| Webhook | HTTPコールバックによるリアルタイムの更新受信 |
| グループ管理 | モデレーション、メッセージの固定、ユーザーの追放 |
| インラインモード | @yourbot クエリで、どのチャットからでもボットを呼び出し可能 |
| Mini Apps | Telegram内で動作するフル機能のWebアプリケーション |
ステップ 1: BotFatherでボットを作成する
すべてのTelegramボットは、ボット管理用の公式ボットである BotFather から始まります。
- Telegramを開き、
@BotFatherを検索します。 /newbotを送信します。- 表示名(例: "My First Bot")を選択します。
botで終わるユーザー名(例:my_first_demo_bot)を選択します。- BotFatherが HTTP API トークン を返信します。次のような形式です:
7123456789:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
このトークンは安全に保管してください。このトークンを持つ人は誰でもあなたのボットを操作できてしまいます。
ステップ 2: 最初のメッセージを送信する
Bot API とは、通常の HTTP リクエストでやり取りできます。cURL を使ってテストしてみましょう。
# YOUR_BOT_TOKEN を BotFather から取得したトークンに置き換えてください
# CHAT_ID を あなたの Telegram ユーザー ID に置き換えてください
curl "https://api.telegram.org/botYOUR_BOT_TOKEN/sendMessage" \
-d "chat_id=CHAT_ID" \
-d "text=Hello from my first bot!"
自分のチャットIDを確認するには、ボットに何かメッセージを送信してから、以下を実行してください。
curl "https://api.telegram.org/botYOUR_BOT_TOKEN/getUpdates"
レスポンス内の chat.id フィールドを探してください。
ステップ 3: Pythonでボットを構築する
python-telegram-bot ライブラリは、Telegram Bot API 用の最も人気のある Python ラッパーです。
ライブラリのインストール
pip install python-telegram-bot
コマンドハンドラーを備えた基本的なボット
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
# コマンドハンドラー
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text(
"ようこそ!私はあなたのボットです。/help で何ができるか確認してください。"
)
async def help_command(update: Update, context: ContextTypes.DEFAULT_TYPE):
help_text = """
利用可能なコマンド:
/start - ボットを開始
/help - このヘルプを表示
/echo <text> - メッセージをそのまま返します
/weather <city> - 天気情報を取得
"""
await update.message.reply_text(help_text)
async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE):
user_text = " ".join(context.args) if context.args else "何も入力されていません!"
await update.message.reply_text(user_text)
# 通常のテキストメッセージの処理
async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
text = update.message.text
await update.message.reply_text(f"あなたはこう言いました: {text}")
def main():
app = Application.builder().token("YOUR_BOT_TOKEN").build()
# ハンドラーの登録
app.add_handler(CommandHandler("start", start))
app.add_handler(CommandHandler("help", help_command))
app.add_handler(CommandHandler("echo", echo))
app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
# アップデートのポーリングを開始
print("Bot 起動中...")
app.run_polling()
if __name__ == "__main__":
main()
ボットを実行します。
python bot.py
Telegramを開き、作成したボットを見つけて /start を送信してください。すぐに反応が返ってくるはずです。
ステップ 4: インラインキーボードを追加する
インラインキーボードを使用すると、メッセージに要素を追加してインタラクティブなボタンを配置できます。
from telegram import InlineKeyboardButton, InlineKeyboardMarkup, Update
from telegram.ext import CallbackQueryHandler, ContextTypes
async def menu(update: Update, context: ContextTypes.DEFAULT_TYPE):
keyboard = [
[
InlineKeyboardButton("オプション 1", callback_data="option_1"),
InlineKeyboardButton("オプション 2", callback_data="option_2"),
],
[
InlineKeyboardButton("Webサイトにアクセス", url="https://example.com"),
],
]
reply_markup = InlineKeyboardMarkup(keyboard)
await update.message.reply_text("オプションを選択してください:", reply_markup=reply_markup)
async def button_callback(update: Update, context: ContextTypes.DEFAULT_TYPE):
query = update.callback_query
await query.answer() # ボタン押下を確認
if query.data == "option_1":
await query.edit_message_text("オプション 1 が選択されました!")
elif query.data == "option_2":
await query.edit_message_text("オプション 2 が選択されました!")
# ハンドラーの登録
app.add_handler(CommandHandler("menu", menu))
app.add_handler(CallbackQueryHandler(button_callback))
ステップ 5: メディアファイルを送信する
ボットは写真、動画、ドキュメントなどを送信できます。
async def send_photo(update: Update, context: ContextTypes.DEFAULT_TYPE):
# URLから送信
await update.message.reply_photo(
photo="https://example.com/image.jpg",
caption="Web上の写真です!"
)
async def send_document(update: Update, context: ContextTypes.DEFAULT_TYPE):
# ローカルファイルを送信
with open("report.pdf", "rb") as doc:
await update.message.reply_document(
document=doc,
caption="レポートを送付します。"
)
async def send_video(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_video(
video="https://example.com/video.mp4",
caption="この動画をチェックしてください!"
)
ステップ 6: Node.jsでボットを構築する
JavaScript を好む場合は、telegraf ライブラリが最も一般的です。
npm install telegraf
const { Telegraf, Markup } = require("telegraf");
const bot = new Telegraf("YOUR_BOT_TOKEN");
// コマンドハンドラー
bot.start((ctx) => {
ctx.reply("ようこそ! /help で利用可能なコマンドを確認してください。");
});
bot.help((ctx) => {
ctx.reply(`利用可能なコマンド:
/start - ボットを開始
/help - ヘルプを表示
/menu - オプションメニューを表示`);
});
// インラインキーボードの例
bot.command("menu", (ctx) => {
ctx.reply(
"オプションを選択してください:",
Markup.inlineKeyboard([
[Markup.button.callback("オプション A", "action_a")],
[Markup.button.callback("オプション B", "action_b")],
[Markup.button.url("サイトを訪問", "https://example.com")],
])
);
});
// ボタンコールバックの処理
bot.action("action_a", (ctx) => {
ctx.answerCbQuery();
ctx.editMessageText("オプション A を選択しました!");
});
bot.action("action_b", (ctx) => {
ctx.answerCbQuery();
ctx.editMessageText("オプション B を選択しました!");
});
// テキストメッセージの処理
bot.on("text", (ctx) => {
ctx.reply(`あなたはこう言いました: ${ctx.message.text}`);
});
bot.launch();
console.log("Bot 起動中...");
// プロセスの正常終了処理
process.once("SIGINT", () => bot.stop("SIGINT"));
process.once("SIGTERM", () => bot.stop("SIGTERM"));
ステップ 7: 本番環境用の Webhook を設定する
開発中はポーリング(polling)で十分ですが、本番環境のボットではパフォーマンス向上のために Webhook を使用すべきです。
# python-telegram-bot で Webhook を使用する場合
from telegram.ext import Application
app = Application.builder().token("YOUR_BOT_TOKEN").build()
# ここにハンドラーを登録...
# Webhookの開始
app.run_webhook(
listen="0.0.0.0",
port=8443,
url_path="YOUR_BOT_TOKEN",
webhook_url=f"https://your-domain.com/{YOUR_BOT_TOKEN}"
)
または、手動で Webhook を設定することもできます。
curl "https://api.telegram.org/botYOUR_BOT_TOKEN/setWebhook" \
-d "url=https://your-domain.com/webhook/YOUR_BOT_TOKEN"
デプロイ先のオプション
| プラットフォーム | コスト | 設定難易度 | 最適な用途 |
|---|---|---|---|
| Railway | 無料枠あり | 容易 | 素早いデプロイ |
| Render | 無料枠あり | 容易 | シンプルなボット |
| AWS Lambda | 無料枠あり | 中 | イベント駆動型ボット |
| Google Cloud Run | 無料枠あり | 中 | スケーラブルなボット |
| VPS (Hetzner, DigitalOcean) | $4-5/月 | 中 | 完全な制御 |
| Fly.io | 無料枠あり | 容易 | グローバルデプロイ |
Railway へのデプロイ
# Railway CLI のインストール
npm install -g @railway/cli
# ログインとデプロイ
railway login
railway init
railway up
Railway のダッシュボードで環境変数として BOT_TOKEN を追加してください。
Bot API のレート制限
ボットを構築する際は、以下の制限に注意してください。
| 制限項目 | 値 |
|---|---|
| ユーザーへのメッセージ | 1秒間に30通まで |
| グループへのメッセージ | 1分間に20通まで |
| 一括メッセージ送信 | 全チャット合計で1秒間に30通まで |
| ファイルアップロード | 最大 50 MB |
| ファイルダウンロード | 最大 20 MB |
| インラインクエリ結果 | 最大 50 件 |
よくある質問 (FAQ)
Telegram Bot API の利用料金はいくらですか? Telegram Bot API は完全に無料です。利用料、レートに応じた課金、プレミアムプランなどはありません。
ボットは過去のメッセージ履歴にアクセスできますか? ボットは、グループに追加された以降のメッセージのみを閲覧できます(適切な権限がある場合のみ)。過去のメッセージ履歴を読み取ることはできません。
グループでボットを動作させるにはどうすればいいですか?
ボットをグループに追加し、必要な権限を付与してください。MessageHandler を使用してメッセージに応答するか、コマンドにのみ応答するように設定します。
ボットを通じて決済を受け取れますか?
はい。Telegramは Stripe などのプロバイダーを通じたネイティブ決済をサポートしています。sendInvoice メソッドを使用して支払いリクエストを作成できます。
ボットトークンを安全に保つには?
トークンをソースコード内に直接記述(ハードコード)しないでください。環境変数やシークレットマネージャーを使用しましょう。トークンが漏洩した場合は、すぐに BotFather の /revoke で再生成してください。
まとめ
Telegram Bot API は、開発者にとって最もフレンドリーなボットプラットフォームの一つです。無料かつ無制限の利用、優れたドキュメント、シンプルなコマンドボットから高度な Mini Apps までの幅広いサポートにより、自動化ツールやサービスを構築するのに理想的な場所です。
画像、動画、喋るアバターなどのAIメディアを生成するTelegramボットを構築しているなら、Hypereal AI を無料でお試しください。35クレジット提供、クレジットカード不要です。APIはあらゆるTelegramボットと簡単に統合でき、オンデマンドでAIコンテンツを生成できます。
