飞书机器人消息收发失效 — 完整问题回溯报告@openclaw
问题概述:安装飞书官方插件后造成飞书机器人无响应但是opencalw Web界面会话正常一、什么时间点引起的这个错误时间事件2026-04-09 10:52:47安装官方插件larksuite/openclaw-larkv2026.4.72026-04-09 10:54:11配置变更禁用内置feishu插件启用openclaw-lark触发 Gateway 重启2026-04-09 10:54:43 首次报错[warn] failed to obtain token→AxiosError: Request failed with status code 40010:54:43 ~ 19:16持续报错4 个飞书 WebSocket 连接全部失败机器人完全无响应2026-04-09 19:16:55修复完成4 个 WebSocket 客户端全部ws client ready恢复正常二、引起的错误的原因是什么直接原因官方插件openclaw-lark无法获取tenant_access_token导致飞书 API 调用返回 HTTP 400WebSocket 连接建立失败。错误链appSecret 解析失败 → tenant_access_token 获取失败failed to obtain token → 飞书 API 返回 400 → WebSocket 连接失败 → 机器人无法收发消息三、这个错误是因什么东西引起的引起错误的配置项channels.feishu.appSecret的值是一个secrets provider 引用对象而非明文字符串// ❌ 错误的配置格式安装 openclaw-lark 之前就存在 channels.feishu.appSecret: { source: file, provider: lark-secrets, id: /lark/appSecret }这个 secrets 引用格式是内置feishu插件支持的特性OpenClaw 原生的 secrets 机制但官方openclaw-lark插件不支持此格式。四、为什么会引起这个错误根本原因在官方插件的账号解析逻辑src/core/accounts.jsfunction getLarkAccount(cfg, accountId) { // ... // 关键对 DEFAULT_ACCOUNT_ID只读顶层 base config const accountOverride accountMap requestedId ! DEFAULT_ACCOUNT_ID ? accountMap[requestedId] // 非 default 账号 → 从 accounts 查找 : undefined; // default 账号 → 只用 base config const merged accountOverride ? mergeAccountConfig(base, accountOverride) : { ...base }; // default 账号直接使用 base const configured !!(merged.appId merged.appSecret); // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // 当 appSecret 是对象 {source:file,...} 而非字符串时 // JavaScript 的 !!({}) true但后续 LarkClient 把对象当字符串传给飞书 API // 飞书返回 400 }逻辑缺陷拆解DEFAULT_ACCOUNT_ID账号即XX机器人只读取channels.feishu顶层的appId/appSecret从不查找accounts.default顶层appSecret是一个对象{source: file, provider: lark-secrets, id: /lark/appSecret}!!merged.appSecret对对象求值返回trueJS 中!!{}true所以configured true但后续LarkClient拿到这个对象当 appSecret 用传给飞书/open-apis/auth/v3/tenant_access_token/internal接口飞书无法识别[object Object]这样的 appSecret返回 400同时对于其他 3 个非 default 账号Project-Manager、Full-stack-engineer、Images-AI它们的 appSecret 是明文字符串理论上可以正确解析。但因为官方插件还有其他兼容性问题日志中LarkClient[default]: appId and appSecret are required表明 base config 验证先失败导致整个初始化流程中断所有账号都受影响。五、这个错误出现在什么地方出错位置/home/xxx/.openclaw/extensions/openclaw-lark/src/core/accounts.js函数getLarkAccount()对DEFAULT_ACCOUNT_ID不查找accounts.default只读 base config函数getLarkCredentials()不做类型检查把对象当作 appSecret 传递LarkClient不验证 appSecret 是否为字符串类型日志证据[warn]: failed to obtain token [error]: [ [ws], Request failed with status code 400 ] [info]: [ ws, unable to connect to the server after trying 4 times) ] [secrets]: SECRETS_REF_IGNORED_INACTIVE_SURFACE - channels.feishu.appSecret: no enabled account inherits this top-level Feishu appSecret.六、这个错误出现后造成了什么后果影响范围具体后果XX机器人无法接收/回复飞书消息default 账号完全失效项目经理机器人无法接收/回复飞书消息初始化链中断全栈工程师机器人无法接收/回复飞书消息初始化链中断图片设计专家机器人无法接收/回复飞书消息初始化链中断定时任务每日 07:30 课表天气提醒无法通过飞书推送Agent 间通信无法通过飞书 机器人 进行 agent-to-agent 交互持续时间约 8 小时 22 分钟10:54 ~ 19:16七、最后的解决方案含详细步骤核心思路将顶层channels.feishu的appId/appSecret从 secrets 引用格式改为明文字符串使官方插件能正确解析。详细步骤第一步诊断问题# 查看 Gateway 日志确认错误 journalctl --user -u openclaw-gateway -n 200 --no-pager | grep -i error\|fail\|token\|400 # 发现failed to obtain token → Request failed with status code 400第二步定位根因# 查看当前配置 cat ~/.openclaw/openclaw.json | python3 -c import sys,json; djson.load(sys.stdin); print(d[channels][feishu][appSecret]) # 发现appSecret 是对象 {source: file, provider: lark-secrets, id: /lark/appSecret} 而非字符串 # 查看官方插件的账号解析逻辑 cat ~/.openclaw/extensions/openclaw-lark/src/core/accounts.js # 发现getLarkAccount() 对 DEFAULT_ACCOUNT_ID 只读 base config不查 accounts.default第三步修复配置通过config.patch将顶层appSecret从 secrets 引用改为明文字符串{ channels: { feishu: { appId: xxxxxxxxxxxxxxxxxxxx, appSecret: xxxxxxxxxxxxxxxxxxxxxxxxxxx, dmPolicy: open, allowFrom: [xxxxxxxxxxxxxxxxxxxxxxxxxx] } } }⚠️ 中间有一次失败的尝试移除了顶层 appId/appSecret因为没意识到官方插件对DEFAULT_ACCOUNT_ID的特殊处理逻辑。修正后恢复顶层配置但使用明文而非 secrets 引用。第四步验证修复# 查看 Gateway 日志确认连接成功 journalctl --user -u openclaw-gateway --since 2026-04-09 19:16 --no-pager | grep ws client ready # 输出 # feishu[default]: ws client ready # feishu[project-manager]: ws client ready # feishu[full-stack-engineer]: ws client ready # feishu[images-ai]: ws client ready # 确认无错误 journalctl --user -u openclaw-gateway --since 2026-04-09 19:16 --no-pager | grep -i error\|fail\|400 # 无输出第五步端到端测试在飞书上给xx机器人发送消息确认收到回复。教训与建议安装新插件前检查新插件是否与现有配置格式兼容特别是 secrets 引用格式官方插件openclaw-lark的已知限制不支持appSecret的 secrets provider 引用格式必须使用明文字符串DEFAULT_ACCOUNT_ID账号的配置必须在channels.feishu顶层不能只放在accounts.default中安全建议明文 appSecret 存在配置文件中有一定安全风险建议确保openclaw.json权限为0600当前已满足
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2517944.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!