背景
用 OpenClaw 配置飞书机器人时,遇到了群消息无响应和 Gateway 频繁断开的问题。经过排查,已找到原因并解决。
问题现象
飞书消息不回复
在飞书群里 @ 了机器人,完全没反应。状态显示连接正常,但无响应。
Gateway 频繁断开
每次改完配置跑 openclaw gateway restart,或者根本什么都没干,Gateway 说断就断。再想启动就报错,必须跑一遍 openclaw doctor --fix 重新安装才能用。
原因分析
飞书机器人 ID 搞错了
翻日志看到这么一句:
receive events or callbacks through persistent connection only available in self-build & Feishu app
查了一下,原来一开始配的那个 App ID(yyyyyyyyyyyyyy)是快捷版/小程序类型的飞书应用,这类不支持 WebSocket 长连接收消息。找运维要了正确的机器人 ID(xxxxxxxxxxxxxxxx),换上去果然就好了。
多机器人配置一直失败
想给运营 agent(yunying)单独配一个飞书机器人,试了很多次一直报"unknown channel id"。后来翻 OpenClaw 官方文档才发现,飞书多账号不是那么配的,得用 accounts 字段。
正确姿势:
{"channels":{"feishu":{"defaultAccount":"main","accounts":{"main":{"appId":"xxxxxxxxxxxxxxxx","appSecret":"abcdefghijklmnopqrstuvwxyz"},"yunying":{"appId":"yyyyyyyyyyyyyy","appSecret":"1234567890abcdef"}}}}}
然后 bindings 这么配:
{"bindings":[{"type":"route","agentId":"main","match":{"channel":"feishu","accountId":"main"}},{"type":"route","agentId":"yunying","match":{"channel":"feishu","accountId":"yunying"}}]}
Gateway 断开的原因
日志显示 Gateway 收到 SIGTERM 后正常关闭了,但 LaunchAgent 没自动重新加载。
后来才搞明白——我之前一直是跑 openclaw gateway 在前台启动,而不是用 LaunchAgent。虽然 LaunchAgent 配了 KeepAlive: true,但前台进程不受它管,断开后就死了,不会自动起来。
解决方案
飞书多账号配置
改完 ~/.openclaw/openclaw.json 的配置,重启 Gateway:
openclaw gateway restart
两个机器人都连上了。日志能看出来:
feishu[yunying]: WebSocket client started feishu[main]: WebSocket client started
Gateway 自动重启
简单说就是别跑 openclaw gateway,改用 LaunchAgent:
以后 Gateway 就会受 LaunchAgent 管理,断开会自动重启,不用每次手动搞了。
总结
- 飞书多账号要用
accounts 字段配,别想着开多个渠道
- Gateway 一定要用
openclaw gateway start 启动,别直接跑 openclaw gateway