解决 OpenClaw 飞书插件 API 过度调用问题

当前 OpenClaw 版本:v2026.2.21-2

问题背景

在使用 OpenClaw 的飞书插件时,发现 bot/v3/info 接口调用非常频繁,月调用量轻松超过飞书 API 的免费配额限制(5 万次)。

经过排查,发现问题出在 OpenClaw 的 Channel Health Check 机制上。

根因分析

OpenClaw Gateway 会定期执行通道健康检查,每分钟一次 。每次检查会调用各通道插件的 probeAccount 方法来验证连接状态。

对于飞书插件,调用链如下:

scss 复制代码
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

typescript 复制代码
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 次

从超出免费额度到完全在安全范围内。

注意事项

  1. 缓存时间是 10 分钟,可根据实际需求调整
  2. 这是临时修复方案,OpenClaw 官方可能会在后续版本中自带优化,建议关注官方更新
  3. 修改源码后,重启 Gateway 生效
  4. 此修改在 OpenClaw 更新版本时可能会被覆盖,需要重新应用

总结

健康检查机制本身是好的,但对于变化频率低的元数据,引入缓存可以显著减少不必要的 API 调用。这个思路同样适用于其他通道插件(如 Telegram、WhatsApp 等)。

相关推荐
奈落241 天前
AI辅助的另一面:从2026年国际AI安全报告的“故障”清单到国内专家的可靠性短板,自主行动的Agent为什么更难及时干预
人工智能·安全·agent·本地部署·ai 办公
时早玖沐1 天前
放弃 QQ 官方机器人:用 SnowLuma + AstrBot 自建 QQ 机器人
docker·开源·agent
nujnewnehc1 天前
给记事软件加上 mcp
agent·mcp
轻松西西莱尔1 天前
谷歌+斯坦福+CMU 等五家 203 页综述,我做了个HTML把主动式AI的边界跑给你看
前端·html·agent
文谦南宁AI普工1 天前
主动性 Agent 的第一道工程题:Fast/Slow Path 两级过滤,附 80 行可跑模拟器
agent·ai编程·产品
米小虾1 天前
Agent 省钱工程:七成的钱不是模型花掉的
人工智能·agent
阿里云云原生1 天前
欢迎报名丨Alibaba Cloud AgentCore 企业智能体构建与治理八城巡回沙龙 · 杭州站开启
agent
不一样的少年_1 天前
为什么你写的 Agent 一报错就死循环?很多人都漏掉了这层“错误自救与熔断”机制
前端·后端·agent
小七-七牛开发者1 天前
Tool-Use Agent 如何扩训练数据:拆解工具、任务与环境状态的 Scaling Law
ai·agent·工具调用·scalinglaw·synthapi