问题背景
飞书平台有一个限制:bot 无法看到其他 bot 发送的消息。因此在群聊中,当 Bot A 发送包含 @Bot B 的消息时,Feishu 不会向 Bot B 推送 im.message.receive_v1 事件,Bot B 也就无法感知自己被 @。
但是我考虑到既然接受消息和发送消息都要经过飞书插件,那中间肯定可以做点文章!
所以我在出站部分做了拦截,解析到@mention事件就创建一个合成事件,然后直接手动触发websocket的im.message.receive_v1事件,来让 Bot B 可以收到该消息。
这样就可以实现一个 CEO Agent 指挥其他 Agent 专员干活了,你只需要把你的需求提给 CEO Agent ,让他给其他 Agent 分配任务,然后躺着等着工作完成就好。
效果如下:
解决方案概述
在同一个 OpenClaw 进程内,利用 bot 注册表 + 出站拦截 + 合成事件的模式,绕过飞书平台的限制:
Bot A 的 AI 生成包含 @Bot B 的回复
│
▼
reply-dispatcher 提取 <at> 标签为 MentionInfo[]
│
▼
sendMessageFeishu 发送消息后,检测 mentions 中是否有 bot
│
▼
triggerBotToBotMessage 构造合成 FeishuMessageEvent
│
▼
直接调用 Bot B 的 im.message.receive_v1 handler
│
▼
Bot B 像收到真实消息一样处理并回复
我让 AI 写了实施总结,具体实现方式写在这里面了:openclaw-lark 的 Bot@Bot 跨Bot提及功能 - 开发经验分享