OpenClaw:Gateway+Node定期健康检查无法主动给飞书发消息解决办法
OpenClaw Gateway+Node 健康检查方案:通过定时任务检查连接状态,断开时自动重建 SSH 隧道并发飞书通知。遇到四个问题:1)脚本只检查 TCP 端口导致误报;2)SSH 需手动输密码,通过密钥对解决;3)Node 挂了无法通知,需 Gateway 主动检查;4)飞书机器人不能主动发消息,通过加入群聊解决。
前文:2台OpenClaw+多台电脑基于Tailscale连接在一起工作(上),我已经建立了一个Gateway+Node的组合,但是Node经常掉线,就做了一个健康检查。
1、定期检查Gateway和Node的状态
2、如果状态正常,就不处理
3、如果Node和Gateway断开,先尝试恢复建立连接,
4、如果建立连接成功/失败,就主动给飞书发消息,告知结果
5、如果一切正常,就不处理
这是美好的想象
主要遇到如下问题:
虚假的完成
在Gateway+Node正常连接的情况,让OpenClaw写了个脚本,定期在Node所在机器上执行。脚本运行了,也检查了Gateway的状态。结果当实际已经断开了,监控还在提示Gateway正常连接。
让OpenClaw继续改脚本。
需要手动输入密码
在Tailscale网络下,因为我的方案是gateway是local模式,只能使用127.0.0.1/localhost地址访问,必须要先建立ssh隧道,再执行openclaw node xxx命令启动Node节点。
建立隧道的时候还要手动输入密码,无法做到自动化。
解决方案是通过ssh密钥对建立信任关系,让client直接连上server端。这个过程跟通过ssh访问github是类似的。我全程让OpenClaw执行,我确认即可。
Node上执行还不够,得再在Gateway上执行健康检查
假设Node已经挂了的情况,其实没法和Gateway通信,也无法告知健康检查的结果。所以还需要加上在Gateway上检查,这样其实更全面。在Node已经断开的情况下,如果Node的也没法恢复,只有Gateway主动检查才行。
Agent无法主动发送飞书消息
当Gateway已经识别到Node掉线的时候,想让它主动通过飞书发条消息给我。但是始终做不到。总结原因是:当飞书的模式是channels.feishu.accounts.default.dmPolicy=pairing,用户必须先发消息,机器人只能回复,不能主动发起。
看后台会发现类似下面的错误日志,
info [error]: [
[
{
message: 'Request failed with status code 400',
config: [Object],
request: [Object],
response: [Object]
},
{
code: 230002,
msg: 'Bot/User can NOT be out of the chat.',
error: [Object],
log_id: 'xxx',
troubleshooter: '排查建议查看(Troubleshooting suggestions): https://open.feishu.cn/search?xxx'
}
]
]
我的解决方案是加入到群聊,再让OpenClaw修改健康检查任务的配置。
OpenClaw自测通过。
飞书也收到了对应的消息。
关键词:OpenClaw, 飞书,feishu,Bot/User can NOT be out of the chat.
更多推荐




所有评论(0)