@zlt110168/feishu-tool-live
v1.0.0
Published
OpenClaw 插件:将工具调用状态实时推送到飞书卡片,在同一张卡片上持续更新
Readme
feishu-tool-live
OpenClaw 插件:在飞书中用 一张实时更新的卡片 展示 Agent 的工具调用过程。
效果
┌──────────────────────────────────────────────┐
│ 🤖 Agent 工作中 │
│──────────────────────────────────────────────│
│ 📋 工具调用状态 │
│──────────────────────────────────────────────│
│ 1. ✅ `web_search` 1.2s │
│ 2. ✅ `read_file` 0.3s │
│ 3. 🔧 `code_edit` ⏳ 执行中... │
│──────────────────────────────────────────────│
│ ⏳ 执行中... │
└──────────────────────────────────────────────┘- 每次对话只生成 一张卡片
- 工具调用时 实时追加新行 显示「🔧 执行中...」
- 工具完成后 原地更新 为「✅ 完成 1.2s」或「❌ 失败」
- 对话结束后关闭流式模式,显示汇总
安装
# 插件已在 ~/.openclaw/extensions/feishu-tool-live/ 目录下
# 只需在配置中启用即可配置
在 ~/.openclaw/openclaw.json 中添加:
{
"plugins": {
"feishu-tool-live": {
"enabled": true,
"showParams": false,
"showResult": false,
"ignoredTools": ["think"],
"cardHeaderTitle": "🤖 Agent 工作中",
"throttleMs": 150
}
}
}配置项说明
| 配置项 | 类型 | 默认值 | 说明 |
|--------|------|--------|------|
| enabled | boolean | true | 是否启用 |
| accountId | string | - | 飞书账号 ID(多账号时指定) |
| showParams | boolean | false | 是否显示工具调用参数 |
| showResult | boolean | false | 是否显示工具执行结果 |
| ignoredTools | string[] | ["think"] | 不报告的工具列表 |
| cardHeaderTitle | string | "🤖 Agent 工作中" | 卡片标题 |
| throttleMs | number | 150 | 更新节流间隔(ms) |
前置条件
- 飞书扩展已安装且配置好 — 需要
appId和appSecret - 飞书客户端 V7.20+ — Card JSON 2.0 需要此版本
- 应用权限 — 需要
im:message:send_as_bot和cardkit:card:write
工作原理
消息进入 → message_received hook → 记录 chatId
↓
首次工具调用 → before_tool_call hook → 创建流式卡片 + 追加「执行中」行
↓
工具完成 → after_tool_call hook → 原地更新为「完成/失败」
↓
对话结束 → agent_end hook → 关闭流式模式,显示汇总使用的飞书 API:
| 操作 | API | 说明 |
|------|-----|------|
| 创建卡片 | POST /cardkit/v1/cards | streaming_mode: true |
| 追加行 | POST /cardkit/v1/cards/{id}/elements | insert_before 锚点元素 |
| 更新行 | PATCH /cardkit/v1/cards/{id}/elements/{eid} | partial_element |
| 关闭卡片 | PATCH /cardkit/v1/cards/{id}/settings | streaming_mode: false |
设计特点
- 独立插件 — 与飞书扩展完全解耦,飞书扩展升级不受影响
- 延迟创建 — 只有实际发生工具调用时才创建卡片,无工具调用的对话无开销
- 队列化 — 所有卡片操作串行执行,保证 sequence 递增
- 节流 — 默认 150ms 间隔,不超过飞书 10次/秒 限制
- fire-and-forget — before_tool_call 中的卡片操作不阻塞工具执行
- 自动清理 — agent_end 时关闭卡片并释放状态
License
MIT
