服务号发送图文消息可以走两条完全不同的路径:一种是运营人员在微信公众平台后台手动编辑并点击群发,适合大多数日常推送;另一种是通过开发者接口上传图文素材并触发群发,适合需要自动化发布或对接内容管理系统的业务。两条路径最终都会消耗服务号每月的群发次数,也都需要遵守封面图尺寸、正文格式、审核规则等约束。本文把后台操作、接口调用、常见问题拆开说明,帮助你在正式推送前把关键细节一次理清。

一、后台手动发送图文消息的完整步骤
手动发送是最常用的方式。首先登录微信公众平台,在首页左侧菜单找到“内容与互动”区域,进入“草稿箱”或“图文消息”入口。不同版本的后台界面略有差异,但核心路径基本一致:先在草稿箱中新建图文消息,填写标题、封面、摘要和正文,保存后再执行群发。
编辑图文时有几个参数会直接影响阅读体验。标题建议控制在30字左右,最长不要超过64字;封面图支持上传后裁剪,目前常用比例有2.35比1和1比1两种,前者用于星标图,后者用于正文列表小图。正文区域可以像普通网页编辑器一样插入图片、视频、音频、小程序卡片和投票组件。需要设置原文链接时,把链接放在“原文链接”字段中,不要直接塞在正文里,否则可能被拦截。
内容编辑完成后点击保存,系统会提示是否群发。群发前务必使用预览功能发送到自己的微信号检查一遍,确认图片、排版、超链接跳转都正常。群发时可以选择全部粉丝或按标签筛选。服务号每个自然月有4次群发机会,每次可以发送一条包含最多8篇图文的图文消息,所以也可以把多篇内容合并成一次推送。
二、通过接口自动发送图文消息
如果业务系统需要自动发布图文,比如从CMS定时同步文章到公众号,可以采用接口方式。接口发送图文消息的流程可以拆成两步:第一步上传封面图和其他正文内图片,获得对应的media_id;第二步调用新增图文素材接口,把标题、封面media_id、正文HTML、摘要等信息提交,生成图文素材media_id。最后再调用群发接口把该图文素材推送给指定用户组或全部粉丝。
下面是一个使用PHP上传图文素材的示例,主要展示参数结构和请求方式。实际使用时需要替换access_token和封面图的media_id。
$access_token = 'your_access_token';
$url = 'https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=' . $access_token;
$data = [
'articles' => [
[
'title' => '图文标题',
'thumb_media_id' => '封面图片media_id',
'author' => '作者名称',
'digest' => '图文摘要',
'show_cover_pic' => 1,
'content' => '<p>正文HTML内容</p>',
'content_source_url' => 'https://www.ipipp.com/path'
]
]
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
上传成功后会返回一个media_id,这个值是后续群发的凭据。接下来调用群发接口,设置msgtype为mpnews,并将筛选条件和media_id一起提交。示例代码如下:
$access_token = 'your_access_token';
$media_id = '上一步返回的图文素材media_id';
$url = 'https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=' . $access_token;
$data = [
'filter' => [
'is_to_all' => true
],
'mpnews' => [
'media_id' => $media_id
],
'msgtype' => 'mpnews',
'send_ignore_reprint' => 0
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
接口方式的好处是可以和自家CMS、定时任务、审批流深度整合,减少人工复制粘贴。但要注意,只有认证服务号才能调用群发接口,未认证的服务号或订阅号无法使用这些能力。此外,接口群发同样占用每月4次群发机会,调用频率也有上限,批量任务需要做排队和失败重试。
三、常见问题与避坑要点
第一个常见问题是群发后粉丝没有收到图文消息。可以先检查公众号后台群发记录是否显示发送成功,以及粉丝是否在发送前已经关注。部分粉丝可能开启了消息免打扰,或者被微信风控系统延迟送达。如果是接口群发,还要检查filter条件是否写反,比如使用了标签ID但用户不在该标签内。群发消息只能推送给关注用户,未关注用户不会收到。
第二个高频问题是封面图显示异常或正文图片无法加载。封面图建议使用2.35比1尺寸,例如900像素乘383像素,大小不超过10MB。正文内图片不要引用外链,应通过微信素材上传接口或后台上传,否则在部分客户端可能被拦截。图文正文中使用HTML时不要带脚本、外链CSS或未备案域名,否则保存阶段可能失败。
第三个问题是群发次数和撤回机制。服务号每月只有4次群发机会,用完后即使误发也不能撤回,只能等待下月。删除已群发的图文消息不会返还次数,预览、保存草稿和通过客服消息发送不占用群发次数。如果只是给个别用户做测试,优先使用预览或客服消息,不要把宝贵的群发机会浪费在验证上。