深度

OpenClaw Channel Routing 深度解析:消息路由规则、Session Key 设计与多 Agent 绑定

OpenClaw Channel Routing 深度解析:确定性路由设计原则、Channel/AccountId/AgentId/SessionKey 四个核心概念、DM/群组/频道/线程的 Session Key 格式(含 Telegram 话题和 Discord 线程示例)、8 级路由优先级规则、bindings 配置(精确 Peer/Discord 角色/多账号)、DM 路由固定机制,以及会话存储路径配置。

2026/3/44分钟 阅读ClaudeEagle

OpenClaw 的频道路由(Channel Routing)决定了每条消息如何被分配到正确的 Agent,以及回复如何原路返回到消息来源频道。理解路由机制是构建复杂多 Agent 系统的基础。

核心设计:确定性路由

OpenClaw 的路由是确定性的——不是 AI 决定回复到哪个频道,而是由配置规则精确控制:

回复总是发回消息来源的频道。模型不参与频道选择,路由由主机配置决定。

关键概念

术语说明
Channel频道标识符:telegram、whatsapp、discord、slack 等
AccountId同一频道的多账号实例(当支持时)
AgentId独立的工作区 + 会话存储(「大脑」单元)
SessionKey存储上下文和控制并发的桶键(bucket key)

Session Key 结构

会话键决定了对话上下文的存储和共享方式:

DM(私信)

agent:<agentId>:<mainKey>

默认:agent:main:main(所有 DM 合并到一个主会话)

群组

agent:<agentId>:<channel>:group:<id>

示例:agent:main:whatsapp:group:120363403215116621@g.us

频道/房间

agent:<agentId>:<channel>:channel:<id>

线程

  • Slack/Discord:在基础 key 后追加 :thread:<threadId>
  • Telegram 话题:在群组 key 中嵌入 :topic:<topicId>

完整示例:

agent:main:telegram:group:-1001234567890:topic:42 agent:main:discord:channel:123456:thread:987654 agent:main:slack:channel:C123456:thread:1704067200.123456

路由优先级规则

当一条消息到达时,OpenClaw 按以下优先级选择 Agent(从高到低):

优先级匹配条件
1精确 Peer 匹配(peer.kind + peer.id)
2父级 Peer 匹配(线程继承)
3服务器 + 角色匹配(Discord guildId + roles)
4服务器匹配(Discord guildId)
5工作区匹配(Slack teamId)
6账号匹配(accountId 精确)
7频道匹配(任意账号,accountId: "*")
8默认 Agent(agents.list[].default,或第一个,或 main)

重要:bindings 中包含多个匹配字段(peer、guildId、teamId、roles)时,所有字段都必须同时匹配才生效。

绑定配置(bindings)

基础配置

json
{
  "agents": {
    "list": [
      {
        "id": "support",
        "name": "Support Agent",
        "workspace": "~/.openclaw/workspace-support"
      },
      {
        "id": "main",
        "name": "Main Agent",
        "default": true
      }
    ]
  },
  "bindings": [
    {
      "match": { "channel": "slack", "teamId": "T123456" },
      "agentId": "support"
    },
    {
      "match": {
        "channel": "telegram",
        "peer": { "kind": "group", "id": "-100123456789" }
      },
      "agentId": "support"
    }
  ]
}

Discord 角色绑定

json
{
  "bindings": [
    {
      "match": {
        "channel": "discord",
        "guildId": "1234567890",
        "roles": ["管理员", "超级用户"]
      },
      "agentId": "admin-agent"
    },
    {
      "match": {
        "channel": "discord",
        "guildId": "1234567890"
      },
      "agentId": "general-agent"
    }
  ]
}

多账号路由

json
{
  "bindings": [
    {
      "match": { "channel": "telegram", "accountId": "bot1" },
      "agentId": "sales"
    },
    {
      "match": { "channel": "telegram", "accountId": "bot2" },
      "agentId": "support"
    }
  ]
}

DM 路由固定(dmScope)

当 session.dmScope 为 main 时,所有 DM 共享一个主会话。为防止非主人 DM 覆盖主会话的 lastRoute(回复路径),OpenClaw 会自动推断固定主人:

触发条件(同时满足):

  • allowFrom 中只有一个非通配符条目
  • 该条目可以解析为具体发送者 ID
  • 当前 DM 发送者与固定主人不匹配

在这种情况下,OpenClaw 仍然记录入站会话元数据,但跳过更新主会话 lastRoute,避免回复路径被陌生人 DM 覆盖。

WebChat 行为

WebChat 附加到当前选定的 Agent,默认使用该 Agent 的主会话。这使得 WebChat 可以查看该 Agent 跨频道的完整对话历史——所有频道的上下文都汇聚在同一个视图中。

回复上下文

所有入站回复(reply)消息统一包含:

  • ReplyToId:被回复消息的 ID
  • ReplyToBody:被回复消息的内容
  • ReplyToSender:被回复消息的发送者

被引用内容以 [Replying to ...] 块追加到消息正文末尾,跨所有频道行为一致。

会话存储位置

~/.openclaw/agents/<agentId>/sessions/sessions.json

JSONL 格式的对话记录与 sessions.json 并排存储。可通过 session.store 配置和 {agentId} 模板变量自定义路径:

json
{
  "session": {
    "store": "/data/openclaw/agents/{agentId}/sessions/sessions.json"
  }
}

原文:Channel Routing - OpenClaw | 来源:OpenClaw 官方文档

相关文章推荐

深度OpenClaw 多渠道路由完全指南:同时管理 Telegram、WhatsApp、Slack 的统一 AI 助手OpenClaw 多渠道路由(Channel Routing)完整教程:如何在一个 OpenClaw 实例上同时运行 Telegram、WhatsApp、Slack 等多个渠道、每个渠道使用独立 Agent(SOUL.md)的路由配置、基于渠道类型和群组 ID 的路由规则、同一消息跨渠道广播(Broadcast Groups)、根据渠道身份动态调整 AI 人格与语言风格,以及多渠道管理的最佳实践(避免消息混淆/保持上下文独立/渠道专属配置)。2026/3/23深度OpenClaw 广播组(Broadcast Groups)完全指南:多 Agent 并行处理、代码审查团队与多语言支持OpenClaw Broadcast Groups(广播组)完全指南:专业化 Agent 团队(代码审查/安全审计/文档生成)、多语言支持、质量保障工作流、任务自动化四大场景,parallel/sequential 两种处理策略配置,会话隔离原理,以及最小权限、描述性命名、性能监控等最佳实践。2026/3/4深度OpenClaw Session ID 生命周期规则:什么时候会开新会话,什么时候延续旧会话详解 OpenClaw sessionKey 与 sessionId 的区别,以及触发新会话的四种情形:手动重置、每日重置、空闲过期、父级分叉保护,附 Session Store 字段说明和 Cron 会话保留策略。2026/8/13深度OpenClaw 计费故障处理机制:余额不足时系统怎么办,Backoff 退避策略详解详解 OpenClaw 账单/额度类故障处理机制:与普通限流超时不同,计费故障采用更长的指数退避(5小时起步翻倍至24小时封顶)并标记禁用,附三类故障处理力度对比表和多账号部署实战建议。2026/8/13深度OpenClaw Model Failover 完全解析:Auth Profile 怎么轮换,为什么你的 OAuth 账号会"莫名其妙"被切走详解 OpenClaw Model Failover 机制:Auth Profile 轮换顺序、Session Stickiness 会话粘性、指数退避冷却规则,解释多账号场景下 OAuth 与 API Key 切换的常见困惑及固定账号的配置方法。2026/8/13深度OpenClaw Context Engine 完全指南:四个生命周期钩子如何决定模型看到什么详解 OpenClaw 可插拔上下文引擎架构:Ingest/Assemble/Compact/After turn 四个生命周期钩子的工作原理,systemPromptAddition 动态注入机制,以及如何安装和配置自定义 Context Engine 插件。2026/8/12