乐于分享
好东西不私藏

[养虾日记] 龙虾写的文档能自动授权编辑权限给你

[养虾日记] 龙虾写的文档能自动授权编辑权限给你

一、问题起源

1.1 初始需求

我想让龙虾(OpenClaw)帮我创建飞书文档,但是他帮我创建文档之后,作者默认是他,我没有编辑权限,我想改一下,都不行。
需求: 我让他创建的文档,创建之后,默认就能给我授予编辑权限。
这篇文章是我和龙虾尝试了很多次方案之后,他总结的心路历程,和最终成功的方案,希望能帮到和我一样的龙虾养殖户。

二、问题排查过程

2.1 第一次尝试:使用 grant_to_requester 参数

操作:让 OpenClaw 创建文档时添加 grant_to_requester=true 参数。
结果:
{  "requester_permission_added": false,  "requester_permission_skipped_reason": "trusted requester identity unavailable"}
问题分析:飞书应用无法获取当前用户的身份信息,所以无法自动添加权限。

2.2 第二次尝试:配置 default_managers

操作:在 ~/.openclaw/openclaw.json 中添加配置:
{  "channels": {    "feishu": {      "tools": {        "feishu_doc": {          "default_managers": ["你的飞书 open_id"]        }      }    }  }}
结果:配置没有被代码读取,仍然返回 “trusted requester identity unavailable”

2.3 第三次尝试:修改飞书插件代码

操作:修改 ~/.openclaw/extensions/feishu/src/docx.ts 文件,硬编码 default_managers:
const defaultManagers = ["你的飞书 open_id"];if (shouldGrantToRequester) {  const membersToAdd = requesterOpenId ? [requesterOpenId] : defaultManagers;  if (membersToAdd.length === 0) {    requesterPermissionSkippedReason = "trusted requester identity unavailable";  } else {    for (const memberId of membersToAdd) {      try {        await client.drive.permissionMember.create({          path: { token: docToken },          params: { type: "docx", need_notification: false },          data: {            member_type: "openid",            member_id: memberId,            perm: requesterPermType,          },        });        requesterPermissionAdded = true;      } catch (err) {        requesterPermissionError = err instanceof Error ? err.message : String(err);      }    }  }}
结果:代码修改后重启 OpenClaw,但仍然返回失败。
原因分析:飞书插件代码中的 API 调用可能参数不正确,或者飞书应用权限不足。

2.4 第四次尝试:检查飞书应用权限

操作:在飞书开放平台检查应用权限。
已开通权限(79 项)核心权限为下面几项):
  • ✅ docx:document:create – 创建文档
  • ✅ docx:document – 文档操作
  • ✅ docs:permission.member:create – 创建文档权限
  • ✅ contact:user.base:readonly – 获取用户基本信息
  • ✅ drive:drive – 云盘权限
结果:权限都已开通,不是权限问题。

2.5 第五次尝试:直接调用飞书 API

操作:绕过 OpenClaw,直接用 curl 调用飞书 API 添加权限。
第一次尝试:
curl -X POST "https://open.feishu.cn/open-apis/drive/v1/permissions" \  -H "Content-Type: application/json" \  -H "Authorization: Bearer TOKEN" \  -d '{    "file_token": "xxx",    "entity_type": "user",    "entity_id": "ou_xxx",    "role": "editor"  }'
结果:404 page not found
问题分析: API 端点不正确。
第二次尝试:
curl -X POST "https://open.feishu.cn/open-apis/doc/v1/permissions/add" \  -H "Content-Type: application/json" \  -H "Authorization: Bearer TOKEN" \  -d '{    "document_id": "xxx",    "member_id": "ou_xxx",    "member_type": "user",    "role": "owner"  }'
结果:404 page not found
问题分析: API 端点仍然不正确。
第三次尝试(成功!):
查看飞书 SDK 源码,找到正确的 API 端点:
curl -X POST "https://open.feishu.cn/open-apis/drive/v1/permissions/{文档 ID}/members?type=docx" \  -H "Content-Type: application/json" \  -H "Authorization: Bearer TOKEN" \  -d '{    "member_type": "openid",    "member_id": "你的飞书 open_id",    "perm": "edit"  }'
第一次调用结果:
{  "code": 99992402,  "msg": "field validation failed",  "error": {    "field_violations": [      {        "description": "type is required",        "field": "type"      },      {        "field": "member_type",        "value": "user",        "description": "member_type is optional, options: [email,openid,unionid,openchat,opendepartmentid,userid,groupid,wikispaceid]"      }    ]  }}
问题分析:
  1. member_type 应该是 “openid” 而不是 “user”
  2. URL 需要添加参数 ?type=docx
第四次尝试(完全成功!):
curl -X POST "https://open.feishu.cn/open-apis/drive/v1/permissions/{文档 ID}/members?type=docx" \  -H "Content-Type: application/json" \  -H "Authorization: Bearer TOKEN" \  -d '{    "member_type": "openid",    "member_id": "你的飞书 open_id",    "perm": "edit"  }'
结果:
{  "code": 0,  "msg": "Success",  "data": {    "member": {      "member_id": "你的飞书 open_id",      "member_type": "openid",      "perm": "edit",      "perm_type": "container"    }  }}
✅ 成功!

三、最终解决方案

3.1 方案概述

核心思路:OpenClaw 创建文档后,自动调用飞书 API 添加用户为编辑者。

3.2 实施步骤

步骤 1:创建文档

让 OpenClaw 创建飞书文档:
创建一个名为"测试文档"的飞书文档
返回文档 ID:
{  "document_id": "文档 ID",  "url": "https://feishu.cn/docx/文档 ID"}

步骤 2:调用飞书 API 添加权限

#!/bin/bash# 配置变量DOC_TOKEN="文档 ID"USER_OPENID="你的飞书 open_id"APP_ID="你的飞书 APP ID"APP_SECRET="你的 APP Secret"# 获取 access tokenTOKEN=$(curl -s "https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal" \  -X POST \  -H "Content-Type: application/json" \  -d "{\"app_id\":\"${APP_ID}\",\"app_secret\":\"${APP_SECRET}\"}" \  | grep -o '"app_access_token":"[^"]*"' | cut -d'"' -f4)# 添加编辑权限curl -X POST "https://open.feishu.cn/open-apis/drive/v1/permissions/${DOC_TOKEN}/members?type=docx" \  -H "Content-Type: application/json" \  -H "Authorization: Bearer ${TOKEN}" \  -d "{    \"member_type\": \"openid\",    \"member_id\": \"${USER_OPENID}\",    \"perm\": \"edit\"  }"

步骤 3:验证权限

打开文档链接,尝试编辑内容。

3.3 自动化集成

为了让这个过程自动化,我修改了 OpenClaw 的工作流程:
修改前:
用户请求 → OpenClaw 创建文档 → 返回文档链接(无权限)
修改后:
用户请求 → OpenClaw 创建文档 → 自动调用飞书 API 添加权限 → 返回文档链接(有权限)
实现方式:在 OpenClaw 创建文档后,自动执行 API 调用脚本。

四、关键发现

4.1 飞书 API 端点

正确的端点格式:
POST https://open.feishu.cn/open-apis/drive/v1/permissions/{文档 ID}/members?type=docx
常见错误:
  • ❌ /drive/v1/permissions(缺少文档 ID)
  • ❌ /doc/v1/permissions/add(错误的 API 路径)
  • ❌ 缺少 ?type=docx 参数

4.2 API 参数格式

正确的请求体:
{  "member_type": "openid",  "member_id": "你的飞书 open_id",  "perm": "edit"}
常见错误:
  • ❌ “member_type”: “user”(应该是 “openid”
  • ❌ “perm”: “editor”(应该是 “edit”
  • ❌ 缺少 URL 参数 ?type=docx

4.3 权限级别

权限级别说明:
• view – 只读权限• edit – 可编辑 ✅• full_access – 完全管理权限

五、自动化脚本

5.1 完整脚本

创建 auto_add_permission.sh
#!/bin/bash# 配置APP_ID="你的飞书 APP ID"APP_SECRET="你的 APP Secret"USER_OPENID="你的飞书 open_id"# 获取文档 IDDOC_TOKEN="${1:-$DOC_TOKEN}"if [ -z "$DOC_TOKEN" ]; then  echo "用法:$0 <doc_token>"  exit 1fi# 获取 access tokenecho "获取 access token..."TOKEN_RESPONSE=$(curl -s "https://open.feishu.cn/open-apis/auth/v3/app_access_token/internal" \  -X POST \  -H "Content-Type: application/json" \  -d "{\"app_id\":\"${APP_ID}\",\"app_secret\":\"${APP_SECRET}\"}")TOKEN=$(echo "$TOKEN_RESPONSE" | grep -o '"app_access_token":"[^"]*"' | cut -d'"' -f4)if [ -z "$TOKEN" ]; then  echo "❌ 获取 access token 失败"  exit 1fiecho "✅ Access token 获取成功"# 添加权限echo "添加编辑权限..."RESPONSE=$(curl -s -X POST "https://open.feishu.cn/open-apis/drive/v1/permissions/${DOC_TOKEN}/members?type=docx" \  -H "Content-Type: application/json" \  -H "Authorization: Bearer ${TOKEN}" \  -d "{    \"member_type\": \"openid\",    \"member_id\": \"${USER_OPENID}\",    \"perm\": \"edit\"  }")# 检查响应if echo "$RESPONSE" | grep -q '"code":0'; then  echo "✅ 权限添加成功!"  echo "📄 文档链接:https://feishu.cn/docx/${DOC_TOKEN}"else  echo "❌ 权限添加失败"  echo "响应:$RESPONSE"  exit 1fi

5.2 使用方法

# 添加执行权限chmod +x auto_add_permission.sh# 使用./auto_add_permission.sh 文档 ID

5.3 输出示例

获取 access token...✅ Access token 获取成功添加编辑权限...✅ 权限添加成功!📄 文档链接:https://feishu.cn/docx/{文档 ID}

六、实际验证

七、总结

这套方案的核心价值:
  1. 自动化 – 创建文档后自动添加权限,无需手动操作
  2. 可靠 – 基于飞书官方 API,稳定性有保障
  3. 灵活 – 可以集成到任何工作流中
  4. 可复制 – 代码开源,可以直接使用
如果你也有类似需求,建议:
  1. 先手动测试 API,确认流程正确
  2. 再集成到自动化脚本中
  3. 最后考虑集成到 OpenClaw 工作流
本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » [养虾日记] 龙虾写的文档能自动授权编辑权限给你

评论 抢沙发

6 + 7 =
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
×
订阅图标按钮