解决 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 等)。

相关推荐
BreezeJiang1 小时前
RAG 答不准,先别急着换模型:给检索管道加上路由、拆解和循环检索
agent
麦客奥德彪2 小时前
别把 Agent 写成一个大循环:读懂 DeepSeek Harness 的接口与运行时设计
agent·源码阅读
hpoenixf2 小时前
为什么我们把 Agent 的路由请求越做越简单?
agent
布列瑟农的星空2 小时前
2026年我们不再谈论运行时Harness
agent
武子康3 小时前
ESP32 唤醒成功,离线命令为什么没有执行?
人工智能·后端·agent
易知微EasyV数据可视化3 小时前
会插卡片的编辑器:在 Agent 输入框里混排文字与结构化内容
人工智能·经验分享·编辑器·agent·设计
小七-七牛开发者4 小时前
从 AWS 到 OpenRouter,拆解 Agent 模型路由的工程设计
llm·agent·aws·openrouter·codingagent
阿阿阿安4 小时前
Agent 智能体开发(三)Agent 自定义框架搭建
人工智能·ai·agent
怕浪猫5 小时前
腾讯又交作业了,开源版 WorkBuddy 太夯了!这回是只粉色小章鱼Octop!
javascript·面试·agent
路多辛5 小时前
全能 Go Agent 框架 covonaut v1.1.5 发布:改进检查点、Token用量与缓存
缓存·agent·ai编程