# 根据标签群发消息
接口应在服务器端调用,不可在前端(小程序、网页、APP等)直接调用,具体可参考接口调用指南
接口英文名:sendAll
本接口用于根据标签群发消息
# 图文消息群发前将进行原创校验
开发者调用群发接口进行图文消息的群发时,微信会将开发者准备群发的文章,与公众平台原创库中的文章进行比较,校验结果分为以下几种:
- 当前准备群发的文章,未命中原创库中的文章,则可以群发。
- 当前准备群发的文章,已命中原创库中的文章,则:
- 若原创作者允许转载该文章,则可以进行群发。群发时,会自动替换成原文的样式,且会自动将文章注明为转载并显示来源。若希望修改原文内容或样式,或群发时不显示转载来源,可自行与原创公众号作者联系并获得授权之后再进行群发。
- 若原创作者禁止转载该文章,则不能进行群发。若希望转载该篇文章,可自行与原创公众号作者联系并获得授权之后再进行群发。
群发接口新增 send_ignore_reprint 参数(默认为0),开发者可以对群发接口的 send_ignore_reprint 参数进行设置,指定待群发的文章被判定为转载时,是否继续群发。
- 当 send_ignore_reprint 参数设置为1时,若文章被判定为转载,且原创文允许转载时,将继续进行群发操作。
- 当 send_ignore_reprint 参数设置为0时,若文章被判定为转载,将停止群发操作。
# API 群发安全保护
对于开启 API 群发保护的用户,群发全部用户后需要等待管理员进行确认,如管理员拒绝或30分钟内没有确认,该次群发失败。用户可通过”设置-安全中心-风险操作保护“中关闭 API 群发保护功能。
# 1. 调用方式
# HTTPS 调用
POST https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN
# 云调用
- 本接口不支持云调用
# 第三方调用
本接口支持第三方平台代商家调用。
该接口所属的权限集 id 为:7
服务商获得其中之一权限集授权后,可通过使用 authorizer_access_token 代商家进行调用,具体可查看 第三方调用 说明文档。
# 2. 请求参数
# 查询参数 Query String parameters
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
access_token | string | 是 | 接口调用凭证,可使用 access_token、authorizer_access_token |
# 请求体 Request Payload
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
filter | object | 是 | 用于设定图文消息的接收者 |
msgtype | string | 是 | 群发的消息类型,图文消息为mpnews,文本消息为text,语音为voice,音乐为music,图片为image,视频为video,卡券为wxcard |
mpnews | object | 否 | 图文消息 |
text | object | 否 | 文本消息 |
voice | object | 否 | 语音消息 |
images | object | 否 | 图片消息 |
mpvideo | object | 否 | 视频消息 |
wxcard | object | 否 | 卡券消息 |
clientmsgid | string | 否 | 开发者侧群发msgid,长度限制32字节,如不填,则后台默认以群发范围和群发内容的摘要值做为 clientmsgid |
# Body.filter Object Payload
用于设定图文消息的接收者
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
is_to_all | string | 否 | 用于设定是否向全部用户发送,值为true或false,选择true该消息群发给所有用户,选择false可根据tag_id发送给指定群组的用户 |
tag_id | string | 否 | 群发到的标签的tag_id,参见用户管理中用户分组接口,若is_to_all值为true,可不填写tag_id |
# Body.mpnews Object Payload
图文消息
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
media_id | string | 否 | 用于群发的图文消息的media_id |
# Body.text Object Payload
文本消息
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
content | string | 否 | 文本内容 |
# Body.voice Object Payload
语音消息
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
media_id | string | 否 | 用于群发的图文消息的media_id |
# Body.images Object Payload
图片消息
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
media_ids | array | 否 | 用于群发的图文消息的media_id列表 |
recommend | string | 否 | 推荐语 |
title | string | 否 | 标题 |
need_open_comment | number | 否 | 开启评论(1-开启,0-关闭) |
only_fans_can_comment | number | 否 | 只有粉丝能评论(1-开启,0-关闭) |
# Body.mpvideo Object Payload
视频消息
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
media_id | string | 否 | 用于群发的图文消息的media_id |
# Body.wxcard Object Payload
卡券消息
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
card_id | string | 否 | 卡券 ID |
# 3. 返回参数
# 返回体 Response Payload
参数名 | 类型 | 说明 |
---|---|---|
type | string | 媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb),次数为news,即图文消息 |
errcode | number | 错误码 |
errmsg | string | 错误信息 |
msg_id | number | 消息发送任务的ID |
msg_data_id | number | 消息的数据ID,,该字段只有在群发图文消息时,才会出现。可以用于在图文分析数据接口中,获取到对应的图文消息的数据,是图文分析数据接口中的msgid字段中的前半部分,详见图文分析数据接口中的msgid字段的介绍。 |
# 4. 注意事项
- 图文消息的 media_id 需要通过上传图文素材,或通过新建草稿接口来得到。
- 如果 media_id 是通过 “草稿箱 / 新建草稿” 接口来得到的,那么在群发成功后 media_id 会失效,后台草稿也会被自动删除。
- 海外微信公众号仅支持发送图文(mpnews)消息。
- 在返回成功时,意味着群发任务提交成功,并不意味着此时群发已经结束,所以,仍有可能在后续的发送过程中出现异常情况导致用户未收到消息,如消息有时会进行审核、服务器不稳定等。此外,群发任务一般需要较长的时间才能全部发送完毕,请耐心等待。
# 避免重复发送
开发者调用群发接口时可以主动设置 clientmsgid 参数,避免重复推送。
群发时,微信后台将对 24 小时内的群发记录进行检查,如果该 clientmsgid 已经存在一条群发记录,则会拒绝本次群发请求,返回已存在的群发 msgid,开发者可以调用“查询群发消息发送状态”接口查看该条群发的状态。
# 事件推送群发结果
由于群发任务提交后,群发任务可能在一定时间后才完成,因此,群发接口调用时,仅会给出群发任务是否提交成功的提示,若群发任务提交成功,则在群发任务结束时,会向开发者在公众平台填写的开发者 URL(callback URL)推送事件。
需要注意,由于群发任务彻底完成需要较长时间,将会在群发任务即将完成的时候,就推送群发结果,此时的推送人数数据将会与实际情形存在一定误差
推送的 XML 结构如下(发送成功时):
<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 下粉丝数;或者 touser 中的粉丝数 |
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 | 整体校验结果。1-未被判为转载,可以群发,2-被判为转载,可以群发,3-被判为转载,不能群发 |
ArticleUrl | 群发文章的 url |
# 5. 代码示例
# 5.1 图文消息
请求示例
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"mpnews":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"mpnews",
"send_ignore_reprint":0
}
返回示例
{
"errcode":0,
"errmsg":"send job submission success",
"msg_id":34182,
"msg_data_id": 206227730
}
# 5.2 文本消息
请求示例
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"text":{
"content":"CONTENT"
},
"msgtype":"text"
}
返回示例
{
"errcode":0,
"errmsg":"send job submission success",
"msg_id":34182,
"msg_data_id": 206227730
}
# 5.3 语音消息
请求示例
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"voice":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"voice"
}
返回示例
{
"errcode":0,
"errmsg":"send job submission success",
"msg_id":34182,
"msg_data_id": 206227730
}
# 5.4 图片消息
请求示例
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"images": {
"media_ids": [
"aaa",
"bbb",
"ccc"
],
"recommend": "xxx",
"title": "yyy",
"need_open_comment": 1,
"only_fans_can_comment": 0
},
"msgtype":"image"
}
返回示例
{
"errcode":0,
"errmsg":"send job submission success",
"msg_id":34182,
"msg_data_id": 206227730
}
# 5.5 视频消息
请求示例
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"mpvideo":{
"media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc"
},
"msgtype":"mpvideo"
}
返回示例
{
"errcode":0,
"errmsg":"send job submission success",
"msg_id":34182,
"msg_data_id": 206227730
}
# 5.6 卡券消息
请求示例
{
"filter":{
"is_to_all":false,
"tag_id":"2"
},
"wxcard":{
"card_id":"123dsdajkasd231jhksad"
},
"msgtype":"wxcard"
}
返回示例
{
"errcode":0,
"errmsg":"send job submission success",
"msg_id":34182,
"msg_data_id": 206227730
}
# 6. 错误码
以下是本接口的错误码列表,其他错误码可参考 通用错误码
错误码 | 错误描述 | 解决方案 |
---|---|---|
41040 | no | 不符合声明文字原创的要求 |
45062 | has agreement ad. please use mp.weixin.qq.com | 已接广告,不支持api群发 |
45065 | clientmsgid exist | 相同 clientmsgid 已存在群发记录,返回数据中带有已存在的群发任务的 msgid |
45066 | same clientmsgid retry too fast | 相同 clientmsgid 重试速度过快,请间隔1分钟重试 |
45067 | clientmsgid size out of limit | clientmsgid 长度超过限制 |
48021 | no | 该草稿最后一次是系统自动保存的,不允许群发 |
89504 | 群发仍在审批流程中 | 请稍等或联系管理员确认 |
89505 | 群发进入管理员确认流程 | 请稍等或联系管理员确认 |
# 7. 适用范围
公众号 | 服务号 |
---|---|
仅认证 | 仅认证 |
- 仅认证:表示仅允许企业主体已认证账号调用,未认证或不支持认证的账号无法调用
- 其他未明确声明的账号类型,如无特殊说明,均不可调用此接口;