闲社服务运行正常AI智能体自动化平台
f

飞书块操作

技能标识:feishu-block-ops

|

作者:admin | 来源记录:ClawHub
登记来源
ClawHub
版本
V 1.0.0
检测标记
后台标记通过
免费
免费获取
0
收藏
来源与检测标记为平台登记信息,并不代表已展示可复核的检测报告。使用前请核对版本、依赖和所需权限,建议先在隔离环境中运行。
概述
安装方式
版本历史

飞书块操作

飞书块操作

当 feishu_doc 工具的内置操作无法满足需求时,直接使用 REST API 操作飞书云文档。

何时使用此技能(对比 feishu_doc)

需求使用工具
读取/写入/追加文档feishudoc
创建简单表格
feishudoc createtablewith_values | | 上传图片/文件 | feishudoc uploadimage/upload_file | | 一次性批量更新200个单元格 | 此技能 | | 在精确位置插入内容 | 此技能(或 feishu-md2blocks) | | 遍历块树 | 此技能 | | 表格行/列插入/删除 | 此技能 | | 合并/取消合并表格单元格 | 此技能 | | 原地替换图片 | 此技能 | | 按索引范围删除块 | 此技能 |

身份认证

从 OpenClaw 配置中获取租户访问令牌:

python
import json, urllib.request

def getfeishutoken():
with open(os.path.expanduser(~/.openclaw/openclaw.json)) as f:
c = json.load(f)[channels][feishu]
payload = json.dumps({appid: c[appId], appsecret: c[appSecret]}).encode()
req = urllib.request.Request(
https://open.feishu.cn/open-apis/auth/v3/tenantaccesstoken/internal,
data=payload, headers={Content-Type: application/json}, method=POST)
return json.loads(urllib.request.urlopen(req).read())[tenantaccesstoken]

所有 API 调用使用请求头:Authorization: Bearer {token}

速率限制

操作限制
读取(GET)每个应用 5 次/秒
写入(POST/PATCH/DELETE)
每个应用 3 次/秒,每个文档 3 次/秒 |

写入调用之间使用 time.sleep(0.35)。读取调用使用 time.sleep(0.25)。

API 参考

基础 URL:https://open.feishu.cn/open-apis/docx/v1/documents

1. 获取块

GET /docx/v1/documents/{doc}/blocks/{block_id}

返回包含完整内容的单个块(类型、元素、子节点 ID、样式)。

2. 获取子节点(可选完整树)

GET /docx/v1/documents/{doc}/blocks/{block_id}/children
?with_descendants=true # 获取所有后代,不仅直接子节点
&page_size=500 # 最大 500
&documentrevisionid=-1 # 最新版本

提示: 在表格块上使用 with_descendants=true 可一次性获取所有单元格及单元格内容。

3. 创建块(简单、仅平级)

POST /docx/v1/documents/{doc}/blocks/{parent_id}/children
请求体:{children: [...blocks], index: 0}

  • - 每次调用最多 50 个块
  • 不能创建嵌套结构(例如带单元格内容的表格)
  • 请求体中的 index:0=开头,-1=末尾(默认)

4. 创建嵌套块(表格、网格等)

POST /docx/v1/documents/{doc}/blocks/{parent_id}/descendant
请求体:{
childrenid: [tempid1, tempid_2],
descendants: [...所有包含父子关系的块],
index: 0
}

  • - 每次调用最多 1000 个块
  • childrenid:仅第一级子节点 ID(不是孙节点——会导致错误 1770006)
  • descendants:包含所有嵌套块的扁平数组,每个块包含 blockid、block_type、children(子节点临时 ID 列表)
  • ⚠️ index 必须在请求体中,而不是 URL 查询参数——?index=N 会被静默忽略

5. 批量更新块

PATCH /docx/v1/documents/{doc}/blocks/batch_update
请求体:{requests: [...update_requests]}

每次调用最多 200 个块。每个请求对象包含 block_id + 一个操作:

操作用途
updatetextelements替换文本内容 + 内联元素
updatetextstyle
更改对齐、折叠、语言、换行、背景颜色 |
| updatetableproperty | 修改列宽、表头行/列 |
| inserttablerow | 在索引处插入行 |
| inserttablecolumn | 在索引处插入列 |
| deletetablerows | 按索引+数量删除行 |
| deletetablecolumns | 按索引+数量删除列 |
| mergetablecells | 合并单元格(行开始、行结束、列开始、列结束) |
| unmergetablecells | 取消合并之前合并的单元格 |
| replaceimage | 用新的 filetoken 替换图片块内容 |

示例:批量更新多个单元格中的文本

python
requests = []
for blockid, newtext in updates.items():
requests.append({
blockid: blockid,
updatetextelements: {
elements: [{textrun: {content: newtext}}]
}
})

api_call(token, PATCH,
fhttps://open.feishu.cn/open-apis/docx/v1/documents/{doc}/blocks/batch_update,
{requests: requests})

6. 更新单个块

PATCH /docx/v1/documents/{doc}/blocks/{block_id}
请求体:{与 batchupdate 相同的操作,不包含 blockid 包装}

7. 删除块

DELETE /docx/v1/documents/{doc}/blocks/{parentid}/children/batchdelete
请求体:{startindex: 0, endindex: 5}

  • - ⚠️ 使用 startindex/endindex(半开区间 [start, end)),不是 block_ids
  • 索引相对于父块的子节点列表

块类型

类型ID说明
页面1文档根节点,始终只有一个
文本
2 | 普通段落 | | 标题1–9 | 3–11 | | | 无序列表 | 12 | 无序列表项 | | 有序列表 | 13 | 有序列表项 | | 代码 | 14 | 代码块 | | 引用 | 15 | 块引用 | | 待办 | 17 | 复选框项 | | 高亮块 | 19 | 高亮块 | | 分割线 | 22 | 水平分割线(请求体:{}) | | 网格 | 24 | 多列布局 | | 网格列 | 25 | 网格中的列 | | 图片 | 27 | 图片块 | | 表格 | 31 | 表格容器 | | 表格单元格 | 32 | 表格中的单元格 | | 引用容器 | 34 | 引用包装器(请求体:{}) |

文本元素

文本块包含一个 elements 数组。每个元素是以下之一:

python

纯文本


{textrun: {content: hello, textelement_style: {bold: True, link: {url: ...}}}}

@用户

{mentionuser: {userid: ouxxx, textelement_style: {}}}

@文档

{mentiondoc: {token: xxx, objtype: 22, textelementstyle: {}}}

公式(LaTeX)

{equation: {content: E=mc^2}}

提醒

{reminder: {expiretime: 1234567890, iswhole_day: True}}

常见模式

模式 1:读取表格内容

python

1. 一次性获取表格的后代


url = f.../blocks/{tableblockid}/children?withdescendants=true&pagesize=500&documentrevisionid=-1
items = api_call(token, GET, url)[data][items]

2. 从单元格中提取文本

for item in items: if item[block_type] == 2 and text in item: text = .join(e.get(text_run, {}).get(content, ) for e in item[text][elements])

模式 2:在位置插入

标签

skill ai

通过对话安装

以下为平台配置的接入选项,并非逐项实测通过。能否安装取决于客户端支持、技能来源和运行环境:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 feishu-block-ops-1776272599 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 feishu-block-ops-1776272599 技能

通过命令行安装

skillhub install feishu-block-ops-1776272599

下载

⬇ 下载 feishu-block-ops v1.0.0(免费)

文件大小: 4.44 KB | 发布时间: 2026-4-16 17:09

v1.0.0 最新 2026-4-16 17:09
feishu-block-ops 1.0.0

- Initial release providing direct Feishu document block operations via REST API.
- Supports batch cell updates, precise positioned inserts, block tree traversal, table row/column manipulation, and in-place image replacement.
- Enables advanced use cases not covered by the standard feishu_doc actions.
- Detailed usage instructions, rate limits, API reference, and common patterns included in documentation.
返回顶部