频道和路由
OpenClaw 会将回复 路由回消息来源的频道。模型不会选择频道;路由是确定性的,并由主机配置控制。关键术语
- Channel:
whatsapp、telegram、discord、slack、signal、imessage、webchat。 - AccountId:按频道区分的账号实例(若支持)。
- AgentId:隔离的 workspace + 会话存储(“大脑”)。
- SessionKey:用于存储上下文并控制并发的桶键。
Session key 形态(示例)
私聊会折叠到该 agent 的 main 会话:agent:<agentId>:<mainKey>(默认:agent:main:main)
- 群组:
agent:<agentId>:<channel>:group:<id> - 频道/房间:
agent:<agentId>:<channel>:channel:<id>
- Slack/Discord 线程会在基础 key 后追加
:thread:<threadId>。 - Telegram forum 话题在群组 key 中包含
:topic:<topicId>。
agent:main:telegram:group:-1001234567890:topic:42agent:main:discord:channel:123456:thread:987654
路由规则(如何选择 agent)
路由会为每条入站消息选择 一个 agent:- 精确 peer 匹配(
bindings中的peer.kind+peer.id)。 - Guild 匹配(Discord)通过
guildId。 - Team 匹配(Slack)通过
teamId。 - Account 匹配(频道上的
accountId)。 - Channel 匹配(该频道的任意账号)。
- 默认 agent(
agents.list[].default,否则列表第一个,回退到main)。
Broadcast groups(运行多个 agents)
Broadcast groups 允许在 OpenClaw 通常会回复的场景下,为同一 peer 运行 多个 agents (例如:在 WhatsApp 群组中,经过 mention/activation gating 后)。 配置:配置概览
agents.list:具名 agent 定义(workspace、model 等)。bindings:将入站频道/账号/peer 映射到 agent。
会话存储
会话存储位于状态目录下(默认~/.openclaw):
~/.openclaw/agents/<agentId>/sessions/sessions.json- JSONL 转录与其并存
session.store 和 {agentId} 模板覆盖存储路径。
WebChat 行为
WebChat 绑定到 选中的 agent,默认使用该 agent 的 main 会话。因为如此, WebChat 可以在一个位置查看该 agent 跨频道的上下文。回复上下文
入站回复包含:- 可用时附带
ReplyToId、ReplyToBody、ReplyToSender。 - 引用上下文会作为
[Replying to ...]块追加到Body。