← 返回列表

每月5萬次額度不夠用?飛書API過度調用問題終於解決了

itadol5j

最近有個朋友找到我,說他在飛書開發者後臺發現了一個嚴重問題:/open-apis/bot/v3/info 這個接口每分鐘被調用好幾百次,每個月 5 萬次的免費額度眼看就要用光了!

飛書API調用量監控

問題是怎麼發現的

朋友在飛書開發者後臺的「API 調用統計」裏看到,bot/v3/info 這個接口的調用量異常高:

指標數值
日調用次數43200+ 次
每分鐘調用~300 次
月消耗估算接近 5 萬次上限

他都懵了:我就一個機器人,怎麼調用這麼頻繁?

問題根因分析

我幫他排查了 OpenClaw 的飛書擴展代碼,發現問題出在兩個地方:

1. 狀態檢查觸發 API 調用

每次查詢機器人狀態時,都會調用 probeFeishu() 函數去請求飛書的 bot info 接口。這個函數在以下場景會被調用:

  • 啓動機器人時獲取 OpenID
  • 外部系統查詢狀態時
  • WebSocket 斷線重連時

2. 缺乏緩存機制

原來的代碼是「每次調用都發請求」,沒有任何緩存。哪怕連續查詢 10 次狀態,就會產生 10 次 API 調用。

解決方案:5分鐘緩存機制

我給 probe.ts 加了一個簡單的緩存層:

// 缓存配置:5分钟内不重复调用 API
const CACHE_TTL_MS = 5 * 60 * 1000;
const botInfoCache = new Map();

核心邏輯很簡單:

  • 首次調用 → 請求飛書 API → 緩存結果
  • 5 分鐘內再次調用 → 直接返回緩存(不發起新請求)
  • 失敗結果也緩存 → 避免失敗時重複請求

修改後的效果

對比項修改前修改後
每次狀態查詢調用 API直接返回緩存
失敗重試無限重試緩存 5 分鐘
月消耗估算50000+ 次~300 次

簡單算一筆賬:每 5 分鐘最多調用 1 次,一天 24 小時 = 288 次/月,一年才 3500 次左右。原來的 5 萬/月額度,根本用不完!

適用場景

這個方案特別適合以下情況:

  • 使用 OpenClaw 飛書擴展的用戶
  • 自己開發飛書機器人,頻繁調用 bot info 接口
  • API 額度告急,想優化調用次數

總結

飛書 API 過度調用的問題,本質上是缺乏緩存機制導致的。解決方案也很簡單:給接口調用加個緩存。

有時候,最簡單的優化反而是最有效的。