我 fork 了 openclaw 的飞书官方插件,加了 bot 互相 @mention 的功能

10 阅读1分钟

地址:github.com/Maschera96/…

问题背景

飞书平台有一个限制: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 分配任务,然后躺着等着工作完成就好。

效果如下:

image.png

解决方案概述

在同一个 OpenClaw 进程内,利用 bot 注册表 + 出站拦截 + 合成事件的模式,绕过飞书平台的限制:

Bot AAI 生成包含 @Bot B 的回复
        │
        ▼
reply-dispatcher 提取 <at> 标签为 MentionInfo[]
        │
        ▼
sendMessageFeishu 发送消息后,检测 mentions 中是否有 bot
        │
        ▼
triggerBotToBotMessage 构造合成 FeishuMessageEvent
        │
        ▼
直接调用 Bot Bim.message.receive_v1 handler
        │
        ▼
Bot B 像收到真实消息一样处理并回复

我让 AI 写了实施总结,具体实现方式写在这里面了:openclaw-lark 的 Bot@Bot 跨Bot提及功能 - 开发经验分享