wecomcli-media
何时用:仅当用户明确指向企业微信 media_id 与本地文件互转时使用;泛指本地文件操作默认走本地工具。基于 media_id 下载媒体文件到本地,或上传本地文件换取 media_id 供其他企微技能使用;本技能不解析/识别文件内容,仅负责文件搬运。
git clone --depth 1 https://github.com/Pinvou/pinvou-agent /tmp/wecomcli-media && cp -r /tmp/wecomcli-media/pinvou3-app/src-tauri/resources/common/bundle/wecom-skills/wecomcli-media ~/.claude/skills/wecomcli-mediaSKILL.md
# 企业微信媒体文件
> 执行任何 `wecom-cli` 命令前,必须先读取并完成 `wecomcli-shared` 技能的公共前置检查。
资源型 skill,负责基于 `media_id` 下载媒体文件到本地,以及把本地文件上传为 `media_id`。是其他技能(微盘、邮件等)处理 `media_id` 相关操作的基础依赖:`upload` 会产出新的 `media_id`,但本 skill 不负责搜索/发现其他业务场景中已存在的 `media_id`(如邮件附件、微盘文件的 `media_id` 由对应业务技能产出),也不解析文件内容。
## 适用范围
### 适用
- 根据其他技能或用户提供的 `media_id` 下载媒体文件到本地
- 上传本地文件(本地路径已知)获取 `media_id`,供其他技能后续使用(如微盘上传素材)
### 不适用
- 解析/识别文件内容(正文提取、OCR、看图问答、PDF/Word/Excel 解析等) → 本 skill 只负责把文件下载到本地拿 `file_path`,如需查看内容请直接通过 `file_path` 读取该本地文件
- 搜索/发现其他业务场景中已存在的 `media_id`(如邮件附件、微盘文件列表/搜索等) → 由对应业务技能负责产出并返回 `media_id`,本 skill 只接收已有的 `media_id` 做下载;本地文件转`media_id` 的场景仍走本 skill 的 `upload`
- 编造或猜测 `media_id` / 本地文件路径 → 两者必须来自其他技能返回或用户明确提供,禁止自行构造
## 接口详述
### 下载媒体文件
根据 `media_id` 下载媒体文件到本地,返回本地文件路径。
**命令**
```bash
wecom-cli media download --json '{"media_id": "MEDIA_ID"}'
```
**入参**
| 字段 | 类型 | 必填 | 说明 |
|---|---|:----:|---|
| `media_id` | string | 是 | 文件的 `media_id`,由上传文件后获得,或由其他技能(邮件附件/内嵌图片等)返回 |
**返回**
| 字段 | 类型 | 说明 |
|---|---|---|
| `file_path` | string | 下载成功后的本地文件路径 |
**使用规则**
- 下载完成后如需查看文件内容,直接通过 `file_path` 读取该本地文件。
- 下载失败时返回错误码和错误信息。
- **`media_id` 必须是真正的 media_id,不接受任何形式的 URL**:若拿到的是一个链接(如 `attach_url`、正文里的图片/附件链接),**不要**把这个 URL 当作 `media_id` 传入本接口,会直接报错。尤其是命中 `work.weixin.qq.com/filepreview/security/` 特征的防泄漏加密链接,属于加密的、与用户身份绑定的资源,本接口**无法下载或解密**,应直接告知用户该文件受防泄漏策略保护,引导其点击链接、在企业微信客户端内打开查看/保存,不要尝试用本接口或其他手段绕过。
### 上传媒体文件
将本地文件上传,获取 `media_id`。
**命令**
```bash
wecom-cli media upload --json '{"file_path": "/tmp/example.pdf"}'
```
**入参**
| 字段 | 类型 | 必填 | 说明 |
|---|---|:----:|---|
| `file_path` | string | 是 | 需要上传的文件的本地路径 |
| `type` | string | 否 | 媒体类型:`image`(图片)/`voice`(语音)/`video`(视频)/`file`(文件),可选传入;发送消息时以上传响应返回的 `type` 为准 |
**返回**
| 字段 | 类型 | 说明 |
|---|---|---|
| `type` | string | 媒体类型:`image`(图片)/`voice`(语音)/`video`(视频)/`file`(文件) |
| `media_id` | string | 上传后的 `media_id`,供其他技能后续使用(如微盘`upload` 的 `file_content_media`) |
| `created_at` | string | 创建时间,格式:`YYYY-MM-DD HH:mm:ss`|
## 关键约束
- **`media_id` / `file_path` 不得编造**:`media_id` 必须来自上传结果、其他技能返回或用户明确提供;`file_path` 必须是真实存在的本地路径。两者都没有时用自然语言追问,禁止靠猜测凑一个。
- **不做内容解析**:本 skill 只负责文件的下载落地与上传,`download` 拿到 `file_path` 后如需查看内容,直接通过 `file_path` 读取,不在本 skill 职责范围内。
- **内部 ID 不外露**:`media_id` 仅用于后续接口调用,禁止直接展示给用户;下载后的本地 `file_path` 同样不展示给用户。
- **CLI 报错原样转达**:命令返回明确错误码时如实告知用户并给替代建议,禁止用 curl / python 等通用手段绕过 CLI 强行完成。
## 跨技能依赖
| 依赖场景 | 说明 |
|---|---|
| `wecomcli-email` | 邮件附件/内嵌图片的 `media_id`,使用本 skill 的 `download` 下载到本地后通过 `file_path` 读取 |
| `wecomcli-disk` | 上传文件到微盘时若已有 `media_id`,直接作为 `disk files upload` 的 `file_content_media` 使用,无需再走本 skill;若只有本地路径且需要先转成 `media_id`,可用本 skill 的 `upload` |
> 参数缺失 / 意图不明确时,用自然语言追问让用户明确,不要瞎猜。直出好看的网页/落地页/banner/海报/产品介绍页/数据报告/简历/作品集等视觉物料——套一套设计系统,模型自由写自包含 HTML,颜值由规则锁死、不靠模板。用户说"做个网页/页面/落地页/banner/海报/报告页/作品集/简历"或"把这份内容做成网页版"时使用。⚠️ 不含信息检索:查天气/查行情/查股价/查数据请走对应连接器,不是本技能。
【何时用:仅当用户明确指向钉钉/DingTalk(钉钉文档、钉钉日程等)时使用;泛指做文档/表格/待办/审批默认走本地工具,不要误用钉钉】用 dws CLI 管理钉钉:AI表格/AI搜问(找人首选)/目标管理(Agoal)/组织大脑/日历/通讯录/群聊与机器人消息/待办/审批/考勤/日志(日报周报)/DING消息/钉钉文档/云盘/Markdown文件/AI听记/邮箱/在线电子表格(axls)/知识库/白板/开放平台文档/个人IM与OA事件订阅。用户要求操作上述钉钉产品时使用。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限;遇到 Base/多维表格/bitable、BaseApp/AppMode 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入转 lark-drive,认证/授权转 lark-shared。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书日历:管理日程和会议室。查看/搜索日程、创建/更新日程、管理参会人、查询忙闲和推荐时段、预定会议室。不负责:查询视频会议记录(本 skill 只覆盖日程;lark-vc 技能未随包收录,可 CLI 直连,见意图路由)、待办任务(走 lark-task)。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书云文档(Docx/Wiki)与思维笔记内容操作:读取、创建、编辑文档,插入或下载图片附件,查询或回滚历史版本。用户给出文档 URL/token(含 doubao.com 的 /docx/、/wiki/)时使用,按 URL 路径/token 而非域名路由;内嵌表格、多维表格、画板先提取 token 再切对应 skill。文档评论走 lark-drive;表格或 Base 内部数据操作不在本 skill。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书云空间:管理 Drive 文件/文件夹,上传下载、复制移动删除、评论、权限、密级标签、版本、改标题,导入 Word/Markdown/Excel/CSV/PPTX/.base 为在线文档;doubao.com 云空间 URL 同走本 skill,不回退 WebFetch。不负责:文档内容编辑(lark-doc)、表格/Base 表内数据(lark-sheets/lark-base)、知识库节点(lark-wiki)。
【何时用:仅当用户明确指向飞书/Lark(发到飞书、飞书文档等)时使用;泛指做个文档或PPT或表格或方案默认走本地工具,不要误用飞书】飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)与卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索或创建群聊/话题群、管理标记数据、Feed 置顶与标签数据、处理卡片回调时使用。
【何时用:仅在其他 lark-* 技能遇到认证/授权/身份/配置问题时,或首次使用 lark-cli 时;泛指需求默认走本地工具】lark-cli 共享规则:首次配置(config init)、认证登录(auth login --domain/--scope,split-flow)、登录态查询与撤销(auth status/logout/whoami)、--as user/bot 身份切换、权限不足与 missing_scope 处理、JSON 输出契约与 _notice、update 更新、高风险操作审批(exit 10)。