頻道與路由
OpenClaw 將回覆路由回訊息來自的頻道。模型不選擇頻道;路由是確定性的,由主機配置控制。關鍵術語
- 頻道:
telegram、whatsapp、discord、irc、googlechat、slack、signal、imessage、line,加上擴展頻道。webchat是內部 WebChat UI 頻道,不是可配置的傳出頻道。 - AccountId:每頻道帳戶實例(當支援時)。
- 選擇性頻道預設帳戶:
channels.<channel>.defaultAccount選擇 當傳出路徑未指定accountId時使用哪個帳戶。- 在多帳戶設置中,當配置兩個或多個帳戶時設定明確預設(
defaultAccount或accounts.default)。不設定它,回退路由可能選擇第一個正常化帳戶 ID。
- 在多帳戶設置中,當配置兩個或多個帳戶時設定明確預設(
- AgentId:隔離的工作區 + 工作階段存儲(「大腦」)。
- SessionKey:用於儲存上下文和控制並行的儲存池鍵。
工作階段鍵形狀(示例)
直接訊息摺疊到代理的主工作階段:agent:<agentId>:<mainKey>(預設:agent:main:main)
- 群組:
agent:<agentId>:<channel>:group:<id> - 頻道/房間:
agent:<agentId>:<channel>:channel:<id>
- Slack/Discord 執行緒追加
:thread:<threadId>至基本鍵。 - Telegram forum topics 在群組鍵中內嵌
:topic:<topicId>。
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
主 DM 路由釘選
當session.dmScope 是 main 時,直接訊息可能共享一個主工作階段。
為防止工作階段的 lastRoute 被非擁有者 DM 覆寫,
OpenClaw 當所有這些都為真時推斷釘選擁有者自 allowFrom:
allowFrom恰好有一個非萬用字元條目。- 該條目可正常化為該頻道的具體寄件者 ID。
- 傳入 DM 寄件者不符合該釘選擁有者。
lastRoute。
路由規則(如何選擇代理)
路由為每個傳入訊息選擇一個代理:- 精確對等匹配(
bindings含peer.kind+peer.id)。 - 父對等匹配(執行緒繼承)。
- 公會 + 角色匹配(Discord)透過
guildId+roles。 - 公會匹配(Discord)透過
guildId。 - 團隊匹配(Slack)透過
teamId。 - 帳戶匹配(頻道上的
accountId)。 - 頻道匹配(該頻道上的任何帳戶,
accountId: "*")。 - 預設代理(
agents.list[].default,否則首個清單條目,回退到main)。
peer、guildId、teamId、roles)時,所有提供的欄位必須匹配該綁定才能套用。
匹配的代理決定使用哪個工作區和工作階段存儲。
廣播群組(運行多個代理)
廣播群組讓你為相同對等運行多個代理當 OpenClaw 通常會回覆時(例如:在 WhatsApp 群組中,提及/啟用閘門後)。 設定:設定概述
agents.list:命名代理定義(工作區、模型等)。bindings:將傳入頻道/帳戶/對等映射至代理。
工作階段儲存
工作階段存儲位於狀態目錄下(預設~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- JSONL 文字記錄位在存儲旁邊
session.store 和 {agentId} 樣板覆蓋存儲路徑。
Gateway 和 ACP 工作階段發現也掃描磁碟支援的代理存儲在
預設 agents/ 根下和樣板化 session.store 根下。發現的
存儲必須停留在該已解決代理根內並使用常規
sessions.json 檔案。符號連結和超出根的路徑被忽略。
WebChat 行為
WebChat 附加到選定代理並預設為代理的主 工作階段。因此,WebChat 讓你在一個地方看到該 代理的跨頻道上下文。回覆上下文
傳入回覆包括:- 可用時的
ReplyToId、ReplyToBody和ReplyToSender。 - 引用上下文作為
[Replying to ...]區塊追加到Body。