Channel & Routing

OpenClaw sẽ routing các tin nhắn trả lời về đúng channel mà tin nhắn gốc đến. Model không tự chọn channel; việc routing được xác định rõ ràng và do cấu hình host kiểm soát.

Các thuật ngữ chính

  • Channel: whatsapp, telegram, discord, slack, signal, imessage, webchat.
  • AccountId: instance tài khoản riêng cho từng channel (nếu được hỗ trợ).
  • AgentId: một workspace độc lập + session store (“bộ não”).
  • SessionKey: khóa bucket dùng để lưu context và kiểm soát concurrency.

Cấu trúc session key (ví dụ)

Tin nhắn trực tiếp (DM) sẽ gộp vào session main của agent:

  • agent:<agentId>:<mainKey> (mặc định: agent:main:main)

Các group và channel vẫn tách biệt theo từng channel:

  • Group: agent:<agentId>:<channel>:group:<id>
  • Channel/room: agent:<agentId>:<channel>:channel:<id>

Thread:

  • Thread trên Slack/Discord sẽ thêm :thread:<threadId> vào cuối key gốc.
  • Topic trên Telegram forum sẽ nhúng :topic:<topicId> vào trong group key.

Ví dụ:

  • agent:main:telegram:group:-1001234567890:topic:42
  • agent:main:discord:channel:123456:thread:987654

Quy tắc routing (cách chọn agent)

Routing sẽ chọn một agent cho mỗi tin nhắn đến:

  1. Khớp chính xác peer (bindings với peer.kind + peer.id).
  2. Khớp guild (Discord) qua guildId.
  3. Khớp team (Slack) qua teamId.
  4. Khớp account (accountId trên channel).
  5. Khớp channel (bất kỳ account nào trên channel đó).
  6. Agent mặc định (agents.list[].default, nếu không có thì lấy entry đầu tiên, cuối cùng fallback về main).

Agent được chọn sẽ quyết định workspace và session store nào được dùng.

Broadcast group (chạy nhiều agent)

Broadcast group cho phép các bạn chạy nhiều agent cho cùng một peer khi OpenClaw thường sẽ trả lời (ví dụ: trong group WhatsApp, sau khi mention/activation gating).

Cấu hình:

{
  broadcast: {
    strategy: "parallel",
    "[email protected]": ["alfred", "baerbel"],
    "+15555550123": ["support", "logger"],
  },
}

Xem thêm: Broadcast Groups.

Tổng quan cấu hình

  • agents.list: định nghĩa các agent có tên (workspace, model, v.v.).
  • bindings: map các channel/account/peer đến với agent.

Ví dụ:

{
  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" },
  ],
}

Lưu trữ session

Các session store nằm trong thư mục state (mặc định ~/.openclaw):

  • ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • Các transcript JSONL nằm cùng với store

Các bạn có thể override đường dẫn store qua session.store và templating {agentId}.

Hành vi của WebChat

WebChat sẽ gắn vào agent được chọn và mặc định dùng session main của agent đó. Nhờ vậy, WebChat cho phép các bạn xem context cross-channel của agent đó ở một chỗ.

Context khi reply

Các reply đến sẽ bao gồm:

  • ReplyToId, ReplyToBody, và ReplyToSender khi có.
  • Context được trích dẫn sẽ được thêm vào Body dưới dạng block [Replying to ...].

Điều này nhất quán trên tất cả các channel.