OpenClaw 将回复确定性地路由回消息来源频道,模型不选择频道,路由由主机配置控制。
核心概念
- Channel:
telegram、whatsapp、discord、irc、slack、signal、imessage、line等 - AccountId:每个频道的账号实例
- AgentId:独立的工作区 + 会话存储(“大脑”)
- SessionKey:存储上下文和控制并发的桶键
会话键格式
- 私信(DM):
agent:<agentId>:<mainKey>(默认agent:main:main) - 群组:
agent:<agentId>:<channel>:group:<id> - 频道/房间:
agent:<agentId>:<channel>:channel:<id> - 线程:Slack/Discord 追加
:thread:<threadId>,Telegram 论坛话题嵌入:topic:<topicId>
路由规则(优先级从高到低)
- 精确 peer 匹配(
bindings中peer.kind+peer.id) - 父 peer 匹配(线程继承)
- Guild + roles 匹配(Discord)
- Guild 匹配(Discord)
- Team 匹配(Slack)
- Account 匹配(频道账号)
- Channel 匹配(该频道任意账号)
- 默认 agent(
agents.list[].default,否则第一个,回退到main)
当 binding 包含多个匹配字段时,所有字段必须同时匹配。
配置示例
{
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" },
],
}广播群组
让多个 agent 处理同一条消息:
{
broadcast: {
strategy: "parallel",
"120363403215116621@g.us": ["alfred", "baerbel"],
},
}出站目标前缀
channel:<id>:频道user:<id>:私信room:<id>:房间thread:<id>:线程telegram:123/tg:123:带频道前缀的目标
跨频道组合(如 WhatsApp 投递到 telegram:123)会在插件特定目标规范化前失败。
会话存储
~/.openclaw/agents/<agentId>/sessions/sessions.json
可通过 session.store 和 {agentId} 模板覆盖路径。
回复上下文
入站回复包含:
ReplyToId、ReplyToBody、ReplyToSender(如可用)- 引用上下文以
[Replying to ...]块追加到Body
相关链接
- channel-groups — 群组行为
- channel-broadcast-groups — 广播群组