深度

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频道标识符:telegramwhatsappdiscordslack
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 中包含多个匹配字段(peerguildIdteamIdroles)时,所有字段都必须同时匹配才生效。

绑定配置(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.dmScopemain 时,所有 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 多 Gateway 架构完全指南:一台机器运行多个独立 AI 助手实例OpenClaw 多 Gateway(Multi-Gateway)架构完整教程:多实例的隔离优势、同一台机器运行多个 Gateway(不同端口/配置文件/workspace)、systemd 管理多个 Gateway 服务、Nginx 虚拟主机为每个实例分配独立域名、API Key 隔离与成本拆分、单机多实例 vs 多机方案对比,以及 Docker Compose 多容器隔离部署方案。2026/3/26深度OpenClaw Hooks 自动化进阶:消息前后的智能拦截、转换与触发机制OpenClaw Hooks(钩子)自动化系统进阶教程:Hooks 的触发时机(before-send/after-receive/on-tool-call)、用 Hooks 拦截消息并修改内容(自动翻译/过滤/格式化)、基于条件的 Hook 触发(渠道过滤/关键词匹配)、Hook 中调用外部 API(Notion 记录/Bark 通知/监控告警)、exec 工具二次确认 Hook,以及 Hooks 与 SOUL.md 和 Standing Orders 的优先级关系详解。2026/3/26深度OpenClaw 插件开发完全指南:从零构建自定义渠道和工具插件OpenClaw 插件(Plugin)开发完整教程:插件类型(渠道插件/工具插件/Provider插件)、插件的目录结构和 package.json 规范、使用 Plugin SDK 开发自定义消息渠道(实现 onMessage/sendMessage 接口)、开发自定义工具(Tool)的函数签名和参数 Schema、本地插件安装与调试(openclaw plugins install ./local-plugin)、发布到 npm 的规范要求(@openclaw/ 命名空间)、插件的权限声明(capabilities)、社区插件列表(Plugin Bundles)获取,以及常见插件开发错误和调试技巧。2026/3/25深度OpenClaw 安全威胁模型深度解析:MITRE ATLAS 框架下的 AI 助手攻防分析OpenClaw 安全架构深度分析:个人助手信任模型(单用户/单 Gateway 边界)、形式化验证的认证逻辑、基于 MITRE ATLAS 框架的 AI 系统威胁分类(直接提示注入/间接提示注入/工具滥用/数据泄露/会话劫持)、多租户共享 Gateway 的风险与安全边界说明、exec/browser/文件工具的权限最小化配置、频道白名单与沙箱配置对应的威胁缓解措施,以及 `openclaw security audit` 命令的使用方法。2026/3/24