juhecli-wx-cloud 个微云存储
SKILL: juhecli-wx-cloud — 微信个微 CDN 云存储操作,用于上传和下载媒体文件,支持图片、视频、文件、表情等多种媒体类型
使用案例
上传图片到微信云下载客户发的视频
上传图片
上传图片到微信 CDN 获取发送参数
>把这张图片上传到微信云 https://example.com/photo.jpg
// Agent 调用 wx cloud upload 上传图片
$juhe-cli wx cloud upload '{"file_type": 2, "url": "https://example.com/photo.jpg"}'
{
"file_id": "cdn_abc123",
"aes_key": "key_xyz789",
"file_size": 102400,
"file_md5": "d41d8cd98f00b204e9800998ecf8427e"
}
下载文件
从 CDN 下载消息中的媒体文件
>下载刚才客户发的文件
// Agent 从消息记录获取参数后调用 wx cloud download
$juhe-cli wx cloud download '{"file_type": 2, "file_id": "cdn_abc123", "aes_key": "key_xyz789", "file_size": 102400, "file_name": "report.pdf"}'
{
"status": 0,
"msg": "下载成功",
"file_path": "/tmp/report.pdf"
}
概述
个微云存储 SKILL 由 juhecli-wx-cloud 提供,支持微信 CDN 云存储的完整功能。 包括图片、视频、文件、表情、朋友圈媒体等多种类型的上传和下载操作。上传操作是发送媒体消息的前置步骤,上传返回的参数将直接用于后续发送命令。
发送媒体消息前,必须先通过 upload 命令获取
file_id、aes_key、file_size、file_md5 等参数,然后再调用对应的发送消息命令。SKILL 包
| SKILL 名称 | 说明 |
|---|---|
juhecli-wx-cloud | 个微 CDN 云存储 - 上传/下载图片/视频/文件/表情等媒体资源 |
触发方式
当用户提出以下意图时,Agent 应激活此 SKILL:
- "上传图片" / "上传文件到 CDN" / "发送图片前上传"
- "下载文件" / "下载语音" / "下载图片"
- "发图片给张三"(隐含上传步骤)
- "上传朋友圈图片" / "上传朋友圈视频"
- "下载这条语音消息" / "下载消息中的文件"
详细说明 — 上传
上传到 CDN (upload)
上传文件到微信 CDN,返回值是发送媒体消息的关键参数。
bash
wx cloud upload '{"file_type": 2, "url": "https://example.com/image.jpg"}'参数:
file_type(int, 必填) — 文件类型(2=图片等)[用户提供]url(string, 必填) — 文件 URL 地址[用户提供]
返回值(关键 — 直接用于发送命令):
file_id— 文件唯一标识,用于wx msg send_image/send_video/send_fileaes_key— 加密密钥,用于对应发送命令file_size— 文件大小,用于对应发送命令file_md5— 文件 MD5 校验值,用于对应发送命令
upload 返回的四个参数(file_id、aes_key、file_size、file_md5)需要完整传递给后续的发送命令, 缺少任何一个都可能导致发送失败。
上传朋友圈图片 (upload_sns_image)
bash
wx cloud upload_sns_image '{"url": "https://example.com/img.jpg"}'参数:
url(string, 必填) — 图片 URL[用户提供]
上传朋友圈视频 (upload_sns_video)
bash
wx cloud upload_sns_video '{"url": "https://example.com/video.mp4"}'参数:
url(string, 必填) — 视频 URL[用户提供]
上传文件 (upload_file)
bash
wx cloud upload_file '{"file_type": 2, "url": "https://example.com/doc.pdf"}'参数:
file_type(int, 必填) — 文件类型[用户提供]url(string, 必填) — 文件 URL[用户提供]
上传大文件 (upload_big)
用于上传大尺寸文件,支持分片上传。
bash
wx cloud upload_big '{}'更新 DNS (update_dns)
bash
wx cloud update_dns '{}'详细说明 — 下载
通用下载 (download)
从 CDN 下载文件,需要提供消息记录中的加密参数。
bash
wx cloud download '{"file_type": 2, "file_id": "xxx", "aes_key": "xxx", "file_size": 12345, "file_name": "image.jpg"}'参数:
file_type(int, 必填) — 文件类型file_id(string, 必填) — 文件 ID[来自消息记录]aes_key(string, 必填) — 加密密钥[来自消息记录]file_size(int, 必填) — 文件大小[来自消息记录]file_name(string, 必填) — 保存文件名[用户提供]
下载操作所需的 file_id、aes_key、file_size 等参数来自消息记录。 当收到包含媒体的消息时,消息内容中会包含这些参数。
下载语音 (download_voice)
bash
wx cloud download_voice '{"msg_id": "xxx", "length": 0, "room_username": "", "file_name": "voice.amr", "to_mp3": false}'参数:
msg_id(string, 必填) — 语音消息 ID[来自消息记录]length(int, 可选) — 语音长度room_username(string, 可选) — 群聊中的发言者 usernamefile_name(string, 必填) — 保存文件名[用户提供]to_mp3(bool, 可选) — 是否转为 MP3,默认 false
下载微信表情 (download_wxemotion)
bash
wx cloud download_wxemotion '{"url": "", "token": "", "enc_idx": "", "key": "", "file_name": "emoji.gif"}'参数:
url(string, 必填) — 表情 URL[来自消息记录]token(string, 必填) — 认证令牌[来自消息记录]enc_idx(string, 必填) — 加密索引[来自消息记录]key(string, 必填) — 加密密钥[来自消息记录]file_name(string, 必填) — 保存文件名[用户提供]
其他下载命令
download_image— 下载图片,参数同 downloaddownload_video— 下载视频,参数同 downloaddownload_file— 下载文件,参数同 downloaddownload_fav— 下载收藏内容download_fav_file— 下载收藏文件download_wwfile— 下载企业文件download_wx_emotion— 下载微信表情(别名)
上传返回 → 发送命令映射
upload → send_image / send_video / send_file
| upload 返回字段 | 发送命令参数 | 说明 |
|---|---|---|
file_id | file_id | 文件唯一标识 |
aes_key | aes_key | 加密密钥 |
file_size | file_size | 文件大小(字节) |
file_md5 | file_md5 | 文件 MD5 校验值 |
upload_sns_image → sns post
| upload_sns_image 返回 | sns post 参数 |
|---|---|
| 返回的 content_url | content_url |
参数来源说明
| 参数 | 来源标记 | 获取方式 |
|---|---|---|
file_type | [用户提供] | 用户指定文件类型(2=图片等) |
url(上传) | [用户提供] | 用户提供文件 URL 地址 |
file_name | [用户提供] | 用户指定保存文件名 |
file_id | [来自上次同步返回值] | upload 命令返回,或从消息记录获取 |
aes_key | [来自上次同步返回值] | upload 命令返回,或从消息记录获取 |
file_size | [来自上次同步返回值] | upload 命令返回,或从消息记录获取 |
file_md5 | [来自上次同步返回值] | upload 命令返回 |
msg_id | [来自消息记录] | 消息同步时获取的消息 ID |
典型工作流
发送图片消息
wx cloud upload— 上传图片,获取 file_id / aes_key / file_size / file_md5wx msg send_image— 使用上传返回的参数发送图片
发送文件消息
wx cloud upload_file— 上传文件,获取参数wx msg send_file— 使用上传返回的参数发送文件
发布带图朋友圈
wx cloud upload_sns_image— 上传朋友圈图片,获取 content_urlwx sns post— 传入 title 和 content_url 发布朋友圈
下载消息中的媒体
- 从消息记录获取 file_id / aes_key / file_size 等参数
wx cloud download— 传入参数下载媒体文件
下载语音消息
- 从消息记录获取 msg_id
wx cloud download_voice— 下载语音,可转 MP3
AI Agent 调用示例
wx cloud upload
text
// 用户:把这张图片发给张三 https://example.com/photo.jpg
AI: 好的,我先上传图片到 CDN。
[步骤 1: 上传图片]
[调用 wx cloud upload {"file_type":2,"url":"https://example.com/photo.jpg"}]
→ file_id: "cdn_abc123", aes_key: "key_xyz", file_size: 102400, file_md5: "md5_hash"
[步骤 2: 查询张三并发送]
[调用 db contact search {"keyword":"张三"}] → username="wxid_zhangsan"
[调用 wx msg send_image {"username":"wxid_zhangsan","file_id":"cdn_abc123","aes_key":"key_xyz","file_size":102400,"file_md5":"md5_hash"}]
AI: 图片已成功发送给张三!wx cloud upload_sns_image
text
// 用户:发一条带图片的朋友圈,内容"今天天气真好"
AI: 好的,我先上传朋友圈图片。
[步骤 1: 上传朋友圈图片]
[调用 wx cloud upload_sns_image {"url":"https://example.com/sunset.jpg"}]
→ content_url: "sns_url_xxx"
[步骤 2: 发布朋友圈]
[调用 wx sns post {"title":"今天天气真好","content_url":"sns_url_xxx"}]
AI: 朋友圈发布成功!wx cloud download_voice
text
// 用户:帮我下载这条语音消息
AI: 好的,我从消息记录获取参数并下载。
[从消息记录获取 msg_id]
[调用 wx cloud download_voice {"msg_id":"msg_12345","length":0,"room_username":"","file_name":"voice.mp3","to_mp3":true}]
AI: 语音下载成功!已保存为 voice.mp3。完整工作流:发送文件到群
text
// 用户:把这个 PDF 文件发给技术部群
AI: 好的,我来处理。
[步骤 1: 上传文件]
[调用 wx cloud upload_file {"file_type":2,"url":"https://example.com/report.pdf"}]
→ file_id: "f_001", aes_key: "ak_001", file_size: 2048000, file_md5: "md5_001"
[步骤 2: 查询群信息]
[调用 db contact search {"keyword":"技术部"}] → room_username="12345@chatroom"
[步骤 3: 发送文件]
[调用 wx msg send_file {"username":"12345@chatroom","file_id":"f_001","aes_key":"ak_001","file_size":2048000,"file_md5":"md5_001","file_name":"report.pdf"}]
AI: 文件已成功发送到技术部群!错误处理
- URL 无效或无法访问:返回下载失败,请检查 URL 是否可公开访问
- 文件过大:使用
upload_big命令替代 upload - file_id / aes_key 不匹配:返回解密失败,检查参数是否来自同一次上传
- 上传超时:文件较大时可能需要更长时间,请耐心等待
- 下载失败:确认消息记录中的加密参数完整且正确
请确保上传的 URL 可以公开访问,且文件格式和大小符合微信要求。 上传返回的四个参数必须完整保留,缺少任何一个都无法成功发送媒体消息。