openclaw 自带的官方飞书插件不支持 bot 之间的 mention 操作,我修复了
开门见山
地址:: https://github.com/Alenryuichi/clawdbot-feishu 实测可以让 main agent 发送 @去调用其他 agent ,组成 multi-agent 开发团队 pr 已提交到官方插件库,还没过
为什么不用非 mention 模式? 因为要控制 bot 之间的主次层级,不能让所有 bot 都响应每条消息,会出现 ping-pong 问题!
并且飞书的 bot 即使在非 mention 模式下,也会忽略其他机器人发的消息!
效果如下:

背景
我希望在飞书群聊中部署一个多 Agent 团队:
Tech Lead Bot - 负责技术决策和任务分配 iOS Dev Bot - 负责 iOS/Swift 相关问题 Go Dev Bot - 负责后端/Go 相关问题 理想场景:用户提问 → Tech Lead 分析后 @mention 专家 → 专家回复 → 专家之间可以互相讨论
我用了很多方法,都行不通,主要是飞书的限制,如下 : 核心限制:飞书 message_receive_v1 事件 飞书的 Bot 消息接收事件 (im.message.receive_v1) 有一个关键限制:
Bot 发送的消息不会触发其他 Bot 的 message_receive_v1 事件
这意味着:
✅ 用户 @Bot → Bot 收到事件 → Bot 回复 ❌ BotA @BotB → BotB 收不到任何事件 这是飞书平台层面的设计,无法通过配置或 API 绑过。
✅ 最终成功的方案:Bot-to-Bot Relay (合成事件)
原理 既然飞书不会推送 Bot 间的消息事件,我们在应用层”模拟”这个过程:
BotA 回复消息 → 解析消息中的 @mention → 创建”合成事件” → 直接调用 BotB 的消息处理函数
实现架构
┌─────────────────────────────────────────────────────────────────┐
│ OpenClaw Gateway │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Tech Lead │ │ iOS Dev │ │ Go Dev │ │
│ │ Bot │────▶│ Bot │────▶│ Bot │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Bot Registry (bot-relay.ts) │ │
│ │ - 注册所有 Bot 的 OpenID │ │
│ │ - 解析 @mention 标签 │ │
│ │ - 创建合成事件并触发目标 Bot │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Shared History (shared-history.ts) │ │
│ │ - 跨 Bot 共享聊天记录 │ │
│ │ - 持久化到 JSONL 文件 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
核心代码模块
文件 功能
bot-relay.ts Bot 注册、 @mention 解析、合成事件触发
shared-history.ts 跨 Bot 聊天记录共享( JSONL 持久化)
reply-dispatcher.ts Bot 回复后触发 relay
monitor.ts 启动时注册所有 Bot
@mention 格式要求
为了让 relay 系统能解析 @mention ,Bot 必须使用特定格式:
<at user_id="ou_xxxx">Go 助手</at>
成功实现的功能 ✅ Tech Lead → iOS/Go Bot:Tech Lead 可以 @mention 并触发子 Bot ✅ 共享上下文:所有 Bot 都能看到完整的聊天历史 ✅ 动态队友发现:每条消息都会注入可用队友列表