更新(2026-03-08):本文已依 OpenClaw v2026.3.7 更新。此版本新增 per-topic
agentId支援,讓不同話題可以路由到不同 agent,原本「topics 無法切換 agent」的限制已不再成立。
Telegram 的 Forum Topics 可以讓群組裡不同話題有獨立的討論區。想讓 OpenClaw 在各話題有不同的 AI 行為,直覺上會想到「用 bindings 把不同話題導向不同 agent」——但這條路走不通。
💡 如果是想了解基本的模型切換設定,可以先看 OpenClaw 模型設定全解。
先釐清概念:bindings vs topics
bindings:根據來源決定 agent
bindings 的作用是根據訊息來源,把整個群組導向指定的 agent:
"bindings": [ { "agentId": "my-seo-agent", "match": { "channel": "telegram", "accountId": "-100xxxxxxxxxx" } }]這樣這個群組的所有訊息都會由 my-seo-agent 處理。
限制:bindings.match 不支援 threadId,沒辦法細分到話題層級。硬設的話 gateway 會直接報 config invalid。
topics:設定各話題的提示詞與行為
Topics 是 channels.telegram.groups 底下的設定,針對每個話題指定提示詞、回應條件、以及(v2026.3.7 起)專屬的 agent。
| 機制 | 可以做什麼 | 不能做什麼 |
|---|---|---|
bindings | 群組層級的 agent 路由 | 指定到特定話題 |
topics | 各話題的提示詞、回應行為、指定 agent | 切換不同模型 |
從 v2026.3.7 起,topics 支援 agentId 欄位,可以讓不同話題路由到不同的 agent,並擁有完全隔離的 session。
channels.telegram 完整設定說明
"channels": { "telegram": { "enabled": true, "botToken": "你的 Bot Token", "dmPolicy": "allowlist", "groupPolicy": "open", "streaming": "partial", "allowFrom": [ "123456789", "987654321" ], "groups": { "-100xxxxxxxxxx": { "topics": { "1": { "requireMention": false }, "14": { "requireMention": false, "systemPrompt": "你是這個話題的專屬助手,專注回答 XXX 相關問題..." } } } } }}根層級欄位說明:
| 欄位 | 說明 |
|---|---|
enabled | 是否啟用 Telegram channel |
botToken | Telegram Bot Token |
dmPolicy | 私訊政策:open(所有人)或 allowlist(僅 allowFrom 清單) |
groupPolicy | 群組政策:open 或 allowlist(僅 groups 裡的群組) |
streaming | 串流模式:partial(邊生成邊發送) |
allowFrom | 允許使用的 user ID 清單 |
Topics 設定格式
Key 是群組 ID(帶負號),topics 底下再用話題 ID 作為 Key:
"groups": { "-100xxxxxxxxxx": { "topics": { "14": { "requireMention": false, "systemPrompt": "你是這個話題的專屬助手,專注回答 XXX 相關問題..." } } }}TelegramTopicSchema 支援的欄位
| 欄位 | 說明 |
|---|---|
requireMention | 是否需要 @bot 才回應 |
systemPrompt | 自訂提示詞 |
agentId | 指定此話題使用的 agent(v2026.3.7+) |
enabled | 是否啟用此話題 |
allowFrom | 允許的 user ID 清單 |
groupPolicy | 話題層級的群組政策 |
skills | 啟用的 skills 清單 |
disableAudioPreflight | 停用音訊預檢 |
不支援:
model——無法為個別話題指定專用模型。
如何取得 Topic ID
從 Telegram Web 的 URL 直接讀取:
https://web.telegram.org/a/#-100xxxxxxxxxx_14 ↑ 群組ID ↑ 話題ID底線後面的數字就是話題 ID,填入設定時用字串格式(帶引號)。
Session 隔離行為
話題之間的對話上下文自動隔離,不需要任何設定。OpenClaw 會把 :topic:<ID> 附加到 session key:
telegram:group:-100xxxxxxxxxx:topic:4同一個群組的不同話題,AI 的對話記憶完全不互串。
Cron 推送到指定話題
Cron 排程通知可以指定發到特定話題:
"delivery": { "mode": "announce", "to": "-100xxxxxxxxxx:topic:29"}錯誤警報也可以獨立設定發到不同話題:
"failureAlert": { "mode": "announce", "to": "-100xxxxxxxxxx:topic:29"}to 格式:<群組ID>:topic:<話題ID>,mode 支援 none、announce、webhook。
常見問題
Q: 為什麼設定 bindings 指定話題層級的 agent 後,gateway 回報 config invalid?
A: bindings.match 目前不支援 threadId 欄位,只能匹配到 channel 和 accountId(群組 ID)層級。如果你在 match 裡加了 threadId,gateway 在驗證設定時就會直接報錯。v2026.3.7 起,要讓特定話題路由到不同 agent,請改用 channels.telegram.groups.<群組ID>.topics.<話題ID>.agentId。
Q: topics 可以指定不同話題使用不同 agent 或模型嗎?
A: v2026.3.7 起,agentId 欄位已原生支援,可以讓不同話題路由到不同的 agent。但 model 欄位仍不支援,無法為個別話題直接指定模型——如果需要不同模型,需透過設定不同 agent 來達成。
Q: 每個話題的對話記憶是獨立的嗎?需要額外設定嗎?
A: 是獨立的,不需要任何設定。OpenClaw 會自動把 :topic:<話題ID> 附加到 session key(例如 telegram:group:-100xxxxxxxxxx:topic:14),話題之間的對話上下文完全不互串。同一個群組裡的不同話題,AI 不會記得彼此的對話內容。
參考來源:
總結
bindings只能做群組層級的 agent 路由,不支援 threadIdtopics是設定各話題的提示詞和行為,v2026.3.7 起支援agentId指定不同 agent- Topics 設定在
channels.telegram.groups.<群組ID>.topics,Key 為話題 ID - Topic ID 從 Telegram Web URL 的底線後取得
- 話題 session 自動隔離,不需要額外設定
- Cron 推送格式:
"to": "<群組ID>:topic:<話題ID>" - 設定後若發生工具失效或記憶遺失,可參考 OpenClaw 2026.3.2 workspaceOnly 修復
- 如果想接更多模型,可以參考 Zeabur AI Hub 自訂 provider 設定
回報錯字、失效連結,或告訴我你想看的延伸主題。