Skip to content

Channels & routing

Moltbot 会把回复路由回消息来源的渠道。模型不会选择渠道;路由是确定性的,并由 host 配置控制。

关键术语

  • Channelwhatsapptelegramdiscordslacksignalimessagewebchat
  • AccountId:按渠道的账号实例(当渠道支持时)。
  • AgentId:隔离的 workspace + session store(“大脑”)。
  • SessionKey:用于存储上下文并控制并发的 bucket key。

Session key 形态(示例)

私信会折叠到该 agent 的 main session:

  • agent:<agentId>:<mainKey>(默认:agent:main:main

群与频道会按渠道保持隔离:

  • 群:agent:<agentId>:<channel>:group:<id>
  • 频道/房间:agent:<agentId>:<channel>:channel:<id>

Threads:

  • Slack/Discord threads 会在基础 key 末尾追加 :thread:<threadId>
  • Telegram forum topics 会在 group key 中嵌入 :topic:<topicId>

示例:

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

路由规则(如何选择 agent)

对每条入站消息,路由会选择一个 agent

  1. 精确 peer 匹配bindings 中包含 peer.kind + peer.id)。
  2. Guild 匹配(Discord),使用 guildId
  3. Team 匹配(Slack),使用 teamId
  4. Account 匹配(渠道上的 accountId)。
  5. Channel 匹配(该 channel 的任意 account)。
  6. 默认 agentagents.list[].default,否则列表第一项,最后回退到 main)。

命中的 agent 决定使用哪个 workspace 与 session store。

Broadcast groups(运行多个 agents)

Broadcast groups 允许当 Moltbot 本来会回复时(例如 WhatsApp 群里通过 mention/激活 gating 后),针对同一 peer 同时运行多个 agents

配置:

json5
{
  broadcast: {
    strategy: "parallel",
    "120363403215116621@g.us": ["alfred", "baerbel"],
    "+15555550123": ["support", "logger"]
  }
}

参见:Broadcast Groups

配置概览

  • agents.list:具名 agent 定义(workspace、model 等)。
  • bindings:将入站 channels/accounts/peers 映射到 agents。

示例:

json5
{
  agents: {
    list: [
      { id: "support", name: "Support", workspace: "~/clawd-support" }
    ]
  },
  bindings: [
    { match: { channel: "slack", teamId: "T123" }, agentId: "support" },
    { match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" }
  ]
}

Session 存储

session stores 位于 state directory 之下(默认 ~/.openclaw):

  • ~/.openclaw/agents/<agentId>/sessions/sessions.json
  • JSONL transcripts 与 store 放在同一目录

你可以通过 session.store{agentId} 模板覆盖 store 路径。

WebChat 行为

WebChat 会附着到选中的 agent,并默认使用该 agent 的 main session。由于这一点,WebChat 能在一个地方看到该 agent 的跨渠道上下文。

回复上下文(Reply context)

入站回复会包含:

  • ReplyToIdReplyToBodyReplyToSender(若可用)。
  • 引用上下文会以 [Replying to ...] 区块追加到 Body 末尾。

该行为在各渠道间保持一致。