頻道與路由

OpenClaw 會將回覆 路由回訊息來源的頻道。模型不會選擇頻道;路由是確定性的,由主機設定控制。

關鍵術語

  • Channelwhatsapptelegramdiscordslacksignalimessagewebchat
  • AccountId:每個頻道的帳號實體(若支援)。
  • 選用的頻道預設帳號:channels.<channel>.defaultAccount 用來決定當外送路徑未指定 accountId 時使用哪個帳號。
    • 在多帳號設定中,當有兩個以上帳號時,請設定明確的預設值(defaultAccountaccounts.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:42
  • agent:main:discord:channel:123456:thread:987654

主要私訊路由固定

session.dmScopemain 時,私訊可能共享同一個主要工作階段。為防止工作階段的 lastRoute 被非擁有者私訊覆寫,OpenClaw 在以下條件全部成立時,會從 allowFrom 推斷一個固定擁有者:

  • allowFrom 只有一個非萬用字元的項目。
  • 該項目可以正規化為該頻道的具體發送者 ID。
  • 接收的私訊發送者與該固定擁有者不匹配。

在不匹配的情況下,OpenClaw 仍會記錄接收的工作階段中繼資料,但會跳過更新主要工作階段的 lastRoute

路由規則(如何選擇代理)

路由為每則接收訊息選擇 一個代理

  1. 精確對等端匹配bindings 搭配 peer.kind + peer.id)。
  2. 父對等端匹配(討論串繼承)。
  3. 公會 + 角色匹配(Discord)透過 guildId + roles
  4. 公會匹配(Discord)透過 guildId
  5. 團隊匹配(Slack)透過 teamId
  6. 帳號匹配(頻道上的 accountId)。
  7. 頻道匹配(該頻道的任何帳號,accountId: "*")。
  8. 預設代理agents.list[].default,否則第一個清單項目,備援為 main)。

當綁定包含多個匹配欄位(peerguildIdteamIdroles)時,所有提供的欄位必須匹配才會套用該綁定。

匹配的代理決定使用哪個工作區和工作階段存儲。

廣播群組(執行多個代理)

廣播群組讓你在 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 讓你在一個地方看到該代理的跨頻道上下文。

回覆上下文

接收的回覆包含:

  • ReplyToIdReplyToBodyReplyToSender(可用時)。
  • 引用的上下文以 [Replying to ...] 區塊附加到 Body

這在所有頻道中是一致的。