调用企微群机器人 webhook 报错 41005 通常表示请求参数中缺少有效的 media_id,需要先调用媒体文件上传接口获取 ID 后再发送消息。
先说结论:41005 错误是因为发送图片、文件、语音或视频消息时,未使用先上传后发送的流程,直接传递了无效参数。
- 先确认消息类型是否属于媒体类(image/file/voice/video)。
- 先处理媒体文件上传,通过 upload_media 接口换取 media_id。
- 再验证发送请求中 media_id 字段是否填写正确且未过期。
快速处理思路
企微群机器人不支持直接发送外部文件链接,必须走内部媒体库流程。处理逻辑分为上传和发送两步,上传接口返回的 media_id 有效期通常为 2 小时,超时需重新上传。
为什么会这样
企业微信为了安全管控和流量统计,要求媒体文件必须存储在企微服务器上。直接传递本地路径或外部 URL 会导致服务器无法验证文件完整性,因此返回 41005 缺少媒体文件错误。
分步处理
第一步检查消息类型,确认 payload 中 msgtype 是否为 image、file、voice 或 video。第二步调用上传接口,使用 POST 请求将文件二进制流发送至 upload_media 接口,获取返回JSON中的 media_id。第三步构造发送报文,在 webhook 请求体中将 media_id 填入对应字段,例如 image 消息需填 image.media_id。
怎么验证是否生效
查看 webhook 接口返回的 JSON 响应,errmsg 显示 ok 且 errcode 为 0 表示发送成功。登录企业微信客户端,检查目标群聊是否收到预期的媒体消息,且消息可正常预览或下载。
常见坑
media_id 具有时效性,超过有效期后使用该 ID 会报错,需重新上传。文件大小有限制,图片通常不超过 2MB,文件不超过 20MB,超限会导致上传失败而非 41005。内容类型需匹配,例如上传的是图片却用在 file 消息类型中也会引发参数错误。
常见问题
可以直接传图片 URL 吗
不可以,企微群机器人不支持直接传递外部图片 URL,必须上传到企微服务器获取 media_id。
media_id 有效期是多久
公开资料显示媒体文件 ID 有效期通常为 2 小时,具体以接口返回或最新文档说明为准。
报错 41005 是网络问题吗
不是,41005 是参数逻辑错误,与网络连通性无关,重点检查请求体结构和 media_id 来源。
参考来源
企业微信开放文档 - 群机器人文档:https://developer.work.weixin.qq.com/document/path/91770
企业微信开放文档 - 全局错误码说明:https://developer.work.weixin.qq.com/document/path/90475