lark_wiki_operate_as_bot.va.../SKILL.md

3.3 KiB
Raw Blame History

name version description metadata
lark_wiki_operate_as_bot 1.0.0 飞书知识库Bot身份操作专用技能统一使用Bot身份遍历目录、读取知识库文档内容禁止触发用户身份授权
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获取节点基础信息

LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli wiki spaces get_node --params '{"token":"<wiki_token>"}' --as bot

返回结果中提取关键信息:

  • space_id知识空间ID
  • obj_token文档真实ID若节点为文档
  • has_child:是否为目录(含子节点)
  • obj_type节点类型docx/sheet/bitable等

步骤3遍历目录子节点仅当has_child=true时

3.1 获取Bot租户访问凭证

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接口获取子节点列表

curl -s -X GET "https://open.feishu.cn/open-apis/wiki/v2/spaces/<space_id>/nodes?parent_node_token=<wiki_token>" \
  -H "Authorization: Bearer <tenant_access_token>"

返回子节点完整列表(名称、链接、类型等)

步骤4读取文档内容仅当节点为文档时

LARKSUITE_CLI_CONFIG_DIR=/root/.openclaw/credentials/xiaoyan lark-cli docs +fetch --doc <obj_token> --as bot

权限要求

1. 应用权限(飞书开发者后台配置)

权限名称 Scope 类型
获取知识空间节点信息 wiki:node:retrieve 只读
查看文档内容 docx:document:readonly 只读

2. 知识空间配置

需要将Bot应用添加到目标知识空间的成员列表授予至少「可查看」权限

异常处理

  • 接口返回99991401(无权限):按权限不足规则回复用户
  • 接口返回404:检查wiki_token/space_id是否正确,确认链接为有效知识库链接