当前 OpenClaw 版本:v2026.2.21-2
问题背景
在使用 OpenClaw 的飞书插件时,发现 bot/v3/info 接口调用非常频繁,月调用量轻松超过飞书 API 的免费配额限制(5 万次)。
经过排查,发现问题出在 OpenClaw 的 Channel Health Check 机制上。
根因分析
OpenClaw Gateway 会定期执行通道健康检查,每分钟一次。每次检查会调用各通道插件的 probeAccount 方法来验证连接状态。
对于飞书插件,调用链如下:
Gateway Health Check (每分钟)
→ plugin.status.probeAccount()
→ probeFeishu()
→ HTTP GET /open-apis/bot/v3/info
计算一下调用量:1 × 60 × 24 × 30 = 43,200 次/月。如果没有缓存机制,单这一个接口就会耗尽免费配额。
解决方案
既然机器人信息是静态数据,天然适合缓存。修改飞书插件的 probe 模块,增加缓存机制。
代码修改
修改文件:extensions/feishu/src/probe.ts
import { createFeishuClient, type FeishuClientCredentials } from "./client.js";
import type { FeishuProbeResult } from "./types.js";
// 缓存配置:10 分钟有效期
const botInfoCache = new Map<
string,
{ data: FeishuProbeResult; expiresAt: number }
>();
const CACHE_TTL_MS = 10 * 60 * 1000;
export async function probeFeishu(
creds?: FeishuClientCredentials,
): Promise<FeishuProbeResult> {
if (!creds?.appId || !creds?.appSecret) {
return { ok: false, error: "missing credentials" };
}
// 优先读取缓存
const cacheKey = creds.appId;
const cached = botInfoCache.get(cacheKey);
if (cached && cached.expiresAt > Date.now()) {
return cached.data;
}
// 发起 API 请求
const client = createFeishuClient(creds);
const response = await (client as any).request({
method: "GET",
url: "/open-apis/bot/v3/info",
data: {},
});
let result: FeishuProbeResult;
if (response.code !== 0) {
result = { ok: false, appId: creds.appId, error: response.msg };
} else {
const bot = response.bot || response.data?.bot;
result = { ok: true, appId: creds.appId, botName: bot?.bot_name, botOpenId: bot?.open_id };
}
// 存入缓存
botInfoCache.set(cacheKey, { data: result, expiresAt: Date.now() + CACHE_TTL_MS });
return result;
}
// 手动清空缓存(可选)
export function clearFeishuProbeCache(appId?: string): void {
appId ? botInfoCache.delete(appId) : botInfoCache.clear();
}
效果对比
| 指标 | 修改前 | 修改后 |
|---|---|---|
| API 调用频率 | 每分钟 1 次 | 每小时约 1 次 |
| 月调用量 | ~43,200 次 | ~1,440 次 |
从超出免费额度到完全在安全范围内。
注意事项
- 缓存时间是 10 分钟,可根据实际需求调整
- 这是临时修复方案,OpenClaw 官方可能会在后续版本中自带优化,建议关注官方更新
- 修改源码后,重启 Gateway 生效
- 此修改在 OpenClaw 更新版本时可能会被覆盖,需要重新应用
总结
健康检查机制本身是好的,但对于变化频率低的元数据,引入缓存可以显著减少不必要的 API 调用。这个思路同样适用于其他通道插件(如 Telegram、WhatsApp 等)。