其他
需要操作飞书即时通讯时用 lark-cli 完成消息、群聊…
通过 lark-cli 管理飞书 IM 的聊天、消息、卡片、资源、书签和 Feed 置顶/标签。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 39/100 ×0.15
适用场景
需要操作飞书即时通讯时用 lark-cl特定
解决思路
- 开始前必须先用 Read 工具读取 ../lark-shared/SKILL.md,其中包含认证、权限处理。
- 有 Shortcut 的操作优先使用 Shortcut:lark-cli im +<verb> [flags]。
- 使用原生 API 前先运行 lark-cli schema im.<resource>.<method> 查看 --data / --params 参数结构,不要猜测字段格式;再运行 lark-cli im <resource> <method> [flags] 调用。
- 优先使用 CLI 返回的链接:用 chat_app_link 打开已加入会话,用 message_app_link 打开消息,用 share_link 邀请他人入群;手工构造已加入会话 AppLink 时用 https://<applink_host>/client/chat/open?openChatId=<oc_xxx>,不要用 chatId=<oc_xxx> 或 lark://...chat_id=<oc_xxx>。
- 按身份选择 token:--as user 表示用户身份并使用 user_access_token,权限取决于应用 scopes 和该用户对目标聊天/消息/资源的访问;--as bot 表示机器人身份并使用 tenant_access_token,行为取决于机器人成员身份、应用可见性、可用范围和机器人 scopes;IM API 支持 user/bot 时,同一 API 可能因 owner/admin、群成员、租户边界、应用可用性而一个身份成功、另一个失败。
- 拉取消息时依赖 CLI 的发送者名称解析:读取 API 在每条消息 sender 上返回 sender_name 和完整 i18n 的 sender_i18n_names,CLI 将其作为用户和机器人的 name 展示,无需联系人权限;服务器未提供名称时回退显示 id 且命令仍 exit 0,没有联系人目录回退;原始 sender_name 不重复输出(值在 name),完整 sender_i18n_names 保留,机器人发送者可带 open_bot_id ou_;系统消息 msg_type: system 没有发送者名称是正常现象。
- 利用四个消息拉取 Shortcut 的默认富化:+messages-mget、+chat-messages-list、+messages-search、+threads-messages-list 会自动附加 reactions 块,且对编辑过的消息附加 update_time,不需要单独调用 im.reactions.batch_query;可传 --no-reactions 退出;完整契约见 references/lark-im-message-enrichment.md,需要 im:message.reactions:read scope,缺少字段不等于获取失败。
- 需要紧凑输出时使用 --concise:某些 message-listing Shortcut 支持,当用户要求简洁输出或更小结果/文件时使用;先查 --help 确认可用性;不要与显式 --format、已启用的 --json 或非空 --jq 组合。
- 需要自动下载资源时使用 --download-resources:+chat-messages-list、+messages-mget、+threads-messages-list 接受该参数,将符合条件的附件保存到 ./lark-im-resources/,并在每条消息上加 resources 数组;默认关闭,贴纸不可下载,单个附件失败会在该资源上报错而不中止消息拉取;单附件用 +messages-resources-download。
- 下载文件夹资源时,文件夹是容器不是文件,folder 的 file_key 不能直接下载;先用 lark-cli im files folder --recursive --file-key <folder_key> --srctype message --srcid <message_id> 展开,再用 +messages-resources-download 下载其中文件。
- 发送、回复或更新 interactive 卡片前,必须先读 references/card/lark-im-card-create.md 并遵循其工作流;传给 --msg-type interactive --content(发送/回复)或 messages.patch --data(更新)的卡片 JSON 必须是该工作流输出,绝不能手写或复制卡片 payload。
- 交互卡片消息暂不支持事件订阅中的 compact conversion,事件会返回原始数据并在 stderr 打印提示;interactive 卡片支持回调事件 card.action.trigger,见 references/card/lark-im-card-action-reply.md。
- 发送音频消息时使用 --audio,它只支持 Opus 音频文件,例如 .opus 文件或 Ogg Opus(.ogg)文件;对于 mp3、wav 或其他非 Opus 音频,要么先转换为 .opus 并继续用 --audio,要么用 --file 将原始文件作为附件发送。
- 发送从飞书文档获取的内容作为消息时,先用 --doc-format im-markdown 获取文档,再用 --markdown 格式发送;获取内容已是 markdown,在任何内容转发场景中保留获取到的原始文本并用 --markdown 发送;如果文档包含 type=user 的 cite 标签,保持原样,不要剥离该标签。
- Flag 支持两层:消息层 flag 为 (ItemTypeDefault, FlagTypeMessage),即普通消息书签;Feed 层 flag 为 (ItemTypeThread/ItemTypeMsgThread, FlagTypeFeed),即 thread 作为 Feed 层书签。
- Feed 层 flag 的 item type:ItemTypeThread (4) 表示话题式聊天中的 thread,ItemTypeMsgThread (11) 表示普通聊天中的 thread。
- 区分 Flag 与 Feed Shortcut:Flag 是消息/thread 上的书签,作用域是用户书签列表;Feed Shortcut 是用户 Feed 侧边栏中的条目,目前仅包含 chats。
- Feed Shortcut 的关键限制:仅 CHAT 类型(feed_card_id 是 oc_xxx)通过 OpenAPI 暴露,doc/app/subscription Shortcut 内部存在但尚未 whitelisted;create/remove/list 三个操作仅支持 user 身份并签 user_access_token;create/remove 每次批量最多 10 个;list 是一页包装,使用 opaque page_token 分页。
- 使用 +chat-create 创建群聊或话题群;user/bot;--chat-mode group|topic;private/public;可邀请用户/机器人;可选设置机器人管理员。
- 使用 +chat-list 列出当前用户/机器人所在的聊天;默认群;传 --types=p2p,group 可包含 p2p 单聊(仅 user);user/bot;支持排序、自动分页、--exclude-muted(仅 user)。
- 使用 +chat-members-list 列出群成员;返回 users[] / bots[] 分组;可作为 user 或 bot 调用;--member-types 过滤返回类型;--page-all 分页;服务器限制桶时显示 truncations[]。
- 使用 +chat-messages-list 列出聊天或 P2P 会话中的消息;user/bot;接受 --chat-id 或 --user-id,解析 P2P chat_id;支持时间范围、--order asc/desc 排序、自动分页。
- 使用 +chat-search 按 --query 关键词和/或 --member-ids 搜索可见群聊;user/bot;例如按群名查 chat_id;支持类型过滤、排序、自动分页和 --exclude-muted(仅 user 身份)。
- 使用 +chat-update 更新群名称或描述;user/bot;更新聊天的名称或描述。
- 使用 +message-read-users 列出某条消息的已读用户;user/bot;身份特定 scopes;支持有界自动分页。
- 使用 +messages-edit 编辑消息内容(text/post,包括附件区);仅 bot(user 身份被服务器拒绝);对应 PUT /open-apis/im/v1/messages/:message_id。
- 使用 +messages-mget 按 ID 批量获取消息;user/bot;最多 50 个 om_ 消息 ID,格式化发送者名称,展开话题回复。
- 使用 +messages-read-status 批量查询当前用户是否已读 1–50 条消息;仅 user;返回可读项和无效消息 ID。
- 使用 +messages-reply 回复消息(支持话题回复);user/bot;支持 text/markdown/post/media 回复、在话题中回复、幂等键。
- 使用 +messages-resources-download 从消息下载图片/文件;文件夹不可直接下载——先用 im files folder --recursive 展开,再下载其中文件;user/bot。
- 使用 +messages-search 跨聊天搜索消息(支持关键词、发送者、时间范围过滤),使用 user 或 bot 身份;可按聊天/发送者/附件/时间过滤;支持 --page-all / --page-limit 自动分页;通过批量 mget 和 chats batch_query 富化结果。
- 使用 +messages-send 发送消息到聊天或私聊;user/bot;发送到 chat-id 或 user-id,支持 text/markdown/post/media,支持幂等键。
- 使用 +threads-messages-list 列出话题中的消息;user/bot;接受 om_/omt_ 输入,将消息 ID 解析为 thread_id;支持 --order asc/desc 排序、自动分页。
- 使用 +flag-create 在消息上创建书签;仅 user;默认消息层 flag;用 --flag-type feed 创建 Feed 层 flag(item_type 根据聊天模式自动检测)。
- 使用 +flag-cancel 取消(移除)书签;未给 --flag-type 时尽力双重取消:移除消息层,并在 chat_type 可确定时移除 Feed 层。
- 使用 +flag-list 列出书签;仅 user;自动富化 Feed 类型 thread 条目并附消息内容;--page-all 受 --page-limit 限制(默认 20,最大 1000),has_more=true 表示结果不完整。
- 使用 +feed-shortcut-create 添加聊天到用户 Feed Shortcut;仅 user;仅 oc_xxx chat ID;每次批量最多 10;--head/--tail 控制插入顺序;部分失败返回 ok:false ledger。
- 使用 +feed-shortcut-remove 从用户 Feed Shortcut 移除聊天;仅 user;每次批量最多 10;移除不存在的 Shortcut 幂等成功;真实每项失败返回 ok:false ledger。
- 使用 +feed-shortcut-list 列出用户 Feed Shortcut 的一页;仅 user;省略 --page-token 获取第一页;默认输出在 detail 下富化 CHAT 条目;传 --no-detail 跳过额外查询和 im:chat:read scope。
- 使用 +feed-group-list 列出调用者的 Feed Group(标签);仅 user;支持 --page-all 自动分页。
- 使用 +feed-group-list-item 列出 Feed Group(标签)中的 Feed cards;仅 user;对每项用 feed_id 解析 chat_name 富化;支持 --page-all 自动分页。
- 使用 +feed-group-query-item 按 ID 查找 Feed Group(标签)中的特定 Feed cards;仅 user;对每项用 feed_id 解析 chat_name 富化。
- 原生 API chats.create:创建群;Identity: bot only(tenant_access_token)。
- 原生 API chats.get:获取群信息;Identity 支持 user 和 bot;调用者必须在目标群才能获取完整详情,内部群还必须属于同一租户。
- 原生 API chats.link:获取群分享链接;Identity 支持 user 和 bot;调用者必须在目标群;当群分享仅限 owner/admin 时必须是 owner 或 admin;内部群必须属于同一租户。
- 原生 API chats.update:更新群信息;Identity 支持 user 和 bot。
- 原生 API chat.members.create:将用户或机器人拉入群聊;Identity 支持 user 和 bot;调用者必须在目标群;bot 调用时添加用户必须在应用可用范围内;内部群操作者必须属于同一租户;如果仅 owner/admin 可加成员,调用者必须是 owner/admin,或具有 im:chat:operate_as_owner 的群创建者机器人。
- 原生 API chat.members.delete:将用户或机器人移出群聊;Identity 支持 user 和 bot;仅群主、管理员或创建者机器人可移除他人;每请求最多 50 个用户或 5 个机器人。
- 原生 API chat.user_setting.batch_query:批量查询当前用户在群内的个人偏好设置(如 is_muted 静音普通消息,is_mute_at_all 静音 @all 消息);每次最多 10 个群;Identity: user only(user_access_token);调用者必须在每个目标群。
- 原生 API chat.user_setting.batch_update:批量更新当前用户在群内的个人偏好设置(如 is_muted、is_mute_at_all);每次最多 10 个群;Identity: user only(user_access_token);调用者必须在每个目标群。
- 原生 API chat.nickname.get:获取自己的群昵称(self-only);Identity: user only(user_access_token);未设置昵称返回空字符串。
- 原生 API chat.nickname.update:设置或更新自己的群昵称(self-only);Identity: user only(user_access_token);nickname 必须是非空字符串(最大 300 字节);用 DELETE 清除。
- 原生 API chat.nickname.delete:清空自己的群昵称(self-only);Identity: user only(user_access_token)。
- 原生 API chat.join_requests.list:列出群的待审批入群申请(仅群主/管理员,user_access_token);Identity: user only(user_access_token);调用者必须是群主或管理员;分页 page_size 1-100;has_more == false 时停止——最后一页也会返回 page_token,因此只要它存在就分页永不终止。
- 原生 API chat.join_requests.handle:批量审批入群申请(approve/reject,仅群主/管理员,user_access_token);Identity: user only(user_access_token);调用者必须是群主或管理员;1-50 项,按顺序处理;results[] 与 items[] 数量和顺序对应,检查每个 result(success/failed/already_handled);exit 0 不代表每项成功。
- 原生 API chat.managers.add_managers:指定群管理员;Identity 支持 user 和 bot;仅群主可添加管理员;每群最多 10 个管理员(超大群 20),每请求最多 5 个机器人。
- 原生 API chat.managers.delete_managers:删除群管理员;Identity 支持 user 和 bot;仅群主可移除管理员;每请求最多 50 个用户或 5 个机器人。
- 原生 API chat.moderation.get:获取群成员发言权限;Identity 支持 user 和 bot;调用者必须在目标群且属于同一租户。
- 原生 API chat.moderation.update:更新群发言权限;Identity 支持 user 和 bot;仅群主(或具有 im:chat:operate_as_owner 的创建者机器人)可更新;调用者必须在群内。
- 原生 API messages.read_status:批量查询当前用户对消息的已读状态;Identity: user only(user_access_token);最多 50 个消息 ID,返回可读项和无效消息 ID;Must-read references/lark-im-message-read-status.md。
- 原生 API messages.delete:撤回消息;Identity 支持 user 和 bot;bot 调用时机器人必须在群内才能撤回群消息;要撤回其他用户的群消息,机器人必须是群主、管理员或创建者;对用户 P2P 撤回,目标用户必须在机器人可用范围内。
- 原生 API messages.forward:转发消息;Identity 支持 user 和 bot。
- 原生 API messages.merge_forward:合并转发消息;Identity: bot only(tenant_access_token)。
- 原生 API messages.read_users:查询消息已读信息;Identity 支持 user 和 bot;调用者必须仍在群内;用户可查询自己最近 7 天内发送的消息,机器人只能查询该机器人最近 7 天内发送的消息;Must-read references/lark-im-message-read-status.md。
- 原生 API messages.patch:更新已发送的消息卡片;Identity 支持 user 和 bot;消息必须在最近 14 天内发送;content 必须是 JSON 序列化字符串且不超过 30 KB;Must-read references/card/lark-im-card-create.md。
- 原生 API messages.urgent_app:发送应用内加急;Identity: bot only(tenant_access_token);机器人必须是消息发送者且必须在包含该消息的会话中。
- 原生 API messages.urgent_phone:发送电话加急;Identity: bot only(tenant_access_token);机器人必须是消息发送者且必须在包含该消息的会话中。
- 原生 API messages.urgent_sms:发送短信加急;Identity: bot only(tenant_access_token);机器人必须是消息发送者且必须在包含该消息的会话中。
- 原生 API reactions.batch_query:批量获取消息表情;Identity 支持 user 和 bot;Must-read references/lark-im-reactions.md。
- 原生 API reactions.create:添加消息表情回复;Identity 支持 user 和 bot;调用者必须在包含该消息的会话中;Must-read references/lark-im-reactions.md。
- 原生 API reactions.delete:删除消息表情回复;Identity 支持 user 和 bot;调用者必须在包含该消息的会话中,且只能删除自己添加的表情回复;Must-read references/lark-im-reactions.md。
- 原生 API reactions.list:获取消息表情回复;Identity 支持 user 和 bot;调用者必须在包含该消息的会话中;Must-read references/lark-im-reactions.md。
- 原生 API threads.forward:转发话题;Identity 支持 user 和 bot。
- 原生 API images.create:上传图片;Identity 支持 user 和 bot;user 身份需要 UAT 上的 im:resource scope。
- 原生 API files.create:上传文件;Identity 支持 user 和 bot;user 身份需要 UAT 上的 im:resource scope。
- 原生 API pins.create:Pin 消息;Identity 支持 user 和 bot。
- 原生 API pins.delete:移除 Pin 消息;Identity 支持 user 和 bot。
- 原生 API pins.list:获取群内 Pin 消息;Identity 支持 user 和 bot。
- 原生 API feed.groups.batch_add_item:批量添加 Feed cards 到 Feed Group;Identity: user only(user_access_token);Must-read references/lark-im-feed-groups.md。
- 原生 API feed.groups.batch_query:批量查询 Feed Groups;Identity: user only(user_access_token);Must-read references/lark-im-feed-groups.md。
- 原生 API feed.groups.batch_remove_item:批量从 Feed Group 移除 Feed cards;Identity: user only(user_access_token);Must-read references/lark-im-feed-groups.md。
- 原生 API feed.groups.create:创建 Feed Group;Identity: user only(user_access_token);Must-read references/lark-im-feed-groups.md。
- 原生 API feed.groups.delete:删除 Feed Group;Identity: user only(user_access_token);Must-read references/lark-im-feed-groups.md。
- 原生 API feed.groups.update:更新 Feed Group;Identity: user only(user_access_token);Must-read references/lark-im-feed-groups.md。
适用边界 · 注意事项
- 尚未安装、认证 lark-cli,或飞书应用/租户不具备对应 scope(如 im:chat:create、im:message、im:resource 等)时不适用。
- 目标不是飞书即时通讯,或需要绕过飞书权限模型访问数据时不适用。
- 交互卡片 JSON 未按 references/card/lark-im-card-create.md 工作流生成时,不要发送或更新卡片。