skills/feishu-bitable/SKILL.md
操作飞书多维表格(Bitable),支持数据表、记录、字段和素材管理。何时使用:当用户说"飞书多维表格"/"飞书表格"/"bitable",或需要读写表格记录、操作数据表结构、管理字段、上传素材时。
npx skillsauth add steelan9199/wechat-publisher feishu-bitableInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
为 AI 大模型提供处理飞书多维表格的完整能力,支持操作数据表、记录、字段和素材。
"node": ">=20.20.1"
本技能的 scripts/ 目录下的所有 JavaScript 文件已进行代码混淆处理。
✅ 可以执行:直接调用和执行这些脚本,使用 --parameter-file-path 传递参数
❌ 不要读取:不要读取或分析 scripts/ 目录下的 .js 文件内容,原因:
references/ 目录中完整描述references/ 目录下的文档| 用户输入触发词 | AI 执行动作 | 对应脚本 |
| -------------------------------- | --------------------------------------------- | ------------------------------------ |
| "查看记录"/"获取记录"/"列出记录" | 运行 record/get.js 查询记录列表 | scripts/record/get.js |
| "添加记录"/"创建记录"/"插入记录" | 运行 record/create.js 创建单条记录 | scripts/record/create.js |
| "修改记录"/"更新记录"/"编辑记录" | 运行 record/update.js 更新单条记录 | scripts/record/update.js |
| "删除记录"/"移除记录" | 运行 record/delete.js 删除单条记录 | scripts/record/delete.js |
| "批量添加记录"/"添加多条记录" | 运行 record/batch-create.js 批量创建记录 | scripts/record/batch-create.js |
| "批量修改记录"/"更新多条记录" | 运行 record/batch-update.js 批量更新记录 | scripts/record/batch-update.js |
| "批量删除记录"/"清空记录" | 运行 record/batch-delete.js 批量删除记录 | scripts/record/batch-delete.js |
| "查看表格"/"数据表列表" | 运行 table/list.js 列出所有数据表 | scripts/table/list.js |
| "创建表格"/"添加数据表" | 运行 table/create-single.js 创建单个数据表 | scripts/table/create-single.js |
| "修改表格名称"/"重命名表格" | 运行 table/update.js 更新数据表名称 | scripts/table/update.js |
| "删除表格"/"移除数据表" | 运行 table/delete-one.js 删除单个数据表 | scripts/table/delete-one.js |
| "查看字段"/"列信息" | 运行 field/list.js 列出所有字段 | scripts/field/list.js |
| "添加字段"/"新列" | 运行 field/create.js 创建字段 | scripts/field/create.js |
| "修改字段"/"修改列" | 运行 field/update.js 更新字段 | scripts/field/update.js |
| "删除字段"/"移除列" | 运行 field/delete.js 删除字段 | scripts/field/delete.js |
| "上传文件"/"上传图片"/"上传附件" | 运行 media/upload.js 上传素材 | scripts/media/upload.js |
| "获取下载链接"/"获取直链" | 运行 media/file-token-to-url.js 获取文件URL | scripts/media/file-token-to-url.js |
用户请求涉及飞书多维表格?
│
├─ 是 → 检查具体操作类型
│ │
│ ├─ 需要访问凭证?
│ │ └─ 运行 get-tenant-access-token.js
│ │
│ ├─ 需要从URL解析信息?
│ │ └─ 运行 parse-bitable-url.js
│ │
│ └─ 执行具体操作
│ ├─ 数据表操作 → table/ 脚本
│ ├─ 记录操作 → record/ 脚本
│ ├─ 字段操作 → field/ 脚本
│ └─ 素材操作 → media/ 脚本
│
└─ 否 → 不使用此 Skill
本 Skill 提供完整的飞书多维表格 API 操作能力:
| 功能模块 | 支持的操作 | | -------------- | ---------------------------------------------- | | 数据表管理 | 创建、更新、删除数据表(支持批量操作) | | 记录操作 | 增删改查记录,支持批量操作(单次最多 1000 条) | | 字段管理 | 创建、更新、删除字段,列出所有字段 | | 素材上传 | 上传文件、图片等素材,获取临时下载链接 |
执行完成后,Skill 会输出:
tenant_access_token:所有 API 操作都需要app_token:标识要操作的多维表格table_id:标识要操作的数据表(部分操作需要)注意:本 Skill 所有脚本均使用 --parameter-file-path 参数传递配置,必须通过参数文件方式调用。
AI 调用规范:本 Skill 专为 AI 设计,AI 自动处理临时文件的创建和清理,人类用户只需用自然语言描述需求。
AI 调用本 Skill 时,必须遵循以下流程自动管理临时文件:
import { createTempParamsFile, cleanupTempFile } from "./scripts/utils";
import { execSync } from "child_process";
// 1. 创建临时参数文件(自动存放在系统临时目录)
const tempFile = createTempParamsFile(
{
tenant_access_token: "xxx",
app_token: "xxx",
table_id: "xxx"
// ... 其他参数
},
"operation-name"
);
try {
// 2. 执行脚本
const result = execSync(`node scripts/xxx.js --parameter-file-path "${tempFile}"`, { encoding: "utf-8" });
const data = JSON.parse(result);
// 3. 处理结果并返回给用户
return formatResultForUser(data);
} finally {
// 4. 确保清理临时文件(无论成功或失败)
cleanupTempFile(tempFile);
}
关键原则:
os.tmpdir())try...finally 确保即使出错也会清理步骤 1:获取访问凭证
node scripts/get-tenant-access-token.js --parameter-file-path params.json
参数文件示例 (params.json):
{
"appId": "cli_xxx",
"appSecret": "xxx"
}
详细凭证管理规则参见 认证与凭证管理指南。
步骤 2:解析多维表格 URL
从 URL 中提取 app_token 和 table_id:
node scripts/parse-bitable-url.js --parameter-file-path params.json
步骤 3:执行具体操作
根据需求选择对应的脚本:
# 查询记录
node scripts/record/get.js --parameter-file-path "params.json"
# 创建记录
node scripts/record/create.js --parameter-file-path "params.json"
# 批量创建记录
node scripts/record/batch-create.js --parameter-file-path "params.json"
| 概念 | 说明 | | ---------------------- | -------------------------------------------------------- | | 多维表格 (Bitable) | 字节跳动的产品,结合电子表格的灵活性和数据库的结构化特性 | | 数据表 (Table) | 多维表格中的单个表格,类似 Excel 工作表 | | 记录 (Record) | 数据表中的一行数据 | | 字段 (Field) | 数据表中的一列的表头,用于设定该列的数据类型 | | 素材 (Media) | 上传的文件、图片、视频等 |
| Action | 脚本路径 | 说明 |
| --------------------- | ---------------------------------------------------------------- | ---------------------------------------------- |
| 获取访问凭证 | get-tenant-access-token.js | 获取 tenant_access_token |
| 解析飞书多维表格的URL | parse-bitable-url.js | 从 URL 提取 app_token、table_id、view_id |
| Action | 脚本路径 | 说明 |
| -------------- | -------------------------------------------------- | ----------------------------------- |
| 新增一个数据表 | create-single.js | 支持指定名称、视图和字段 |
| 新增多个数据表 | batch-create.js | 仅可指定数据表名称 |
| 更新数据表名称 | update.js | 更新指定数据表的名称 |
| 列出数据表 | list.js | 获取所有数据表的 ID、版本号和名称 |
| 删除一个数据表 | delete-one.js | 通过 app_token 和 table_id 删除 |
| 删除多个数据表 | batch-delete.js | 批量删除多个数据表 |
详细参数参见 table 参考文档 目录。
| Action | 脚本路径 | 说明 | | ------------ | ------------------------------------------------- | ----------------------------- | | 新增记录 | create.js | 在数据表中新增一条记录 | | 更新记录 | update.js | 更新数据表中的一条记录 | | 查询记录 | get.js | 单次最多查询 500 行,支持分页 | | 删除记录 | delete.js | 删除数据表中的一条记录 | | 新增多条记录 | batch-create.js | 单次最多新增 1,000 条 | | 更新多条记录 | batch-update.js | 单次最多更新 1,000 条 | | 批量获取记录 | batch-get.js | 通过记录 ID 查询,最多 100 条 | | 删除多条记录 | batch-delete.js | 批量删除多条记录 |
详细参数参见 record 参考文档 目录。
| Action | 脚本路径 | 说明 | | -------- | ------------------------------------ | --------------------------------- | | 新增字段 | create.js | 在数据表中新增一个字段 | | 更新字段 | update.js | 全量更新字段(property 会被覆盖) | | 列出字段 | list.js | 获取数据表中的所有字段 | | 删除字段 | delete.js | 删除数据表中的一个字段 |
详细参数参见 field 参考文档 目录。
| Action | 脚本路径 | 说明 |
| -------- | ---------------------------------------------------------- | ----------------------------------------- |
| 素材上传 | upload.js | 上传文件、图片、视频等素材 |
| 获取直链 | file-token-to-url.js | file_token 转临时下载链接(24小时有效) |
详细参数参见 media 参考文档 目录。
| 项目 | 说明 |
| -------- | --------------------------------------------------------------- |
| 文档位置 | references/ 目录下的文档,有具体的 API 调用命令或脚本执行方式 |
| 脚本位置 | scripts/ 目录下的 Node.js 脚本直接使用 |
| 临时文件 | 系统临时目录 (%TEMP% 或 /tmp),操作完成后自动删除 |
| 参数文件 | 系统临时目录,使用绝对路径引用 |
| 上传记录 | 系统临时目录 (feishu-bitable-upload-records.json) |
本技能所有临时文件(参数文件、上传记录)均存放在系统临时目录,避免污染用户主目录和技能目录:
Windows 示例:
C:\Users\xxx\AppData\Local\Temp\feishu-create-record-1740374400000-a7x9k2.json
C:\Users\xxx\AppData\Local\Temp\feishu-bitable-upload-records.json
Linux/Mac 示例:
/tmp/feishu-create-record-1740374400000-a7x9k2.json
/tmp/feishu-bitable-upload-records.json
import { createTempParamsFile, cleanupTempFile, cleanupAllTempFiles } from './utils';
// 1. 创建临时参数文件(自动存放在系统临时目录)
const params = {
tenant_access_token: 'xxx',
app_token: 'xxx',
table_id: 'xxx',
fields: { ... }
};
const tempFilePath = createTempParamsFile(params, 'create-record');
// 2. 执行脚本
const result = await executeScript(tempFilePath);
// 3. 立即清理临时文件
cleanupTempFile(tempFilePath);
// 4. 清理所有过期的临时文件(24小时前的)
cleanupAllTempFiles();
临时文件命名规范:
feishu-{operation}-{timestamp}-{random}.jsonfeishu-batch-create-1740374400000-a7x9k2.json清理策略:
cleanupAllTempFiles() 批量清理过期文件(24小时前)用户说:"帮我在飞书表格 https://xxx.feishu.cn/wiki/xxx 里添加一条记录,任务名称是'完成报告',进度50%"
AI 执行步骤:
| 步骤 | 执行动作 | 脚本/命令 |
| ---- | ----------------------------------- | ------------------------------------------------- |
| 1 | 检查 tenant_access_token | 如无则运行 get-tenant-access-token.js |
| 2 | 解析 URL 获取 app_token 和 table_id | 运行 parse-bitable-url.js |
| 3 | 创建临时参数文件 | 运行 createTempParamsFile(),存放在系统临时目录 |
| 4 | 创建记录 | 运行 record/create.js |
| 5 | 清理临时参数文件 | 运行 cleanupTempFile() |
| 6 | 返回结果 | 向用户返回:"已成功创建记录!记录ID: recxxx" |
用户感知:完全不需要知道临时文件的存在,只需自然语言交互。
| 错误场景 | 错误表现 | 处理方式 |
| ---------------- | ------------------------------------------------------------ | ------------------------------------------------------ |
| 缺少访问凭证 | API 返回 401/403 错误 | 运行 get-tenant-access-token.js 获取凭证 |
| 访问凭证过期 | API 返回 错误代码: 99991663, 错误信息: Invalid access token for authorization | 运行 get-tenant-access-token.js 获取凭证 |
| URL 解析失败 | 无法提取 app_token/table_id | 检查 URL 格式是否正确,或手动提供参数 |
| 记录不存在 | API 返回 404 错误 | 检查 record_id 是否正确,或先运行 record/get.js 查询 |
| 字段类型不匹配 | API 返回 400 错误 | 运行 field/list.js 查看字段类型,调整参数后重试 |
| 文本字段格式错误 | TextFieldConvFail 错误 | 文本字段使用字符串格式,不要用富文本数组格式 |
| 字段更新缺少参数 | field validation failed | 更新字段时必须提供 type 参数 |
| 文件token格式错 | Cannot read properties | 使用 file_tokens(数组)而非 file_token(字符串) |
| 批量操作超限 | API 返回 422 错误 | 减少单次操作数量(记录最多1000条,批量获取最多100条) |
| 临时文件创建失败 | 磁盘空间不足或权限问题 | 检查系统临时目录权限和磁盘空间 |
| 网络超时 | 请求无响应 | 检查网络连接,稍后重试 |
错误信息:the value of 'Multiline' must be a string
原因:创建/更新记录时,文本字段使用了查询返回的富文本数组格式
解决:
"字段名": [{"text": "内容", "type": "text"}]"字段名": "内容"错误信息:field validation failed - type is required
原因:更新字段时未提供 type 参数
解决:更新字段时必须包含 type,如 "type": 1(1=文本, 2=数字)
错误信息:Cannot read properties of undefined (reading 'map')
原因:使用了 file_token 而不是 file_tokens
解决:
"file_token": "xxx""file_tokens": ["xxx"]| 文档 | 说明 | | --------------------------------------------------------- | --------------------------------------------------------------------------------- | | 认证与凭证管理指南 | 详细的凭证管理说明,包括 App ID/App Secret 获取、tenant_access_token 自动获取流程 | | 获取访问凭证 API | 获取 tenant_access_token 的具体 API 调用说明和脚本使用方法 | | 解析飞书 URL 工具 | 从飞书多维表格 URL 中提取 app_token、table_id、view_id 的工具使用说明 | | 常见错误及解决方案 | API 调用常见错误码及排查方法 | | 参数配置示例与最佳实践 | 各种操作场景的参数配置示例 |
content-media
自动启停视频课程录制所需的辅助程序。激活条件:用户消息须包含以下关键词之一:`我要录制视频课程`、`开始录制视频课程`、`准备录课`、`视频课程录完了`、`录课结束`、`停止录制`。
content-media
生成扁平的 SVG 图(架构图、中心辐射图、流程图、简易时序图、思维导图、组织架构图、2×2对比矩阵、时间线、循环图、鱼骨图),也支持把已有 SVG 文件转成 PNG 图片。激活条件(满足任一即可):生成类关键词 `画架构图`、`画中心辐射图`、`画流程图`、`画时序图`、`画思维导图`、`画脑图`、`画组织架构图`、`画树形图`、`画对比矩阵`、`画四象限`、`画时间线`、`画循环图`、`画鱼骨图`、`画因果分析图`;转换类关键词`SVG 转图片`、`把 SVG 转成图片`、`把 SVG 转成 PNG`。
testing
检查指定技能文档中的废话文字并输出诊断报告。激活条件:用户消息须包含以下关键词之一:`检查技能废话`、`这个技能文档有没有多余内容`、`清理技能文档废话`、`审查技能文档废话`、`清理技能文档历史说明`。
testing
评审一个技能是否「自包含」——即其知识、经验、规范是否全部内置在技能文件内(SKILL.md + references/),不依赖特定 AI 客户端专有的知识接口命令(如 read_me / modules: / show_widget / Visualizer)去外部拉取,也不硬编码某个 AI 软件的私有路径(如 .workbuddy)。同时检查工具依赖(node、浏览器、命令行)是否仅作为用户自备工具声明、未写死私有路径。当用户要求「评审这个技能是否自包含 / 独立」「检查技能知识是否内置」「审查技能的独立性 / 可移植性」「audit / review a skill for self-containment」时触发。产出评审报告:结论(自包含 / 不独立)+ 问题清单(文件:行号 + 引用的外部依赖 + 为何影响独立性)+ 整改建议。