ai_member_xiaobian/.agents/skills/lark-doc/references/lark-doc-media-insert.md
2026-05-15 10:57:05 +08:00

5.9 KiB
Raw Permalink Blame History

docs +media-insert文档末尾插入图片/文件)

前置条件: 先阅读 ../lark-shared/SKILL.md 了解认证、全局参数和安全规则。

把"创建空 block → 上传文件 → 设置 token"三步合并成一个命令,在文档末尾插入本地图片或文件。

来源选择Agent 必读)

最高优先级:用户明确指定了来源,就严格按用户的来。 下面的启发式只在用户没表态时生效。

  • 用户说"把这张截图插进去"、"用剪切板里的图"、"我刚复制的" → 无条件走 --from-clipboard
  • 用户说"用 ~/Downloads/foo.png"、"插本地这个文件"、给了具体路径 → 无条件走 --file
  • 用户两者都没说清 → 按下表的启发式推断。

即使推断看起来更"优"(比如用户说了路径但你觉得走剪切板更省事),也不要自作主张换来源。要换,先问。

按下列顺序判断,不要反向做

用户的图片来源 命令 禁止做法
图片已经在剪切板里(截图快捷键、从飞书/浏览器复制、从设计稿复制) --from-clipboard 不要先把剪切板存到本地文件再用 --file。多一步文件 I/O还得清理临时文件。
图片是磁盘上的真实文件 --file <path>
图片是 URL 先下载到本地 → --file;或用 drive 相关命令

--from-clipboard 走进程内存直传不产生临时文件macOS / Windows 内置支持Linux 需要 xclipwl-pastexsel 任一。

剪切板为空时的 fallback

--from-clipboard 失败(剪切板里不是图片 / 没有图片 / Linux 上三个工具都没装)时,命令会返回 clipboard contains no image data(或类似的平台错误)。这不是错误退出理由,而是 fallback 信号。

Agent 的标准处置顺序(每一步失败再进下一步,不要并行):

  1. 先用 --from-clipboard 试一次。
  2. 如果返回"no image data"类错误,向用户明确说明剪切板里没有可识别的图片,请用户提供本地文件路径或重新复制一张图。
  3. 拿到本地路径后,用 --file <path> 重试同一条插入命令(其他参数如 --doc / --align / --caption 保持不变)。

禁止做法

  • 不要悄悄把空剪切板当"成功但没插入"处理。必须提示用户。
  • 不要在剪切板失败后自行瞎猜某个本地文件路径(比如最近修改的 png。必须让用户给路径。
  • 不要用"先让用户保存剪切板到磁盘再 --file"的建议绕过 --from-clipboard,当且仅当剪切板确实没图片时才退回本地路径。

命令

# 🟢 推荐:从剪切板直接插入(无需先存盘)
lark-cli docs +media-insert --doc doxcnXXX --from-clipboard

# 从本地文件插入
# 除了上传本地文件,还可以在 `docs +update` 时直接通过网络 URL 插入图片,无需先下载到本地:
lark-cli docs +update --api-version v2 --doc "<doc_id>" --command block_insert_after \
  --block-id "目标 block_id" \
  --content '<img href="https://example.com/photo.png"/>'

# 插入图片(默认)
lark-cli docs +media-insert --doc doxcnXXX --file ./image.png

# doc 支持直接传 docx URL自动提取 document_id
lark-cli docs +media-insert --doc "https://xxx.feishu.cn/docx/doxcnXXX" --from-clipboard

# 如果上一步是 create-doc优先传返回值里的 doc_id
# 不要把 /wiki/... 形式的 doc_url 直接传给 docs +media-insert
lark-cli docs +media-insert --doc doxcnReturnedByCreateDoc --file ./image.png

# 插入文件(非图片)
lark-cli docs +media-insert --doc doxcnXXX --file ./spec.pdf --type file

# 图片对齐与描述caption
lark-cli docs +media-insert --doc doxcnXXX --from-clipboard --align center --caption "架构图"

参数

参数 必填 说明
--doc <id> 文档 ID 或 docx URL仅支持 /docx/<document_id> 形式自动提取;不支持 /wiki/... URL 自动提取
--from-clipboard 二选一 从系统剪切板读取图片(与 --file 互斥。macOS/Windows 内置支持Linux 需要 xclip / wl-paste / xsel 之一。
--file <path> 二选一 本地文件路径(文件大于 20MB 时自动切换分片上传)
--type <type> image(默认)或 file--from-clipboard 目前只产出 image。
--align <align> 仅图片:left / center(默认)/ right
--caption <text> 仅图片:图片描述

Important

如果上一步是 lark-doc-create,并且它在知识库/知识空间场景下返回的是 /wiki/... 形式的 doc_url,后续调用 docs +media-insert 时应优先传 doc_id,不要直接传这个 doc_url

平台注意(仅 --from-clipboard

平台 依赖 典型错误
macOS osascript内置 剪切板为空 / 不是图片 → "clipboard contains no image data"
Windows PowerShell + System.Windows.Forms内置 同上
Linux xclipwl-pastexsel 任一 都没安装 → 报错会提示用发行版包管理器安装

命令不支持读取 TIFF 等非 PNG/JPEG/GIF/WebP/BMP 的冷门格式;遇到这类剪切板会返回 "contains no image data",此时才考虑先用系统工具转成文件再 --file

输出

命令成功后会输出 JSON包含document_idblock_idfile_tokenfile_name(剪切板路径下为 clipboard.png)、type

Caution

这是写入操作(会修改文档内容)—— 执行前必须确认用户意图。

参考

  • lark-doc-fetch — 获取文档内容(可用于确认插入后的结果、以及提取媒体 token
  • lark-shared — 认证和全局参数