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

相关推荐
熊猫钓鱼>_>3 小时前
从“流程固化“到“意图驱动“:大模型调智能体调Skill架构深度解析
ai·架构·大模型·llm·agent·skill·openclaw
无问芯穹4 小时前
探路智能体落地“最后一公里”:复现Cursor在线强化学习,RLinf-Online团队详解技术实现路径及背后思考
agent·强化学习·rlinf
可观测性用观测云6 小时前
AWS DevOps Agent 接入观测云最佳实践
agent
杨艺韬6 小时前
为什么需要理解 LangChain
langchain·agent
火车叼位7 小时前
GSD 里的 phase:创建、讨论、规划、执行、验证、转场
agent
How_doyou_do7 小时前
claude code源码万字深入分析
agent·claude code
rising start7 小时前
Dify在Windows上的部署
大模型·agent·dify
Pitayafruit7 小时前
Windows 也能跑 Hermes Agent!完整安装教程 + 飞书接入,全程避坑
人工智能·llm·agent
深度学习机器7 小时前
一文快速看懂Hermes Agent
llm·agent
赵康7 小时前
用 Agent Skill 自动生成工作周报
agent·周报·skill