运行时依赖
安装命令
点击复制技能文档
飞书文档权限自动添加
🎯 一句话总结:飞书应用创建的文档,用户默认无权限。这个 技能 帮你自动添加权限。
前置条件 条件 说明 飞书开发者账号 需要有飞书开放平台的开发者权限 企业自建应用 已创建或有权创建飞书应用 应用权限 应用需开通 docs:权限.member:创建 权限 变量速查表 变量名 来源 用途 $应用_ID 配置文件 channels.feishu.应用Id 应用标识 $应用_SECRET 配置文件 channels.feishu.应用Secret 应用密钥 $OWNER_OPEN_ID 配置文件或会话上下文 权限接收者 $TENANT_令牌 API 获取 请求鉴权 $FILE_令牌 创建返回或 URL 解析 文档标识 $DOC_TYPE URL 路径识别 文档类型 第一步:检查配置 ⚠️ 1.1 读取配置文件
配置文件位置:~/.OpenClaw/OpenClaw.json
1.2 检查必需字段
在 channels.feishu 下查找:
字段名 说明 示例值 必需性 应用Id 飞书应用 ID 命令行工具_xxxxxxxx ✅ 必需 应用Secret 飞书应用密钥 xxxxxxxx ✅ 必需 ownerOpenId 用户的 open_id ou_xxx ⚪ 可选
ownerOpenId 在配置文件中可选,但执行时必须有值。若配置文件缺失,从会话上下文提取(格式 user:ou_xxx → ou_xxx)。
配置示例:
{ "channels": { "feishu": { "enabled": true, "应用Id": "命令行工具_xxxxxxxx", "应用Secret": "xxxxxxxx", "ownerOpenId": "ou_xxx" } } }
1.3 检查应用权限
使用 feishu_应用_scopes() 查询当前飞书应用已开通的权限列表。
检查返回结果中是否包含 docs:权限.member:创建:
✅ 有 → 权限正常,继续下一步 ❌ 无 → 跳转到 配置引导流程 C
💡 如检查出有权限,后续可跳过此步骤。
1.4 判断逻辑
根据检查结果,按以下流程处理:
┌─────────────────────────────────────────────────────────┐ │ 检查 应用Id + 应用Secret │ │ ├─ ❌ 缺失 → [配置引导流程 A] │ │ └─ ✅ 完整 ↓ │ │ 检查应用权限 docs:权限.member:创建 │ │ ├─ ❌ 缺失 → [配置引导流程 C] │ │ └─ ✅ 完整 ↓ │ │ 检查 ownerOpenId │ │ ├─ ✅ 配置文件有 → 进入第二步 │ │ ├─ ✅ 会话上下文有 → 提取使用,进入第二步 │ │ └─ ❌ 都没有 → [配置引导流程 B] │ └─────────────────────────────────────────────────────────┘
工具调用映射 🛠️
明确每个步骤应使用的工具,确保 代理 能正确执行
步骤 操作 工具 说明 1.1 读取配置文件 read 读取 ~/.OpenClaw/OpenClaw.json 1.3 检查应用权限 feishu_应用_scopes 查询已开通权限列表 2.2 获取 tenant_访问_令牌 exec 执行 curl 命令请求 API 2.3 解析文档 令牌 内置逻辑 从 URL 或返回值中提取 2.4 添加用户权限 exec 执行 curl 命令请求 API 配置写入 保存 ownerOpenId edit 更新 OpenClaw.json
工具调用示例:
# 读取配置文件 read("~/.OpenClaw/OpenClaw.json")
# 检查应用权限 feishu_应用_scopes()
# 获取 tenant_访问_令牌 exec('curl -s -X POST "https://open.feishu.cn/open-APIs/auth/v3/tenant_访问_令牌/internal" ...')
# 添加权限 exec('curl -s -X POST "https://open.feishu.cn/open-APIs/drive/v1/权限s/..." ...')
# 保存配置 edit("~/.OpenClaw/OpenClaw.json", oldText, newText)
第二步:执行权限添加 📋
前置条件:第一步检查全部通过
2.1 读取配置
工具:read
应用_ID="读取到的应用Id" 应用_SECRET="读取到的应用Secret" OWNER_OPEN_ID="读取到的ownerOpenId"
2.2 获取 tenant_访问_令牌
工具:exec
进度提示:[1/4] 获取访问令牌...
请求:
curl -s -X POST "https://open.feishu.cn/open-APIs/auth/v3/tenant_访问_令牌/internal" \ -H "Content-Type: 应用/json" \ -d "{ \"应用_id\": \"$应用_ID\", \"应用_secret\": \"$应用_SECRET\" }"
成功返回:
{ "code": 0, "msg": "ok", "tenant_访问_令牌": "xxxx", "expire": 5535 }
失败返回:
{ "code": 10003, "msg": "应用 id or 应用 secret is invalid" }
处理:
✅ 成功:提取 tenant_访问_令牌,继续下一步 ❌ 失败:提示用户检查 应用 ID 和 应用 Secret 是否正确
令牌 缓存策略:
令牌 类型 有效期 缓存建议 tenant_访问_令牌 约 2 小时 缓存至会话变量,过期前 5 分钟刷新
缓存实现:
使用会话级变量存储:缓存D_TENANT_令牌, 令牌_EXPIRE_TIME 每次请求前检查:若 now < 令牌_EXPIRE_TIME - 300,直接使用缓存 2.3 获取云文档 令牌
进度提示:[2/4] 解析文档 令牌...
来源:
创建飞书文档后返回的 令牌 或文档 URL 从用户提供的文档链接解析
URL 解析规则:
文档类型 URL 示例 文件夹 https://xxx.feishu.cn/drive/folder/【令牌】 文件 https://xxx.feishu.cn/file/【令牌】 旧版文档 https://xxx.feishu.cn/docs/【令牌】 新版文档 https://xxx.feishu.cn/docx/【令牌】 电子表格 https://xxx.feishu.cn/【令牌】 多维表格 https://xxx.feishu.cn/base/【令牌】 知识空间 https://xxx.feishu.cn/wiki/设置tings/【令牌】 知识库节点 https://xxx.feishu.cn/wiki/【令牌】
⚠️ 复制 URL 时注意删除末尾多余的 # 符号。
自动识别 doc_type:
URL 路径特征 doc_type /drive/folder/ folder /file/ file /docs/ doc /docx/ docx /base/ bitable /wiki/ wiki 其他(根路径) sheet
识别逻辑:
从 URL 提取 令牌(最后一个路径段,去除 ? 和 # 后的内容) 根据 URL 路径匹配 doc_type 若无法匹配,提示用户提供文档类型
变量定义:
FILE_令牌 = 获取到的云文档 令牌 DOC_TYPE = 识别到的文档类型 2.4 添加用户权限
工具:exec
进度提示:[3/4] 添加用户权限...
请求:
curl -s -X POST "https://open.feishu.cn/open-APIs/drive/v1/权限s/{FILE_令牌}/members/batch_创建?type={DOC_TYPE}" \ -H "Content-Type: 应用/json" \ -H "Authorization: Bearer {tenant_访问_令牌}" \ -d "{ \"members\": [{ \"member_type\": \"openid\", \"member_id\": \"$OWNER_OPEN_ID\", \"perm\": \"full_访问\" }] }"
参数说明:
参数 来源 示例 {FILE_令牌} 创建文档时返回或 URL 解析 xxxxx {DOC_TYPE} URL 路径自动识别 bitable {tenant_访问_令牌} 上一步获取 t-xxx $OWNER_OPEN_ID ownerOpenId ou_xxx
doc_type 可选值:
值 文档类型 bitable 多维表格 docx 新版文档 doc 旧版文档 sheet 电子表格 folder 文件夹 file 云空间文件 wiki 知识库节点
成功返回:
{ "code": 0, "msg": "成功", "data": { "members": [{ "member_id": "xxxx", "member_type": "openid", "perm": "full_访问" }] } }
2.5 执行结果反馈
进度提示:[4/4] 完成!
成功时:
✅ 权限添加成功!
📄 文档:{文档标题或 令牌} 🔗 链接:{文档 URL} 👤 权限:完整权限 (full_访问) 你现在可以直接访问和编辑这个文档了。 如果配置文件中没有ownerOpenId 并询问 是否需要将 ownerOpenId 写入配置文件中
失败时:
❌ 权限添加失败
原因:{错误信息} 解决方案:{具体步骤}
需要帮助?请提供以上信息。
使用示例 📝 示例 1:创建多维表格后自动添加权限
用户:帮我创建一个多维