openclaw-飞书 API 调用频率过高问题复盘

0 阅读3分钟

1. 背景与现象

在没有进行任何操作的情况下,飞书开发者后台的 API 调用次数持续增长,且观察到接口:

  • GET /open-apis/bot/v3/info

几乎 每分钟调用一次,导致额度快速消耗。

目标:

  • 保持 OpenClaw 能正常在飞书收消息、发消息、定时推送简报
  • 重点降低 /open-apis/bot/v3/info 这种“基础信息探测”接口的调用频率

2. 初步判断:不是定时任务/Heartbeat 导致

排查要点:

  • openclaw status --deep 显示主会话 heartbeat 为 30 分钟,这不可能造成“每几秒/每分钟”级别的 API 调用。
  • 定时任务(cron)只会在触发时发送消息,频率低,也不符合现象。

因此,调用高频更可能来自:

  • 飞书通道自身的监听机制(轮询/长连接保活)
  • Gateway 的健康探针(health probe)对通道进行周期性探测

3. 锁定接口调用点:Feishu 插件的 probeFeishu()

通过在 OpenClaw 安装目录中搜索字符串定位:

  • 目标接口:/open-apis/bot/v3/info

发现其调用点位于 Feishu 插件:

  • 文件:extensions/feishu/src/probe.ts
  • 函数:probeFeishu(creds)
  • 调用方式:通过 SDK 的 client.request({ method: "GET", url: "/open-apis/bot/v3/info" })

该函数返回 bot 的基础信息(bot name、bot open_id 等)。

4. 为什么会“每分钟调用一次”:健康探针会周期性 probe

在 Feishu 插件的 channel 定义中:

  • status.probeAccount 直接调用 probeFeishu(account)

而 Gateway 会周期性刷新 health snapshot(包含 probe),并在 probe 时调用每个 channel 的 probeAccount

因此,如果 gateway 的健康探针刷新周期较短(例如 60s 级别),就会导致 /bot/v3/info 被周期性调用。

5. 优化策略:给 bot info 加缓存(TTL=6小时)

/open-apis/bot/v3/info 加缓存,缓存 6 小时过期;过期后再请求一次。

实现原则:

  • 最小改动:只改 probeFeishu(),不动上层逻辑
  • 进程内缓存:用 Map 做内存缓存(足够应对健康 probe 的高频重复调用)
  • 按账号隔离:以 appId + domain 作为缓存 key

伪代码逻辑:

if (cacheHit && notExpired) return cached
else fetch /bot/v3/info
cache = {botName, botOpenId, expiresAt}
return result

6. 关键插曲:一开始改错目录,导致“看起来没生效”

第一次我修改的是全局安装路径:

  • /opt/homebrew/lib/node_modules/openclaw/extensions/feishu/src/probe.ts

但后面发现本机还有一份 Feishu 插件源码在:

  • ~/.openclaw/extensions/feishu

进一步确认(非常关键):

  • openclaw plugins list --json 显示 feishu 插件的 source 实际指向:
    • /Users/root/.openclaw/extensions/feishu/index.ts

也就是说:

  • OpenClaw 运行时实际加载的是 用户扩展目录下的 Feishu 插件
  • 所以改全局目录并不会真正生效

随后把同样的缓存逻辑补丁同步应用到:

  • /Users/root/.openclaw/extensions/feishu/src/probe.ts

这才是正确的生效位置。

7. 让改动生效:重启 Gateway

由于插件代码运行在 gateway 进程中,修改源码后需要重启 gateway 才会加载新逻辑。

  • openclaw gateway restart

重启后通过:

  • openclaw gateway status

确认 gateway 运行正常(pid 变化,RPC probe OK)。

8. 验证思路

验证目标:

  • 飞书开发者后台中 /open-apis/bot/v3/info 的调用频率从“每分钟一次”下降到“6小时一次(每账号/每domain)”。

验证方法:

  1. 观察飞书后台接口调用明细(最直接)
  2. 在 OpenClaw 侧确认插件加载源路径(避免再次改错目录)
  3. 在必要时增加本机抓包/更细日志(只统计次数,不记录敏感内容)

以上内容都直接让OpenClaw自己解决就行,把思路告诉他即可。

最后打个广告,大家可以从这里使用最新的gpt和claude模型,openclaw可以使用,几十块用就可以用一个月,codez2.zwenooo.link/register?af…