頻道與路由
OpenClaw 會將回覆 路由回訊息來源的頻道。模型不會選擇頻道;路由是確定性的,由主機設定控制。
關鍵術語
- Channel:
whatsapp、telegram、discord、slack、signal、imessage、webchat。 - 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 論壇主題在群組鍵中嵌入
:topic:<topicId>。
範例:
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
主要私訊路由固定
當 session.dmScope 為 main 時,私訊可能共享同一個主要工作階段。為防止工作階段的 lastRoute 被非擁有者私訊覆寫,OpenClaw 在以下條件全部成立時,會從 allowFrom 推斷一個固定擁有者:
allowFrom只有一個非萬用字元的項目。- 該項目可以正規化為該頻道的具體發送者 ID。
- 接收的私訊發送者與該固定擁有者不匹配。
在不匹配的情況下,OpenClaw 仍會記錄接收的工作階段中繼資料,但會跳過更新主要工作階段的 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 群組中,經過提及/啟動過濾後),針對同一個對等端 執行多個代理。
設定:
{
broadcast: {
strategy: "parallel",
"[email protected]": ["alfred", "baerbel"],
"+15555550123": ["support", "logger"],
},
}
詳見:廣播群組。
設定概覽
agents.list:具名代理定義(工作區、模型等)。bindings:將接收頻道/帳號/對等端對應到代理。
範例:
{
agents: {
list: [{ id: "support", name: "Support", workspace: "~/.openclaw/workspace-support" }],
},
bindings: [
{ match: { channel: "slack", teamId: "T123" }, agentId: "support" },
{ match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" },
],
}
工作階段儲存
工作階段存儲位於狀態目錄下(預設 ~/.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。
這在所有頻道中是一致的。