一、核心挑战:文件内容到 Media ID 的转换
要通过企业微信 API 向外部群主动推送图片 、文件 或语音/视频等非文本消息,必须遵循一个两步流程:
-
上传文件: 将本地文件内容上传到企业微信服务器。
-
获取 Media ID: 服务器返回一个临时的 Media ID,作为该文件的唯一标识。
这个 Media ID 随后被用于构造消息体的 Payload(参考主题 3)。
二、API 接口与请求类型:media/upload
2.1 关键 API 接口
-
API 接口:
POST /cgi-bin/media/upload -
用途: 接收文件数据,并返回 Media ID。
-
认证: 必须使用应用的 Access Token 进行认证。
2.2 请求格式:Multipart/form-data
该接口的请求类型要求是 Web 标准中用于文件上传的 multipart/form-data 格式,而不是常规的 application/json。
-
Header 要求: 必须设置
Content-Type: multipart/form-data。 -
Body 结构要点: 请求体中必须包含文件数据,并使用边界(Boundary)分隔。关键部分是:
-
URL 参数中的
type字段:指定上传素材的类型(如image、file)。 -
请求体中的
media字段:携带文件本身的二进制数据,通常需要指定文件名和 MIME 类型。
-
三、上传流程的技术实现细节
3.1 请求参数的构造
在发起上传请求时,URL 中需要携带以下参数:
| 参数名 | 值 | 描述 |
|---|---|---|
access_token |
string | 应用的 Access Token。 |
type |
string | 媒体文件类型,必须是 image、voice、video 或 file 之一。 |
3.2 文件大小与格式限制
为避免上传失败,开发者必须在上传前对文件进行预校验,严格遵守企业微信对临时素材的大小和格式限制:
| 类型 | 格式限制 | 文件大小限制 |
|---|---|---|
| 图片 | JPG, PNG | 2MB 以内 |
| 文件 | 任意格式 | 20MB 以内 |
| 视频 | MP4 | 10MB 以内 |
3.3 代码实现要点(以 Python 为例)
使用高级 HTTP 客户端库(如 Python 的 requests)可以简化 multipart/form-data 的构造。
python
import requests
import os
def upload_media_file(access_token, file_path, media_type):
# 1. 构造请求URL
url = f"https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={access_token}&type={media_type}"
# 2. 准备文件数据
file_name = os.path.basename(file_path)
with open(file_path, 'rb') as f:
# requests 库会自动处理 multipart/form-data 结构
files = {
'media': (file_name, f, 'application/octet-stream') # (文件名, 文件对象, MIME类型)
}
# 3. 发起POST请求
response = requests.post(url, files=files)
# 4. 返回 Media ID
result = response.json()
if result.get("errcode") == 0:
return result.get("media_id")
else:
return None
四、API 响应与 Media ID 的管理策略
4.1 成功响应结构
如果上传成功,API 返回的 JSON 结构中最重要的字段是:
-
media_id: 临时素材的唯一标识。 -
created_at: 素材的上传时间戳。
4.2 Media ID 的时效性与生命周期
-
有效期: 获取到的
media_id是临时 的,有效期为 3 天(72 小时)。 -
管理策略:
-
即时使用: 最简单可靠的方式是,在需要发送时立即上传 文件,获取 ID 后立即用于消息 Payload 构造。
-
缓存与复用: 对于需要高频发送的固定素材 (如产品 Logo),可以在本地缓存
media_id。推送前,检查其created_at时间,如果未过期,则直接复用 ID,避免重复上传和 API 调用。 -
长期素材: 如果需要长期、永久使用素材,应考虑使用企业微信提供的永久素材上传接口(适用于特定的素材类型),而不是临时素材接口。
-
实施建议:客户联系功能启用步骤
操作步骤
- 权限申请
请通过 QiWe开放平台管理后台,提交"客户联系"功能的使用权限申请。 - 获取访问凭证
请使用企业 corpidcor pid (企业ID)和 corpsecretcorpsecret (应用密钥)作为参数,调用相应接口以获取 access_tokenaccess _token (访问令牌)。
目的
完成上述轻量级开发部署后,即可启用通过接口进行客户联系管理的能力。