配對
Telegram 的預設私訊政策是配對。
頻道疑難排解
跨頻道診斷和修復手冊。
閘道設定
完整的頻道設定模式與範例。
快速設定
在 BotFather 中建立 bot token
兩種流程最後都會取得一個可貼到 OpenClaw 的權杖,請擇一使用:
- 聊天流程:開啟 Telegram,與 @BotFather 聊天(確認帳號完全是
@BotFather),執行/newbot,依提示操作,並儲存權杖。 - 網頁流程:開啟 BotFather 的 Web App,它可在所有 Telegram 用戶端中執行,包括 web.telegram.org,在介面中建立 bot,並複製其權杖。
設定權杖和私訊政策
TELEGRAM_BOT_TOKEN(僅適用於預設帳號;具名帳號必須使用 botToken 或 tokenFile)。
Telegram 不使用 openclaw channels login telegram;請在設定或環境變數中設定權杖,然後啟動閘道。將 bot 加入群組
將 bot 加入你的群組,然後取得群組存取所需的兩個 ID:
- 你的 Telegram 使用者 ID,用於
allowFrom/groupAllowFrom - Telegram 群組聊天 ID,作為
channels.telegram.groups下的鍵
openclaw logs --follow、轉寄 ID bot,或 Bot API getUpdates 取得群組聊天 ID。允許該群組後,/whoami@<bot_username> 會確認使用者與群組 ID。以 -100 開頭的負數超級群組 ID 是群組聊天 ID。它們應放在 channels.telegram.groups 下,而不是 groupAllowFrom。權杖解析會感知帳號:
tokenFile 優先於 botToken,botToken 優先於環境變數,而且設定永遠優先於 TELEGRAM_BOT_TOKEN(後者僅會解析預設帳號)。成功啟動後,OpenClaw 會快取 bot 身分最多 24 小時,讓重新啟動時略過額外的 getMe 呼叫;變更或移除權杖會清除該快取。Telegram 端設定
隱私模式與群組可見性
隱私模式與群組可見性
Telegram bots 預設使用隱私模式,這會限制它們可接收哪些群組訊息。若要查看所有群組訊息,可擇一:
- 透過
/setprivacy停用隱私模式,或 - 將 bot 設為群組管理員。
群組權限
群組權限
管理員狀態由 Telegram 群組設定控制。管理員 bot 會接收所有群組訊息,適合需要永遠開啟的群組行為。
實用的 BotFather 切換項目
實用的 BotFather 切換項目
/setjoingroups— 允許/拒絕加入群組/setprivacy— 群組可見性行為
存取控制與啟用
群組 bot 身分
在群組和論壇主題中,明確提及已設定的 bot 帳號(例如@my_bot)會指定所選的 OpenClaw agent,即使 agent persona 名稱不同於 Telegram 使用者名稱也一樣。群組靜默政策仍會套用於不相關流量,但 bot 帳號本身絕不會是「其他人」。
- 私訊政策
- 群組政策與允許清單
- 提及行為
channels.telegram.dmPolicy 控制直接訊息存取:pairing(預設)allowlist(需要allowFrom中至少有一個傳送者 ID)open(需要allowFrom包含"*")disabled
dmPolicy: "open" 搭配 allowFrom: ["*"] 會讓任何找到或猜到 bot 使用者名稱的 Telegram 帳號都能指揮 bot。只應將它用於有嚴格工具限制、且刻意公開的 bot;單一擁有者 bot 應使用 allowlist 搭配數字使用者 ID。channels.telegram.allowFrom 接受數字 Telegram 使用者 ID。telegram: / tg: 前綴會被接受並正規化。
在多帳號設定中,限制性的頂層 channels.telegram.allowFrom 是安全邊界:帳號層級的 allowFrom: ["*"] 不會讓該帳號公開,除非合併後的有效允許清單仍包含明確萬用字元。
dmPolicy: "allowlist" 搭配空的 allowFrom 會封鎖所有私訊,並會被設定驗證拒絕。
設定只會要求數字使用者 ID。如果你的設定中有來自舊版設定流程的 @username 允許清單項目,請執行 openclaw doctor --fix 將它們解析為數字 ID(盡力而為;需要 Telegram bot token)。
如果你之前依賴配對儲存區允許清單檔案,openclaw doctor --fix 可將項目復原到 channels.telegram.allowFrom,供允許清單流程使用(例如 dmPolicy: "allowlist" 尚未有明確 ID 時)。對於單一擁有者 bot,建議使用 dmPolicy: "allowlist" 搭配明確的數字 allowFrom ID,而不是依賴先前的配對核准。常見混淆:私訊配對核准不代表「此傳送者在所有地方都已授權」。配對只授予私訊存取權。如果尚未存在命令擁有者,第一個核准的配對也會設定 commands.ownerAllowFrom,為僅限擁有者的命令和執行核准提供明確的操作員帳號。群組傳送者授權仍來自明確設定的允許清單。
若要用同一個身分同時授權私訊和群組命令:將你的數字 Telegram 使用者 ID 放入 channels.telegram.allowFrom,並針對僅限擁有者的命令確認 commands.ownerAllowFrom 包含 telegram:<your user id>。尋找你的 Telegram 使用者 ID
較安全(無第三方 bot):向你的 bot 傳送私訊,執行openclaw logs --follow,讀取 from.id。官方 Bot API 方法:@userinfobot 或 @getidsbot。執行階段行為
- Telegram 在閘道程序內執行。
- 路由是確定性的:Telegram 傳入訊息會回覆到 Telegram(模型不會選擇頻道)。
- 傳入訊息會正規化為共享頻道信封,包含回覆中繼資料、媒體佔位符,以及閘道已觀察到的回覆所用的持久化回覆鏈脈絡。
- 群組工作階段依群組 ID 隔離。論壇主題會附加
:topic:<threadId>。 - 私訊訊息可攜帶
message_thread_id;OpenClaw 會保留它供回覆使用。只有當 TelegramgetMe回報 bot 的has_topics_enabled: true時,私訊主題工作階段才會分割;否則私訊會維持在扁平工作階段。 - 長輪詢使用 grammY runner,並採用每聊天/每執行緒排序。Runner sink 並行數使用
agents.defaults.maxConcurrent。 - 多帳號啟動會限制並行
getMe探測,避免大型 bot 叢集一次展開所有帳號探測。 - 每個閘道程序都會保護長輪詢,確保一次只有一個作用中 poller 可使用同一個 bot token。持續的
getUpdates409 衝突表示另一個 OpenClaw 閘道、指令碼或外部 poller 正在使用相同權杖。 - 輪詢 watchdog 預設會在 120 秒沒有完成的
getUpdates存活訊號後重新啟動。只有在你的部署於長時間執行工作期間看到誤判的輪詢停滯重新啟動時,才提高channels.telegram.pollingStallThresholdMs(30000-600000,支援每帳號覆寫)。 - Telegram Bot API 不支援讀取回條(
sendReadReceipts不適用)。
channels.telegram.dm.threadReplies 和 channels.telegram.direct.<chatId>.threadReplies 已移除。如果你的設定在升級後仍有這些鍵,請執行 openclaw doctor --fix。DM 主題路由現在遵循 Telegram getMe.has_topics_enabled(由 BotFather threaded mode 控制):啟用主題的機器人在 Telegram 傳送 message_thread_id 時會使用以討論串為範圍的 DM 工作階段;其他 DM 會留在扁平工作階段。功能參考
即時串流預覽(訊息編輯)
即時串流預覽(訊息編輯)
OpenClaw 會在直接聊天、群組和主題中即時串流部分回覆:先傳送預覽訊息,接著反覆執行 保持工具進度可見,但隱藏命令/執行文字:對於純文字回覆:簡短預覽會就地進行最終編輯;拆分為多則訊息的長最終答案會將預覽重複用作第一個片段,然後只傳送其餘部分;進度模式最終答案會清除狀態草稿,並使用一般最終傳遞;如果在確認完成前最終編輯失敗,OpenClaw 會退回一般最終傳遞並清理過期預覽。對於複雜回覆(媒體承載),OpenClaw 一律退回一般最終傳遞並清理預覽。預覽串流和區塊串流互斥:當明確啟用區塊串流時,OpenClaw 會略過預覽串流以避免雙重串流。推理:
editMessageText,最後就地完成。channels.telegram.streaming是off | partial | block | progress(預設值:partial)- 簡短的初始答案預覽會經過防抖處理,若執行仍在進行中,會在有界延遲後具體顯示
progress會保留一則可編輯的工具進度狀態草稿,當答案活動早於工具進度抵達時顯示穩定狀態標籤,在完成時清除它,並將最終答案作為一般訊息傳送streaming.preview.toolProgress控制工具/進度更新是否重複使用同一則已編輯的預覽訊息(預設值:預覽串流啟用時為true)streaming.preview.commandText控制這些行中的命令/執行細節:raw(預設)或status(僅工具標籤)streaming.progress.commentary(預設值:false)選擇在暫時進度草稿中包含助理的說明/前言文字- 舊版
channels.telegram.streamMode、布林streaming值,以及已淘汰的原生草稿預覽鍵都會被偵測到;執行openclaw doctor --fix以遷移它們
v2026.4.22+ 的已發布行為)。保留答案預覽編輯,但隱藏工具進度行:progress 模式會顯示工具進度,但不會將最終答案編輯進該訊息。請將命令文字政策放在 streaming.progress 下:streaming.mode: "off" 會停用預覽編輯,並抑制一般工具/進度雜訊,而不是將其作為獨立狀態訊息傳送;核准提示、媒體和錯誤仍會透過一般最終傳遞路徑路由。streaming.preview.toolProgress: false 只保留答案預覽編輯。已選取的引用回覆是例外。當
replyToMode 為 first、all 或 batched,且傳入訊息有已選取的引用文字時,OpenClaw 會透過 Telegram 的原生引用回覆路徑傳送最終答案,而不是編輯答案預覽,因此 streaming.preview.toolProgress 無法在該輪顯示狀態行。沒有已選取引用文字的目前訊息回覆仍會串流。當工具進度可見性比原生引用回覆更重要時,請設定 replyToMode: "off";或設定 streaming.preview.toolProgress: false 以接受此取捨。/reasoning stream 會在生成期間將推理串流到即時預覽中,然後在最終傳遞後刪除推理預覽(使用 /reasoning on 可保持可見)。最終答案傳送時不包含推理文字。豐富訊息格式
豐富訊息格式
外寄文字預設使用標準 Telegram HTML 訊息,可在目前用戶端中閱讀:粗體、斜體、連結、程式碼、劇透、引用,而不是 Bot API 10.1 的僅限豐富格式區塊(原生表格、詳細資訊、豐富媒體、公式)。選擇使用 Bot API 10.1 豐富訊息:啟用後:代理會被告知此機器人/帳戶可使用豐富訊息;Markdown 文字會透過 OpenClaw 的 Markdown IR 轉譯為 Telegram 豐富 HTML;明確的豐富 HTML 承載會保留支援的 Bot API 10.1 標籤(標題、表格、詳細資訊、豐富媒體、公式);媒體標題仍使用 Telegram HTML 標題(豐富訊息不會取代標題,且標題上限為 1024 個字元)。這會讓模型文字避開 Telegram 的豐富 Markdown 符號,因此像
$400-600K 這樣的貨幣不會被解析為數學。長篇豐富文字會依 Telegram 限制自動拆分。超過 20 欄限制的表格會退回程式碼區塊。預設:關閉,為了用戶端相容性。有些目前的 Desktop、Web、Android 和第三方用戶端會將已接受的豐富訊息顯示為不支援。除非與機器人搭配使用的每個用戶端都能轉譯它們,否則請保持關閉。/status 會顯示目前工作階段是否開啟或關閉豐富訊息。連結預覽預設開啟。channels.telegram.linkPreview: false 會停用豐富文字的自動實體偵測。原生命令和自訂命令
原生命令和自訂命令
Telegram 的命令選單會在啟動時使用 規則:名稱會正規化(移除前置 裝置配對命令(
安裝後:
setMyCommands 註冊。commands.native: "auto" 會啟用 Telegram 的原生命令。新增自訂命令選單項目:/、轉為小寫);有效模式為 a-z、0-9、_,長度 1-32;自訂命令不能覆寫原生命令;衝突/重複項目會被略過並記錄。自訂命令只是選單項目,不會自動實作行為。外掛/skill 命令即使未顯示在 Telegram 選單中,輸入時仍可運作。如果停用原生命令,內建項目會被移除;已設定的自訂/外掛命令仍可能註冊。常見設定失敗:setMyCommands failed在修剪重試後伴隨BOT_COMMANDS_TOO_MUCH,表示選單仍然溢出;請減少外掛/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 會在輪詢前停止,因此這不會被回報為網路鉤子清理失敗。setMyCommands failed伴隨網路/fetch 錯誤,通常表示到api.telegram.org的外寄 DNS/HTTPS 被封鎖。
裝置配對命令(device-pair 外掛)
安裝後:/pair產生設定碼- 將程式碼貼到 iOS app
/pair pending列出待處理請求(包括角色/範圍)- 核准:
/pair approve <requestId>、/pair approve(唯一待處理請求)或/pair approve latest
requestId 取代;請在核准前重新執行 /pair pending。更多詳細資訊:配對。代理和自動化的 Telegram 訊息動作
代理和自動化的 Telegram 訊息動作
動作:
sendMessage(to、content、選用mediaUrl、replyToMessageId、messageThreadId)react(chatId、messageId、emoji)deleteMessage(chatId、messageId)editMessage(chatId、messageId、content或caption、選用presentation行內按鈕;僅按鈕編輯會更新回覆標記)createForumTopic(chatId、name、選用iconColor、iconCustomEmojiId)
send、react、delete、edit、sticker、sticker-search、topic-create。閘控:channels.telegram.actions.sendMessage、deleteMessage、reactions、sticker(預設:停用)。edit、createForumTopic 和 editForumTopic 預設啟用,沒有專用切換。
執行階段傳送會使用啟動/重新載入時的作用中設定/秘密快照,因此動作路徑不會在每次傳送時重新解析 SecretRef 值。反應移除語意:/tools/reactions。回覆討論串標籤
回覆討論串標籤
產生輸出中的明確回覆討論串標籤:
[[reply_to_current]]— 回覆觸發訊息[[reply_to:<id>]]— 回覆特定訊息 ID
channels.telegram.replyToMode:off(預設)、first、all。當啟用回覆討論串且原始文字/標題可用時,OpenClaw 會自動新增原生引用摘錄。Telegram 將原生引用文字限制為 1024 個 UTF-16 code unit;較長訊息會從開頭引用,若 Telegram 拒絕該引用,則退回純文字回覆。off 只會停用隱含回覆討論串;明確的 [[reply_to_*]] 標籤仍會被遵循。論壇主題與討論串行為
論壇主題與討論串行為
論壇超級群組:主題工作階段鍵會附加 接著每個主題都有自己的工作階段鍵,例如
: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 僅適用於主題,不會從群組預設值繼承。topics."*" 會為該群組中的每個主題設定預設值;精確的主題 ID 仍優先於 "*"。依主題的代理路由:每個主題都可以透過主題設定中的 agentId 路由到不同代理,讓它擁有自己的工作區、記憶與工作階段:agent:zu:telegram:group:-1001234567890:topic:3。持久 ACP 主題繫結:論壇主題可以透過頂層具型別繫結(bindings[],包含 type: "acp"、match.channel: "telegram"、peer.kind: "group",以及像 -1001234567890:topic:42 這樣限定主題的 ID)釘選 ACP harness 工作階段。目前範圍限於群組/超級群組中的論壇主題。請參閱 ACP 代理。從聊天產生繫結討論串的 ACP:/acp spawn <agent> --thread here|auto 會將目前主題繫結到新的 ACP 工作階段;後續訊息會直接路由到該處,而 OpenClaw 會在主題內釘選產生確認。需要 channels.telegram.threadBindings.spawnSessions(預設:true)。範本內容會公開 MessageThreadId 和 IsForum。具有 message_thread_id 的私訊聊天會保留回覆中繼資料,但只有在 Telegram getMe 回報 has_topics_enabled: true 時,才會使用感知討論串的工作階段鍵。
已淘汰的 dm.threadReplies 和 direct.*.threadReplies 覆寫已移除;BotFather 討論串模式是唯一真實來源。執行 openclaw doctor --fix 以移除過時的設定鍵。音訊、影片與貼圖
音訊、影片與貼圖
音訊訊息
Telegram 會區分語音訊息與音訊檔案。預設:音訊檔案行為;在代理回覆中標記[[audio_as_voice]] 可強制以語音訊息傳送。傳入語音訊息轉錄會在代理內容中被框定為機器產生、不受信任的文字,但提及偵測仍會使用原始轉錄,因此以提及為門檻的語音訊息會持續運作。影片訊息
Telegram 會區分影片檔案與影片訊息。影片訊息不支援說明文字;提供的訊息文字會另外傳送。貼圖
傳入:靜態 WEBP 會被下載並處理(預留位置<media:sticker>);動畫 TGS 和影片 WEBM 會被略過。貼圖內容欄位:Sticker.emoji、Sticker.setName、Sticker.fileId、Sticker.fileUniqueId、Sticker.cachedDescription。描述會快取在 OpenClaw SQLite 外掛狀態中,以減少重複的視覺呼叫。啟用貼圖動作:反應通知
反應通知
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 表示僅限使用者對機器人傳送訊息的反應(透過已傳送訊息快取盡力判定)。反應事件仍會遵守 Telegram 存取控制(dmPolicy、allowFrom、groupPolicy、groupAllowFrom);未授權的傳送者會被丟棄。Telegram 不會在反應更新中提供討論串 ID:非論壇群組會路由到群組聊天工作階段;論壇群組會路由到一般主題工作階段(:topic:1),而不是精確的來源主題。用於輪詢/網路鉤子的 allowed_updates 會自動包含 message_reaction。確認反應
確認反應
ackReaction 會在 OpenClaw 處理傳入訊息時傳送確認表情符號。messages.ackReactionScope 決定它會在何時傳送。表情符號解析順序:channels.telegram.accounts.<accountId>.ackReactionchannels.telegram.ackReactionmessages.ackReaction- 代理身分表情符號後援(
agents.list[].identity.emoji,否則為 ”👀”)
"" 可停用某個頻道或帳號的反應。範圍(messages.ackReactionScope,預設 "group-mentions";目前沒有 Telegram 帳號或 Telegram 頻道覆寫):all(私訊 + 群組,包含環境房間事件)、direct(僅私訊)、group-all(除環境房間事件外的每則群組訊息,不含私訊)、group-mentions(群組中提及機器人時;不含私訊 — 預設)、off / none(停用)。預設範圍(
group-mentions)不會在私訊或環境房間事件中觸發確認反應。私訊請使用 direct 或 all;只有 all 會確認環境房間事件。此值會在 Telegram 提供者啟動時讀取,因此需要重新啟動閘道,變更才會生效。來自 Telegram 事件與命令的設定寫入
來自 Telegram 事件與命令的設定寫入
頻道設定寫入預設啟用(
configWrites !== false)。由 Telegram 觸發的寫入包含群組遷移事件(migrate_to_chat_id,更新 channels.telegram.groups)以及 /config set / /config unset(需要啟用命令)。停用:長輪詢與網路鉤子
長輪詢與網路鉤子
預設為長輪詢。若要使用網路鉤子模式,請設定
channels.telegram.webhookUrl 和 channels.telegram.webhookSecret;選用的 webhookPath(預設 /telegram-webhook)、webhookHost(預設 127.0.0.1)、webhookPort(預設 8787)、webhookCertPath(用於直接 IP 或無網域設定的自簽憑證 PEM)。在長輪詢模式中,OpenClaw 只會在更新成功派送後持久化其重新啟動水位標記;失敗的處理常式會讓該更新在同一行程中可重試,而不是標記為已完成。本機監聽器預設繫結至 127.0.0.1:8787。若要公開入口,請在本機連接埠前放置反向代理,或有意地設定 webhookHost: "0.0.0.0"。網路鉤子模式會驗證請求防護、Telegram 秘密權杖與 JSON 內容,然後才回傳 200。接著 OpenClaw 會透過長輪詢使用的同一組每聊天/每主題機器人通道非同步處理更新,因此緩慢的代理回合不會占住 Telegram 的傳遞 ACK。Telegram 中的執行核准
Telegram 中的執行核准
Telegram 支援在核准者私訊中進行執行核准,也可選擇在來源聊天或主題中張貼提示。核准者必須是數值 Telegram 使用者 ID。
channels.telegram.execApprovals.enabled("auto"會在至少能解析出一位核准者時啟用)channels.telegram.execApprovals.approvers(退回使用來自commands.ownerAllowFrom的數值擁有者 ID)channels.telegram.execApprovals.target:dm(預設)|channel|bothagentFilter、sessionFilter
channels.telegram.allowFrom、groupAllowFrom 和 defaultTo 控制誰可以和機器人對話,以及它把一般回覆傳送到哪裡;它們不會讓某人成為 exec 核准者。當還沒有命令擁有者時,第一次核准的 DM 配對會啟動 commands.ownerAllowFrom,因此單一擁有者設定不需要在 execApprovals.approvers 下重複填入 ID。頻道傳遞會在聊天中顯示命令文字;只在受信任的群組/主題中啟用 channel 或 both。當提示落在論壇主題中時,OpenClaw 會為核准提示和後續訊息保留該主題。Exec 核准預設會在 30 分鐘後過期。內嵌核准按鈕也需要 channels.telegram.capabilities.inlineButtons 允許目標介面(dm、group 或 all)。以 plugin: 為前綴的核准 ID 會透過外掛核准解析;其他 ID 會先透過 exec 核准解析。請參閱 Exec 核准。錯誤回覆控制
當代理程式遇到傳遞或供應商錯誤時,錯誤政策會控制錯誤訊息是否送達 Telegram 聊天:| 鍵 | 值 | 預設 | 說明 |
|---|---|---|---|
channels.telegram.errorPolicy | always, once, silent | always | always 會將每則錯誤訊息傳送到聊天。once 會在每個冷卻視窗中只傳送一次每則不重複的錯誤訊息(抑制重複的相同錯誤)。silent 永遠不會將錯誤訊息傳送到聊天。 |
channels.telegram.errorCooldownMs | 數字(毫秒) | 14400000(4 小時) | once 政策的冷卻視窗。錯誤傳送後,相同訊息會被抑制,直到此間隔經過。可避免中斷期間出現錯誤洗版。 |
疑難排解
機器人不回應非提及的群組訊息
機器人不回應非提及的群組訊息
- 如果
requireMention=false,Telegram 隱私模式必須允許完整可見性:BotFather/setprivacy-> Disable,然後將機器人從群組移除並重新加入。 - 當設定預期未提及的群組訊息時,
openclaw channels status會發出警告。 openclaw channels status --probe會檢查明確的數值群組 ID;萬用字元"*"無法進行成員資格探測。- 快速工作階段測試:
/activation always。
機器人完全看不到群組訊息
機器人完全看不到群組訊息
- 當
channels.telegram.groups存在時,群組必須列在其中(或包含"*")。 - 驗證機器人在群組中的成員資格。
- 檢閱
openclaw logs --follow中的略過原因。
命令部分可用或完全不可用
命令部分可用或完全不可用
- 授權你的傳送者身分(配對和/或數值
allowFrom);即使群組政策是open,命令授權仍然適用。 setMyCommands failed搭配BOT_COMMANDS_TOO_MUCH表示原生選單有太多項目;請減少外掛/skill/自訂命令,或停用原生選單。deleteMyCommands/setMyCommands啟動呼叫與sendChatAction輸入狀態呼叫都有界限,並會在請求逾時時透過 Telegram 的傳輸退回重試一次。持續的網路/擷取錯誤通常表示無法連到api.telegram.org的 DNS/HTTPS。
輪詢或網路不穩定
輪詢或網路不穩定
- Node 22+ 搭配自訂 fetch/proxy 時,如果
AbortSignal型別不相符,可能觸發立即中止行為。 - 有些主機會先將
api.telegram.org解析為 IPv6;損壞的 IPv6 對外連線會造成間歇性 API 失敗。 - 含有
TypeError: fetch failed或Network request for 'getUpdates' failed!的記錄會作為可復原的網路錯誤重試。 - 在輪詢啟動期間,OpenClaw 會為 grammY 重用啟動時成功的
getMe探測,因此執行器不需要在第一次getUpdates前再執行第二次getMe。 - 如果
deleteWebhook在輪詢啟動期間因暫時性網路錯誤失敗,OpenClaw 會繼續進入長輪詢,而不是再發出另一個輪詢前控制平面呼叫。仍然啟用的網路鉤子接著會以getUpdates衝突浮現;OpenClaw 會重建傳輸並重試網路鉤子清理。 - 如果 Telegram socket 以固定短週期回收,請檢查是否有過低的
channels.telegram.timeoutSeconds;機器人用戶端會將設定值限制在對外和getUpdates請求保護值之下,但較舊版本可能在此值低於那些保護值時中止每次輪詢或回覆。 - 記錄中的
Polling stall detected表示 OpenClaw 在預設 120 秒內沒有完成長輪詢存活訊號後,會重新啟動輪詢並重建傳輸。 - 當執行中的輪詢帳號在啟動寬限期後尚未完成
getUpdates、執行中的網路鉤子帳號在啟動寬限期後尚未完成setWebhook,或最後一次成功的輪詢傳輸活動已過舊時,openclaw channels status --probe和openclaw doctor會發出警告。 - 只有在長時間執行的
getUpdates呼叫健康,但你的主機仍回報誤判的輪詢停滯重新啟動時,才提高channels.telegram.pollingStallThresholdMs。持續停滯通常指向 proxy、DNS、IPv6 或到api.telegram.org的 TLS 對外連線問題。 - Telegram 的 Bot API 傳輸會遵循程序 proxy 環境變數:
HTTP_PROXY、HTTPS_PROXY、ALL_PROXY及小寫變體。NO_PROXY/no_proxy仍可略過api.telegram.org。 - 如果服務環境設定了
OPENCLAW_PROXY_URL,且不存在標準 proxy 環境變數,Telegram 也會將該 URL 用於 Bot API 傳輸。 - 在直接對外連線/TLS 不穩定的 VPS 主機上,請透過 proxy 路由 Telegram API 呼叫:
- 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 行為效果更好時,強制選擇 family:
- RFC 2544 基準範圍回應(
198.18.0.0/15)預設已允許用於 Telegram 媒體下載。如果受信任的 fake-IP 或透明 proxy 在媒體下載期間將api.telegram.org重寫為其他私有/內部/特殊用途位址,請選擇加入僅限 Telegram 的略過:
- 同一個選擇加入也可在
channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork針對每個帳號使用。 - 如果你的 proxy 將 Telegram 媒體主機解析為
198.18.x.x,請先保持危險旗標關閉;該範圍預設已允許。
- 暫時環境覆寫:
OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1、OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1、OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first。 - 驗證 DNS 回應:
設定參考
主要參考:設定參考 - Telegram。高訊號 Telegram 欄位
高訊號 Telegram 欄位
- 啟動/驗證:
enabled、botToken、tokenFile(必須是一般檔案;符號連結會被拒絕)、accounts.* - 存取控制:
dmPolicy、allowFrom、groupPolicy、groupAllowFrom、groups、groups.*.topics.*、頂層bindings[](type: "acp") - 主題預設值:
groups.<chatId>.topics."*"會套用到未相符的論壇主題;精確主題 ID 會覆寫它 - exec 核准:
execApprovals、accounts.*.execApprovals - 命令/選單:
commands.native、commands.nativeSkills、customCommands - 執行緒/回覆:
replyToMode、threadBindings - 串流:
streaming(模式off | partial | block | progress)、streaming.preview.toolProgress - 格式/傳遞:
textChunkLimit、chunkMode、richMessages、markdown.tables(off | bullets | code | block)、linkPreview、responsePrefix - 媒體/網路:
mediaMaxMb、mediaGroupFlushMs、timeoutSeconds、pollingStallThresholdMs、retry、network.autoSelectFamily、network.dangerouslyAllowPrivateNetwork、proxy - 自訂 API 根目錄:
apiRoot(僅 Bot API 根目錄;不要包含/bot<TOKEN>)、trustedLocalFileRoots(自架 Bot API 絕對file_path根目錄) - 網路鉤子:
webhookUrl、webhookSecret、webhookPath、webhookHost、webhookPort、webhookCertPath - 動作/能力:
capabilities.inlineButtons、actions.sendMessage|editMessage|deleteMessage|reactions|sticker|createForumTopic|editForumTopic - 反應:
reactionNotifications、reactionLevel - 錯誤:
errorPolicy、errorCooldownMs、silentErrorReplies - 寫入/歷史:
configWrites、historyLimit、dmHistoryLimit、dms.*.historyLimit
多帳號優先順序:設定兩個以上帳號 ID 時,請設定
channels.telegram.defaultAccount(或包含 channels.telegram.accounts.default)以明確指定預設路由。否則 OpenClaw 會退回到第一個正規化帳號 ID,且 openclaw doctor 會發出警告。具名帳號會繼承 channels.telegram.allowFrom / groupAllowFrom,但不會繼承 accounts.default.* 值。相關內容
配對
將 Telegram 使用者配對到閘道。
群組
群組與主題的允許清單行為。
通道路由
將傳入訊息路由至代理。
安全性
威脅模型與強化。
多代理路由
將群組與主題對應到代理。
疑難排解
跨通道診斷。