--- name: feishu-cli-export description: 将飞书文档或知识库文档导出为 Markdown 文件。当用户请求"导出文档"、"转换为 Markdown"、"保存为 md"时使用。Markdown 作为中间格式存储在 /tmp 目录。 argument-hint: [output_path] user-invocable: true allowed-tools: Bash, Read --- # 飞书文档导出技能 将飞书云文档或知识库文档导出为本地 Markdown 文件。 ## 核心概念 **Markdown 作为中间态**:本地文档与飞书云文档之间通过 Markdown 格式进行转换,中间文件默认存储在 `/tmp` 目录中。 ## 使用方法 ```bash # 导出普通文档 /feishu-export /feishu-export ./output.md # 导出知识库文档 /feishu-export ``` ## 执行流程 1. **解析参数** - 判断 URL 类型: - `/docx/` → 普通文档 - `/wiki/` → 知识库文档 - document_id:必需 - output_path:可选,默认 `/tmp/.md` 2. **执行导出** **普通文档**: ```bash feishu-cli doc export --output ``` **知识库文档**: ```bash feishu-cli wiki export --output ``` 3. **验证结果** - 读取导出的 Markdown 文件 - 显示文件大小和内容预览 ## 参数说明 | 参数 | 说明 | 默认值 | |------|------|--------| | document_id/node_token | 文档 ID 或知识库节点 Token | 必需 | | output_path | 输出文件路径 | `/tmp/.md` | | --download-images | 下载文档中的图片和画板(画板自动导出为 PNG) | 否 | | --assets-dir | 图片和画板的保存目录 | `./assets` | | --front-matter | 添加 YAML front matter(标题和文档 ID) | 否 | | --highlight | 保留文本颜色和背景色(输出为 HTML `` 标签) | 否 | | --expand-mentions | 展开 @用户为友好格式(需要 contact:user.base:readonly 权限) | 是(默认开启) | ## 支持的 URL 格式 | URL 格式 | 类型 | 命令 | |---------|------|------| | `https://xxx.feishu.cn/docx/` | 普通文档 | `doc export` | | `https://xxx.feishu.cn/wiki/` | 知识库 | `wiki export` | | `https://xxx.larkoffice.com/docx/` | 普通文档 | `doc export` | | `https://xxx.larkoffice.com/wiki/` | 知识库 | `wiki export` | ## 输出格式 ``` 已导出文档! 文件路径: /path/to/output.md 文件大小: 2.5 KB 内容预览: --- # 文档标题 ... ``` ## 示例 ```bash # 导出普通文档 /feishu-export /feishu-export ~/Documents/doc.md # 导出知识库文档 /feishu-export https://xxx.feishu.cn/wiki/ /feishu-export ./wiki_doc.md # 导出并下载图片 /feishu-export --download-images # 导出并添加 YAML front matter /feishu-export -o doc.md --front-matter # 导出并保留文本高亮颜色 /feishu-export -o doc.md --highlight ``` ### Front Matter 输出格式 使用 `--front-matter` 时,导出的 Markdown 文件顶部会添加: ```yaml --- title: "文档标题" document_id: ABC123def456 --- ``` ### 高亮颜色输出格式 使用 `--highlight` 时,带颜色的文本会输出为 HTML `` 标签: ```html 红色文本 蓝色高亮背景 ``` 支持的颜色:7 种字体颜色(红/橙/黄/绿/蓝/紫/灰)+ 14 种背景色(浅/深各 7 种)。 ## 图片处理(重要) 导出文档时务必下载图片,以便后续理解图片内容: ### 导出并下载图片 ```bash # 普通文档 feishu-cli doc export \ --output /tmp/doc.md \ --download-images \ --assets-dir /tmp/doc_assets # 知识库文档 feishu-cli wiki export \ --output /tmp/wiki.md \ --download-images \ --assets-dir /tmp/wiki_assets ``` ### 查看和理解图片 ```bash # 查看下载的图片列表 ls -la /tmp/doc_assets/ # 使用 Read 工具读取图片(Claude 支持多模态) # Read /tmp/doc_assets/image_1.png # Read /tmp/doc_assets/image_2.png ``` ### 完整流程 1. **导出时添加图片参数**:`--download-images --assets-dir ` 2. **检查图片文件**:`ls /` 3. **读取图片内容**:使用 Read 工具逐个读取图片 4. **整合分析**:将图片描述与文档文本结合 ## 错误处理与边界情况 ### 1. 常见错误 | 错误 | 原因 | 解决 | |------|------|------| | `code=131002, param err` | 参数错误 | 检查 token 格式 | | `code=131001, node not found` | 节点不存在 | 检查 token 是否正确 | | `code=131003, no permission` | 无权限访问 | 确认应用有 docx:document 或 wiki:wiki:readonly 权限 | | `code=99991672, open api request rate limit` | API 限流 | 等待几秒后重试 | | `write /tmp/xxx.md: permission denied` | 文件权限问题 | 检查输出目录权限,更换输出路径 | ### 2. 边界情况处理 **情况 1:目录节点导出** - 知识库目录节点导出内容可能显示为 `[Wiki 目录...]` - 这是正常行为,表示该节点是目录而非实际文档 - 使用 `wiki nodes --parent ` 获取子节点 **情况 2:文档内容为空** - 检查文档是否真的为空 - 检查是否有权限查看内容 - 检查是否是目录节点 **情况 3:图片下载失败** - 检查 `--assets-dir` 目录是否存在且可写 - 检查网络连接 - 图片可能已被删除或权限不足 **情况 4:导出中断** - 大型文档导出可能耗时较长 - 如果中断,可以重新执行命令 - 使用 `--output` 指定固定路径以便续传 ### 3. 重试机制 如果遇到网络错误或 API 限流: ```bash # 添加 --debug 查看详细错误信息 feishu-cli doc export --debug # 等待几秒后重试 sleep 5 && feishu-cli doc export ``` ## 已知问题 | 问题 | 说明 | |------|------| | 表格导出 | 表格内单元格内容可能显示为 ``,这是块类型 32(表格单元格)的已知转换问题 | | 目录节点 | 知识库目录节点导出内容为 `[Wiki 目录...]`,需单独获取子节点 | ## 导出块类型支持 | 飞书块类型 | 导出结果 | 说明 | |-----------|---------|------| | 标题 (Heading 1-6) | `# ~ ######` | | | 标题 (Heading 7-9) | `######` 或粗体段落 | 超出 H6 时降级 | | 段落 (Text) | 普通文本 | | | 无序列表 (Bullet) | `- item` | 支持无限深度嵌套 | | 有序列表 (Ordered) | `1. item` | 保留原始编号序列 | | 任务列表 (Todo) | `- [x]` / `- [ ]` | | | 代码块 (Code) | ` ```lang ``` ` | 使用原始文本,无转义 | | 引用 (Quote) | `> text` | | | 引用容器 (QuoteContainer) | `> text` | 支持嵌套引用 | | **Callout 高亮块** | `> [!TYPE]` | 6 种类型 | | **公式 (Equation)** | `$formula$` | 块级公式 | | **行内公式** | `$formula$` | 段落内嵌公式 | | 分割线 (Divider) | `---` | | | 表格 (Table) | Markdown 表格 | 管道符自动转义 | | 图片 (Image) | `\[Image: url\]` | | | 链接 | `[text](url)` | URL 特殊字符自动编码 | | 画板 (Board) | `[画板/Whiteboard](feishu://board/...)` 或 PNG 图片 | 使用 `--download-images` 时自动导出为 PNG | | **ISV 块** | 画板链接或 HTML 注释 | Mermaid 绘图/时间线 | | **Iframe** | `