本番運用可能な bot DM とグループを grammY 経由で利用できます。既定モードはロングポーリングです。webhook モードは任意です。Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
ペアリング
Telegram の既定 DM ポリシーはペアリングです。
チャネルのトラブルシューティング
チャネル横断の診断と修復プレイブック。
Gateway設定
完全なチャネル設定パターンと例。
クイックセットアップ
BotFather で bot トークンを作成する
Telegram を開き、@BotFather とチャットします(ハンドルが正確に
@BotFather であることを確認します)。/newbot を実行し、プロンプトに従って、トークンを保存します。トークンと DM ポリシーを設定する
TELEGRAM_BOT_TOKEN=...(既定アカウントのみ)。
Telegram は openclaw channels login telegram を使用しません。config/env でトークンを設定してから、gateway を起動してください。bot をグループに追加する
bot をグループに追加してから、グループアクセスに必要な両方の ID を取得します。
allowFrom/groupAllowFromで使用する Telegram ユーザー IDchannels.telegram.groupsの配下のキーとして使用する Telegram グループチャット ID
openclaw logs --follow、転送 ID bot、または Bot API getUpdates から取得します。グループが許可された後は、/whoami@<bot_username> でユーザー ID とグループ ID を確認できます。-100 で始まる負の Telegram スーパーグループ ID はグループチャット ID です。groupAllowFrom ではなく、channels.telegram.groups の配下に置いてください。トークン解決順序はアカウントを考慮します。実際には config 値が env フォールバックより優先され、
TELEGRAM_BOT_TOKEN は既定アカウントにのみ適用されます。Telegram 側の設定
プライバシーモードとグループの可視性
プライバシーモードとグループの可視性
Telegram bot の既定は Privacy Mode で、グループメッセージの受信が制限されます。bot がすべてのグループメッセージを見る必要がある場合は、次のどちらかを行います。
/setprivacyでプライバシーモードを無効にする- bot をグループ管理者にする
グループ権限
グループ権限
管理者ステータスは Telegram のグループ設定で制御されます。管理者 bot はすべてのグループメッセージを受信します。常時オンのグループ動作に便利です。
便利な BotFather 切り替え
便利な BotFather 切り替え
- グループ追加を許可/拒否する
/setjoingroups - グループの可視性動作を設定する
/setprivacy
アクセス制御と有効化
- DM ポリシー
- グループポリシーと allowlist
- メンション動作
channels.telegram.dmPolicy はダイレクトメッセージアクセスを制御します。pairing(既定)allowlist(allowFromに少なくとも 1 つの送信者 ID が必要)open(allowFromに"*"を含める必要あり)disabled
allowFrom: ["*"] と組み合わせた dmPolicy: "open" は、bot ユーザー名を見つけるか推測した任意の Telegram アカウントが bot にコマンドを送れるようにします。厳密に制限されたツールを持つ意図的に公開された bot にのみ使用してください。単一所有者の bot は、数値ユーザー ID とともに allowlist を使用するべきです。channels.telegram.allowFrom は数値の Telegram ユーザー ID を受け付けます。telegram: / tg: プレフィックスは受け付けられ、正規化されます。
複数アカウント config では、制限的なトップレベルの channels.telegram.allowFrom は安全境界として扱われます。アカウントレベルの allowFrom: ["*"] エントリは、マージ後の有効なアカウント allowlist に明示的なワイルドカードが残っていない限り、そのアカウントを公開状態にしません。
空の allowFrom と組み合わせた dmPolicy: "allowlist" はすべての DM をブロックし、config 検証で拒否されます。
セットアップでは数値ユーザー ID のみを求めます。
アップグレード後、config に @username allowlist エントリが含まれている場合は、openclaw doctor --fix を実行して解決してください(ベストエフォート。Telegram bot トークンが必要です)。
以前にペアリングストアの allowlist ファイルに依存していた場合、openclaw doctor --fix は allowlist フローでエントリを channels.telegram.allowFrom に復旧できます(たとえば、dmPolicy: "allowlist" に明示的な ID がまだない場合)。単一所有者の bot では、以前のペアリング承認に依存する代わりに、明示的な数値 allowFrom ID とともに dmPolicy: "allowlist" を使い、アクセスポリシーを config 内で永続化することを推奨します。よくある混乱: DM ペアリング承認は「この送信者はどこでも承認済み」という意味ではありません。
ペアリングは DM アクセスを付与します。コマンド所有者がまだ存在しない場合、最初に承認されたペアリングは commands.ownerAllowFrom も設定し、所有者専用コマンドと exec 承認に明示的なオペレーターアカウントを持たせます。
グループ送信者の承認は、引き続き明示的な config allowlist から行われます。
「一度承認されれば DM とグループコマンドの両方が動く」状態にしたい場合は、数値の Telegram ユーザー ID を channels.telegram.allowFrom に入れてください。所有者専用コマンドについては、commands.ownerAllowFrom に telegram:<your user id> が含まれていることを確認してください。Telegram ユーザー ID を見つける
より安全な方法(サードパーティ bot なし):- 自分の bot に DM します。
openclaw logs --followを実行します。from.idを読み取ります。
@userinfobot または @getidsbot。ランタイム動作
- Telegram は gateway プロセスによって所有されます。
- ルーティングは決定的です。Telegram のインバウンドは Telegram に返信します(モデルはチャネルを選びません)。
- インバウンドメッセージは、返信メタデータ、メディアプレースホルダー、gateway が観測した Telegram 返信の永続化された返信チェーンコンテキストを含む共有チャネルエンベロープに正規化されます。
- グループセッションはグループ ID ごとに分離されます。フォーラムトピックは、トピックを分離するために
:topic:<threadId>を追加します。 - DM メッセージは
message_thread_idを持つことがあります。OpenClaw は返信用にスレッド ID を保持しますが、既定では DM をフラットなセッション上に維持します。意図的に DM トピックセッション分離を使いたい場合は、channels.telegram.dm.threadReplies: "inbound"、channels.telegram.direct.<chatId>.threadReplies: "inbound"、requireTopic: true、または一致するトピック config を設定してください。 - ロングポーリングは grammY runner を使用し、チャットごと/スレッドごとのシーケンシングを行います。全体の runner sink 並行性は
agents.defaults.maxConcurrentを使用します。 - ロングポーリングは各 gateway プロセス内で保護されているため、一度に 1 つのアクティブな poller だけが bot トークンを使用できます。それでも
getUpdates409 競合が表示される場合は、別の OpenClaw gateway、script、または外部 poller が同じトークンを使用している可能性があります。 - ロングポーリング watchdog の再起動は、既定では完了した
getUpdatesliveness が 120 秒間ない場合にトリガーされます。長時間実行される作業中にデプロイで誤った polling-stall 再起動がまだ発生する場合にのみ、channels.telegram.pollingStallThresholdMsを増やしてください。値はミリ秒単位で、30000から600000まで許可されます。アカウントごとのオーバーライドがサポートされています。 - Telegram Bot API には既読通知サポートがありません(
sendReadReceiptsは適用されません)。
機能リファレンス
ライブストリームプレビュー(メッセージ編集)
ライブストリームプレビュー(メッセージ編集)
OpenClaw は部分返信をリアルタイムでストリーミングできます。ツール進行状況は表示したまま、コマンド/実行テキストを非表示にするには、次のように設定します。最終回答を同じメッセージへ編集せずに、表示可能なツール進行状況が必要な場合は、テキストのみの返信の場合:
- ダイレクトチャット: プレビューメッセージ +
editMessageText - グループ/トピック: プレビューメッセージ +
editMessageText
channels.telegram.streamingはoff | partial | block | progressです(既定:partial)progressはツールの進行状況用に編集可能なステータス下書きを1つ保持し、完了時にそれを消去して、最終回答を通常のメッセージとして送信しますstreaming.preview.toolProgressは、ツール/進行状況の更新で同じ編集済みプレビューメッセージを再利用するかどうかを制御します(既定: プレビューストリーミングが有効な場合はtrue)streaming.preview.commandTextは、それらのツール進行状況行内のコマンド/実行詳細を制御します:raw(既定、リリース済みの挙動を保持)またはstatus(ツールラベルのみ)- レガシーの
channels.telegram.streamModeと boolean のstreaming値は検出されます。openclaw doctor --fixを実行して、それらをchannels.telegram.streaming.modeに移行してください
v2026.4.22 以降のリリース済み OpenClaw の挙動に合わせるため、これらは既定で有効です。回答テキスト用の編集済みプレビューは維持しつつ、ツール進行状況行を非表示にするには、次のように設定します。progress モードを使用します。コマンドテキストポリシーは streaming.progress の下に置きます。streaming.mode: "off" は、最終結果のみの配信が必要な場合にだけ使用します。Telegram のプレビュー編集は無効になり、汎用的なツール/進行状況のチャット風メッセージは、独立したステータスメッセージとして送信される代わりに抑制されます。承認プロンプト、メディアペイロード、エラーは、引き続き通常の最終配信を通じてルーティングされます。ツール進行状況のステータス行を非表示にしつつ、回答プレビュー編集だけを維持したい場合は、streaming.preview.toolProgress: false を使用します。Telegram の選択引用返信は例外です。
replyToMode が "first"、"all"、または "batched" で、受信メッセージに選択引用テキストが含まれる場合、OpenClaw は回答プレビューを編集する代わりに、Telegram のネイティブな引用返信経路を通じて最終回答を送信します。そのため、そのターンでは streaming.preview.toolProgress で短いステータス行を表示できません。選択引用テキストのない現在メッセージへの返信では、引き続きプレビューストリーミングが維持されます。ツール進行状況の可視性がネイティブ引用返信より重要な場合は replyToMode: "off" を設定するか、トレードオフを明示するために streaming.preview.toolProgress: false を設定します。- 短い DM/グループ/トピックのプレビュー: OpenClaw は同じプレビューメッセージを維持し、最終編集をその場で実行します
- 複数の Telegram メッセージに分割される長い最終テキストでは、可能な場合は既存のプレビューを最初の最終チャンクとして再利用し、その後は残りのチャンクだけを送信します
- progress モードの最終結果では、ステータス下書きを消去し、その下書きを回答へ編集する代わりに通常の最終配信を使用します
- 完了済みテキストが確認される前に最終編集が失敗した場合、OpenClaw は通常の最終配信を使用し、古いプレビューをクリーンアップします
/reasoning streamは生成中に推論をライブプレビューへ送信します- 推論プレビューは最終配信後に削除されます。推論を表示したままにする必要がある場合は
/reasoning onを使用します - 最終回答は推論テキストなしで送信されます
Formatting and HTML fallback
Formatting and HTML fallback
送信テキストは Telegram
parse_mode: "HTML" を使用します。- Markdown 風のテキストは、Telegram に安全な HTML にレンダリングされます。
- サポートされている Telegram HTML タグは保持され、サポートされていない HTML はエスケープされます。
- Telegram が解析済み HTML を拒否した場合、OpenClaw はプレーンテキストとして再試行します。
channels.telegram.linkPreview: false で無効にできます。Native commands and custom commands
Native commands and custom commands
Telegram コマンドメニューの登録は、起動時に ルール:デバイスペアリングコマンド(
setMyCommands で処理されます。ネイティブコマンドの既定値:commands.native: "auto"は Telegram のネイティブコマンドを有効にします
- 名前は正規化されます(先頭の
/を削除し、小文字化) - 有効なパターン:
a-z、0-9、_、長さ1..32 - カスタムコマンドはネイティブコマンドを上書きできません
- 競合/重複はスキップされ、ログに記録されます
- カスタムコマンドはメニュー項目のみです。挙動は自動実装されません
- plugin/skill コマンドは、Telegram メニューに表示されていなくても、入力すれば引き続き動作できます
setMyCommands failedとBOT_COMMANDS_TOO_MUCHが表示される場合、トリミング後も Telegram メニューがまだ上限を超えていることを意味します。plugin/skill/カスタムコマンドを減らすか、channels.telegram.commands.nativeを無効にしてください。- 直接の Bot API curl コマンドは動作するのに、
deleteWebhook、deleteMyCommands、またはsetMyCommandsが404: Not Foundで失敗する場合、channels.telegram.apiRootが完全な/bot<TOKEN>エンドポイントに設定されていた可能性があります。apiRootは Bot API ルートのみである必要があり、openclaw doctor --fixは誤って付いた末尾の/bot<TOKEN>を削除します。 getMe returned 401は、構成済みのボットトークンを Telegram が拒否したことを意味します。現在の BotFather トークンでbotToken、tokenFile、またはTELEGRAM_BOT_TOKENを更新してください。OpenClaw はポーリング前に停止するため、これは Webhook クリーンアップ失敗としては報告されません。setMyCommands failedとネットワーク/fetch エラーが表示される場合は、通常api.telegram.orgへの送信 DNS/HTTPS がブロックされていることを意味します。
デバイスペアリングコマンド(device-pair plugin)
device-pair plugin がインストールされている場合:/pairがセットアップコードを生成します- iOS アプリにコードを貼り付けます
/pair pendingが保留中のリクエストを一覧表示します(role/scopes を含む)- リクエストを承認します:
- 明示的な承認には
/pair approve <requestId> - 保留中のリクエストが1つだけの場合は
/pair approve - 最新のものには
/pair approve latest
- 明示的な承認には
scopes: [] に保ちます。引き渡されたオペレータートークンは、operator.approvals、operator.read、operator.talk.secrets、operator.write に制限されたままです。ブートストラップスコープチェックにはロール接頭辞が付くため、このオペレーター許可リストはオペレーターリクエストのみを満たします。非オペレーターロールには、引き続き各自のロール接頭辞配下のスコープが必要です。デバイスが認証詳細(たとえば role/scopes/公開鍵)を変更して再試行した場合、前の保留中リクエストは置き換えられ、新しいリクエストでは別の requestId が使用されます。承認前に /pair pending を再実行してください。詳細: ペアリング。Inline buttons
Inline buttons
Telegram message actions for agents and automation
Telegram message actions for agents and automation
Telegram ツールアクションには次が含まれます。
sendMessage(to、content、任意のmediaUrl、replyToMessageId、messageThreadId)react(chatId、messageId、emoji)deleteMessage(chatId、messageId)editMessage(chatId、messageId、content)createForumTopic(chatId、name、任意のiconColor、iconCustomEmojiId)
send、react、delete、edit、sticker、sticker-search、topic-create)を公開します。ゲート制御:channels.telegram.actions.sendMessagechannels.telegram.actions.deleteMessagechannels.telegram.actions.reactionschannels.telegram.actions.sticker(既定: 無効)
edit と topic-create は現在、既定で有効であり、個別の channels.telegram.actions.* トグルはありません。
ランタイム送信はアクティブな構成/シークレットのスナップショット(起動/再読み込み時)を使用するため、アクションパスは送信ごとにその場しのぎの SecretRef 再解決を行いません。リアクション削除セマンティクス: /tools/reactionsReply threading tags
Reply threading tags
Forum topics and thread behavior
Forum topics and thread behavior
フォーラムスーパーグループ:各トピックはそれぞれ独自のセッションキーを持ちます:
- トピックセッションキーには
:topic:<threadId>が付加されます - 返信と入力中表示はトピックスレッドを対象にします
- トピック構成パス:
channels.telegram.groups.<chatId>.topics.<threadId>
threadId=1)の特別扱い:- メッセージ送信では
message_thread_idを省略します(Telegram はsendMessage(...thread_id=1)を拒否します) - 入力中アクションには引き続き
message_thread_idが含まれます
requireMention、allowFrom、skills、systemPrompt、enabled、groupPolicy)を継承します。
agentId はトピック専用で、グループの既定値からは継承しません。トピックごとのエージェントルーティング: 各トピックは、トピック構成で agentId を設定することで別のエージェントへルーティングできます。これにより、各トピックは独自に分離されたワークスペース、メモリ、セッションを持ちます。例:agent:zu:telegram:group:-1001234567890:topic:3永続的な ACP トピックバインディング: フォーラムトピックは、トップレベルの型付き ACP バインディング(type: "acp"、match.channel: "telegram"、peer.kind: "group"、および -1001234567890:topic:42 のようなトピック修飾付き ID を持つ bindings[])を通じて ACP ハーネスセッションを固定できます。現在はグループ/スーパーグループ内のフォーラムトピックに限定されています。ACP エージェントを参照してください。チャットからのスレッドバインド ACP 起動: /acp spawn <agent> --thread here|auto は現在のトピックを新しい ACP セッションにバインドし、以降の返信はそこへ直接ルーティングされます。OpenClaw は起動確認をトピック内に固定します。channels.telegram.threadBindings.spawnSessions を有効なままにする必要があります(デフォルト: true)。テンプレートコンテキストは MessageThreadId と IsForum を公開します。message_thread_id を持つ DM チャットは、デフォルトではフラットなセッション上で DM ルーティングと返信メタデータを保持します。threadReplies: "inbound"、threadReplies: "always"、requireTopic: true、または一致するトピック設定で構成されている場合にのみ、スレッド対応のセッションキーを使用します。アカウントのデフォルトにはトップレベルの channels.telegram.dm.threadReplies を使用し、単一の DM には direct.<chatId>.threadReplies を使用します。音声、動画、ステッカー
音声、動画、ステッカー
音声メッセージ
Telegram はボイスメモと音声ファイルを区別します。- デフォルト: 音声ファイルの動作
- エージェントの返信内のタグ
[[audio_as_voice]]は、ボイスメモとして送信するよう強制します - 受信したボイスメモの文字起こしは、エージェントコンテキスト内で機械生成の信頼できないテキストとして扱われます。メンション検出は引き続き生の文字起こしを使用するため、メンションで制御された音声メッセージは引き続き機能します。
動画メッセージ
Telegram は動画ファイルと動画メモを区別します。メッセージアクションの例:ステッカー
受信ステッカーの処理:- 静的 WEBP: ダウンロードして処理されます(プレースホルダー
<media:sticker>) - アニメーション TGS: スキップされます
- 動画 WEBM: スキップされます
Sticker.emojiSticker.setNameSticker.fileIdSticker.fileUniqueIdSticker.cachedDescription
~/.openclaw/telegram/sticker-cache.json
リアクション通知
リアクション通知
Telegram のリアクションは
message_reaction 更新として届きます(メッセージペイロードとは別です)。有効な場合、OpenClaw は次のようなシステムイベントをキューに入れます。Telegram reaction added: 👍 by Alice (@alice) on msg 42
channels.telegram.reactionNotifications:off | own | all(デフォルト:own)channels.telegram.reactionLevel:off | ack | minimal | extensive(デフォルト:minimal)
ownは、bot が送信したメッセージに対するユーザーのリアクションのみを意味します(送信済みメッセージキャッシュによるベストエフォート)。- リアクションイベントは Telegram のアクセス制御(
dmPolicy、allowFrom、groupPolicy、groupAllowFrom)を引き続き尊重します。許可されていない送信者は破棄されます。 - Telegram はリアクション更新内でスレッド ID を提供しません。
- 非フォーラムグループはグループチャットセッションへルーティングされます
- フォーラムグループは、正確な発生元トピックではなく、グループの一般トピックセッション(
:topic:1)へルーティングされます
allowed_updates には message_reaction が自動的に含まれます。Ack リアクション
Ack リアクション
ackReaction は、OpenClaw が受信メッセージを処理している間に確認用の絵文字を送信します。解決順序:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- エージェント ID 絵文字へのフォールバック(
agents.list[].identity.emoji、なければ ”👀”)
- Telegram は Unicode 絵文字を想定しています(たとえば ”👀”)。
- チャンネルまたはアカウントのリアクションを無効にするには
""を使用します。
Telegram イベントとコマンドからの設定書き込み
Telegram イベントとコマンドからの設定書き込み
チャンネル設定の書き込みはデフォルトで有効です(
configWrites !== false)。Telegram によってトリガーされる書き込みには次が含まれます。channels.telegram.groupsを更新するグループ移行イベント(migrate_to_chat_id)/config setと/config unset(コマンドの有効化が必要)
ロングポーリングと Webhook
ロングポーリングと Webhook
デフォルトはロングポーリングです。Webhook モードでは
channels.telegram.webhookUrl と channels.telegram.webhookSecret を設定します。任意で webhookPath、webhookHost、webhookPort も設定できます(デフォルトは /telegram-webhook、127.0.0.1、8787)。ロングポーリングモードでは、OpenClaw は更新が正常にディスパッチされた後にのみ、再起動ウォーターマークを永続化します。ハンドラーが失敗した場合、その更新は同じプロセス内で再試行可能なままとなり、再起動時の重複排除のために完了済みとして書き込まれません。ローカルリスナーは 127.0.0.1:8787 にバインドします。パブリックな入口には、ローカルポートの前段にリバースプロキシを置くか、意図的に webhookHost: "0.0.0.0" を設定します。Webhook モードは、Telegram に 200 を返す前にリクエストガード、Telegram シークレットトークン、JSON 本文を検証します。
その後 OpenClaw は、ロングポーリングで使用されるものと同じチャット別/トピック別の bot レーンを通じて更新を非同期に処理するため、遅いエージェントターンが Telegram の配信 ACK を保持しません。制限、再試行、CLI ターゲット
制限、再試行、CLI ターゲット
channels.telegram.textChunkLimitのデフォルトは 4000 です。channels.telegram.chunkMode="newline"は、長さで分割する前に段落境界(空行)を優先します。channels.telegram.mediaMaxMb(デフォルト 100)は、受信および送信の Telegram メディアサイズを制限します。channels.telegram.mediaGroupFlushMs(デフォルト 500)は、OpenClaw が Telegram のアルバム/メディアグループを 1 つの受信メッセージとしてディスパッチする前にバッファリングする時間を制御します。アルバムの各部分が遅れて届く場合は増やし、アルバム返信のレイテンシを減らすには減らします。channels.telegram.timeoutSecondsは Telegram API クライアントのタイムアウトを上書きします(未設定の場合は grammY のデフォルトが適用されます)。bot クライアントは、設定値が 60 秒の送信テキスト/タイピングリクエストガードを下回る場合にその値をクランプし、OpenClaw のトランスポートガードとフォールバックが実行できる前に grammY が可視の返信配信を中断しないようにします。ロングポーリングでは引き続き 45 秒のgetUpdatesリクエストガードを使用し、アイドル状態のポーリングが無期限に放棄されないようにします。channels.telegram.pollingStallThresholdMsのデフォルトは120000です。ポーリング停止の誤検知による再起動の場合にのみ、30000から600000の間で調整してください。- グループコンテキスト履歴は
channels.telegram.historyLimitまたはmessages.groupChat.historyLimit(デフォルト 50)を使用します。0は無効にします。 - 返信/引用/転送の補足コンテキストは、Gateway が親メッセージを観測している場合、選択された 1 つの会話コンテキストウィンドウに正規化されます。観測済みメッセージキャッシュはセッションストアの横に永続化されます。Telegram は更新内に浅い
reply_to_messageを 1 つだけ含めるため、キャッシュより古いチェーンは Telegram の現在の更新ペイロードに制限されます。 - Telegram の許可リストは主に、誰がエージェントをトリガーできるかを制御するものであり、完全な補足コンテキストの墨消し境界ではありません。
- DM 履歴制御:
channels.telegram.dmHistoryLimitchannels.telegram.dms["<user_id>"].historyLimit
channels.telegram.retry設定は、回復可能な送信 API エラーに対する Telegram 送信ヘルパー(CLI/ツール/アクション)に適用されます。受信の最終返信配信でも、Telegram の事前接続失敗に対して境界付きの安全な送信再試行を使用しますが、可視メッセージが重複する可能性のある曖昧な送信後ネットワークエンベロープは再試行しません。
openclaw message poll を使用し、フォーラムトピックをサポートします。--poll-duration-seconds(5-600)--poll-anonymous--poll-public- フォーラムトピック用の
--thread-id(または:topic:ターゲットを使用)
channels.telegram.capabilities.inlineButtonsが許可する場合、インラインキーボード用のbuttonsブロックを含む--presentation- bot がそのチャットで固定できる場合に固定配信をリクエストする
--pinまたは--delivery '{"pin":true}' - 送信画像、GIF、動画を、圧縮写真、アニメーションメディア、動画アップロードではなくドキュメントとして送信する
--force-document
channels.telegram.actions.sendMessage=falseは、ポーリングを含む送信 Telegram メッセージを無効にしますchannels.telegram.actions.poll=falseは、通常の送信を有効なままにして Telegram ポーリング作成を無効にします
Telegram での実行承認
Telegram での実行承認
Telegram は承認者 DM で実行承認をサポートし、任意で発生元のチャットまたはトピックにプロンプトを投稿できます。承認者は数値の Telegram ユーザー ID である必要があります。設定パス:
channels.telegram.execApprovals.enabled(少なくとも 1 人の承認者を解決できる場合に自動有効化)channels.telegram.execApprovals.approvers(commands.ownerAllowFromの数値のオーナー ID にフォールバック)channels.telegram.execApprovals.target:dm(デフォルト)|channel|bothagentFilter,sessionFilter
channels.telegram.allowFrom、groupAllowFrom、defaultTo は、誰が bot と会話できるか、および通常の返信をどこに送信するかを制御します。これらは誰かを実行承認者にするものではありません。コマンドオーナーがまだ存在しない場合、最初に承認された DM ペアリングが commands.ownerAllowFrom をブートストラップするため、1 人のオーナー設定は execApprovals.approvers の下に ID を重複させなくても機能します。チャンネル配信ではコマンドテキストがチャットに表示されます。信頼できるグループ/トピックでのみ channel または both を有効にしてください。プロンプトがフォーラムトピックに届くと、OpenClaw は承認プロンプトとフォローアップのトピックを保持します。実行承認はデフォルトで 30 分後に期限切れになります。インライン承認ボタンでも、channels.telegram.capabilities.inlineButtons が対象サーフェス(dm、group、または all)を許可している必要があります。plugin: で始まる承認 ID は Plugin 承認を通じて解決され、それ以外はまず実行承認を通じて解決されます。実行承認を参照してください。エラー返信の制御
エージェントが配信エラーまたはプロバイダーエラーに遭遇したとき、Telegram はエラーテキストで返信することも、それを抑制することもできます。この動作は 2 つの設定キーで制御します。| キー | 値 | デフォルト | 説明 |
|---|---|---|---|
channels.telegram.errorPolicy | reply, silent | reply | reply はチャットに親しみやすいエラーメッセージを送信します。silent はエラー返信を完全に抑制します。 |
channels.telegram.errorCooldownMs | number (ms) | 60000 | 同じチャットへのエラー返信の最小間隔。障害中のエラースパムを防ぎます。 |
トラブルシューティング
Bot がメンションなしのグループメッセージに応答しない
Bot がメンションなしのグループメッセージに応答しない
requireMention=falseの場合、Telegram のプライバシーモードで完全な可視性を許可する必要があります。- BotFather:
/setprivacy-> Disable - その後、グループからボットを削除して再追加します
- BotFather:
- 設定がメンションなしのグループメッセージを想定している場合、
openclaw channels statusが警告します。 openclaw channels status --probeは明示的な数値グループ ID を確認できます。ワイルドカード"*"はメンバーシップをプローブできません。- 簡易セッションテスト:
/activation always。
Bot がグループメッセージをまったく認識しない
Bot がグループメッセージをまったく認識しない
channels.telegram.groupsが存在する場合、グループが一覧に含まれている必要があります(または"*"を含めます)- グループ内のボットメンバーシップを確認します
- スキップ理由についてログを確認します:
openclaw logs --follow
コマンドが一部だけ動作する、またはまったく動作しない
コマンドが一部だけ動作する、またはまったく動作しない
- 送信者 ID を認可します(ペアリングおよび/または数値の
allowFrom) - グループポリシーが
openの場合でも、コマンド認可は引き続き適用されます BOT_COMMANDS_TOO_MUCHを伴うsetMyCommands failedは、ネイティブメニューの項目が多すぎることを意味します。Plugin/skill/カスタムコマンドを減らすか、ネイティブメニューを無効にしてください- 起動時の
deleteMyCommands/setMyCommands呼び出しと、入力中を示すsendChatAction呼び出しは上限付きで、リクエストタイムアウト時には Telegram のトランスポートフォールバック経由で 1 回再試行されます。永続的なネットワーク/フェッチエラーは通常、api.telegram.orgへの DNS/HTTPS 到達性の問題を示します
起動時に未認可トークンが報告される
起動時に未認可トークンが報告される
ポーリングまたはネットワークの不安定さ
ポーリングまたはネットワークの不安定さ
- Node 22+ とカスタム fetch/proxy の組み合わせでは、AbortSignal 型の不一致があると即時中止動作を引き起こす場合があります。
- 一部のホストは
api.telegram.orgを IPv6 優先で解決します。IPv6 の外向き通信が壊れていると、Telegram API の断続的な失敗が発生する場合があります。 - ログに
TypeError: fetch failedまたはNetwork request for 'getUpdates' failed!が含まれる場合、OpenClaw はこれらを回復可能なネットワークエラーとして再試行するようになりました。 - ポーリング起動中、OpenClaw は成功した起動時の
getMeプローブを grammY に再利用するため、ランナーは最初のgetUpdatesの前に 2 回目のgetMeを必要としません。 - ポーリング起動中に一時的なネットワークエラーで
deleteWebhookが失敗した場合、OpenClaw は別のポーリング前の制御プレーン呼び出しを行わず、ロングポーリングへ進みます。まだアクティブな Webhook はgetUpdatesの競合として表面化します。その後 OpenClaw は Telegram トランスポートを再構築し、Webhook クリーンアップを再試行します。 - Telegram ソケットが短い固定間隔で再利用される場合、低い
channels.telegram.timeoutSecondsがないか確認してください。ボットクライアントは、外向きリクエストおよびgetUpdatesリクエストのガードを下回る設定値をクランプしますが、古いリリースではこれがそれらのガードを下回っていると、すべてのポーリングまたは返信を中止する可能性がありました。 - ログに
Polling stall detectedが含まれる場合、OpenClaw はデフォルトで、完了したロングポーリングの生存性が 120 秒間ないと、ポーリングを再起動して Telegram トランスポートを再構築します。 openclaw channels status --probeとopenclaw doctorは、実行中のポーリングアカウントが起動猶予後にgetUpdatesを完了していない場合、実行中の Webhook アカウントが起動猶予後にsetWebhookを完了していない場合、または最後に成功したポーリングトランスポートアクティビティが古い場合に警告します。- 長時間実行される
getUpdates呼び出しが正常なのに、ホストが誤ったポーリング停止の再起動を報告し続ける場合のみ、channels.telegram.pollingStallThresholdMsを増やしてください。永続的な停止は通常、ホストとapi.telegram.orgの間のプロキシ、DNS、IPv6、または TLS の外向き通信の問題を示します。 - Telegram は Bot API トランスポートについて、
HTTP_PROXY、HTTPS_PROXY、ALL_PROXYとそれらの小文字バリアントを含むプロセスのプロキシ環境変数も尊重します。NO_PROXY/no_proxyは引き続きapi.telegram.orgをバイパスできます。 - サービス環境で OpenClaw 管理プロキシが
OPENCLAW_PROXY_URLを通じて設定されており、標準のプロキシ環境変数が存在しない場合、Telegram も Bot API トランスポートにその URL を使用します。 - 直接の外向き通信/TLS が不安定な VPS ホストでは、Telegram API 呼び出しを
channels.telegram.proxy経由でルーティングしてください。
- Node 22+ はデフォルトで
autoSelectFamily=trueです(WSL2 を除く)。Telegram の DNS 結果順序は、OPENCLAW_TELEGRAM_DNS_RESULT_ORDER、次にchannels.telegram.network.dnsResultOrder、次にNODE_OPTIONS=--dns-result-order=ipv4firstなどのプロセスデフォルトを尊重します。いずれも適用されない場合、Node 22+ はipv4firstにフォールバックします。 - ホストが WSL2 の場合、または IPv4 のみの動作のほうが明示的にうまく動作する場合は、ファミリー選択を強制してください。
- RFC 2544 ベンチマーク範囲の応答(
198.18.0.0/15)は、Telegram メディアダウンロードについてデフォルトですでに許可されています。信頼済みの fake-IP または透過プロキシが、メディアダウンロード中にapi.telegram.orgを他のプライベート/内部/特殊用途アドレスへ書き換える場合、Telegram 専用バイパスにオプトインできます。
- 同じオプトインは、アカウントごとに
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetworkでも利用できます。 - プロキシが Telegram メディアホストを
198.18.x.xに解決する場合は、まず危険なフラグをオフのままにしてください。Telegram メディアはデフォルトですでに RFC 2544 ベンチマーク範囲を許可しています。
- 環境オーバーライド(一時的):
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first
- DNS 応答を検証します。
設定リファレンス
主要リファレンス: 設定リファレンス - Telegram。重要度の高い Telegram フィールド
重要度の高い Telegram フィールド
- 起動/認証:
enabled,botToken,tokenFile,accounts.*(tokenFileは通常ファイルを指す必要があります。シンボリックリンクは拒否されます) - アクセス制御:
dmPolicy,allowFrom,groupPolicy,groupAllowFrom,groups,groups.*.topics.*, トップレベルbindings[](type: "acp") - 実行承認:
execApprovals,accounts.*.execApprovals - コマンド/メニュー:
commands.native,commands.nativeSkills,customCommands - スレッド/返信:
replyToMode,dm.threadReplies,direct.*.threadReplies - ストリーミング:
streaming(プレビュー),streaming.preview.toolProgress,blockStreaming - フォーマット/配信:
textChunkLimit,chunkMode,linkPreview,responsePrefix - メディア/ネットワーク:
mediaMaxMb,mediaGroupFlushMs,timeoutSeconds,pollingStallThresholdMs,retry,network.autoSelectFamily,network.dangerouslyAllowPrivateNetwork,proxy - カスタム API ルート:
apiRoot(Bot API ルートのみ。/bot<TOKEN>は含めないでください) - Webhook:
webhookUrl,webhookSecret,webhookPath,webhookHost - アクション/機能:
capabilities.inlineButtons,actions.sendMessage|editMessage|deleteMessage|reactions|sticker - リアクション:
reactionNotifications,reactionLevel - エラー:
errorPolicy,errorCooldownMs - 書き込み/履歴:
configWrites,historyLimit,dmHistoryLimit,dms.*.historyLimit
マルチアカウントの優先順位: 2 つ以上のアカウント ID が設定されている場合、デフォルトのルーティングを明示するために
channels.telegram.defaultAccount を設定してください(または channels.telegram.accounts.default を含めてください)。そうでない場合、OpenClaw は最初の正規化済みアカウント ID にフォールバックし、openclaw doctor が警告します。名前付きアカウントは channels.telegram.allowFrom / groupAllowFrom を継承しますが、accounts.default.* の値は継承しません。関連
ペアリング
Telegram ユーザーを Gateway にペアリングします。
グループ
グループとトピックの許可リスト動作。
チャンネルルーティング
受信メッセージをエージェントにルーティングします。
セキュリティ
脅威モデルと強化。
マルチエージェントルーティング
グループとトピックをエージェントにマッピングします。
トラブルシューティング
チャンネル横断の診断。