多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

CodePilot 中飞书云文档获取实战指南:feishu-fetch-doc SKILL 的媒体处理、Wiki 判型与工具链路由

CodePilot 中飞书云文档获取实战指南:feishu-fetch-doc SKILL 的媒体处理、Wiki 判型与工具链路由 人工智能AI 应用AI Agent交互助手MCP Clients本地部署【免费下载链接】CodePilotA multi-model AI agent desktop client — connect any AI provider, extend with MCP skills, control from your phone. Built with Electron Next.js.项目地址https://gitcode.com/gh_mirrors/co0dep/CodePilot点击查看免费下载本篇技术指南以当前仓库中飞书/OpenClaw 插件技能包内的 feishu-fetch-doc SKILL 文档 为核心完整讲解如何让 AI Agent 读取飞书云文档的 Markdown 内容、如何识别并下载文档内的图片/文件/画板以及知识库Wiki链接的类型判别与工具路由策略。读完本文你将掌握feishu_fetch_doc、feishu_doc_media、feishu_wiki_space_node三件工具的正确调用姿势并能结合插件源码理解其底层实现与配置前提。feishu-fetch-doc 是什么feishu-fetch-doc是飞书/OpenClaw 官方插件feishu-openclaw-plugin技能包中用于获取飞书云文档内容的 SKILL。其定位非常聚焦调用底层 MCP 工具feishu_fetch_doc把一篇飞书云文档docx转换为Markdown 格式文本Lark-flavored返回给 Agent供后续阅读、摘要、改写、存档等场景使用。在插件结构中SKILL 通过 openclaw.plugin.json 中的skills: [./skills]字段声明并挂载属于插件交付的能力说明书层真正执行调用的则是src/tools/mcp/doc/fetch.js中注册的 MCP 工具。从源码看该工具通过飞书官方 MCP 网关默认https://mcp.feishu.cn/mcp以 JSON-RPCtools/call方式完成调用并携带用户级访问令牌UAT与X-Lark-MCP-Allowed-Tools请求头做权限约束见 fetch.js 与 shared.js。doc_id 参数的三种传法SKILL 中feishu_fetch_doc只有一个必填参数doc_id且设计得非常宽容支持三种写法传法示例说明完整 URLhttps://xxx.feishu.cn/docx/Z1FjxxxxxxxxxxxxxxxxxxxtnAc系统自动提取 URL 中的 token纯 tokenZ1FjxxxxxxxxxxxxxxxxxxxtnAc直接传文档标识知识库 URL/tokenhttps://xxx.feishu.cn/wiki/Z1FjxxxxxxxxxxxxxxxxxxxtnAc或Z1FjxxxxxxxxxxxxxxxxxxxtnAc支持 Wiki 节点但需先判型见下文这一设计在源码中得到印证fetch.js 中FetchDocSchema的doc_id字段描述即为文档 ID 或 URL支持自动解析。更进一步的实现证据可见 doc-media.js 中的extractDocumentId函数它通过正则/\/docx\/([A-Za-z0-9])/从 URL 中提取document_id匹配失败时直接返回输入字符串本身——这就是传 URL 自动提取、传 token 原样使用的底层逻辑。此外feishu_fetch_doc的 schema 还暴露了两个可选分页参数offset整数最小 0默认 0字符偏移量用于大文档分页获取limit整数最小 1返回的最大字符数仅在用户明确要求分页时使用。也就是说面对超长文档Agent 不必一次性拉取全部内容可以配合offset/limit按段读取避免截断与超时。重要文档内的图片、文件、画板需单独下载SKILL 文档用醒目篇幅强调feishu_fetch_doc只返回文本化的 Markdown 内容文档中的图片、文件、画板不会内嵌字节流而是以 HTML 标签形式出现在返回文本中必须通过feishu_doc_mediaaction:download工具单独获取。识别三种媒体标签格式返回的 Markdown 中媒体资源按以下三种 HTML 标签形态出现图片image tokenZ1FjxxxxxxxxxxxxxxxxxxxtnAc width1833 height2491 aligncenter/文件view type1 file tokenZ1FjxxxxxxxxxxxxxxxxxxxtnAc nameskills.zip/ /view画板whiteboard tokenZ1FjxxxxxxxxxxxxxxxxxxxtnAc/Agent 的正确动作是从标签中提取token属性值然后调用feishu_doc_media下载。下载步骤从 HTML 标签中提取token属性值调用feishu_doc_mediaaction:download{ action: download, resource_token: 提取的token, resource_type: media, output_path: /path/to/save/file }底层实现细节doc-media.js 对downloadaction 的实现补充了 SKILL 未展开的关键细节值得 Agent 开发者留意resource_type只有两种取值media文档素材图片、视频、文件等走drive.v1.media.download接口和whiteboard画板走board.v1.whiteboard.downloadAsImage接口返回缩略图。下载画板时应传resource_type: whiteboard。output_path的扩展名智能补全如果output_path不带扩展名工具会根据响应头Content-Type自动追加扩展名内置MIME_TO_EXT映射表覆盖 png/jpg/gif/webp/mp4/pdf/doc/xls/ppt/zip/txt/json 等常见类型画板类型无 MIME 时默认补.png。例如output_path: /tmp/avatar可能实际保存为/tmp/avatar.png返回结果中的saved_path字段会给出最终路径。下载完成后返回size_bytes、content_type、saved_path等字段便于 Agent 校验与引用。对应地该工具还支持insertaction在文档末尾插入本地图片/文件单文件最大 20MB与下载形成闭环但 SKILL 本次仅涉及download。Wiki URL 处理策略先判型再路由知识库链接/wiki/TOKEN背后可能指向云文档、电子表格、多维表格等不同类型的对象。SKILL 明确告诫当不确定类型时不能直接假设是云文档docx必须先查询实际类型——否则用文档工具去读电子表格或多维表格会失败或产生错误语义。三步处理流程先调用feishu_wiki_space_nodeaction:get解析 wiki token{ action: get, token: wiki_token_here }从返回的node中获取obj_type实际文档类型和obj_token实际文档 token根据obj_type调用对应工具obj_type工具传参docxfeishu_mcp_fetch_docdoc_id obj_tokensheetfeishu_sheetspreadsheet_token obj_tokenbitablefeishu_bitable_*系列app_token obj_token其他告知用户暂不支持该类型—完整示例用户帮我看下这个文档 https://xxx.feishu.cn/wiki/ABC123调用feishu_wiki_space_nodeaction: get, token: ABC123返回obj_type: docx,obj_token: doxcnXYZ789调用feishu_mcp_fetch_docdoc_id: doxcnXYZ789。源码侧的依据与边界space-node.js 中feishu_wiki_space_node的getaction 会调用飞书 Wiki API 的get_node接口obj_type默认按wiki解析并返回node对象——SKILL 中的obj_type/obj_token正是取自该返回结构。同时该工具的描述字段也明确写道node_token 是节点的唯一标识符obj_token 是实际文档的 token。可通过 get 操作将 wiki 类型的 node_token 转换为实际文档的 obj_token与 SKILL 的策略完全一致。需要说明的边界getaction 的 schema 允许显式传入obj_type可取值包括doc、sheet、mindnote、bitable、file、docx、slides、wiki用于在已知类型时加速解析而 SKILL 路由表只覆盖docx、sheet、bitable三种主流类型其余类型如mindnote思维笔记、slides幻灯片、file文件在 SKILL 层面按告知用户暂不支持处理——Agent 编排时应把这种兜底路径也写进自己的判断逻辑。工具组合一览围绕读取飞书云文档这一需求SKILL 给出了配套工具矩阵需求工具获取文档文本feishu_mcp_fetch_doc下载图片/文件/画板feishu_doc_mediaaction: download解析 wiki token 类型feishu_wiki_space_nodeaction: get读写电子表格feishu_sheet操作多维表格feishu_bitable_*系列从插件注册逻辑看这些工具并非无条件启用doc/index.js 会先检查配置中tools.doc开关关闭则整个 MCP doc 工具集不注册drive/index.js 对应检查tools.drive开关决定feishu_doc_media等是否可用。因此实战中若 Agent 提示找不到工具应优先确认 OpenClaw 配置中对应工具分类是否被启用。权限与运行前提根据插件 README 的说明读取飞书云文档需要应用具备docx:document:readonly权限发送消息等操作还需要im:message:send_as_bot等权限应用创建后应在开放平台权限管理中批量导入完整权限列表并完成发布审批。MCP 调用链路还依赖飞书 MCP 网关地址其解析优先级为运行时 override openclaw.json中的channels.feishu.mcpEndpoint兼容旧字段mcp_url 环境变量FEISHU_MCP_ENDPOINT 默认值https://mcp.feishu.cn/mcp详见 shared.js如需服务端鉴权可通过环境变量FEISHU_MCP_BEARER_TOKEN或FEISHU_MCP_TOKEN注入。实战要点小结区分文本与媒体feishu_fetch_doc只负责 Markdown 文本图片/文件/画板一律以image、file、whiteboard标签暴露 token需要二次调用feishu_doc_media下载。Wiki 链接必须判型对/wiki/链接先走feishu_wiki_space_node的get拿到obj_type/obj_token再按表路由到 docx/sheet/bitable 工具切勿假设 wiki 即云文档。善用分页与扩展名补全大文档用offset/limit分段读取feishu_doc_media下载时输出路径可不写扩展名由工具按 Content-Type 自动补全。检查工具开关与权限tools.doc、tools.drive开关决定工具是否注册docx:document:readonly等权限决定调用是否成功。本文涉及的全部源码、SKILL 与配置示例均位于当前仓库 资料/feishu-openclaw-plugin/package 目录下读者可按 SKILL.md、fetch.js、doc-media.js、space-node.js 的路径顺序深入研读。赞分享人工智能AI 应用AI Agent交互助手MCP Clients本地部署【免费下载链接】CodePilotA multi-model AI agent desktop client — connect any AI provider, extend with MCP skills, control from your phone. Built with Electron Next.js.项目地址https://gitcode.com/gh_mirrors/co0dep/CodePilot点击查看免费下载相关推荐feishu-doc-export飞书文档批量导出的完整指南feishu doc export飞书文档批量导出的完整指南 还在为飞书文档迁移而烦恼吗feishu doc export就是你的救星这款基于.NET CCLI企业应用3步搞定飞书文档迁移的终极工具feishu-doc-export3步搞定飞书文档迁移的终极工具feishu doc export 还在为飞书文档导出烦恼吗试试 feishu doc export ——这款跨平台神器能让7CLI企业应用飞书文档导出工具(Feishu Doc Export)的批量下载优化实践飞书文档导出工具 Feishu Doc Export 的批量下载优化实践 背景介绍 飞书文档导出工具是一个用于批量导出飞书知识库文档的开源项目。在实际使用过程中CLI企业应用上一篇WarcraftHelper让魔兽争霸3在现代电脑上焕发新生的144Hz高帧率优化方案下一篇WarcraftHelper魔兽争霸III终极优化指南 - 解锁帧率、宽屏适配与地图限制解除创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表