hermes 多profile飞书群聊互相@如何实现

2026年8月25日 4点热度 0人点赞 0条评论

一、背景

我有三个 bot,公仔(公司公众号运营)、作家(个人公众号运营和博客运营)、赫妹(小红书运营),都跑在同一个 Hermes 里,各自一个 profile,进程、session、数据库全隔离,有一些创作思路和规则,我希望他们能互通消息,传达我的想法,而不需要我每次都重复转发。

结合之前已经跑通的 openclaw agent 飞书群互相 @,已验证飞书端是支持的。建立「自媒体实验室」飞书群,实现此 Hermes profile 互相 @。

二、给 bot 开通权限(群聊接收机器人消息)

Hermes 每个 profile 对应一个飞书 bot。飞书默认不允许 bot 收到群聊里其它 bot 发的消息——这是安全默认值,没加这个权限,allow_bots=mentions 白改了。

进飞书开放平台 → 找到对应的 bot app(每个 profile 一个)→ 权限管理 → 搜 im:message.group_at_msg.include_bot → 申请 readonly → 等管理员审批。

踩坑提示:每个 bot 都要单独开一次,三个 bot 都没开权限前,allow_bots 不生效,群里 bot 互发消息会直接掉进黑洞。

每个 bot 都要单独开一次,三个 bot 都开通后才能形成 bot↔bot 的完整闭环。

三、拿到群聊 id

开工前先把群 id 拿到,后面步骤都要用。

打开 PC 端飞书 → 进群 → 点群名 → 右上角"···" → 群设置 → 页面最下面"会话 ID"旁边的 oc_xxx 串就是 chat_id。

注:手机端飞书(鸿蒙 / iOS / Android)实测没找到稳定的入口,建议优先用 PC 端。

我这次拿到的是 oc_ad**83**85**ce**46**07**2f**24**(自媒体实验室)。

四、安装 lark-cli

把这句话发给要任何一个 profile:

帮我安装飞书 CLI:https://open.feishu.cn/document/no_class/mcp-archive/feishu-cli-installation-guide.md

其它需要使用 lark-cli 的 profile 发送这句:

查看如何使用本机安装的 lark-cli:https://open.larkoffice.com/document/mcp_open_tools/feishu-cli-let-ai-actually-do-your-work-in-feishu.md

profile 会按官方文档自动装完。lark-cli 的功能主要用到两个,查询群聊中 bot 的 open_id、profile 主动发送消息到群聊中。

五、身份识别,拿 bot 的 open_id

每个 bot 在群里都有 open_id,飞书用它识别 sender:

lark-cli api GET /open-apis/im/v1/chats/oc_ad**83**85**ce**46**07**2f**24**/members/bots \
  --params '{"member_id_type":"open_id"}'

查出来我们家三个 bot 的 id:

Bot open_id
公仔 ou_03**63**cd**f0**78**4f**c8**b7**
作家 ou_76**6d**ee**c1**aa**42**1c**51**
赫妹 ou_9d**1b**07**48**26**5b**fd**a5**

收消息时看 sender 字段前缀:user: 是真用户,bot: 是 bot。

六、消息接收,每个 profile 放行 bot 消息

Hermes 的飞书 adapter 默认会把 bot 发的消息挡掉。每个 profile 改一行 + 重启:

hermes config set platforms.feishu.allow_bots "mentions" --force
pkill -KILL -f "profile <profile_name> gateway run"
# setsid nohup 重启 gateway

allow_bots 三个值:none 拒收(默认),mentions bot @ 才收(推荐),all 全收(易刷屏)。

七、消息回复与主动发送消息到群聊,at 标签是核心

发送路径有两条,看你场景:

方式 A:正常回复(不需要 lark-cli)

在群里跟 bot 对话时,bot 自己回复里直接用 at 标签就行。at 标签必须带 user_id 结构化字段,飞书只认这个,裸 @名字 会被当纯文本处理:

<at user_id="ou_76**6d**ee**c1**aa**42**1c**51**">@作家</at> 测试

Hermes 网关会把 <at user_id=...> 转成飞书的 mentions 结构化字段,作家 profile 收到时 mentions 字段能识别。

方式 B:用 lark-cli(主动发消息时才用)

绕过 bot,定时播报、脚本通知、批量发送这种场景,用 lark-cli 直接发:

lark-cli api POST /open-apis/im/v1/messages \
  --params '{"receive_id_type":"chat_id"}' \
  --data '{
    "receive_id": "oc_ad**83**85**ce**46**07**2f**24**",
    "msg_type": "text",
    "content": "{\"text\":\"<at user_id=\\\"ou_76**6d**ee**c1**aa**42**1c**51**\\\">@作家</at> 联调\"}"
  }'

两种方式最终都到同一个 webhook,at 标签的 user_id 才是触发对方识别的关键,跟走哪条路没关系。

示例代码里的 id 是脱敏版。读者复制粘贴后直接运行会返 230001/230002/230006 参数错——oc_xxx 替换为自己的群 chat_id,ou_xxx 替换为 bot 真实 open_id。

八、让 profile 记住使用方法

把三个 bot 的 id、消息判定、at 标签格式、如何 @ 其它 bot 写进 skill(skills/social-media/feishu-bot-chat/),Hermes profile 用久了主动 memory 会满,有用的规则也会被精简或者丢弃。

九、关键细节

  • at 标签是渲染前提,不是触发机制,飞书只认 user_id
  • 每个 profile 独立改一次 allow_bots,缺一不可
  • 重启 gateway 是必选,allow_bots 在 init 时一次性读
  • 三个 bot 都要开通 im:message.group_at_msg.include_bot,不开 allow_bots 不生效

kenny

曾经是一位IT相关行业工作者...

文章评论