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

相关推荐
魔术师Grace4 小时前
AI 越来越强,普通人到底该怎么写 Prompt?
agent·ai编程
怕浪猫5 小时前
AI Agent 的安全围栏:DeepSeek Harness 沙箱隔离策略全解析
面试·agent·产品经理
Flynt5 小时前
browser-use团队新作:让编程Agent帮你剪视频,核心设计思路有点意思
开源·agent·claude
码云之上6 小时前
换模型之后,Chatbot 为什么要自己做 compact?
前端·agent·前端工程化
星栈6 小时前
自定义 UI-UX-Pro-Max 的 CSV 知识库,把 AI 生成的后台拉回行业该有的样子
前端·agent·weui
张彦峰ZYF6 小时前
MCP 从“能连工具”到“像 Web 一样部署”——无状态核心、扩展框架与企业级 Agent 基础设施的真正分水岭
人工智能·llm·agent·mcp
枫叶丹47 小时前
实时语音 Agent:从语音机器人到连续协作界面
人工智能·chatgpt·机器人·语音识别·agent·codex
Darling噜啦啦9 小时前
LLM 记忆管理三剑客:截断、总结、检索,彻底搞懂 Agent 的 Memory 系统
langchain·llm·agent
今日无bug9 小时前
大模型的回答是怎么一个字一个字蹦出来的?前端流式输出解析
前端·llm·agent