lark-im

作者: larksuite

飛書即時通訊:收發訊息和管理群聊。發送和回覆訊息、搜尋聊天記錄、管理群聊成員、上傳下載圖片和檔案(支援大檔案分片下載)、管理表情回覆。當用戶需要發訊息、查看或搜尋聊天記錄、下載聊天中的檔案、查看群成員、搜尋群、建立群聊或話題群、管理標記資料時使用。

npx skills add https://github.com/larksuite/cli --skill lark-im

im (v1)

CRITICAL — 开始前 MUST 先用 Read 工具读取 ../lark-shared/SKILL.md,其中包含认证、权限处理

Core Concepts

  • Message: A single message in a chat, identified by message_id (om_xxx). Supports types: text, post, image, file, audio, video, sticker, interactive (card), share_chat, share_user, merge_forward, etc.
  • Chat: A group chat or P2P conversation, identified by chat_id (oc_xxx).
  • Thread: A reply thread under a message, identified by thread_id (om_xxx or omt_xxx).
  • Reaction: An emoji reaction on a message.
  • Flag: A bookmark on a message or thread.
  • Feed Shortcut: A chat pinned to the current user's feed sidebar, identified by feed_card_id (an oc_xxx open_chat_id for CHAT type).
  • Feed Group: A tag that groups feed cards in the feed list, identified by feed_group_id (ofg_xxx). Members are feed cards, each identified by feed_id + feed_type. Two types: normal (members managed explicitly) and rule (members auto-derived from rules).

Resource Relationships

Chat (oc_xxx)
├── Message (om_xxx)
│   ├── Thread (reply thread)
│   ├── Reaction (emoji)
│   └── Resource (image / file / video / audio)
└── Member (user / bot)

Important Notes

Identity and Token Mapping

  • --as user means user identity and uses user_access_token. Calls run as the authorized end user, so permissions depend on both the app scopes and that user's own access to the target chat/message/resource.
  • --as bot means bot identity and uses tenant_access_token. Calls run as the app bot, so behavior depends on the bot's membership, app visibility, availability range, and bot-specific scopes.
  • If an IM API says it supports both user and bot, the token type changes who the operator is. The same API can succeed with one identity and fail with the other because owner/admin status, chat membership, tenant boundary, or app availability are checked against the current caller.

Sender Name Resolution with Bot Identity

When using bot identity (--as bot) to fetch messages (e.g. +chat-messages-list, +threads-messages-list, +messages-mget), sender names may not be resolved (shown as open_id instead of display name). This happens when the bot cannot access the user's contact info.

Root cause: The bot's app visibility settings do not include the message sender, so the contact API returns no name.

Solution: Check the app's visibility settings in the Lark Developer Console — ensure the app's visible range covers the users whose names need to be resolved. Alternatively, use --as user to fetch messages with user identity, which typically has broader contact access.

Default message enrichment (reactions / update_time)

The four message-pulling shortcuts (+messages-mget, +chat-messages-list, +messages-search, +threads-messages-list) automatically attach a reactions block and (for edited messages) update_time to each returned message — no separate im.reactions.batch_query call is needed. Pass --no-reactions to opt out. For the full contract (output shape, the im:message.reactions:read scope requirement, and the "missing field ≠ fetch failure" data rules), read references/lark-im-message-enrichment.md.

Opt-in resource auto-download (--download-resources)

+chat-messages-list, +messages-mget, and +threads-messages-list accept --download-resources (off by default — no resources block and no extra requests when omitted). When set, eligible message resources (image/file/audio/video/media + post-embedded; stickers excluded) are downloaded into ./lark-im-resources/ and each message gains a resources array of {message_id, key, type, local_path, size_bytes}. Downloads are deduped by (message_id, file_key), run with bounded concurrency, and isolate single-resource failures (error: true + stderr warning). Scope: requires im:message:readonly (already declared by the listing commands — no extra scope); works under both user and bot identity. For one-off downloads use +messages-resources-download. Full contract: references/lark-im-message-enrichment.md.

Card Messages (Interactive)

Card messages (interactive type) are not yet supported for compact conversion in event subscriptions. The raw event data will be returned instead, with a hint printed to stderr.

Flag Types

Flags support two layers:

  • Message-layer flag: (ItemTypeDefault, FlagTypeMessage) — regular message bookmark
  • Feed-layer flag: (ItemTypeThread/ItemTypeMsgThread, FlagTypeFeed) — thread as feed-layer bookmark

Item types for feed-layer flags:

  • ItemTypeThread (4) = thread in a topic-style chat
  • ItemTypeMsgThread (11) = thread in a regular chat

Feed Shortcut

Feed shortcuts add chats to the current user's feed sidebar. They are distinct from flags:

  • Flag = bookmark on a message/thread, scoped to the user's bookmark list.
  • Feed shortcut = entry in the user's feed sidebar (currently only chats).

Key limits:

  • Only CHAT-type (feed_card_id is oc_xxx) is exposed via OpenAPI; doc/app/subscription shortcuts exist internally but are not yet whitelisted.
  • All three operations (create/remove/list) are user-identity only — they sign with user_access_token.
  • Batch size is 10 per call for create/remove; list is a one-page wrapper with opaque page_token pagination.

Shortcuts(推荐优先使用)

Shortcut 是对常用操作的高级封装(lark-cli im +<verb> [flags])。有 Shortcut 的操作优先使用。

Shortcut说明
+chat-createCreate a group chat or topic chat; user/bot; --chat-mode group
+chat-listList chats the current user/bot is a member of; defaults to groups; pass --types=p2p,group to include p2p single chats (user-only); user/bot; supports sorting, pagination, --exclude-muted (user-only)
+chat-messages-listList messages in a chat or P2P conversation; user/bot; accepts --chat-id or --user-id, resolves P2P chat_id, supports time range/sort/pagination
+chat-searchSearch visible group chats by --query keyword and/or --member-ids; user/bot; e.g. look up chat_id by group name; supports type filters, sorting, pagination, and --exclude-muted (user identity only)
+chat-updateUpdate group chat name or description; user/bot; updates a chat's name or description
+messages-mgetBatch get messages by IDs; user/bot; fetches up to 50 om_ message IDs, formats sender names, expands thread replies
+messages-replyReply to a message (supports thread replies); user/bot; supports text/markdown/post/media replies, reply-in-thread, idempotency key
+messages-resources-downloadDownload images/files from a message; user/bot; supports automatic chunked download for large files (8MB chunks), auto-detects file extension from Content-Type
+messages-searchSearch messages across chats (supports keyword, sender, time range filters) with user identity; user-only; filters by chat/sender/attachment/time, supports auto-pagination via --page-all / --page-limit, enriches results via batched mget and chats batch_query
+messages-sendSend a message to a chat or direct message; user/bot; sends to chat-id or user-id with text/markdown/post/media, supports idempotency key
+threads-messages-listList messages in a thread; user/bot; accepts om_/omt_ input, resolves message IDs to thread_id, supports sort/pagination
+flag-createCreate a bookmark on a message; user-only; defaults to message-layer flag; use --flag-type feed for feed-layer flag (item_type auto-detected from chat mode)
+flag-cancelCancel (remove) a bookmark. When no --flag-type is given, best-effort double-cancel: removes message layer and (when chat_type is determinable) feed layer
+flag-listList bookmarks; user-only; auto-enriches feed-type thread entries with message content; supports --page-all auto-pagination
+feed-shortcut-createAdd chats to the user's feed shortcuts; user-only; oc_xxx chat IDs only; batch up to 10 per call; --head/--tail controls insertion order; partial failures return an ok:false ledger
+feed-shortcut-removeRemove chats from the user's feed shortcuts; user-only; batch up to 10 per call; removing an absent shortcut is idempotent success; real per-item failures return an ok:false ledger
+feed-shortcut-listList one page of the user's feed shortcuts; user-only; omit --page-token for the first page; default output enriches CHAT entries under detail; pass --no-detail to skip the extra lookup and im:chat:read scope
+feed-group-listList the caller's feed groups (tags); user-only; supports --page-all auto-pagination
+feed-group-list-itemList feed cards in a feed group (tag); user-only; enriches each item with chat_name resolved from feed_id; supports --page-all auto-pagination
+feed-group-query-itemLook up specific feed cards in a feed group (tag) by ID; user-only; enriches each item with chat_name resolved from feed_id

API Resources

lark-cli schema im.<resource>.<method>   # 调用 API 前必须先查看参数结构
lark-cli im <resource> <method> [flags] # 调用 API

重要:使用原生 API 时,必须先运行 schema 查看 --data / --params 参数结构,不要猜测字段格式。

chats

  • create — 创建群。Identity: bot only (tenant_access_token).
  • get — 获取群信息。Identity: supports user and bot; the caller must be in the target chat to get full details, and must belong to the same tenant for internal chats.
  • link — 获取群分享链接。Identity: supports user and bot; the caller must be in the target chat, must be an owner or admin when chat sharing is restricted to owners/admins, and must belong to the same tenant for internal chats.
  • update — 更新群信息。Identity: supports user and bot.

chat.members

  • bots — 获取群内机器人列表。Identity: supports user and bot; the caller must be in the target chat and must belong to the same tenant for internal chats.
  • create — 将用户或机器人拉入群聊。Identity: supports user and bot; the caller must be in the target chat; for bot calls, added users must be within the app's availability; for internal chats the operator must belong to the same tenant; if only owners/admins can add members, the caller must be an owner/admin, or a chat-creator bot with im:chat:operate_as_owner.
  • delete — 将用户或机器人移出群聊。Identity: supports user and bot; only group owner, admin, or creator bot can remove others; max 50 users or 5 bots per request.
  • get — 获取群成员列表。Identity: supports user and bot; the caller must be in the target chat and must belong to the same tenant for internal chats.

chat.user_setting

  • batch_query — 批量查询当前用户在群内的个人偏好设置 (e.g. is_muted mutes normal messages, is_mute_at_all mutes @all messages); up to 10 chats per request. Identity: user only (user_access_token); the caller must be in each target chat.
  • batch_update — 批量更新当前用户在群内的个人偏好设置 (e.g. is_muted mutes normal messages, is_mute_at_all mutes @all messages); up to 10 chats per request. Identity: user only (user_access_token); the caller must be in each target chat.

chat.managers

  • add_managers — 指定群管理员。Identity: supports user and bot; only the group owner can add managers; max 10 managers per chat (20 for super-large chats), and at most 5 bots per request.
  • delete_managers — 删除群管理员。Identity: supports user and bot; only the group owner can remove managers; max 50 users or 5 bots per request.

chat.moderation

  • get — 获取群成员发言权限。Identity: supports user and bot; the caller must be in the target chat and belong to the same tenant.
  • update — 更新群发言权限。Identity: supports user and bot; only the group owner (or creator bot with im:chat:operate_as_owner) can update; the caller must be in the chat.

messages

  • delete — 撤回消息。Identity: supports user and bot; for bot calls, the bot must be in the chat to revoke group messages; to revoke another user's group message, the bot must be the owner, an admin, or the creator; for user P2P recalls, the target user must be within the bot's availability.
  • forward — 转发消息。Identity: supports user and bot.
  • merge_forward — 合并转发消息。Identity: bot only (tenant_access_token).
  • read_users — 查询消息已读信息。Identity: bot only (tenant_access_token); the bot must be in the chat, and can only query read status for messages it sent within the last 7 days.
  • urgent_app — 发送应用内加急。Identity: bot only (tenant_access_token); the bot must be the message sender and must be in the conversation that contains the message.
  • urgent_phone — 发送电话加急。Identity: bot only (tenant_access_token); the bot must be the message sender and must be in the conversation that contains the message.
  • urgent_sms — 发送短信加急。Identity: bot only (tenant_access_token); the bot must be the message sender and must be in the conversation that contains the message.

reactions

  • batch_query — 批量获取消息表情。Identity: supports user and bot.Must-read
  • create — 添加消息表情回复。Identity: supports user and bot; the caller must be in the conversation that contains the message.Must-read
  • delete — 删除消息表情回复。Identity: supports user and bot; the caller must be in the conversation that contains the message, and can only delete reactions added by itself.Must-read
  • list — 获取消息表情回复。Identity: supports user and bot; the caller must be in the conversation that contains the message.Must-read

threads

  • forward — 转发话题。Identity: supports user and bot.

images

  • create — 上传图片。Identity: bot only (tenant_access_token).

pins

  • create — Pin 消息。Identity: supports user and bot.
  • delete — 移除 Pin 消息。Identity: supports user and bot.
  • list — 获取群内 Pin 消息。Identity: supports user and bot.

feed.groups

  • batch_add_item — Batch add feed cards to a feed group. Identity: user only (user_access_token).Must-read
  • batch_query — Batch query feed groups. Identity: user only (user_access_token).Must-read
  • batch_remove_item — Batch remove feed cards from a feed group. Identity: user only (user_access_token).Must-read
  • create — Create a feed group. Identity: user only (user_access_token).Must-read
  • delete — Delete a feed group. Identity: user only (user_access_token).Must-read
  • update — Update a feed group. Identity: user only (user_access_token).Must-read

权限表

方法所需 scope
chats.createim:chat:create
chats.getim:chat:read
chats.linkim:chat:read
chats.updateim:chat:update
chat.members.botsim:chat.members:read
chat.members.createim:chat.members:write_only
chat.members.deleteim:chat.members:write_only
chat.members.getim:chat.members:read
chat.user_setting.batch_queryim:chat.user_setting:read
chat.user_setting.batch_updateim:chat.user_setting:write
chat.managers.add_managersim:chat.managers:write_only
chat.managers.delete_managersim:chat.managers:write_only
chat.moderation.getim:chat.moderation:read
chat.moderation.updateim:chat:moderation:write_only
messages.deleteim:message:recall
messages.forwardim:message
messages.merge_forwardim:message
messages.read_usersim:message:readonly
messages.urgent_appim:message.urgent
messages.urgent_phoneim:message.urgent:phone
messages.urgent_smsim:message.urgent:sms
reactions.batch_queryim:message.reactions:read
reactions.createim:message.reactions:write_only
reactions.deleteim:message.reactions:write_only
reactions.listim:message.reactions:read
threads.forwardim:message
images.createim:resource
pins.createim:message.pins:write_only
pins.deleteim:message.pins:write_only
pins.listim:message.pins:read
feed.groups.batch_add_itemim:feed_group_v1:write
feed.groups.batch_queryim:feed_group_v1:read
feed.groups.batch_remove_itemim:feed_group_v1:write
feed.groups.createim:feed_group_v1:write
feed.groups.deleteim:feed_group_v1:write
feed.groups.updateim:feed_group_v1:write

來自 larksuite 的更多技能

lark-doc
larksuite
飛書雲文檔 / Docx / 知識庫 Wiki 文檔(v2):建立、開啟、讀取、取得、檢視、總結、整理、改寫、翻譯、審閱和編輯飛書文檔內容。當使用者提供飛書文檔 URL/token,或要求檢視/讀取/開啟某個文檔、提取文檔內容、總結文檔、生成/建立文檔、追加/取代/刪除/移動內容、調整排版、插入或下載文檔圖片/附件/素材/畫板縮圖時使用。文檔內容中出現嵌入試算表、多維表格、需要將重要資訊視覺化為畫板(含 SVG 畫板)、引用或同步區塊時,也先使用本 skill 讀取和提取 token,再切換至對應 skill 深入處理。使用本 skill 時,docs +create、docs +fetch、docs +update 必須攜帶 --api-version v2;預設使用 DocxXML,也
documentapiproductivity
lark-shared
larksuite
首次設定 lark-cli、執行 auth login、切換使用者/機器人身份(--as)、處理權限拒絕或範圍錯誤、需要更新 lark-cli,或是在 JSON 輸出中看到 _notice 時使用。
developmentapicommunication
lark-base
larksuite
當需要用 lark-cli 操作飛書多維表格(Base)時調用:搜尋 Base、建表、欄位管理、記錄讀寫、記錄分享連結、檢視配置、歷史查詢,以及角色/表單/儀表板管理/工作流程;也適用於把舊的 +table / +field / +record 寫法改成當前命令寫法。涉及欄位設計、公式欄位、查找引用、跨表計算、行級派生指標、資料分析需求時也必須使用本 skill。
databasedata-analysisapi
lark-drive
larksuite
飛書雲空間:管理雲端空間中的檔案與資料夾。可上傳與下載檔案、建立資料夾、複製/移動/刪除檔案、檢視檔案元資料、管理文件評論、管理文件權限、訂閱使用者評論變更事件、修改檔案標題(docx、sheet、bitable、file、folder、wiki);同時也負責將本機的 Word/Markdown/Excel/CSV 以及 Base 快照(.base)匯入為飛書線上雲端文件(docx、sheet、bitable)。當使用者需要上傳或下載檔案、整理雲端空間目錄、檢視檔案詳細資訊、管理評論、管理文件權限、修改檔案標題、訂閱使用者評論變更事件,或將本機檔案匯入為新版文件、電子表格、多維表格/Base 時使用。
documentproductivityapi
lark-whiteboard
larksuite
飛書畫板:查詢和編輯飛書雲文檔中的畫板。支援匯出畫板為預覽圖片、匯出原始節點結構、使用多種格式更新畫板內容。當用戶需要查看畫板內容、匯出畫板圖片、編輯畫板時使用此 skill。不負責:飛書雲文檔內容編輯(lark-doc)、文檔內嵌電子表格/Base(lark-sheets / lark-base)。
documentcreativeproductivity
lark-mail
larksuite
飛書郵箱 — 起草、撰寫、發送、回覆、轉發、閱讀及搜尋郵件;管理草稿、資料夾、標籤、聯絡人、附件及郵件規則。當使用者提及 起草郵件、寫一封郵件、擬郵件、草稿、發通知郵件、發送郵件、發郵件、回覆郵件、轉發郵件、查看郵件、看郵件、讀郵件、搜尋郵件、查郵件、收件箱、郵件會話、編輯草稿、管理草稿、下載附件、郵件資料夾、郵件標籤、郵件聯絡人、監聽新郵件、收信規則、郵件規則、draft、compose、send email、reply、forward、inbox、mail thread、mail rules 時使用。
communicationproductivityapi
lark-workflow-meeting-summary
larksuite
會議紀要整理工作流:彙總指定時間範圍內的會議紀要並生成結構化報告。當用戶需要整理會議紀要、生成會議週報、回顧一段時間內的會議內容時使用。
productivitydocumentcommunication
lark-minutes
larksuite
飛書妙記:搜尋妙記列表、查看妙記基礎資訊、下載妙記音視訊檔案、上傳音視訊產生妙記、更新妙記標題、替換說話人。當需要取得、操作或產生妙記時使用。也支援將本機音視訊檔案轉成紀要與逐字稿(優先使用本 skill,不要用 ffmpeg/whisper 本機轉寫)。不負責:取得會議關聯妙記,或僅依自然語言標題定位紀要
documentproductivityaudio