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 调用常见错误码及排查方法 | | 参数配置示例与最佳实践 | 各种操作场景的参数配置示例 |
development
Generate logo creative directions, image-generation prompts, and optionally direct logo images for company logos, brand logos, cultural/creative merchandise logos, product logos, campaign and advertising logos, event logos, app logos, sub-brand logos, and related visual identity marks. Use when the user asks for logo concepts, logo prompt writing, logo direction, brand symbol ideas, direct logo image generation, or revisions to an existing logo concept.
development
生成高级质感的单文件 HTML 横向网页 PPT。何时使用:当用户需要高级网页 PPT、商业汇报 PPT、战略会 PPT、发布会 PPT、产品路演 PPT、趋势洞察 PPT,或要求优化 PPT 审美、信息层级、视觉中心、叙事节奏时触发。
data-ai
将当前多轮对话上下文压缩为交接文档,以便新的AI agent接手继续沟通。仅当用户请求的文本末尾显式包含以下4个确切关键词之一时才触发此技能:『上下文交接』、『生成交接文档』、『总结上下文』、『换AI继续』。
tools
教用户在 Windows 11 上通过批处理脚本 (.bat) 启动或批量启动指定程序,以及关闭程序。当用户需要启动程序、批量启动多个程序、制作一键启停脚本时触发此技能。