OpenViking 支持通过 UAT(User Access Token,用户访问凭证)模式导入飞书文档。使用该模式时,OpenViking 会以用户身份读取飞书资源,并将文档内容解析、切片、索引后写入指定数据库。
UAT 模式适用于以下场景:
UAT 模式下,OpenViking 只能读取当前授权用户可访问且授权范围允许读取的飞书资源。
OpenViking 支持导入以下飞书资源:
其中,Wiki 节点会先解析为对应的真实云文档对象,再进入后续读取和解析流程。
本地文件支持控制台上传,CLI上传,API上传三种方式。
打开OpenViking首页,点击输入栏右侧“+”,“数据源同步”中选择“飞书文档”。
填入鉴权参数(获取见“获取鉴权参数”章节),勾选授权须知,完成授权。
填入飞书文档链接,选择目标目录,点击“导入”,即可上传。
示例如下,具体命令与参数详见 add-resource-添加资源。
ov add-resource "https://your-tenant.feishu.cn/docx/DOC_TOKEN" --args feishu_access_token:u-YOUR_USER_ACCESS_TOKEN
示例如下,具体命令与参数详见 add_resource-导入资源。
curl -X POST \ "$OPENVIKING_DATA_HOST/api/v1/resources" \ -H "Authorization: Bearer {api_key}" \ -H "Content-Type: application/json" \ -d '{ "path": "https://example.feishu.cn/docx/<DOCX_TOKEN>", "to": "viking://resources/feishu-doc-watch-demo", "reason": "定时同步飞书文档", "watch_interval": 30, "args": { "feishu_access_token": "<UAT>", "feishu_refresh_token": "<REFRESH_TOKEN>" } }'
在上传前需要获取鉴权参数,有两种方式,推荐使用自动化脚本配置
首先,在终端输入以下代码,从而创建飞书应用。
# 检查node版本 node -v # 安装飞书CLI npm install -g @larksuite/cli # 创建飞书应用 lark-cli config init --new
扫码并创建应用,在终端输入以下代码,完成授权。
# 应用授权 lark-cli auth login --scope "docx:document:readonly wiki:node:read sheets:spreadsheet:read base:app:read base:table:read base:view:read base:field:read base:record:retrieve offline_access docs:document.media:download"
浏览器打开https://open.larkoffice.com/app?lang=zh-CN,点击刚刚创建的应用,在“安全设置”里,配置重定向URL http://localhost:8080/callback
获取app_id, app_secret。
下载以下脚本,在终端执行如下命令,完成授权
python3 main.py <app_id> <app_secret>
在新打开的标签页内,获取相关参数,用于后续上传
常用只读权限如下:
资源类型 | 推荐权限 | 说明 |
|---|---|---|
飞书文档 Docx |
| 读取文档信息、正文和文档块 |
Wiki 节点 |
| 将 Wiki 节点解析为真实文档对象 |
电子表格 |
| 读取电子表格内容 |
多维表格 |
| 读取 Base 应用、表、视图、字段和记录 |
云文档素材 |
| 下载文档、表格或 Base 中的图片、附件等素材 |
离线刷新 |
| 获取 refresh_token,用于长期授权或定时同步 |
推荐的基础权限组合如下:
docx:document:readonly wiki:node:read sheets:spreadsheet:read base:app:read base:table:read base:view:read base:field:read base:record:retrieve
如需解析图片、附件等内嵌素材,可追加:
docs:document.media:download
如需定时同步,需要在 “安全设置” 中开启 “刷新 user_access_token” ,并追加:
offline_access
注意:飞书应用后台新增权限后,已签发的 UAT 不会自动获得新权限。应用权限变更并发布后,用户需要重新授权,才能获取包含新权限的 UAT。
App_id, App_secret,供后续使用。user_access_token 是 UAT 模式的核心凭证。OpenViking 会使用该 Token 以用户身份读取飞书文档。refresh_token用于获取新的 user_access_token,供定时同步和长期授权使用。
原理参考文档:获取授权码
https://accounts.feishu.cn/open-apis/authen/v1/authorize?client_id=<APP_ID>&response_type=code&redirect_uri=<URL_ENCODED_REDIRECT_URI>&scope=<URL_ENCODED_SCOPES>&prompt=consent&state=<RANDOM_STATE>
参数说明:
参数 | 是否必填 | 说明 |
|---|---|---|
| 是 | 飞书应用的 App ID |
| 是 | 固定为 |
| 是 | 授权完成后的回调地址,需提前在飞书应用后台登记 |
| 是 | 本次申请的权限范围,多个 scope 使用空格分隔 |
| 否 | 建议设置为 |
| 是 | 随机字符串,用于防止 CSRF 攻击 |
示例:
https://accounts.feishu.cn/open-apis/authen/v1/authorize?client_id=<APP_ID>&response_type=code&redirect_uri=<redirect_uri>&scope=docx:document:readonly wiki:node:read sheets:spreadsheet:read base:app:read base:table:read base:view:read base:field:read base:record:retrieve docs:document.media:download offline_access&prompt=consent&state=feishu_oauth_20260819
redirect_uri,并携带:code=<AUTH_CODE>&state=<RANDOM_STATE>
授权码
code有效期较短且只能使用一次,请在服务端收到后立即换取 Token。
终端使用授权码调用飞书 Token 接口:
curl -X POST \ 'https://accounts.feishu.cn/oauth/v3/token' \ -H 'Content-Type: application/json; charset=utf-8' \ -d '{ "grant_type": "authorization_code", "client_id": "<APP_ID>", "client_secret": "<APP_SECRET>", "code": "<CODE>", "redirect_uri": "<REDIRECT_URI>" }'
成功后,响应中的 access_token 即为 user_access_token。
如果授权范围中包含 offline_access,响应中还会包含 refresh_token,可用于后续刷新 UAT。