頻道與路由
OpenClaw 會將回覆路由送回訊息來源的頻道。模型不會選擇頻道;路由是確定性的,並由主機設定控制。關鍵術語
- 頻道:內建頻道外掛,例如
discord、googlechat、imessage、irc、line、signal、slack、telegram或whatsapp,以及已安裝的外掛頻道。webchat是內部 WebChat UI 頻道,不是可設定的外送頻道。 - AccountId:每個頻道的帳號執行個體(支援時)。
- 選用的頻道預設帳號:
channels.<channel>.defaultAccount會選擇在外送路徑未指定accountId時要使用哪個帳號。- 在多帳號設定中,若已設定兩個以上帳號,請設定明確的預設值(
defaultAccount或名為default的帳號)。若未設定,後備路由可能會選擇第一個正規化帳號 ID。
- 在多帳號設定中,若已設定兩個以上帳號,請設定明確的預設值(
- AgentId:隔離的工作區 + 工作階段儲存區(「大腦」)。
- SessionKey:用來儲存脈絡並控制並行性的儲存桶鍵。
外送目標前綴
明確的外送目標可包含提供者前綴,例如telegram:123 或 tg:123。只有在所選頻道為 last 或尚未解析,且已載入外掛宣告該前綴時,核心才會把該前綴視為頻道選擇提示。如果呼叫端已選擇明確頻道,提供者前綴必須符合該頻道;像是將 WhatsApp 傳送到 telegram:123 這類跨頻道組合,會在外掛專屬目標正規化之前失敗。
目標類型與服務前綴,例如 channel:<id>、user:<id>、room:<id>、thread:<id>、imessage:<handle> 和 sms:<number>,會留在所選頻道的語法內。它們本身不會選擇提供者。
工作階段鍵形狀(範例)
直接訊息預設會收斂到代理的 main 工作階段:agent:<agentId>:<mainKey>(預設:agent:main:main)
session.dmScope 控制 DM 收斂:main(預設)會共用一個主要工作階段,而 per-peer、per-channel-peer 和 per-account-channel-peer 會將 DM 保持在不同工作階段中。路由繫結可以透過 bindings[].session.dmScope 覆寫符合對等方的範圍。
即使直接訊息對話歷史與 main 共用,沙盒與工具政策也會為外部 DM 使用衍生的每帳號直接聊天執行階段鍵,因此頻道來源訊息不會被視為本機 main 工作階段執行。
群組和頻道會維持每個頻道各自隔離:
- 群組:
agent:<agentId>:<channel>:group:<id> - 頻道/聊天室:
agent:<agentId>:<channel>:channel:<id>
- Slack/Discord 討論串會在基底鍵後附加
:thread:<threadId>。 - Telegram 論壇主題會在群組鍵中嵌入
: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。
受保護的傳入記錄
當受保護路徑不得建立新的 OpenClaw 工作階段時,頻道外掛可以將傳入工作階段記錄標示為createIfMissing: false。在此模式下,OpenClaw 可以更新既有工作階段的中繼資料和 lastRoute,但不會只因觀察到訊息就建立僅供路由使用的工作階段項目。
路由規則(如何選擇代理)
路由會為每則傳入訊息選擇一個代理:- 精確對等方符合(
bindings搭配peer.kind+peer.id)。 - 父對等方符合(討論串繼承)。
- 對等方萬用字元符合(某個對等方類型的
peer.id: "*")。 - Guild + 角色符合(Discord)透過
guildId+roles。 - Guild 符合(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} 範本覆寫儲存區路徑。
閘道和 ACP 工作階段探索也會掃描預設 agents/ 根目錄下,以及範本化 session.store 根目錄下的磁碟支援代理儲存區。探索到的儲存區必須留在已解析的代理根目錄內,並使用一般的 sessions.json 檔案。符號連結和根目錄外路徑會被忽略。
WebChat 行為
WebChat 會附加到所選代理,並預設使用該代理的主要工作階段。因此,WebChat 可讓你在同一個地方查看該代理的跨頻道脈絡。回覆脈絡
傳入回覆會在可用時包含:ReplyToId、ReplyToBody和ReplyToSender。- 引用脈絡會以
[Replying to ...]區塊附加到Body。