--- name: lark_wiki_operate_as_bot version: 1.0.0 description: "飞书知识库Bot身份操作专用技能,统一使用Bot身份遍历目录、读取知识库文档内容,禁止触发用户身份授权" metadata: requires: permissions: ["wiki:node:retrieve", "docx:document:readonly"] --- # lark_wiki_operate_as_bot 技能规范 ## 核心规则(强制执行) 1. **身份限制**:所有知识库操作**永远使用Bot身份**执行,绝对不触发任何用户身份授权弹窗 2. **文档范围限制**:仅支持读取飞书知识库(`/wiki/`开头的链接)文档,**不支持读取用户私有个人文档**(`/doc/`/`/sheet/`等非wiki开头的个人路径) 3. **权限告知规则**: - 收到非知识库文档链接:直接回复「我仅支持读取飞书知识库(Wiki)文档,暂不支持读取个人私有文档,请提供知识库链接」 - Bot无权限访问目标知识空间:回复「当前Bot无访问该知识空间权限,请将Bot应用添加为该知识空间成员并授予查看权限后重试」 ## 适用场景 - 遍历知识库目录下的子文档/子目录 - 读取知识库文档内容 - 批量导出知识库文档 - 所有知识库相关的查询、读取操作 ## 完整执行链路 ### 步骤1:链接解析 - 从用户提供的链接中提取`wiki_token`:例如链接`https://xxx.feishu.cn/wiki/XXXXXXX`中的`XXXXXXX`即为`wiki_token` - 若链接不含`/wiki/`路径,直接按非知识库文档规则回复 ### 步骤2:获取节点基础信息 ```bash LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli wiki spaces get_node --params '{"token":""}' --as bot ``` 返回结果中提取关键信息: - `space_id`:知识空间ID - `obj_token`:文档真实ID(若节点为文档) - `has_child`:是否为目录(含子节点) - `obj_type`:节点类型(docx/sheet/bitable等) ### 步骤3:遍历目录子节点(仅当has_child=true时) #### 3.1 获取Bot租户访问凭证 ```bash curl -s -X POST "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" \ -H "Content-Type: application/json" \ -d '{"app_id":"cli_xxx","app_secret":"xxx"}' \ | jq -r '.tenant_access_token' ``` 得到`tenant_access_token`(有效期2小时) #### 3.2 调用Wiki V2接口获取子节点列表 ```bash curl -s -X GET "https://open.feishu.cn/open-apis/wiki/v2/spaces//nodes?parent_node_token=" \ -H "Authorization: Bearer " ``` 返回子节点完整列表(名称、链接、类型等) ### 步骤4:读取文档内容(仅当节点为文档时) ```bash LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli docs +fetch --doc --as bot ``` ## 权限要求 ### 1. 应用权限(飞书开发者后台配置) | 权限名称 | Scope | 类型 | |---------|-------|------| | 获取知识空间节点信息 | `wiki:node:retrieve` | 只读 | | 查看文档内容 | `docx:document:readonly` | 只读 | ### 2. 知识空间配置 需要将Bot应用添加到目标知识空间的成员列表,授予至少「可查看」权限 ## 异常处理 - 接口返回`99991401`(无权限):按权限不足规则回复用户 - 接口返回`404`:检查`wiki_token`/`space_id`是否正确,确认链接为有效知识库链接