乐于分享
好东西不私藏

OpenClaw 渠道路由完全指南:如何让消息精准送达每个 AI 智能体

OpenClaw 渠道路由完全指南:如何让消息精准送达每个 AI 智能体

当你在一个 WhatsApp 群里@机器人,它怎么知道该用哪个"大脑"来回复你?答案就是——渠道路由。

想象一下,你经营着一个跨境电商业务,有客服咨询、订单查询、售后支持三种不同的 AI 助手。客户在 WhatsApp 上发消息时,系统如何自动判断该由哪个 AI 来响应?

这就是 OpenClaw 渠道路由要解决的核心问题。

一、渠道路由的本质

渠道路由 = 消息分发规则引擎

OpenClaw 将回复路由回消息来源的渠道。模型不会选择渠道;路由是确定性的,由主机配置控制。

简单来说:

  • • 用户从 WhatsApp 发消息 → 系统根据规则选择 AI 智能体 → AI 处理 → 回复发回 WhatsApp
  • • 用户从 Telegram 发消息 → 系统根据规则选择 AI 智能体 → AI 处理 → 回复发回 Telegram

整个过程完全自动化,无需人工干预。

二、关键术语解析

在深入配置之前,先搞清楚几个核心概念:

1. 渠道(Channel)

渠道就是消息的载体平台,OpenClaw 支持:

  • whatsapp - WhatsApp
  • telegram - Telegram
  • discord - Discord
  • slack - Slack
  • signal - Signal
  • imessage - iMessage
  • webchat - 网页聊天

2. AccountId(账户 ID)

每个渠道的账户实例。比如你有两个 WhatsApp 账号,一个用于客服、一个用于营销,它们就是两个不同的 AccountId。

3. AgentId(智能体 ID)

隔离的工作区 + 会话存储,可以理解为 AI 的"大脑"。每个 AgentId 有独立的记忆、配置和工作空间。

4. SessionKey(会话键)

用于存储上下文和控制并发的桶键。它决定了消息的对话历史存储在哪里。

三、会话键格式详解

会话键是渠道路由的核心,它决定了消息如何被归类和处理。

私信会话

私信会折叠到智能体的会话:

agent:<agentId>:<mainKey>

默认情况下是 agent:main:main,也就是说所有私信都会汇聚到主会话中。

群组和渠道会话

群组和渠道按渠道隔离:

# 群组
agent:<agentId>:<channel>:group:<id>

# 渠道/房间
agent:<agentId>:<channel>:channel:<id>

线程会话

对于支持线程的平台(如 Slack、Discord),线程会在基础键后追加:

# Slack/Discord 线程
agent:<agentId>:<channel>:channel:<id>:thread:<threadId>

# Telegram 论坛主题
agent:<agentId>:<channel>:group:<id>:topic:<topicId>

实际示例

# Telegram 群组中的主题讨论
agent:main:telegram:group:-1001234567890:topic:42

# Discord 频道中的线程回复
agent:main:discord:channel:123456:thread:987654

理解了会话键,你就理解了 OpenClaw 如何组织对话上下文。

四、路由规则:如何选择智能体

当一条消息进来时,OpenClaw 按照以下优先级选择智能体:

匹配优先级(从高到低)

  1. 1. 精确对端匹配 - bindings 中的 peer.kind + peer.id
  2. 2. Guild 匹配 - Discord 服务器通过 guildId
  3. 3. Team 匹配 - Slack 工作区通过 teamId
  4. 4. 账户匹配 - 渠道上的 accountId
  5. 5. 渠道匹配 - 该渠道上的任意账户
  6. 6. 默认智能体 - agents.list[].default,否则取列表第一项,兜底为 main

匹配到的智能体决定使用哪个工作区和会话存储。

配置示例

{
  agents: {
    list: [
      { id: "support", name: "Support", workspace: "~/.openclaw/workspace-support" }
    ],
  },
  bindings: [
    // 匹配特定 Slack 团队
    { match: { channel: "slack", teamId: "T123" }, agentId: "support" },
    // 匹配特定 Telegram 群组
    { match: { channel: "telegram", peer: { kind: "group", id: "-100123" } }, agentId: "support" },
  ]
}

五、广播组:一个消息,多个智能体

广播组是 OpenClaw 的高级功能,允许你为同一对端运行多个智能体

使用场景

假设你有一个 VIP 客户群,希望同时:

  • • 一个 AI 负责客服响应
  • • 一个 AI 负责记录对话日志
  • • 一个 AI 负责分析客户情绪

广播组可以让这三个 AI 同时接收消息并各自处理。

配置方式

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

这意味着:

  • • WhatsApp 群组 120363403215116621@g.us 的消息会同时发送给 alfredbaerbel 两个智能体
  • • 电话号码 +15555550123 的消息会同时发送给 supportlogger

触发条件

广播组在 OpenClaw 正常回复时触发,例如在 WhatsApp 群组中,经过提及/激活门控之后。

六、会话存储机制

会话存储位于状态目录下(默认 ~/.openclaw):

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

JSONL 记录文件与存储位于同一目录。

你可以通过 session.store{agentId} 模板来覆盖存储路径,实现自定义存储策略。

七、WebChat 行为

WebChat 连接到所选智能体,并默认使用该智能体的主会话。

这意味着:WebChat 让你可以在一个地方查看该智能体的跨渠道上下文

举个例子:

  • • 你的 support 智能体同时处理 WhatsApp 和 Telegram 的客服消息
  • • 通过 WebChat,你可以在一个界面看到所有渠道的对话历史
  • • 无需切换平台,统一管理所有客服对话

八、回复上下文处理

当用户回复某条消息时,OpenClaw 会自动提取上下文信息:

包含的信息

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

上下文格式

引用的上下文会以 [Replying to ...] 块的形式追加到 Body 中,让 AI 理解对话的上下文关系。

九、实战配置:搭建多智能体系统

场景描述

假设你要为一个 SaaS 公司搭建客服系统:

  • • 售前咨询 → sales 智能体
  • • 技术支持 → tech 智能体
  • • 账单问题 → billing 智能体

完整配置

{
  agents: {
    list: [
      { 
        id: "sales", 
        name: "售前顾问", 
        workspace: "~/.openclaw/workspace-sales",
        default: false
      },
      { 
        id: "tech", 
        name: "技术支持", 
        workspace: "~/.openclaw/workspace-tech",
        default: false
      },
      { 
        id: "billing", 
        name: "账单助手", 
        workspace: "~/.openclaw/workspace-billing",
        default: false
      },
      { 
        id: "main", 
        name: "通用助手", 
        workspace: "~/.openclaw/workspace-main",
        default: true
      }
    ],
  },
  bindings: [
    // WhatsApp 售前群
    { 
      match: { 
        channel: "whatsapp", 
        peer: { kind: "group", id: "120363403215116621@g.us" } 
      }, 
      agentId: "sales" 
    },
    // Telegram 技术支持群
    { 
      match: { 
        channel: "telegram", 
        peer: { kind: "group", id: "-100123456789" } 
      }, 
      agentId: "tech" 
    },
    // Slack 账单频道
    { 
      match: { 
        channel: "slack", 
        channelId: "C123456789" 
      }, 
      agentId: "billing" 
    }
  ],
  broadcast: {
    // VIP 客户群,三个智能体同时响应
    "vip-group-id@g.us": ["sales", "tech", "billing"]
  }
}

十、常见问题与排查

问题 1:消息没有路由到正确的智能体

检查清单:

  1. 1. 确认 bindings 配置中的 channel 名称正确
  2. 2. 确认 peer.idgroupId 与实际一致
  3. 3. 检查匹配优先级,是否有更高优先级的规则覆盖了你的配置

问题 2:会话上下文丢失

可能原因:

  1. 1. SessionKey 格式变化导致历史对话无法关联
  2. 2. 存储路径配置错误
  3. 3. 智能体 ID 变更

问题 3:广播组不工作

排查步骤:

  1. 1. 确认 broadcast.strategy 设置为 "parallel"
  2. 2. 确认目标智能体都已正确配置并运行
  3. 3. 检查触发条件是否满足(如提及/激活门控)

总结

OpenClaw 的渠道路由系统是一个强大而灵活的消息分发引擎:

  • 确定性路由 - 规则驱动,行为可预测
  • 多智能体支持 - 通过广播组实现复杂场景
  • 跨渠道上下文 - WebChat 统一管理
  • 灵活的会话存储 - 支持自定义路径

理解并掌握渠道路由,你就能搭建出专业级的多智能体消息处理系统,让每个 AI 都在正确的位置发挥最大的价值。


下一步:

  • • 查看广播组详细文档
  • • 阅读渠道故障排除指南
  • • 开始配置你的第一个渠道路由规则