GoForum🌐 V2EX

openclaw 自带的官方飞书插件不支持 bot 之间的 mention 操作,我修复了

alenryuichi · 2026-02-28 15:47 · 0 次点赞 · 0 条回复

开门见山

地址:: https://github.com/Alenryuichi/clawdbot-feishu 实测可以让 main agent 发送 @去调用其他 agent ,组成 multi-agent 开发团队 pr 已提交到官方插件库,还没过

为什么不用非 mention 模式? 因为要控制 bot 之间的主次层级,不能让所有 bot 都响应每条消息,会出现 ping-pong 问题!

并且飞书的 bot 即使在非 mention 模式下,也会忽略其他机器人发的消息!

效果如下:

飞书 multi-agent 效果

背景

我希望在飞书群聊中部署一个多 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 都能看到完整的聊天历史 ✅ 动态队友发现:每条消息都会注入可用队友列表

0 条回复
添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: alenryuichi
发布: 2026-02-28
点赞: 0
回复: 0