企业微信发送消息技能。执行任何 wecom-cli 命令前,必须先读取并完成 wecomcli-shared 技能的公共前置检查。
用途与适用场景 可以向授权人发送消息,也可以向授权人以外的、机器人最近有消息往来的聊天会话(单聊和群聊)发送消息。适用于给授权人发消息(使用 wecom-cli identity whoami 获取授权人 ID 并作为 chat_id,无需调用 sessions list);也适用于查询当前有权限发送消息的聊天会话范围,并向这些范围中的成员或群聊发送 Markdown、图片、文件、AMR 语音或视频。不适用情形:发送对象既不是授权人、也不在本次 sessions list 返回结果中,此时应告知用户当前只能向最近活跃的会话或授权人发送。
技能依赖 调用依赖技能前必须先完整读取对应 SKILL.md。发送图片、文件、语音或视频时,如果只有本地文件路径、没有可直接复用的 media_id,需先阅读 wecomcli-media 获取 media_id,上传时传入的 type 应与发送时的 msg_type 对齐。
获取可发送消息的会话列表 命令:wecom-cli message aibot sessions list。返回字段包括 sessions(数组,按最后一条消息时间从新到旧排序,数量以实际回包为准)、sessions[].chat_id(会话 ID)、sessions[].chat_name(群名称或单聊名称)、sessions[].chat_type(single 单聊或 group 群聊)、sessions[].last_msg_time(格式 YYYY-MM-DD HH:MM:SS)以及 sessions_count(数组元素数量)。
chat_id 来源与目标匹配 向授权人以外的用户发送前,需先调用 sessions list,再从本次返回的 sessions[] 中选定目标项,把该项 chat_id 原样复制到 send.chat_id。以下值不能直接作为 send.chat_id:用户输入的 ID、之前轮次或历史上下文保存的 chat_id、wecomcli-contact 返回的 userid、以及根据姓名/群名等自行构造的值;这些最多作为匹配线索。匹配方式:按非空 chat_name 精确匹配;不能精确匹配时需向用户反问确认;按 sessions[] 原始顺序选择用户指定项;用户提供的 ID 只能与本次 sessions[].chat_id 做完全相等校验。唯一匹配时继续发送;多个候选时按返回顺序展示聊天名和最后消息时间让用户选择,用户选择后必须重新调用 sessions list 再匹配;无匹配时停止发送并如实告知目标不在最近 10 个会话中;sessions_count=0 时停止发送。展示会话列表时保持接口原始顺序,展示名称和时间,不展示内部 chat_id。
发送消息 前置条件:确认发送对象(sessions list 获取 chat_id 或 whoami 获取授权人 ID)、在本次列表中唯一匹配目标、非授权人对象从匹配项原样复制 chat_id、媒体消息再准备 media_id;目标匹配成功前不上传媒体、不调用 send。命令:wecom-cli message aibot send --json '<JSON 参数>'。公共参数中 chat_id 必填且须取自 whoami 或当前流程刚调用的 sessions list;msg_type 必填,取 markdown/image/file/voice/video;markdown、image、file、voice、video 为条件必填,仅当 msg_type 对应时传。每次请求必须且只能携带一个与 msg_type 同名的内容对象,不传空对象、不同时传多个。
Markdown 消息:markdown.content 必填,最长 20480 UTF-8 字节,普通文本也按 Markdown 发送。
图片消息:image.media_id 必填,须由媒体上传接口以 type=image 上传获得。
文件消息:file.media_id 必填,须以 type=file 上传获得,文件名取上传时的原始文件名。
语音消息:voice.media_id 必填,须以 type=voice 上传获得,源文件仅支持 AMR 格式,不能只改扩展名冒充 AMR。
视频消息:video.media_id 必填,以 type=video 上传获得;video.title 可选,最长 128 UTF-8 字节,省略时用上传原始文件名;video.description 可选,最长 512 UTF-8 字节,省略时不展示。用户未提供标题或描述时直接省略对应字段,不传空字符串,也不追问非必填字段。
关键约束 用户明确要求发送且目标与内容完整时直接执行,不重复追问确认;缺少目标、内容或本地文件时只追问缺失项。连续发送多条时不用每次 send 前都重新调用 sessions list 或 whoami,但连续发送中途上下文发生压缩时需重新调用以确保 chat_id 正确。chat_id、userid、media_id 都是内部调用值,禁止面向用户展示。Markdown 正文、视频标题和描述限制按 UTF-8 字节数计算,超限时不静默截断,请用户缩短或明确同意拆分。发送成功后只说明目标和消息类型,不编造消息 ID。接口失败时如实转达错误,不使用 curl / Python 等方式绕过 wecom-cli。