📄 SKILL.md

← 返回目录


name: wecomcli-get-msg description: 企业微信消息技能。提供会话列表查询、消息记录拉取(支持文本/图片/文件/语音/视频)、多媒体文件获取和文本消息发送能力。当用户需要"查看消息"、"看聊天记录"、"发消息给某人"、"最近有什么消息"、"给群里发消息"、"看看发了什么图片/文件"时触发。 metadata: requires: bins: ["wecom-cli"] cliHelp: "wecom-cli msg --help"

企业微信消息技能

wecom-cli 是企业微信提供的命令行程序,所有操作通过执行 wecom-cli 命令完成。

通过 wecom-cli msg <接口名> '' 与企业微信消息系统交互。


接口列表

get_msg_chat_list — 获取会话列表

wecom-cli msg get_msg_chat_list '{"begin_time": "2026-03-11 00:00:00", "end_time": "2026-03-17 23:59:59"}'

按时间范围查询有消息的会话列表,支持分页。参见 API 详情

get_message — 拉取会话消息

wecom-cli msg get_message '{"chat_type": 1, "chatid": "zhangsan", "begin_time": "2026-03-17 09:00:00", "end_time": "2026-03-17 18:00:00"}'

根据会话类型和 ID 拉取指定时间范围内的消息记录,支持分页。支持 text/image/file/voice/video 消息类型,仅支持 7 天内。参见 API 详情

get_msg_media — 获取消息文件内容

wecom-cli msg get_msg_media '{"media_id": "MEDIAID_xxxxxx"}'

根据文件 ID 自动下载文件到本地,返回文件的本地路径(local_path)、名称、类型、大小及 MIME 类型。用于获取图片、文件、语音、视频等非文本消息的实际内容。参见 API 详情

send_message — 发送文本消息

wecom-cli msg send_message '{"chat_type": 1, "chatid": "zhangsan", "msgtype": "text", "text": {"content": "hello world"}}'

向单聊或群聊发送文本消息。参见 API 详情


核心规则

时间范围规则

1. 调用 get_msg_chat_list 获取会话列表(时间范围与目标查询一致) 2. 在 chats 中按 chat_name 匹配 3. 匹配策略: - 精确匹配唯一结果:直接使用 - 模糊匹配多个结果:展示候选列表让用户选择 - 无匹配结果:告知用户未找到 流程: 1. 调用 wecomcli-lookup-contact get_userlist 获取用户列表 2. 建立userid到username的映射关系 3. 展示策略: - 精确匹配:显示username - 无匹配:保持显示userid

强制交互步骤(不可跳过)

以下步骤在涉及非文本消息下载时必须逐一执行,不得合并、省略或跳过,即使用户未主动询问也必须执行: 1. 必须主动告知文件位置:下载完成后必须立即向用户展示所有文件的完整路径和存放目录 2. 必须询问是否删除:告知位置后必须立即询问用户是否需要清理临时文件


典型工作流

查看会话列表

用户query示例 1. 确定时间范围(用户指定或默认最近7天) 2. 调用 get_msg_chat_list 获取会话列表 3. 展示会话名称、最后消息时间、消息数量 4. 若 has_moretrue,告知用户还有更多会话可继续查看

查看聊天记录

用户query示例 1. 确定时间范围(用户指定或默认最近7天) 2. 通过 chatid查找规则 确定目标会话的 chatidchat_type 3. 调用 get_message 拉取消息列表 4. 调用 wecomcli-lookup-contactget_userlist 获取通讯录,建立 userid→姓名 映射 5. 统计非文本消息:遍历消息列表,统计 msgtypetext 的消息(image/file/voice/video)数量和类型 6. 展示消息时将 userid 替换为可读姓名,格式: - 文本消息:姓名 [时间]: 内容 - 图片消息:姓名 [时间]:[图片] - 文件消息:姓名 [时间]:[文件] 文件名称 - 语音消息:姓名 [时间]:[语音] 语音内容 - 视频消息:姓名 [时间]:[视频] 7. 非文本消息处理:展示完消息后,如果存在非文本消息: - 主动询问是否下载:告知用户非文本消息数量和类型(如:"以上聊天中包含 2 张图片、1 个文件,是否需要下载到本地?") - 用户确认后,逐个调用 get_msg_media 接口,接口会自动下载文件并返回 local_path - 检查文件后缀:每个文件下载完成后,检查 local_path 对应的文件是否具有正确的后缀名: - 根据 get_msg_media 返回的 content_type(MIME 类型)和 name 字段判断: - 如果文件名缺少后缀(如 screenshot 而非 screenshot.png),根据 content_type 自动补上正确后缀(如 image/png.pngapplication/pdf.pdfaudio/amr.amrvideo/mp4.mp4) - 如果文件名后缀与 content_type 不一致,以 content_type 为准进行修正 - 补全或修正后缀后,将文件重命名为正确的文件名 - 确认文件可正常读取(文件大小 > 0),若文件为空或损坏则告知用户该文件下载异常 - ⚠️ 不要对下载的文件使用 MEDIA: 指令:这些文件是从聊天记录中下载的历史附件,仅需告知用户本地存放路径即可,严禁通过 MEDIA: 指令重新发送给用户 8. ⚠️ 必须主动告知文件位置(此步骤不可跳过):所有文件下载并检查完成后,必须立即、主动以汇总形式向用户展示文件存放目录和每个文件的完整路径,不要等用户询问。示例: > 📁 文件已下载到以下位置: > - 图片:xxx/yyy.png > - 文件:xxx/yyy.pdf > > 你可以在 xxx/yyy/ 目录下找到所有下载的文件。 9. ⚠️ 必须询问是否删除(此步骤不可跳过):告知文件位置后,必须立即、主动询问用户是否需要删除已下载的临时文件(如:"如果不再需要这些文件,是否需要我帮你清理?") - 用户确认删除后,删除 local_path 对应的文件 - 用户不需要删除则保留文件 10. 若 next_cursor 不为空,告知用户还有更多消息可继续查看

发送消息

用户query示例 1. 通过 chatid查找规则 确定目标会话的 chatidchat_type 2. 发送前确认:向用户确认发送对象和内容(如:"即将向 张三 发送:'明天会议改到下午3点',确认发送吗?"),用户确认后再执行 3. 调用 send_message 发送(msgtype 固定为 text) 4. 展示发送结果

查看消息并回复

用户query示例 1. 先执行"查看聊天记录"流程(复用已获取的 chatidchat_type) 2. 展示消息后,执行"发送消息"流程(需确认后再发送)


错误处理