OpenClaw优化飞书API 额度已耗尽问题

1,779 阅读6分钟

【官方版本26.3.2已有部分优化】 1、已补充到优化fixmd目录中;

已写入优化日志:

  • 2026-03-05-openclaw-feishu-quota-and-daemon-hardening.md

gateway.channelHealthCheckMinutes=5 的官方配置说明如下。

配置位置

  • 当前生效配置文件:~/.openclaw/openclaw.json(你机器上已是这份)
  • 你当前值在:openclaw.json:147

官方识别依据(代码)

  • Schema 定义(必须是 int >= 0): daemon-cli.js:12004
  • 启动时读取并换算为毫秒: gateway-cli-CuFEx2ht.js:22492 gateway-cli-CuFEx2ht.js:22495
  • 热更新时同样按该键重建 health monitor: gateway-cli-CuFEx2ht.js:16622 gateway-cli-CuFEx2ht.js:16623
  • 官方描述文案: redact-snapshot-DZnprkgC.js:146

怎么配置

  1. CLI 设置(推荐)

openclaw config set gateway.channelHealthCheckMinutes 5 openclaw config get gateway.channelHealthCheckMinutes openclaw config validate

  1. 直接改 JSON
  • 在 gateway 下增加/修改:

"channelHealthCheckMinutes": 5

  1. 应用配置
  • 通常会热加载生效。
  • 为了稳妥,建议执行:

systemctl --user restart openclaw-gateway.service

参数语义

  • 0:关闭该 channel health monitor(代码里会置为 null)。
  • 0:按“分钟”执行,实际间隔是 minutes * 60000。

  • 未配置:默认按 5 分钟运行(代码 minutes ?? 5)。

补充

  • 这个键控制的是“通道健康探测/状态刷新周期”,不是飞书 token 刷新周期。
  • 你当前版本 2026.3.2 的 Feishu probe 还有内置 10 分钟缓存(已在日志里记录)。

highlight: an-old-hope

一、问题描述:

飞书每日50000次调用额度用完导致OpenClaw长连接心跳等消息失败

1、飞书开发者小助手提示:

image.png

2、飞书机器人日志提示:

image.png

二、业务分析逻辑

(root@TengxunOS:openclaw --version:2026.2.23)

原理:当前OpenClaw无配置项,硬编码实现,通过codex实现软编码配置项优化

关注后续新版本覆盖当前功能

处理逻辑复述如下(from codex):

1. 先确认你加的两个键是否生效

  • health_check_interval、token_refresh_interval 只在你的配置里出现,官方代码没有读取。
  • 位置:/root/.openclaw/openclaw.json:111、/root/.openclaw/openclaw.json:112

2. 定位 GET /open-apis/bot/v3/info 的真实触发链

  • Feishu 探测接口在:/root/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/extensions/feishu/src/probe.ts:18
  • 原来是网关里固定每 60 秒触发健康探测(带 probe=true),间接触发该 GET。

3. 把“固定 60 秒”改成“配置项可控”

  • 在网关 dist 里新增读取函数:按 gateway.channelHealthCheckMinutes(分钟)转换为毫秒。
  • 修改点(主 bundle):
    • /root/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/dist/gateway-cli-DoWNkdBc.js:6711
    • /root/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/dist/gateway-cli-DoWNkdBc.js:7050
    • /root/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/dist/gateway-cli-DoWNkdBc.js:11296
  • 同步改了备用 bundle:/root/.nvm/versions/node/v22.22.0/lib/node_modules/openclaw/dist/gateway-cli-BlDZ_8TO.js

4. 在配置里设为 5 分钟

  • 增加:"channelHealthCheckMinutes": 5
  • 位置:/root/.openclaw/openclaw.json:131

5. 重启并验证

  • 已重启:openclaw-gateway.service

  • 新进程正常运行。

  • 日志出现 started (interval: 300s, grace: 60s),说明已按 5 分钟生效。

image.png

补充:POST /open-apis/auth/v3/tenant_access_token/internal 仍是按 token 过期/缓存刷新,不是固定每分钟轮询。

HuoshanECS:OpenClaw26.2.26,优化新版本心跳机制

26.3.1

定位结果如下:

  1. 运行时实际加载的是内置 Feishu 插件(bundled),来源是 /usr/lib/node_modules/openclaw/extensions/feishu/index.ts;~/.openclaw/disabled-extensions/ feishu.incompatible-2026.2.19 这份并未生效。
  2. GET /open-apis/bot/v3/info 的直接调用在 probe.ts:18。

调用链(会触发这个 API):

  1. 状态探测入口:channel.ts:326 -> probeFeishu。
  2. Feishu 通道启动时会先取 bot open_id:monitor.ts:75, monitor.ts:164。
  3. Onboarding 页状态/连通性测试也会调用:onboarding.ts:168, onboarding.ts:176, onboarding.ts:269。
  4. Gateway 后台定时器每 60 秒刷新一次健康快照并强制 probe=true:gateway-cli-BSPSAjqx.js:6797, gateway-cli-BSPSAjqx.js:7130, gateway-cli-BSPSAjqx.js:7102。这条链 路最终会走到 plugin.status.probeAccount,也就会打到 /open-apis/bot/v3/info。

关于“通过配置项控制调用间隔”:

  1. 这个 API 的后台周期当前是写死的 60000ms,不是 Feishu 配置项可控。
  2. 现有 gateway.channelHealthCheckMinutes 只控制“通道重启健康监控器”周期,不控制上述 probe 定时:gateway-cli-BSPSAjqx.js:21296, gateway-cli-BSPSAjqx.js:1540, schema 在 auth-profiles-6WJHPoy1.js:11790。
  3. 当前 channels.feishu 下自定义的 health_check_interval/token_refresh_interval/long_connection 不在 Feishu schema 内,不会驱动该调用间隔:channel.ts:79, / root/.openclaw/openclaw.json:71。

计划下一步直接改新配置键(例如 gateway.healthRefreshIntervalMs 或 channels.feishu.probeMinIntervalMs)并落到实际定时/节流逻辑里,出优化补丁。

补丁已完成,新增并接入了可配置键:channels.feishu.probeMinIntervalMs(单位毫秒),用于控制 /open-apis/bot/v3/info 的最小调用间隔。

实现结果

  1. 在 Feishu 插件里新增配置字段并支持账号级覆盖(accounts..probeMinIntervalMs)。
  2. 在 probeFeishu 增加了内存节流缓存:同一账号在间隔内复用上次 probe 结果,不再重复发起 GET /open-apis/bot/v3/info。
  3. 已把你本机配置改为 600000(10 分钟)。

关键改动文件

  1. 新增 probe 间隔字段类型 client.ts:27
  2. 新增 schema 字段(顶层+账号继承) config-schema.ts:115
  3. 新增 channel JSON schema 展示字段(顶层+账号) channel.ts:96
  4. 解析账号时带出 probeMinIntervalMs types.ts:17 accounts.ts:123
  5. 实际节流逻辑 probe.ts:1
  6. 本机配置已落地 openclaw.json:66

本机验证

  1. openclaw config get channels.feishu.probeMinIntervalMs 返回 600000,配置已生效可读。
  2. 运行时加载的是 bundled feishu 插件(即上述改动路径)。
  3. 尝试做 gateway 调用级联验证时,环境出现 uv_interface_addresses 系统错误(和本次改动无关),所以没有做在线探测链路实测。

使用方式

  1. 调整间隔:改 channels.feishu.probeMinIntervalMs。
  2. 设为 0:关闭节流(保持原行为)。
  3. 支持账号级:channels.feishu.accounts..probeMinIntervalMs。

下一步:重启 OpenClaw gateway 进程,让当前运行实例加载新代码与新配置。

已重启完成。

  1. 执行:openclaw daemon restart

  2. 结果:Restarted systemd service: openclaw-gateway.service

  3. systemctl --user status openclaw-gateway.service 显示:

  • Active: active (running),启动时间为 2026-03-01 12:44:28 CST
  • Feishu 已重新初始化并连上:bot open_id resolved ...、WebSocket client started、ws client ready

补充解决这个报错的处理过程:openclaw daemon status 在这个环境里会报 uv_interface_addresses 系统错误,但不影响实际服务已启动并运行。

• 原因已定位清楚:

  1. 本机环境里,os.networkInterfaces() 在沙箱权限下会抛 ERR_SYSTEM_ERROR: uv_interface_addresses ... Unknown system error 1。
  2. OpenClaw 在加载 gateway 子模块时会立即调用网卡探测(模块初始化阶段),没有兜底 try/catch,导致 openclaw daemon status 这类命令直接失败。
  3. 证据:同一机器上提权执行时 openclaw daemon status 正常;非提权会报这个错。说明是环境权限限制 + 代码健壮性不足的组合问题,不是你的 Feishu 配置问题。

关键调用点:

  • /usr/lib/node_modules/openclaw/dist/net-DBrsyv8q.js:22
  • /usr/lib/node_modules/openclaw/dist/gateway-cli-CD7BHA7a.js:6871:6871
  • /usr/lib/node_modules/openclaw/dist/gateway-cli-CD7BHA7a.js:6930:6930
  • /usr/lib/node_modules/openclaw/dist/ws-zZ6eXqMi.js:12:12
  • /usr/lib/node_modules/openclaw/dist/daemon-cli.js:11845:11845

拟修复方案(最小改动):

  • 在上述 pickPrimaryLanIPv4() 里对 os.networkInterfaces() 加 try/catch。
  • 失败时返回 undefined(上层已有 ?? os.hostname() 或 loopback fallback),不再让命令崩掉。

按这个方案直接打补丁并重启一次服务验证。

• 已按如上确认完成修改并重启验证,结论如下。

修复结果

  1. uv_interface_addresses 崩溃已修复:openclaw daemon status 不再报 ERR_SYSTEM_ERROR。
  2. 已重启服务并确认生效:openclaw daemon restart 成功,systemctl 显示新启动时间与新 PID。
  3. 提权环境下 openclaw daemon status 返回 RPC probe: ok,监听正常。

本次补丁点

  1. 给 LAN IP 探测加兜底 net-DBrsyv8q.js:22 ws-zZ6eXqMi.js:12
  2. 给 tailnet 地址枚举加兜底(返回空列表) daemon-cli.js:11816 tailnet-Ca1WnFBq.js:13 tailnet-kbXXH7kK.js:13

重启验证

  1. 服务状态:active (running),启动时间 2026-03-01 12:53:05 CST,PID 319592(已更新)。

  2. openclaw daemon status(提权):

  • Runtime: running
  • RPC probe: ok
  • Listening: 127.0.0.1:18789

但当前看到的剩余提示说明

  • 在非提权/受限环境中仍可能看到:systemctl --user unavailable: Failed to connect to bus。
  • 这是运行环境对 systemd user bus 的权限限制,不是 uv_interface_addresses 问题,也不是 Feishu/插件问题。

文档已保存,文档名字:

    ExploredList openclaw-operation-report-2026-03-01.md
         Read openclaw-operation-report-2026-03-01.md`

───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────

• 已按如上的要求完成两件事:

  1. 已补“失败告警日志(仅首次)”并保留降级兜底,覆盖网卡/尾网卡探测路径。
  2. 已重启并验证:
  • 提权环境下 openclaw daemon status 正常,RPC probe: ok
  • 非提权环境下不再报 uv_interface_addresses 崩溃,只会提示 systemctl --user 权限限制并输出可观测告警

操作说明文档已保存为:

  • openclaw-operation-report-2026-03-01.md

本次未做一版“最小回滚脚本”(一键恢复这次对 /usr/lib/node_modules/openclaw/dist 的改动)。