lark-im 是飞书命令行工具 lark-cli 中针对即时通讯(IM)场景的技能模块,命令形式为 lark-cli im +<verb> [flags],用于在飞书中收发消息和管理群聊。
【使用前提】 文档明确要求:开始前必须先使用 Read 工具读取 ../lark-shared/SKILL.md,其中包含认证与权限处理说明。
【核心概念】
- Message:聊天中的一条消息,由 message_id(om_xxx)标识,支持 text、post、image、file、audio、video、sticker、interactive(卡片)、share_chat、share_user、merge_forward 等类型。
- Chat:群聊或 P2P 会话,由 chat_id(oc_xxx)标识。
- Thread:消息下的回复话题,由 thread_id(om_xxx 或 omt_xxx)标识。
- Reaction:消息上的表情回复。
- Flag:消息或话题上的书签。
- Feed Shortcut:固定到当前用户消息流侧边栏的聊天,由 feed_card_id 标识。
- Feed Group:消息流列表中对卡片分组的标签,由 feed_group_id(ofg_xxx)标识,成员为 feed 卡片,分 normal 与 rule 两种类型。
【资源关系】 Chat(oc_xxx)下含 Message(om_xxx);Message 下含 Thread、Reaction 和 Resource(图片/文件/视频/音频);Chat 还含 Member(用户/机器人)。
【主要能力与 Shortcut】 常用操作以封装好的 Shortcut 提供,应优先使用:
- 群聊管理:+chat-create(创建群或话题群)、+chat-list(列出当前用户/机器人所在的群)、+chat-search(按关键词或成员搜索可见群聊)、+chat-update(更新群名称或描述)、+chat-members-list(列出群成员,返回 users[]/bots[])。
- 消息操作:+messages-send(发送消息)、+messages-reply(回复消息,支持话题回复)、+messages-edit(编辑消息内容,仅机器人)、+messages-mget(按 ID 批量获取消息,最多 50 个)、+chat-messages-list(列出群或 P2P 会话消息)、+threads-messages-list(列出话题消息)、+messages-search(跨聊天搜索消息,支持关键词、发送者、时间范围过滤)、+messages-read-status(批量查询当前用户对 1—50 条消息的已读状态,仅用户)、+message-read-users(查询读取某条消息的用户)。
- 资源与书签:+messages-resources-download(下载消息中的图片/文件)、+flag-create / +flag-cancel / +flag-list(消息书签的创建、取消与列出,仅用户)。
- 消息流:+feed-shortcut-create / +feed-shortcut-remove / +feed-shortcut-list(消息流快捷方式的增删与列出,仅用户,单次批量最多 10 个)、+feed-group-list / +feed-group-list-item / +feed-group-query-item(消息流分组及其卡片的列出与查询,仅用户)。
【身份与权限】 --as user 使用 user_access_token,以授权用户身份运行,权限同时取决于应用 scopes 与该用户对目标聊天/消息/资源的访问权;--as bot 使用 tenant_access_token,以应用机器人身份运行,行为取决于机器人成员身份、应用可见性、可用范围及机器人专属 scopes。同一个 API 在两种身份下可能一个成功一个失败,因为所有者/管理员身份、群成员资格、租户边界或应用可用范围是针对当前调用者校验的。
【消息读取增强】 四个消息拉取 Shortcut(+messages-mget、+chat-messages-list、+messages-search、+threads-messages-list)会自动为每条消息附加 reactions 块以及(已编辑消息的)update_time,无需单独调用 im.reactions.batch_query,可用 --no-reactions 关闭。 发送者名称优先显示服务端返回的 sender_name(含 sender_i18n_names 多语言映射),无需名称查询和额外权限;服务端未提供名称时回退显示 id,命令仍以 0 退出,且没有通讯录回退。系统消息(msg_type: system)没有发送者名称属正常。 部分列表 Shortcut 支持 --concise 输出紧凑 Markdown;+chat-messages-list、+messages-mget、+threads-messages-list 支持 --download-resources 将附件保存到 ./lark-im-resources/,默认关闭,贴纸不可下载。文件夹是容器而非文件,需先用 lark-cli im files folder --recursive --file-key <folder_key> --srctype message --srcid <message_id> 展开,再下载其中文件。
【卡片与音频】 发送、回复或更新交互卡片前,必须先阅读 references/card/lark-im-card-create.md 并按该流程生成卡片 JSON,不得手写或复制卡片 payload。交互卡片支持 card.action.trigger 回调事件(见 references/lark-im-card-action-reply.md),但事件订阅中暂不支持卡片消息的紧凑转换。--audio 仅支持 Opus 音频(如 .opus 或 Ogg Opus .ogg 文件),mp3、wav 等需先转码或改用 --file 作为附件发送。
【原生 API】 调用原生 API 前必须先运行 lark-cli schema im.<resource>.<method> 查看 --data / --params 参数结构,不要猜测字段格式。涉及的资源包括 chats、chat.members、chat.user_setting、chat.nickname、chat.join_requests、chat.managers、chat.moderation、messages 等,各自对身份(用户/机器人)和调用者权限有明确限制。
【链接使用】 优先使用 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>。
【限制】 Feed Shortcut 目前仅通过 OpenAPI 暴露 CHAT 类型(feed_card_id 为 oc_xxx),且创建/移除/列出三种操作均仅支持用户身份,单次批量上限 10 个。文档标注了各 API 对身份、群成员资格、所有者/管理员身份和租户的要求,具体平台支持和价格等信息暂未提供。