前文: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.

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐