telegram-bot について
telegram-botは、curlとjqで公式Telegram Bot APIを呼び出すスキルです。ボット経由でチャンネルやグループのメッセージを扱い、投稿、写真の送信、編集や削除を行います。公開投稿前には内容と宛先の確認が必要です。
主な機能
- 01公式Telegram Bot APIの呼び出し
- 02ボットとチャット先の確認
- 03テキストや写真メッセージの送信
- 04メッセージの編集と削除
- 05APIエラー応答の確認
活用シーン
- 01チャンネルへのテキスト投稿
- 02キャプション付き写真の送信
- 03ボットのメッセージの編集や削除
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ acedatacloud/ skills --skill telegram-botインストール後、Claude Code で/telegram-botを入力して読み込まれたか確認します。
詳細
curl + jq を使って公式 Telegram Bot APIを呼び出します。ボットトークンは
$TELEGRAMBOT_BOT_TOKEN として注入されます。省略可能なデフォルトの送信先チャットは
$TELEGRAMBOT_CHAT_ID です(例:@your_channel または数値 ID)。ベース URL:
https://api.telegram.org/bot$TELEGRAMBOT_BOT_TOKEN/<METHOD>。
成功時のレスポンスはすべて JSON {"ok":true,"result":...}、失敗時は
{"ok":false,"error_code":<n>,"description":"<msg>"} です。.ok を必ず確認し、
description をそのまま表示してください。よくあるエラー:401 Unauthorized = トークンが無効または
取り消されています(コネクターを再接続してください)。400 Bad Request: chat not found = chat_id が間違っています。
403 Forbidden: bot is not a member of the channel chat / ... need administrator rights = 投稿権限を持つ管理者としてボットをチャンネルに追加してください。
parameters.retry_after を含む 429 = レート制限です。指定された秒数だけ待ってください。
chat_id は @channelusername(公開)または数値 ID(非公開チャンネル/
グループの場合。多くの場合、-1001234567890 のような負の数)です。getChat で解決/確認してください。
ステップ 1 — ボットと送信先を確認する
BOT="https://api.telegram.org/bot$TELEGRAMBOT_BOT_TOKEN"
curl -sS "$BOT/getMe" | jq '{ok, bot: .result.username, name: .result.first_name}'
# confirm the bot can post to the target chat (must be admin in the channel):
CHAT="${TELEGRAMBOT_CHAT_ID:-@your_channel}"
curl -sS -G "$BOT/getChat" --data-urlencode "chat_id=$CHAT" \
| jq '{ok, type: .result.type, title: .result.title, error: .description}'
テキスト投稿を送信する
公開投稿の前に、テキストと送信先チャットをユーザーに確認してください。 テキストは
1~4096 文字です。parse_mode=HTML(最も簡単)または MarkdownV2 を使用します。
CHAT="${TELEGRAMBOT_CHAT_ID:-@your_channel}"
curl -sS -G "$BOT/sendMessage" \
--data-urlencode "chat_id=$CHAT" \
--data-urlencode "text=<b>Hello</b> from the bot 👋 #ai" \
--data-urlencode "parse_mode=HTML" \
--data-urlencode "disable_web_page_preview=false" \
| jq '{ok, message_id: .result.message_id, error: .description}'
チャンネルの公開投稿 URL は https://t.me/<channelusername>/<message_id> です。
- HTML モードでは
<b> <i> <u> <s> <a href> <code> <pre> <blockquote>が使えます。 リテラルの< > &は< > &としてエスケープしてください。 - MarkdownV2 では
_ * [ ] ( ) ~ \> # + - = | { } . !を` でエスケープする必要があります。 - 改行/キリル文字/絵文字が文字化けしないよう、
textは必ず--data-urlencodeで送信してください。
写真とキャプションを送信する
CHAT="${TELEGRAMBOT_CHAT_ID:-@your_channel}"
curl -sS -G "$BOT/sendPhoto" \
--data-urlencode "chat_id=$CHAT" \
--data-urlencode "photo=https://cdn.example.com/pic.jpg" \
--data-urlencode "caption=<b>Caption</b> text" \
--data-urlencode "parse_mode=HTML" \
| jq '{ok, message_id: .result.message_id, error: .description}'
photo には HTTPS URL(5 MB 以下。Telegram が取得します)、Telegram の file_id、
またはアップロードしたファイルを指定できます。キャプションは 0~1024 文字です。アルバムを送信する場合は sendMediaGroup を使用してください。
メッセージを編集/削除する
# edit text (same chat_id + message_id)
curl -sS -G "$BOT/editMessageText" \
--data-urlencode "chat_id=$CHAT" --data-urlencode "message_id=123" \
--data-urlencode "text=Updated text" --data-urlencode "parse_mode=HTML" \
| jq '{ok, error: .description}'
# delete a message
curl -sS -G "$BOT/deleteMessage" \
--data-urlencode "chat_id=$CHAT" --data-urlencode "message_id=123" \
| jq '{ok, error: .description}'
deleteMessage は、ボット自身が送信したチャンネル投稿に対して 48 時間以内に使用できます
(can_delete_messages/投稿権限が必要です)。
注意点
- ボットは、投稿権限を持つ管理者としてチャンネル/グループに追加されている必要があります。 追加されていない場合、送信時に
403が返されます。 まずgetChatを実行してアクセスを確認してください。 - チャンネルの数値 ID は大きな負の数(
-100...)です。公開チャンネルでは@usernameの使用をおすすめします。 - 無料の一斉送信上限は約 30 件/秒です。大量送信は間隔を空けてください。そうしないと
429が発生します (parameters.retry_afterに従ってください)。 - これはボットとしての送信であり、個人アカウントとしての送信ではありません。自分自身として DM/グループを読むには、
代わりに
telegram(MTProto)コネクターを使用してください。