# 一、前言

在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。

请注意:

  1. 对于认证订阅号,群发接口每天可成功调用1次,此次群发可选择发送给全部用户或某个标签;
  2. 对于认证服务号虽然开发者使用高级群发接口的每日调用次数是有限制的(见《接口调用频次限制说明》),但是用户每月只能接收4条,无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败;
  3. 开发者可以使用预览接口校对消息样式和排版,通过预览接口可发送编辑好的消息给指定用户校验效果;
  4. 群发过程中,微信后台会自动进行图文消息原创校验,请提前设置好相关参数(send_ignore等);
  5. 开发者可以主动设置 clientmsgid 来避免重复推送。
  6. 群发接口每分钟限制请求60次,超过限制的请求会被拒绝。
  7. 图文消息正文中插入自己账号和其他公众号已群发文章链接的能力。
  8. 对于已开启API群发保护的账号,群发全部用户时需要等待管理员进行确认,如管理员拒绝或30分钟内没有确认,该次群发失败。用户可通过“设置-安全中心-风险操作保护”中关闭API群发保护功能。

群发图文消息的过程如下:

  1. 首先,预先将图文消息中需要用到的图片,使用上传图文消息内图片接口,上传成功并获得图片 URL;
  2. 上传图文消息素材,需要用到图片时,请使用上一步获取的图片 URL;
  3. 使用对用户标签的群发,或对 OpenID 列表的群发,将图文消息群发出去,群发时微信会进行原创校验,并返回群发操作结果;
  4. 在上述过程中,如果需要,还可以预览图文消息、查询群发状态,或删除已群发的消息等。

群发图片、文本等其他消息类型的过程如下:

  1. 如果是群发文本消息,则直接根据下面的接口说明进行群发即可;
  2. 如果是群发图片、视频等消息,则需要预先通过素材管理接口准备好 mediaID。

关于群发时使用is_to_all为true使其进入公众号在微信客户端的历史消息列表:

  1. 使用is_to_all为true且成功群发,会使得此次群发进入历史消息列表,群发成功后 media_id 会失效,后台草稿也会被自动删除。
  2. 为防止异常,认证订阅号在一天内,只能使用is_to_all为true进行群发一次,或者在公众平台官网群发(不管本次群发是对全体还是对某个分组)一次。以避免一天内有2条群发进入历史消息列表。
  3. 类似地,服务号在一个月内,使用is_to_all为true群发的次数,加上公众平台官网群发(不管本次群发是对全体还是对某个分组)的次数,最多只能是4次。
  4. 设置is_to_all为false时是可以多次群发的,但每个用户只会收到最多4条,且这些群发不会进入历史消息列表。

其他注意事项:

  1. 请开发者注意,本接口中所有使用到media_id的地方,现在都可以使用素材管理中的永久素材media_id了。请但注意,使用同一个素材群发出去的链接是一样的,这意味着,删除某一次群发,会导致整个链接失效。
  2. 对于群发和预览接口中的图文消息 (mpnews) ,请使用通过 “草稿箱 / 新建草稿” 接口获得的 media_id

# 二、接口目录

1 上传图文消息内的图片获取URL【订阅号与服务号认证后均可用】

2 上传图文消息素材【订阅号与服务号认证后均可用】

3 根据标签进行群发【订阅号与服务号认证后均可用】

4 根据OpenID列表群发【订阅号不可用,服务号认证后可用】

5 删除群发【订阅号与服务号认证后均可用】

6 预览接口【订阅号与服务号认证后均可用】

7 查询群发消息发送状态【订阅号与服务号认证后均可用】

8 事件推送群发结果

9 使用 clientmsgid 参数,避免重复推送

10 获取群发速度

11 设置群发速度

# 1、上传图文消息内的图片获取URL【订阅号与服务号认证后均可用】

  • 请注意,本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN

调用示例(使用curl命令,用FORM表单方式上传一个图片):

curl -F media=@test.jpg "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"

参数说明

参数 是否必须 说明
access_token 调用接口凭证
media form-data中媒体文件标识,有filename、filelength、content-type等信息

返回说明 正常情况下的返回结果为:

{
   "url":"http://mmbiz.qpic.cn/mmbiz/gLO17UPS6FS2xsypf378iaNhWacZ1G1UplZYWEYfwvuU6Ont96b1roYs CNFwaRrSaKTPCUdBK9DgEHicsKwWCBRQ/0"
}
  • 其中url就是上传图片的URL,可用于后续群发中,放置到图文消息中。
  • 错误时微信会返回错误码等信息,请根据错误码查询错误信息

# 2、上传图文消息素材【订阅号与服务号认证后均可用】

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN

POST数据示例如下:

{
   "articles": [	 
        {
            "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
            "author":"xxx",		
            "title":"Happy Day",		 
            "content_source_url":"www.qq.com",		
            "content":"content",		 
            "digest":"digest",
            "show_cover_pic":1,
            "need_open_comment":1,
            "only_fans_can_comment":1
        },	 
        {
            "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",
            "author":"xxx",		
            "title":"Happy Day",		 
            "content_source_url":"www.qq.com",		
            "content":"content",		 
            "digest":"digest",
            "show_cover_pic":0,
            "need_open_comment":1,
            "only_fans_can_comment":1
        }
   ]
}

参数说明

参数 是否必须 说明
Articles 图文消息,一个图文消息支持1到8条图文
thumb_media_id 图文消息缩略图的media_id,可以在素材管理-新增临时素材中获得
author 图文消息的作者
title 图文消息的标题
content_source_url 在图文消息页面点击“阅读原文”后的页面,受安全限制,如需跳转Appstore,可以使用itun.es或appsto.re的短链服务,并在短链后增加 #wechat_redirect 后缀。
content 图文消息页面的内容,支持HTML标签。具备微信支付权限的公众号,可以使用a标签,其他公众号不能使用,如需插入小程序卡片,可参考下文。
digest 图文消息的描述,如本字段为空,则默认抓取正文前64个字
show_cover_pic 是否显示封面,1为显示,0为不显示
need_open_comment Uint32 是否打开评论,0不打开,1打开
only_fans_can_comment Uint32 是否粉丝才可评论,0所有人可评论,1粉丝才可评论

如果需要在群发图文中插入小程序,则在调用上传图文消息素材接口时,需在content字段中添加小程序跳转链接,有以下三种样式的可供选择。

小程序卡片跳转小程序,代码示例:

<mp-common-miniprogram data-miniprogram-appid="wx123123123" data-miniprogram-path="pages/index/index" data-miniprogram-title="小程序示例" data-miniprogram-imageurl="http://example.com/demo.jpg" data-miniprogram-type="card"></mp-common-miniprogram>

文字跳转小程序,代码示例:

<p><a data-miniprogram-appid="wx123123123" data-miniprogram-path="pages/index" href="">点击文字跳转小程序</a></p>

图片跳转小程序,代码示例:

<p><a data-miniprogram-appid="wx123123123" data-miniprogram-path="pages/index" href=""><img src="https://mmbiz.qpic.cn/mmbiz_jpg/demo/0?wx_fmt=jpg" alt="" data-width="null" data-ratio="NaN"></a></p>

参数说明

参数 是否必须 说明
data-miniprogram-appid 小程序的AppID
data-miniprogram-path 小程序要打开的路径
data-miniprogram-title 小程序卡片的标题,不超过35个字
data-miniprogram-imageurl 小程序卡片的封面图链接,图片必须为1080*864像素
data-miniprogram-type 指定小程序使用卡片形式渲染

返回说明

返回数据示例(正确时的JSON返回结果):

{
   "type":"news",
   "media_id":"CsEf3ldqkAYJAU6EJeIkStVDSvffUJ54vqbThMgplD-VJXXof6ctX5fI6-aYyUiQ",
   "created_at":1391857799
}
参数 说明
type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb),图文消息(news)
media_id 媒体文件/图文消息上传后获取的唯一标识
created_at 媒体文件上传时间
  • 错误时微信会返回错误码等信息,请根据错误码查询错误信息

# 图文消息群发前将进行原创校验

# 1)群发接口新增原创校验流程

开发者调用群发接口进行图文消息的群发时,微信会将开发者准备群发的文章,与公众平台原创库中的文章进行比较,校验结果分为以下几种:

  1. 当前准备群发的文章,未命中原创库中的文章,则可以群发。

  2. 当前准备群发的文章,已命中原创库中的文章,则:

2.1 若原创作者允许转载该文章,则可以进行群发。群发时,会自动替换成原文的样式,且会自动将文章注明为转载并显示来源。

若希望修改原文内容或样式,或群发时不显示转载来源,可自行与原创公众号作者联系并获得授权之后再进行群发。

2.2 若原创作者禁止转载该文章,则不能进行群发。

若希望转载该篇文章,可自行与原创公众号作者联系并获得授权之后再进行群发。

# 2)群发接口新增 send_ignore_reprint 参数

群发接口新增 send_ignore_reprint 参数,开发者可以对群发接口的 send_ignore_reprint 参数进行设置,指定待群发的文章被判定为转载时,是否继续群发。

当 send_ignore_reprint 参数设置为1时,文章被判定为转载时,且原创文允许转载时,将继续进行群发操作。

当 send_ignore_reprint 参数设置为0时,文章被判定为转载时,将停止群发操作。

send_ignore_reprint 默认为0。

群发操作的相关返回码,可以参考全局返回码说明文档。

# 3、根据标签进行群发【订阅号与服务号认证后均可用】

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN

POST数据示例如下:

图文消息(注意图文消息的media_id需要通过上述方法,或通过 “草稿箱 / 新建草稿” 接口来得到,海外微信公众号仅支持发送图文(mpnews)消息):

{
   "filter":{
      "is_to_all":false,
      "tag_id":2
   },
   "mpnews":{
      "media_id":"123dsdajkasd231jhksad"
   },
    "msgtype":"mpnews",
    "send_ignore_reprint":0
}

文本:

{
   "filter":{
      "is_to_all":false,
      "tag_id":2
   },
   "text":{
      "content":"CONTENT"
   },
    "msgtype":"text"
}

语音/音频(注意此处media_id需通过素材管理->新增素材来得到):

{
   "filter":{
      "is_to_all":false,
      "tag_id":2
   },
   "voice":{
      "media_id":"123dsdajkasd231jhksad"
   },
    "msgtype":"voice"
}

图片(注意此处media_id需通过素材管理->新增素材来得到):

{
   "filter":{
      "is_to_all":false,
      "tag_id":2
   },
   "images": {
      "media_ids": [
         "aaa",
         "bbb",
         "ccc"
      ],
      "recommend": "xxx",
      "need_open_comment": 1,
      "only_fans_can_comment": 0
   },
   "msgtype":"image"
}

视频

此处media_id需通过素材管理->新增素材来得到:

{
   "filter":{
      "is_to_all":false,
      "tag_id":2
   },
   "mpvideo":{
      "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc"
   },
    "msgtype":"mpvideo"
}

卡券消息(注意图文消息的media_id需要通过上述方法来得到):

{
   "filter":{
    "is_to_all":false,
      "tag_id":"2"
   },
  "wxcard":{              
    "card_id":"123dsdajkasd231jhksad"         
    },
   "msgtype":"wxcard"
}

参数说明

参数 是否必须 说明
filter 用于设定图文消息的接收者
is_to_all 用于设定是否向全部用户发送,值为true或false,选择true该消息群发给所有用户,选择false可根据tag_id发送给指定群组的用户
tag_id 群发到的标签的tag_id,参见用户管理中用户分组接口,若is_to_all值为true,可不填写tag_id
mpnews 用于设定即将发送的图文消息
media_id 用于群发的消息的media_id
recommend 推荐语,不填则默认为“分享图片”
msgtype 群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video,卡券为wxcard
title 消息的标题
description 消息的描述
thumb_media_id 视频缩略图的媒体ID
send_ignore_reprint 图文消息被判定为转载时,是否继续群发。 1为继续群发(转载),0为停止群发。 该参数默认为0。

返回说明

参数 说明
type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb),图文消息为news
errcode 错误码
errmsg 错误信息
msg_id 消息发送任务的ID
msg_data_id 消息的数据ID,该字段只有在群发图文消息时,才会出现。可以用于在图文分析数据接口中,获取到对应的图文消息的数据,是图文分析数据接口中的msgid字段中的前半部分,详见图文分析数据接口中的msgid字段的介绍。

请注意:在返回成功时,意味着群发任务提交成功,并不意味着此时群发已经结束,所以,仍有可能在后续的发送过程中出现异常情况导致用户未收到消息,如消息有时会进行审核、服务器不稳定等。此外,群发任务一般需要较长的时间才能全部发送完毕,请耐心等待。

返回数据示例(正确时的JSON返回结果):

{
   "errcode":0,
   "errmsg":"send job submission success",
   "msg_id":34182, 
   "msg_data_id": 206227730
}

错误码说明

错误码 错误信息 解决方案
公共错误码 点击查看
41040 字数不足,不能声明原创保护 字数不能过少
45062 已接广告,不支持api群发 请到微信公众平台网站群发
48021 该草稿最后一次是系统自动保存的,不允许群发 请到微信公众平台重新编辑保存该草稿

# 4、根据OpenID列表群发【订阅号不可用,服务号认证后可用】

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN

POST数据示例如下:

图文消息(注意图文消息的media_id需要通过上述方法来得到):

{
   "touser":[
    "OPENID1",
    "OPENID2"
   ],
   "mpnews":{
      "media_id":"123dsdajkasd231jhksad"
   },
    "msgtype":"mpnews",
    "send_ignore_reprint":0
}

文本:

{
   "touser":[
    "OPENID1",
    "OPENID2"
   ],
    "msgtype": "text",
    "text": { "content": "hello from boxer."}
}

语音:

{
   "touser":[
    "OPENID1",
    "OPENID2"
   ],
   "voice":{
      "media_id":"mLxl6paC7z2Tl-NJT64yzJve8T9c8u9K2x-Ai6Ujd4lIH9IBuF6-2r66mamn_gIT"
   },
    "msgtype":"voice"
}

图片:

{
   "touser":[
    "OPENID1",
    "OPENID2"
   ],
   "images": {
      "media_ids": [
         "aaa",
         "bbb",
         "ccc"
      ],
      "recommend": "xxx",
      "need_open_comment": 1,
      "only_fans_can_comment": 0
   },
   "msgtype":"image"
}

视频:

此处media_id需通过素材管理->新增素材来得到:

{
   "touser":[
    "OPENID1",
    "OPENID2"
   ],
   "mpvideo":{
      "media_id":"123dsdajkasd231jhksad",
      "title":"TITLE",
      "description":"DESCRIPTION"
   },
    "msgtype":"mpvideo"
}

卡券:

{
   "touser":[
    "OPENID1",
    "OPENID2"
   ],
    "wxcard": {"card_id":"123dsdajkasd231jhksad"}
    "msgtype":"wxcard"
}

参数说明

参数 是否必须 说明
touser 填写图文消息的接收者,一串OpenID列表,OpenID最少2个,最多10000个
mpnews 用于设定即将发送的图文消息
media_id 用于群发的图文消息的media_id
recommend 推荐语,不填则默认为“分享图片”
msgtype 群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video,卡券为wxcard
title 消息的标题
description 消息的描述
thumb_media_id 视频缩略图的媒体ID
send_ignore_reprint 图文消息被判定为转载时,是否继续群发。 1为继续群发(转载),0为停止群发。 该参数默认为0。

返回说明

参数 说明
type 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb),次数为news,即图文消息
errcode 错误码
errmsg 错误信息
msg_id 消息发送任务的ID
msg_data_id 消息的数据ID,,该字段只有在群发图文消息时,才会出现。可以用于在图文分析数据接口中,获取到对应的图文消息的数据,是图文分析数据接口中的msgid字段中的前半部分,详见图文分析数据接口中的msgid字段的介绍。

请注意:在返回成功时,意味着群发任务提交成功,并不意味着此时群发已经结束,所以,仍有可能在后续的发送过程中出现异常情况导致用户未收到消息,如消息有时会进行审核、服务器不稳定等。此外,群发任务一般需要较长的时间才能全部发送完毕,请耐心等待。

返回数据示例(正确时的JSON返回结果):

{
   "errcode":0,
   "errmsg":"send job submission success",
   "msg_id":34182, 
   "msg_data_id": 206227730
}

错误码说明

错误码 错误信息 解决方案
公共错误码 点击查看
41040 不符合声明文字原创的要求 字数≥300字,才能声明文字原创
45062 已接广告,不支持api群发 请到微信公众平台网站群发
48021 该草稿最后一次是系统自动保存的,不允许群发 请到微信公众平台重新编辑保存该草稿

# 5、删除群发【订阅号与服务号认证后均可用】

群发之后,随时可以通过该接口删除群发。

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=ACCESS_TOKEN

POST数据示例如下:

{
   "msg_id":30124,
   "article_idx":2
}

参数说明

参数 是否必须 说明
msg_id 发送出去的消息ID
article_idx 要删除的文章在图文消息中的位置,第一篇编号为1,该字段不填或填0会删除全部文章
url 要删除的文章url,当msg_id未指定时该参数才生效

请注意:

  1. msg_id和url中必须有一个参数有传值,当两个参数都有值时只有msg_id有效。
  2. article_idx只有在msg_id有传值的时候才生效。
  3. 只有通过api发送的并且已经发送成功的消息才能删除。
  4. 删除消息是将消息的图文详情页失效,已经收到的用户,还是能在其本地看到消息卡片。
  5. 删除群发消息只能删除图文消息和视频消息,其他类型的消息一经发送,无法删除。
  6. 如果多次群发发送的是一个图文消息,那么删除其中一次群发,就会删除掉这个图文消息页,导致所有群发都失效。

返回说明

参数 说明
errcode 错误码
errmsg 错误信息

返回数据示例(正确时的JSON返回结果):

{
   "errcode":0,
   "errmsg":"ok"
}

# 6、预览接口【订阅号与服务号认证后均可用】

开发者可通过该接口发送消息给指定用户,在手机端查看消息的样式和排版。为了满足第三方平台开发者的需求,在保留对openID预览能力的同时,增加了对指定微信号发送预览的能力,但该能力每日调用次数有限制(100次),请勿滥用。

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN

POST数据示例如下:

图文消息(其中media_id与根据分组群发中的media_id相同):

{
   "touser":"OPENID", 
   "mpnews":{              
     "media_id":"123dsdajkasd231jhksad"               
    },
   "msgtype":"mpnews" 
}

文本:

{     
    "touser":"OPENID",
    "text":{           
      "content":"CONTENT"            
    },     
    "msgtype":"text"
}

语音(其中media_id与根据分组群发中的media_id相同):

{
    "touser":"OPENID",
    "voice":{              
     "media_id":"123dsdajkasd231jhksad"
    },
    "msgtype":"voice" 
}

图片(其中media_id与根据分组群发中的media_id相同):

{
    "touser":"OPENID",
    "image":{      
     "media_id":"123dsdajkasd231jhksad"
    },
    "msgtype":"image" 
}

视频(其中media_id与根据分组群发中的media_id相同):

{
   "touser":"OPENID",
   "mpvideo": {     
      "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc"
   },
   "msgtype":"mpvideo" 
}

卡券:

{ "touser":"OPENID", 
  "wxcard":{              
           "card_id":"123dsdajkasd231jhksad",
            "card_ext": "{"code":"","openid":"","timestamp":"1402057159","signature":"017bb17407c8e0058a66d72dcc61632b70f511ad"}"               
            }, 
  "msgtype":"wxcard" 
}

请注意,上述JSON数据中的touser字段都可以改为towxname,这样就可以针对微信号进行预览(而非openID),towxname和touser同时赋值时,以towxname优先。修改后JSON数据如下(以图文消息为例): 图文消息:

{
   "towxname":"示例的微信号", 
   "mpnews":{              
            "media_id":"123dsdajkasd231jhksad"               
             },
   "msgtype":"mpnews" 
}

参数说明

参数 说明
touser 接收消息用户对应该公众号的openid,该字段也可以改为towxname,以实现对微信号的预览
msgtype 群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video,卡券为wxcard
media_id 用于群发的消息的media_id
content 发送文本消息时文本的内容

返回说明

参数 说明
errcode 错误码
errmsg 错误信息

返回数据示例(正确时的JSON返回结果):

{
   "errcode":0,
   "errmsg":"preview success"
}

# 7、查询群发消息发送状态【订阅号与服务号认证后均可用】

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=ACCESS_TOKEN

POST数据说明

参数 说明
msg_id 群发消息后返回的消息id

POST数据示例如下:

{
   "msg_id": "201053012"
}

返回说明

参数 说明
msg_id 群发消息后返回的消息id
msg_status 消息发送后的状态,SEND_SUCCESS表示发送成功,SENDING表示发送中,SEND_FAIL表示发送失败,DELETE表示已删除

返回数据示例(正确时的JSON返回结果):

{
     "msg_id":201053012,
     "msg_status":"SEND_SUCCESS"
}

# 8、事件推送群发结果

  • 由于群发任务提交后,群发任务可能在一定时间后才完成,因此,群发接口调用时,仅会给出群发任务是否提交成功的提示,若群发任务提交成功,则在群发任务结束时,会向开发者在公众平台填写的开发者URL(callback URL)推送事件。
  • 需要注意,由于群发任务彻底完成需要较长时间,将会在群发任务即将完成的时候,就推送群发结果,此时的推送人数数据将会与实际情形存在一定误差
  • 推送的XML结构如下(发送成功时),已增加原创校验结果和群发图文的url:
<xml> 
  <ToUserName><![CDATA[gh_4d00ed8d6399]]></ToUserName>  
  <FromUserName><![CDATA[oV5CrjpxgaGXNHIQigzNlgLTnwic]]></FromUserName>  
  <CreateTime>1481013459</CreateTime>  
  <MsgType><![CDATA[event]]></MsgType>  
  <Event><![CDATA[MASSSENDJOBFINISH]]></Event>  
  <MsgID>1000001625</MsgID>  
  <Status><![CDATA[err(30003)]]></Status>  
  <TotalCount>0</TotalCount>  
  <FilterCount>0</FilterCount>  
  <SentCount>0</SentCount>  
  <ErrorCount>0</ErrorCount>  
  <CopyrightCheckResult> 
    <Count>2</Count>  
    <ResultList> 
      <item> 
        <ArticleIdx>1</ArticleIdx>  
        <UserDeclareState>0</UserDeclareState>  
        <AuditState>2</AuditState>  
        <OriginalArticleUrl><![CDATA[Url_1]]></OriginalArticleUrl>  
        <OriginalArticleType>1</OriginalArticleType>  
        <CanReprint>1</CanReprint>  
        <NeedReplaceContent>1</NeedReplaceContent>  
        <NeedShowReprintSource>1</NeedShowReprintSource> 
      </item>  
      <item> 
        <ArticleIdx>2</ArticleIdx>  
        <UserDeclareState>0</UserDeclareState>  
        <AuditState>2</AuditState>  
        <OriginalArticleUrl><![CDATA[Url_2]]></OriginalArticleUrl>  
        <OriginalArticleType>1</OriginalArticleType>  
        <CanReprint>1</CanReprint>  
        <NeedReplaceContent>1</NeedReplaceContent>  
        <NeedShowReprintSource>1</NeedShowReprintSource> 
      </item> 
    </ResultList>  
    <CheckState>2</CheckState> 
  </CopyrightCheckResult> 
  <ArticleUrlResult>
     <Count>1</Count>
     <ResultList>
       <item>
         <ArticleIdx>1</ArticleIdx>
         <ArticleUrl><![CDATA[Url]]></ArticleUrl>
       </item>
     </ResultList>
  </ArticleUrlResult>
</xml>

参数说明

参数 说明
ToUserName 公众号的微信号
FromUserName 公众号群发助手的微信号,为mphelper
CreateTime 创建时间的时间戳
MsgType 消息类型,此处为event
Event 事件信息,此处为MASSSENDJOBFINISH
MsgID 群发的消息ID
Status 群发的结果,为“send success”或“send fail”或“err(num)”。但send success时,也有可能因用户拒收公众号的消息、系统错误等原因造成少量用户接收失败。err(num)是审核失败的具体原因,可能的情况如下:err(10001):涉嫌广告, err(20001):涉嫌政治, err(20004):涉嫌社会, err(20002):涉嫌色情, err(20006):涉嫌违法犯罪, err(20008):涉嫌欺诈, err(20013):涉嫌版权, err(22000):涉嫌互推(互相宣传), err(21000):涉嫌其他, err(93115):公开地图使用不规范,err(30001):原创校验出现系统错误且用户选择了被判为转载就不群发, err(30002): 原创校验被判定为不能群发, err(30003): 原创校验被判定为转载文且用户选择了被判为转载就不群发, err(40001):管理员拒绝, err(40002):管理员30分钟内无响应,超时
TotalCount tag_id下粉丝数;或者openid_list中的粉丝数
FilterCount 过滤(过滤是指特定地区、性别的过滤、用户设置拒收的过滤,用户接收已超4条的过滤)后,准备发送的粉丝数,原则上,FilterCount 约等于 SentCount + ErrorCount
SentCount 发送成功的粉丝数
ErrorCount 发送失败的粉丝数
ResultList 各个单图文校验结果
ArticleIdx 群发文章的序号,从1开始
UserDeclareState 用户声明文章的状态。0表示用户未声明原创;1表示用户声明原创;2表示用户声明转载
AuditState 系统校验的状态。0表示尚未未校验原创;1表示校验原创中;11表示校验原创通过;其他表示校验原创未通过
OriginalArticleUrl 相似原创文的url
OriginalArticleType 相似原创文的类型。1表示原创文;2表示历史非原创文;3表示新闻类;4表示黑文类
CanReprint 是否能转载
NeedReplaceContent 是否需要替换成原创文内容
NeedShowReprintSource 是否需要注明转载来源
CheckState 整体校验结果
CheckState 1-未被判为转载,可以群发,2-被判为转载,可以群发,3-被判为转载,不能群发
ArticleUrl 群发文章的url

# 9、使用 clientmsgid 参数,避免重复推送

群发接口新增 clientmsgid 参数,开发者调用群发接口时可以主动设置 clientmsgid 参数,避免重复推送。

群发时,微信后台将对 24 小时内的群发记录进行检查,如果该 clientmsgid 已经存在一条群发记录,则会拒绝本次群发请求,返回已存在的群发msgid,开发者可以调用“查询群发消息发送状态”接口查看该条群发的状态。

新增错误码

错误码 错误信息
45065 相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid
45066 相同 clientmsgid 重试速度过快,请间隔1分钟重试
45067 clientmsgid 长度超过限制

接口示例及参数描述

{
    "filter":{
       "is_to_all":false,
       "tag_id":2
    },
    "mpnews":{
       "media_id":"123dsdajkasd231jhksad"
    },
     "msgtype":"mpnews",
     "send_ignore_reprint":0,
 	 "clientmsgid":"send_tag_2" 
}

参数说明

参数 是否必须 说明
clientmsgid 开发者侧群发msgid,长度限制32字节,如不填,则后台默认以群发范围和群发内容的摘要值做为clientmsgid

返回说明

clientmsgid 冲突时的返回示例: {
    "errcode":45065,
    "errmsg":"clientmsgid exist",
    "msg_id":123456 
}

# 10、获取群发速度

开发者可以使用限速接口来控制群发速度。

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/speed/get?access_token=ACCESS_TOKEN

返回说明 正常情况下的返回结果为:

{
    "speed":3,
    "realspeed":15
}

参数说明

参数 是否必须 说明
speed 群发速度的级别
realspeed 群发速度的真实值 单位:万/分钟

# 11、设置群发速度

接口调用请求说明

http请求方式: POST https://api.weixin.qq.com/cgi-bin/message/mass/speed/set?access_token=ACCESS_TOKEN

请求示例

{
    "speed":1
}

参数说明

参数 是否必须 说明
speed 群发速度的级别

群发速度的级别,是一个0到4的整数,数字越大表示群发速度越慢。

speed 与 realspeed 的关系如下:

speed realspeed
0 80w/分钟
1 60w/分钟
2 45w/分钟
3 30w/分钟
4 10w/分钟

错误码说明

错误码 错误信息 解决方案
公共错误码 点击查看
45083 设置的 speed 参数不在0到4的范围内 请调整 speed 的值
45084 没有设置 speed 参数 请设置 speed

# API群发安全保护

对于开启API群发保护的用户,群发全部用户后需要等待管理员进行确认,如管理员拒绝或30分钟内没有确认,该次群发失败。用户可通过”设置-安全中心-风险操作保护“中关闭API群发保护功能。

错误码说明

错误码 错误信息 解决方案
公共错误码 点击查看
89505 群发进入管理员确认流程 请稍等或联系管理员确认
89504 群发仍在审批流程中 请稍等或联系管理员确认