PicoBot/skills/lark-im/references/lark-im-messages-resources-download.md
ooodc a7883dbed9 refactor(todo): 重构待办事项管理逻辑及更新状态规则
- 移除 TodoItem 中的 priority、created_at 和 updated_at 字段
- 强制每个任务都必须有唯一 id,且由用户负责生成
- 修改合并模式逻辑,merge=true 下保留未提及的旧任务
- 支持已完成和已取消任务重新激活(状态改回 pending 或 in_progress)
- 禁止 in_progress 状态退回到 pending,必须标记为 completed 或 cancelled
- 优化状态转换校验,允许特定状态间合法切换
- 简化任务变更消息,移除详细的新增/更新/移除统计
- 更新文档和示例,明确 id 必须由用户生成和使用
- 修复和补充测试,增强状态转换和合并模式验证
- 调整任务时间戳生成逻辑,统一使用当前时间及索引
- 该变更提供更合理的任务状态机械及管理模式,提升稳定性和易用性
2026-06-13 09:22:33 +08:00

4.7 KiB

im +messages-resources-download

Prerequisite: Read ../lark-shared/SKILL.md first to understand authentication, global parameters, and safety rules.

Download image or file resources from a message. Supports automatic chunked download for large files using HTTP Range requests. Resources are identified by the combination of message_id + file_key, both of which come directly from message content returned by im +chat-messages-list.

Note: read-only message commands render resource keys in message content, but they do not download binaries automatically. Use this command whenever you need to fetch the actual image/file bytes or save them to a specific path.

This skill maps to the shortcut: lark-cli im +messages-resources-download (internally calls GET /open-apis/im/v1/messages/{message_id}/resources/{file_key}).

Commands

# Download an image (save to the current directory)
lark-cli im +messages-resources-download --message-id om_xxx --file-key img_v3_xxx --type image

# Download a file
lark-cli im +messages-resources-download --message-id om_xxx --file-key file_v3_xxx --type file

# Specify the output path
lark-cli im +messages-resources-download --message-id om_xxx --file-key img_v3_xxx --type image --output ./photo.png

# Download as a bot
lark-cli im +messages-resources-download --message-id om_xxx --file-key img_v3_xxx --type image --as bot

# Preview the request without executing it
lark-cli im +messages-resources-download --message-id om_xxx --file-key img_v3_xxx --type image --dry-run

Parameters

Parameter Required Description
--message-id <id> Yes Message ID (om_xxx format)
--file-key <key> Yes Resource key (img_xxx or file_xxx)
--type <type> Yes Resource type: image or file
--output <path> No Output path (relative paths only; .. traversal is not allowed). When omitted, the server's original filename from Content-Disposition is used if available; otherwise defaults to file_key. File extension is automatically inferred from Content-Disposition or Content-Type if not provided
--as <identity> No Identity type: user (default) or bot
--dry-run No Print the request only, do not execute it

Large File Download (Auto Chunking)

When downloading large files, the command automatically uses HTTP Range requests for reliable chunked downloading:

Behavior Details
Probe chunk First 128 KB to detect file size and Content-Type
Chunk size 8 MB per subsequent request
Workers Single-threaded sequential download (ensures reliability)
Retries Up to 2 retries for transient request failures, with exponential backoff

Benefits:

  • Reduces the impact of transient request failures during large downloads
  • Preserves the server's original filename via Content-Disposition (supports RFC 5987 UTF-8 encoding); falls back to Content-Type-based extension inference
  • Validates file size integrity after download completion

file_key Sources

Different resource markers in message content correspond to different file_key and type values:

Message Type Marker in Content file_key Format --type
Image img_xxx img_xxx image
File file_xxx file_xxx file
Audio file_xxx file_xxx file
Video file_xxx file_xxx file

Usage Scenario

Scenario: Extract and download an image from a message

# Step 1: Fetch messages and find one containing an image
lark-cli im +chat-messages-list --chat-id oc_xxx
# In the response you see: { "msg_type": "image", "content": "{\"image_key\":\"img_v3_xxx\"}" }

# Step 2: Download the image
lark-cli im +messages-resources-download --message-id om_xxx --file-key img_v3_xxx --type image

Common Errors and Troubleshooting

Symptom Root Cause Solution
Download failed file_key does not match the message_id Make sure the file_key came from that message's content
Hit error code 234002 or 14005 No permission, not missing API scope no access to this chat or file was deleted — do not retry, return the error to the user
Permission denied im:message:readonly is not authorized Run auth login --scope "im:message:readonly"
File size mismatch Chunked download integrity check failed Network instability during download; retry the command
Content-Range error Server returned invalid range header Transient API issue; retry the command

References

  • lark-im - all message-related commands
  • lark-shared - authentication and global parameters