npx skills add ...
npx skills add wecomteam/wecom-cli --skill wecomcli-message
查询当前可以发送消息的聊天会话范围,并向会话列表中的单聊或群聊发送文本、Markdown、图片、文件、语音、视频消息。用户要求“给某人发消息”“在某个群里通知”“给最近会话发消息”或“把图片/文件/语音/视频发到企业微信”时使用。
npx skills add wecomteam/wecom-cli --skill wecomcli-message
执行任何
wecom-cli命令前,必须先读取并完成wecomcli-shared技能的公共前置检查。
wecom-cli identity whoami 获取授权人ID,可作为 chat_id 使用,无需调用 sessions list。sessions list 返回结果中 → 告知用户当前只能向最近活跃的会话或授权人发送调用依赖技能前,必须先完整读取对应 SKILL.md。
| 依赖技能 | 触发场景 | 数据流向 |
|---|---|---|
wecomcli-media | 发送图片、文件、语音或视频时只有本地文件路径,没有可直接复用的 media_id | 包含媒体上传接口,如没有已有的 media_id,必须先阅读该技能获取 media_id,上传时传入的 type 应和发送时的msg_type 对齐 |
| 字段 | 类型 | 说明 |
|---|---|---|
sessions | array | 会话列表,按最后一条消息时间从新到旧排序,具体数量以实际回包为准 |
sessions[].chat_id | string | 会话 ID |
sessions[].chat_name | string | 群名称或单聊名称 |
sessions[].chat_type | string | single 单聊或 group 群聊 |
sessions[].last_msg_time | string | 最后一条消息时间,格式 YYYY-MM-DD HH:MM:SS |
sessions_count | integer | sessions 数组元素数量 |
chat_id 来源向授权人以外的用户发送消息,调用 wecom-cli message aibot send 前,需要先调用一次 sessions list,然后从本次返回的 sessions[] 中选定目标项,把该项的 chat_id 原样复制到 send.chat_id。
以下值都不能直接作为 send.chat_id:
chat_idwecomcli-contact 返回的 userid这些值最多只能作为匹配线索;最终发送参数必须重新取自本次 sessions list 的匹配项。
sessions[] 中按非空 chat_name 精确匹配;不能精确匹配需要向用户反问确认发送目标,唯一命中时从匹配项复制 chat_id。sessions[] 原始顺序选择用户明确指定的项。sessions[].chat_id 做完全相等校验;命中后仍从匹配项复制 chat_id,不能直接复用用户输入值。匹配结果处理:
sessions list,再用选定对象匹配当次返回值。chat_id 绕过限制。sessions_count=0 时停止发送,告知当前没有可发送的最近会话。chat_id。调用本接口前必须完成以下步骤:
wecom-cli message aibot sessions list获取 chat_id 或 wecom-cli identity whoami 获取授权人ID。sessions[].chat_id。media_id。在目标会话匹配成功前,不上传媒体,也不调用 send。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
chat_id | string | 是 | 必须取自 wecom-cli identity whoami 或当前发送流程中刚调用的 sessions list 返回的目标 sessions[].chat_id |
msg_type | string | 是 | markdown / image / file / voice / video |
markdown | object | 条件必填 | 仅 msg_type="markdown" 时传 |
image | object | 条件必填 | 仅 msg_type="image" 时传 |
file | object | 条件必填 | 仅 msg_type="file" 时传 |
voice | object | 条件必填 | 仅 msg_type="voice" 时传 |
video | object | 条件必填 | 仅 msg_type="video" 时传 |
每次请求必须且只能携带一个与 msg_type 同名的内容对象。不要传空对象,也不要同时传多个消息对象。
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 或 wecom-cli identity whoami,但连续发送中途上下文发生压缩时重新调用确保 chat_id 正确。chat_id、userid、media_id 都是内部调用值,禁止面向用户展示。wecom-cli。wecom-cli message aibot send --json '{
"chat_id": "<本次 sessions[].chat_id>",
"msg_type": "image",
"image": {
"media_id": "<media_id>"
}
}'wecom-cli message aibot send --json '{
"chat_id": "<本次 sessions[].chat_id>",
"msg_type": "file",
"file": {
"media_id": "<media_id>"
}
}'wecom-cli message aibot send --json '{
"chat_id": "<本次 sessions[].chat_id>",
"msg_type": "voice",
"voice": {
"media_id": "<media_id>"
}
}'wecom-cli message aibot send --json '{
"chat_id": "<本次 sessions[].chat_id>",
"msg_type": "video",
"video": {
"media_id": "<media_id>",
"title": "产品演示",
"description": "本周版本的核心功能演示"
}
}'