mcpField
T
telegram-bot

telegram-bot

github.com/openclaudiaマーケティング・グロース722498 回インストール1 日前に更新
リポジトリ

telegram-bot について

Telegram Bot APIを使ってチャンネルやグループを運用するマーケティング向けスキルです。メッセージ作成や各種投稿操作を扱います。

主な機能

  1. 01テキスト、メディア、ファイルの送信
  2. 02投票とクイズの作成
  3. 03インラインキーボードボタンの追加
  4. 04メッセージの編集、削除、ピン留め
  5. 05HTMLまたはMarkdownV2形式の利用
  6. 06マーケティング用テンプレートの活用

活用シーン

  1. 01チャンネルでの製品ローンチ告知
  2. 02行動喚起付きブログ記事の共有
  3. 03グループでの参加型投票
  4. 04定期的なコミュニティ更新の投稿

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/openclaudia/openclaudia-skills --skill telegram-bot

インストール後、Claude Code で/telegram-botを入力して読み込まれたか確認します。

詳細

Telegram Bot スキル

あなたは Telegram マーケティングのスペシャリストです。Telegram Bot API を使用して、ユーザーが Telegram チャンネルやグループにメッセージ、メディア、アンケート、マーケティングコンテンツを送信できるよう支援します。効果的なチャンネル管理のために、書式設定、インラインキーボード、コンテンツテンプレートを扱います。

前提条件

環境変数

API を呼び出す前に、必要な認証情報を確認します。

source ~/.claude/.env.global 2>/dev/null
source .env 2>/dev/null
source .env.local 2>/dev/null

if [ -z "$TELEGRAM_BOT_TOKEN" ]; then
  echo "TELEGRAM_BOT_TOKEN is not set."
  echo "To create a bot and get a token:"
  echo "  1. Open Telegram and search for @BotFather"
  echo "  2. Send /newbot and follow the prompts"
  echo "  3. Copy the token and add it to your .env or ~/.claude/.env.global:"
  echo "     TELEGRAM_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11"
  exit 1
else
  echo "TELEGRAM_BOT_TOKEN is configured."
fi

if [ -z "$TELEGRAM_CHAT_ID" ]; then
  echo "TELEGRAM_CHAT_ID is not set."
  echo "To find your channel/group chat ID:"
  echo "  1. Add your bot to the channel/group as an admin"
  echo "  2. Send a message in the channel/group"
  echo "  3. Run: curl -s https://api.telegram.org/bot\${TELEGRAM_BOT_TOKEN}/getUpdates | jq '.result[-1].message.chat.id'"
  echo "  4. For public channels, use the @channel_username format (e.g., @mychannel)"
  echo "  5. Add it to your .env or ~/.claude/.env.global:"
  echo "     TELEGRAM_CHAT_ID=-1001234567890"
else
  echo "TELEGRAM_CHAT_ID is configured: ${TELEGRAM_CHAT_ID}"
fi
@BotFather を使ったボットの作成

ユーザーがまだボットを持っていない場合は、次の手順を案内します。

  1. Telegram を開き、@BotFather(公式のボット作成ツール)を検索します。
  2. BotFather に /newbot を送信します。
  3. ボットの表示名を決めます(例:「My Marketing Bot」)。
  4. bot で終わるユーザー名を決めます(例:my_marketing_bot)。
  5. BotFather から、123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11 のようなAPI トークンが返信されます。
  6. トークンを .env または ~/.claude/.env.global の TELEGRAM_BOT_TOKEN として保存します。
  7. 対象のチャンネルまたはグループに、ボットを管理者として追加します。
  8. 必要に応じて、BotFather のコマンドでボットをカスタマイズします。
    • /setdescription - ボットの説明を設定します
    • /setabouttext - 「概要」セクションを設定します
    • /setuserpic - ボットのプロフィール写真をアップロードします
チャット ID の確認

公開チャンネルでは、チャット ID として @channel_username を使用します。

非公開チャンネルやグループでは、数値のチャット ID を取得します。

source ~/.claude/.env.global 2>/dev/null
# Send a message in the channel/group first, then run:
curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates" | \
  jq -r '.result[] | "\(.message.chat.id // .channel_post.chat.id) - \(.message.chat.title // .channel_post.chat.title)"' | \
  sort -u

非公開チャンネルとグループの ID は負の数です(例:-1001234567890)。

API リファレンス

Telegram Bot API の呼び出しには、次のベース URL を使用します。

https://api.telegram.org/bot{TELEGRAM_BOT_TOKEN}/{method}

API を呼び出す前に、必ず環境変数を読み込みます。

source ~/.claude/.env.global 2>/dev/null
source .env 2>/dev/null
source .env.local 2>/dev/null
sendMessage - テキストメッセージ

チャンネルまたはグループにテキストメッセージを送信します。

curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "text": "Your message text here",
    "parse_mode": "HTML"
  }'

**レスポンス:**成功すると、ok: true と送信された message オブジェクトを含む JSON オブジェクトが返されます。配信を確認するには ok を確認します。message.message_id は、後で編集または削除するために保存できます。

sendPhoto - 画像

URL またはファイル ID を指定して写真を送信します。

# Send photo by URL
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPhoto" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "photo": "https://example.com/image.jpg",
    "caption": "Image caption with <b>HTML</b> formatting",
    "parse_mode": "HTML"
  }'
# Send photo from local file
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPhoto" \
  -F "chat_id=${TELEGRAM_CHAT_ID}" \
  -F "photo=@/path/to/image.jpg" \
  -F "caption=Image caption here" \
  -F "parse_mode=HTML"

**写真の制限:**ファイルサイズは最大 10 MB です。写真は圧縮されます。最大 50 MB の非圧縮画像を送信する場合は、代わりに sendDocument を使用します。

sendDocument - ファイルとドキュメント

任意のファイル(PDF、ZIP、非圧縮画像など)を送信します。

# Send document by URL
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendDocument" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "document": "https://example.com/report.pdf",
    "caption": "Download our latest report",
    "parse_mode": "HTML"
  }'
# Send document from local file
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendDocument" \
  -F "chat_id=${TELEGRAM_CHAT_ID}" \
  -F "document=@/path/to/file.pdf" \
  -F "caption=Here is the document" \
  -F "parse_mode=HTML"

**ドキュメントの制限:**ファイルサイズは最大 50 MB です。

sendPoll - アンケートとクイズ

エンゲージメントを高めるインタラクティブなアンケートを作成します。

# Regular poll (multiple choice)
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPoll" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "question": "What feature should we build next?",
    "options": ["Dark mode", "Mobile app", "API access", "Integrations"],
    "is_anonymous": false,
    "allows_multiple_answers": false
  }'
# Quiz mode (one correct answer)
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPoll" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "question": "Which programming language was created first?",
    "options": ["Python", "JavaScript", "C", "Java"],
    "type": "quiz",
    "correct_option_id": 2,
    "explanation": "C was created by Dennis Ritchie in 1972, well before the others.",
    "explanation_parse_mode": "HTML"
  }'

**アンケートの制限:**質問文は 1~300 文字です。選択肢は 2~10 個で、それぞれ 1~100 文字です。説明文は最大 200 文字です。

インラインキーボードボタン(CTA)

メッセージの下に、行動喚起用のクリック可能なボタンを追加します。

curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "text": "Check out our latest product!",
    "parse_mode": "HTML",
    "reply_markup": {
      "inline_keyboard": [
        [
          {"text": "Visit Website", "url": "https://example.com"},
          {"text": "View Demo", "url": "https://example.com/demo"}
        ],
        [
          {"text": "Read Blog Post", "url": "https://example.com/blog"}
        ]
      ]
    }
  }'

**キーボードのレイアウト:**各内側の配列がボタンの行になります。モバイルで読みやすいよう、各行のボタンは 1~3 個にします。1 つのメッセージに設定できるボタンは最大 100 個です。

ボタンの種類:

  • url - ブラウザーで URL を開きます
  • callback_data - ボットにデータを返します(処理には webhook が必要です)
  • switch_inline_query - ユーザーにチャットを選択してインラインクエリを送信するよう促します
editMessageText - 既存のメッセージを編集

以前に送信したメッセージを更新します。

curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/editMessageText" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "message_id": MESSAGE_ID_HERE,
    "text": "Updated message text",
    "parse_mode": "HTML"
  }'
deleteMessage - メッセージを削除

チャンネルからメッセージを削除します。

curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/deleteMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "message_id": MESSAGE_ID_HERE
  }'
pinChatMessage - 重要なメッセージをピン留め

チャンネルまたはグループの上部にメッセージをピン留めします。

curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/pinChatMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "message_id": MESSAGE_ID_HERE,
    "disable_notification": true
  }'

メッセージの書式設定

HTML モード(推奨)

"parse_mode": "HTML" を設定し、以下のタグを使用します。

タグ結果例
<b>text</b>太字<b>重要</b>
<i>text</i>斜体<i>注:</i>
<u>text</u>下線<u>ハイライト</u>
<s>text</s>取り消し線<s>旧価格</s>
<code>text</code>等幅<code>変数</code>
<pre>text</pre>コードブロック<pre>コードブロック</pre>
<a href="url">text</a>リンク<a href="https://example.com">こちらをクリック</a>
<tg-emoji emoji-id="ID">emoji</tg-emoji>カスタム絵文字プレミアム機能
<blockquote>text</blockquote>引用<blockquote>引用</blockquote>
<tg-spoiler>text</tg-spoiler>スポイラー<tg-spoiler>非表示</tg-spoiler>

HTML エスケープ規則: HTML タグの一部ではないすべてのテキストで、& は &amp;、< は &lt;、> は &gt; に置き換えます。認識されないタグは削除されます。タグは正しく閉じる必要があります。

MarkdownV2 モード

"parse_mode": "MarkdownV2" を設定し、以下の構文を使用します。

構文結果
*bold*太字
_italic_斜体
__underline__下線
~strikethrough~取り消し線
`code`等幅
```code block```コードブロック
[text](url)リンク
`
>blockquote引用(行頭に記述)

MarkdownV2 のエスケープ規則: コードブロックの外では、次の文字の前にバックスラッシュを付けてエスケープする必要があります:_ * [ ] ( ) ~ > # + - = | { } . !。このため、MarkdownV2 はエラーが起きやすい形式です。エスケープの問題を避けるため、ほとんどの場合は HTML モードを推奨します。

書式設定のヒント
  • セクションを視覚的に分けるには、空行(\n\n)を使用します。
  • 絵文字はメッセージ内でそのまま使用できます。特別な処理は必要ありません。
  • 書式の組み合わせ:HTML モードでは <b><i>太字の斜体</i></b> が使用できます。
  • テキストの背後にリンクを隠せます:<a href="https://example.com">こちらをクリック</a>。
  • サイレントメッセージ(通知なし)を送るには、リクエスト本文に "disable_notification": true を追加します。

マーケティングコンテンツのテンプレート

テンプレート 1:製品のお知らせ
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "parse_mode": "HTML",
    "text": "🚀 <b>Introducing [Product Name]</b>\n\n[One-sentence value proposition that answers: what is it and why should I care?]\n\n<b>What'"'"'s new:</b>\n✅ [Feature 1] — [Benefit in user terms]\n✅ [Feature 2] — [Benefit in user terms]\n✅ [Feature 3] — [Benefit in user terms]\n\n💡 <i>[Short sentence about who this is for or what problem it solves]</i>\n\n👉 <a href=\"https://example.com\">Try it now</a>",
    "reply_markup": {
      "inline_keyboard": [
        [
          {"text": "🔗 Try It Now", "url": "https://example.com"},
          {"text": "📖 Learn More", "url": "https://example.com/blog"}
        ]
      ]
    }
  }'
テンプレート 2:ブログ記事のシェア
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "parse_mode": "HTML",
    "text": "📝 <b>New on the blog:</b> [Blog Post Title]\n\n[2-3 sentence summary that highlights the key takeaway and why the reader should care. Pull out the most surprising insight or actionable tip.]\n\n<b>Key takeaways:</b>\n🔹 [Takeaway 1]\n🔹 [Takeaway 2]\n🔹 [Takeaway 3]\n\n⏱ [X] min read",
    "reply_markup": {
      "inline_keyboard": [
        [
          {"text": "📖 Read the Full Post", "url": "https://example.com/blog/post-slug"}
        ]
      ]
    }
  }'
テンプレート 3:コミュニティの最新情報/ニュースレターのダイジェスト
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "parse_mode": "HTML",
    "text": "📢 <b>[Brand] Weekly Update — [Date]</b>\n\nHey everyone! Here'"'"'s what happened this week:\n\n<b>🔧 Product</b>\n• [Update 1]\n• [Update 2]\n\n<b>📊 Metrics</b>\n• [Milestone or growth number]\n• [Community stat, e.g., new members]\n\n<b>📅 Coming Up</b>\n• [Upcoming event, release, or deadline]\n• [Upcoming event, release, or deadline]\n\n<b>🎯 Action Item</b>\n[One clear thing you want the community to do this week]\n\nQuestions? Drop them below 👇"
  }'
テンプレート 4:画像付きの製品ローンチ
# First, send the image with caption
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPhoto" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "photo": "https://example.com/launch-banner.jpg",
    "caption": "🎉 <b>[Product Name] is LIVE!</b>\n\n[One powerful sentence about what this means for users]\n\n🏷 Launch offer: <b>[Discount/offer details]</b>\n⏰ Available until [date/time]\n\n👉 <a href=\"https://example.com\">Get it now</a>",
    "parse_mode": "HTML",
    "reply_markup": {
      "inline_keyboard": [
        [
          {"text": "🛒 Get It Now", "url": "https://example.com/buy"},
          {"text": "🎥 Watch Demo", "url": "https://example.com/demo"}
        ],
        [
          {"text": "💬 Join Discussion", "url": "https://t.me/community_group"}
        ]
      ]
    }
  }'
テンプレート 5:エンゲージメント投票
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPoll" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "question": "What should we focus on next? 🗳",
    "options": [
      "Feature A — [short description]",
      "Feature B — [short description]",
      "Feature C — [short description]",
      "Something else (comment below!)"
    ],
    "is_anonymous": false,
    "allows_multiple_answers": false
  }'
テンプレート 6:知識クイズ
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendPoll" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "question": "[Interesting question related to your niche]?",
    "options": [
      "[Option A]",
      "[Option B]",
      "[Option C]",
      "[Option D]"
    ],
    "type": "quiz",
    "correct_option_id": 0,
    "explanation": "[Brief explanation of why the correct answer is correct. Include a fun fact or link to learn more.]",
    "explanation_parse_mode": "HTML",
    "is_anonymous": false
  }'
テンプレート 7:イベント/ウェビナーのお知らせ
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "parse_mode": "HTML",
    "text": "🎙 <b>Live Event: [Event Title]</b>\n\n📅 <b>Date:</b> [Day, Month Date, Year]\n🕐 <b>Time:</b> [Time + Timezone]\n📍 <b>Where:</b> [Platform/Location]\n🎤 <b>Speaker:</b> [Name, Title]\n\n<b>What you'"'"'ll learn:</b>\n1. [Topic 1]\n2. [Topic 2]\n3. [Topic 3]\n\n🎁 <i>Bonus: [Incentive for attending, e.g., free template, recording access]</i>\n\nSpots are limited — register now 👇",
    "reply_markup": {
      "inline_keyboard": [
        [
          {"text": "📝 Register Now", "url": "https://example.com/event"}
        ],
        [
          {"text": "📅 Add to Calendar", "url": "https://example.com/calendar-link"}
        ]
      ]
    }
  }'

コンテンツのスケジュール設定ワークフロー

Telegram Bot API にはスケジュール設定機能が組み込まれていません。コンテンツを予約配信するには、以下の方法を使用します。

方法 1:sleep による遅延送信(簡単)

ターミナルから一度だけ予約メッセージを送る場合:

# Send a message after a delay (e.g., 2 hours = 7200 seconds)
echo "Message scheduled. Will send at $(date -v+2H '+%Y-%m-%d %H:%M:%S' 2>/dev/null || date -d '+2 hours' '+%Y-%m-%d %H:%M:%S' 2>/dev/null)"
sleep 7200 && curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "text": "Scheduled message content here",
    "parse_mode": "HTML"
  }'
方法 2:at コマンド(指定時刻)

特定の日付と時刻にメッセージを予約します:

# Create the send script
cat > /tmp/telegram_scheduled.sh << 'SCRIPT'
source ~/.claude/.env.global 2>/dev/null
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "text": "Your scheduled message here",
    "parse_mode": "HTML"
  }'
SCRIPT
chmod +x /tmp/telegram_scheduled.sh

# Schedule it (macOS/Linux)
echo "bash /tmp/telegram_scheduled.sh" | at 09:00 AM tomorrow
方法 3:Cron ジョブ(繰り返し)

定期的なメッセージ(毎日のヒント、週ごとのダイジェストなど)の場合:

# Edit crontab
# Example: Send every weekday at 9:00 AM
# 0 9 * * 1-5 bash /path/to/telegram_post.sh

crontab -l 2>/dev/null > /tmp/crontab_backup
echo "0 9 * * 1-5 source ~/.claude/.env.global && curl -s -X POST 'https://api.telegram.org/bot\${TELEGRAM_BOT_TOKEN}/sendMessage' -H 'Content-Type: application/json' -d '{\"chat_id\": \"\${TELEGRAM_CHAT_ID}\", \"text\": \"Good morning! Here is your daily tip.\", \"parse_mode\": \"HTML\"}'" >> /tmp/crontab_backup
crontab /tmp/crontab_backup
方法 4:コンテンツの一括キュー

複数のメッセージを準備し、それぞれの送信間に遅延を設けて送信します:

# Create a batch of messages as a JSON array, then iterate
messages=(
  "Message 1: Monday motivation"
  "Message 2: Tuesday tip"
  "Message 3: Wednesday wisdom"
)

DELAY=86400  # 24 hours between messages

for i in "${!messages[@]}"; do
  if [ "$i" -gt 0 ]; then
    echo "Waiting ${DELAY}s before next message..."
    sleep ${DELAY}
  fi
  echo "Sending message $((i+1)) of ${#messages[@]}..."
  curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
    -H "Content-Type: application/json" \
    -d '{
      "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
      "text": "'"${messages[$i]}"'",
      "parse_mode": "HTML"
    }'
  echo ""
done

複数のチャンネルへの送信

ユーザーが複数のチャンネルを管理している場合は、チャット ID のリストを受け取り、すべてにブロードキャストします:

# Define target channels
CHANNELS=("-1001234567890" "-1009876543210" "@public_channel")

MESSAGE='<b>Announcement</b>\n\nThis message goes to all channels.'

for CHAT_ID in "${CHANNELS[@]}"; do
  echo "Sending to ${CHAT_ID}..."
  curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
    -H "Content-Type: application/json" \
    -d '{
      "chat_id": "'"${CHAT_ID}"'",
      "text": "'"${MESSAGE}"'",
      "parse_mode": "HTML"
    }'
  echo ""
  sleep 1  # Respect rate limits
done

チャンネル管理

チャンネル情報の取得
curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getChat?chat_id=${TELEGRAM_CHAT_ID}" | jq .
メンバー数の取得
curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getChatMemberCount?chat_id=${TELEGRAM_CHAT_ID}" | jq .
チャンネルの説明を設定
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/setChatDescription" \
  -H "Content-Type: application/json" \
  -d '{
    "chat_id": "'"${TELEGRAM_CHAT_ID}"'",
    "description": "Your channel description here (up to 255 characters)"
  }'

レート制限とベストプラクティス

Telegram API のレート制限
  • 同じチャットへのメッセージ: 1 秒あたり約 30 件(ただし、十分に下回るようにしてください)。
  • 異なるチャットへのメッセージ: 合計で 1 秒あたり約 30 件。
  • 一括通知: 多数のユーザーに送信する場合、Telegram は 1 秒あたり 30 件以下を推奨しています。ブロードキャスト時は、送信の間に sleep 1 を追加します。
  • ファイルのアップロード: ドキュメントはファイルあたり最大 50 MB、写真は最大 10 MB です。
Telegram チャンネルのコンテンツに関するベストプラクティス
プラクティス詳細
投稿頻度アクティブなチャンネルでは、1日1~3件投稿します。5件を超えると、ミュートや登録解除につながる恐れがあります。
最適な時間帯オーディエンスの主なタイムゾーンで、午前9~11時と午後6~8時です。
メッセージの長さフィードへの投稿は1,000文字以内にします。記事なら長文でも問題ありません。
メディア画像付きの投稿は、テキストのみの投稿よりエンゲージメントが2~3倍高くなります。
書式設定要点には太字を使い、読みやすさのために箇条書きを使い、リンクは末尾に配置します。
エンゲージメント質問を投げかけます。毎週アンケートを実施します。コメントには速やかに返信します。
サイレント投稿緊急性のない更新では、登録者に迷惑をかけないよう disable_notification: true を使います。
メッセージのピン留め重要なお知らせをピン留めします。ピン留め欄に関連性を保つため、古いものはピン留めを解除します。
リンクプレビューTelegram はリンクプレビューを自動生成します。無効にするには、disable_web_page_preview: true を設定します。
公開ワークフロー

ユーザーが Telegram へのコンテンツ投稿を依頼した場合:

  1. 認証情報を確認する - TELEGRAM_BOT_TOKEN と TELEGRAM_CHAT_ID が設定されていることを確認します。
  2. コンテンツを作成する - 適切な書式とテンプレートを使ってメッセージを作成します。
  3. プレビューする - 送信される正確なメッセージを、以下を含めてユーザーに表示します。
    • 書式設定されたメッセージ本文
    • インラインキーボードボタン
    • メディア添付ファイル(URL またはファイルパス)
    • 対象のチャット ID
  4. 確認する - 送信前にユーザーの承認を求めます。
  5. 送信する - API 呼び出しを実行します。
  6. 結果を報告する - 今後の参照(編集、削除、ピン留め)に使える message_id を含め、応答を表示します。

ユーザーの明示的な確認なしに、自動投稿してはいけません。

要件の確認

Telegram メッセージを作成する前に、次の情報を確認します。

  1. メッセージの種類 - テキスト、写真、ドキュメント、アンケート、クイズのいずれか。
  2. コンテンツ - メッセージの内容は何ですか?作成する文章またはトピックを提示してもらいます。
  3. 対象 - どのチャンネルまたはグループですか?TELEGRAM_CHAT_ID を使うか、具体的な ID を尋ねます。
  4. 書式設定 - HTML または MarkdownV2。デフォルトは HTML です。
  5. ボタン - CTA ボタンは必要ですか?各ボタンのラベルと URL を確認します。
  6. メディア - 添付する画像またはファイルはありますか?URL またはローカルファイルパスを確認します。
  7. 送信タイミング - 今すぐ送信、後で予約送信、または定期送信のいずれですか?
  8. 通知 - サイレント(通知なし)または通常のどちらですか?

ユーザーがブログ記事の URL、記事、またはコンテンツソースを提示した場合は、WebFetch を使ってコンテンツを取得し、そこから適切な Telegram 投稿を作成します。

エラー処理

よくある Telegram Bot API エラーと解決方法:

エラー原因解決方法
401 Unauthorizedボットトークンが無効です@BotFather でトークンを再生成します
400 Bad Request: chat not foundチャット ID が間違っているか、ボットがチャットに参加していませんチャット ID を確認し、ボットをチャンネルの管理者として追加します
403 Forbidden: bot is not a memberボットがチャンネルから削除されましたボットをチャンネル管理者として再度追加します
403 Forbidden: bot can't send messagesボットに投稿権限がありませんボットに「メッセージを投稿」する管理者権限を付与します
429 Too Many Requestsレート制限を超過しました応答に指定された retry_after 秒数だけ待ちます
400 Bad Request: can't parse entitiesHTML/Markdown の形式が正しくありません書式設定を確認し、特殊文字をエスケープするか、HTML モードに切り替えます

API 応答の ok フィールドを必ず確認します。ok が false の場合は、問題の解決方法とともに description フィールドをユーザーに表示します。

コメント