郑工长

OpenClaw 飞书机器人群聊,@机器人没反应?一招彻底解决!

发布于 2026年3月7日 | 分类: AI随心分享

OpenClaw 飞书机器人群聊,@机器人没反应?一招彻底解决!

你好,我是郑工长。

问题现象:最近在给朋友部署OpenClaw时,遇到一个奇怪的问题,飞书私聊正常,但群聊@机器人没反应,日志显示 "did not mention bot"

如果你也在使用 OpenClaw 搭建飞书机器人,遇到了群聊@mention 失效的问题,这篇文章就是为你准备的。


🔍 问题现象

症状

  • ✅ 飞书私聊机器人:正常响应
  • ❌ 飞书群聊@机器人:无反应
  • 📋 日志显示:feishu[default]: message in group xxx did not mention bot

我的环境

  • OpenClaw 版本:2026.3.2
  • 飞书应用:3 个机器人(郑小猪、郑小编、郑小研)
  • 连接模式:WebSocket 长连接

🐛 问题根源

经过详细排查,问题出在 OpenClaw Feishu 插件的机器人名称匹配逻辑上。

代码分析

OpenClaw 在检测群聊@mention 时,会执行以下检查(文件:extensions/feishu/src/bot.ts):

function checkBotMentioned(event: FeishuMessageEvent, botOpenId?: string, botName?: string): boolean {
  // ...
  if (mentions.length > 0) {
    return mentions.some((m) => {
      if (m.id.open_id !== botOpenId) return false;
      // ⚠️ 问题出在这里:要求名称完全匹配
      if (botName && m.name && m.name !== botName) return false;
      return true;
    });
  }
  // ...
}

为什么会失败?

配置项 说明
openclaw.json 中的 botName 郑小猪 用户配置
飞书实际显示名称 郑小猪 - 全能助手 飞书开发者后台显示
匹配结果 ❌ 失败 郑小猪 !== 郑小猪 - 全能助手

根本原因:飞书机器人的显示名称可能被修改过(如在开发者后台添加了后缀),但 OpenClaw 配置文件中的 botName 没有同步更新,导致字符串完全匹配失败


✅ 解决方案(推荐)

方案一:删除 botName 配置 ⭐(最简单)

原理botName 是可选配置,删除后 OpenClaw 只通过 open_id 识别机器人,跳过名称匹配检查。

步骤

  1. 编辑配置文件:
vim ~/.openclaw/openclaw.json
  1. 找到 channels.feishu.accounts 部分,删除所有 botName 字段:
{
  "channels": {
    "feishu": {
      "accounts": {
        "default": {
          "appId": "cli_xxxxxxxxxxxxx",
          "appSecret": "xxxxxxxxxxxxx"
          // botName 字段删除
        },
        "xiaobian": {
          "appId": "cli_xxxxxxxxxxxxx",
          "appSecret": "xxxxxxxxxxxxx"
          // botName 字段删除
        }
      }
    }
  }
}
  1. 重启 Gateway:
openclaw gateway restart
  1. 测试:在飞书群聊中@机器人,应该正常响应了。

优点

  • ✅ 简单,只需修改配置文件
  • ✅ 持久有效,不受 OpenClaw 升级影响
  • ✅ 不需要修改源码

缺点

  • ⚠️ 无(经过测试,删除 botName 不影响任何功能)

方案二:修改源码(备选)

如果方案一无效,可以尝试修改源码。

步骤

  1. 找到 Feishu 插件源码:
vim /Users/zhenghong/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/extensions/feishu/src/bot.ts
  1. 修改第 469 行左右的名称匹配逻辑:
// 原代码(有问题)
if (botName && m.name && m.name !== botName) return false;

// 修改为(使用包含匹配)
if (botName && m.name && !m.name.includes(botName)) return false;
  1. 重启 Gateway:
openclaw gateway restart

注意:此修改会在 OpenClaw 升级后被覆盖,需要重新应用。

优点

  • ✅ 保留 botName 配置
  • ✅ 更宽松的匹配逻辑

缺点

  • ⚠️ 需要修改源码
  • ⚠️ OpenClaw 升级后会失效
  • ⚠️ TypeScript 可能需要编译

📊 两种方案对比

对比项 方案一(删除 botName) 方案二(修改源码)
难度 ⭐ 简单 ⭐⭐⭐ 中等
持久性 ✅ 永久有效 ⚠️ 升级后失效
影响范围 仅配置文件 源码文件
推荐度 ⭐⭐⭐⭐⭐ ⭐⭐⭐

🔧 验证修复

修复后,查看日志确认:

# 查看最新日志
tail -f /tmp/openclaw/openclaw-$(date +%Y-%m-%d).log | grep feishu

成功的标志

feishu[default]: received message from ou_xxx in oc_xxx (group)
feishu[default]: dispatching to agent (session=agent:main:feishu:group:oc_xxx)

失败的表现

feishu[default]: message in group oc_xxx did not mention bot

💡 为什么之前正常,突然就不行了?

可能的原因:

  1. 飞书机器人名称被修改

    • 在飞书开发者后台修改了应用名称
    • 添加了后缀(如"- 全能助手")
  2. OpenClaw 版本更新

    • 新版本引入了更严格的名称匹配检查
    • 之前的宽松匹配被修复为严格匹配
  3. 飞书 WebSocket 事件数据变化

    • 飞书侧更新了事件数据结构
    • mentions 数组中的名称字段发生变化

📝 总结

问题:飞书群聊@机器人无反应,日志显示 "did not mention bot"

原因:OpenClaw 配置中的 botName 与飞书实际显示名称不匹配

解决:删除 openclaw.json 中所有飞书账户的 botName 字段

验证:重启 Gateway 后,在群聊中@机器人测试


🔗 相关资源


:本文基于实际排查过程整理,已验证有效。如果你也遇到类似问题,欢迎尝试并反馈。