一、說明
在公衆平臺網站上,爲訂閱號提供了每天一條的羣發權限,爲服務號提供每月(自然月)4條的羣發權限。而對於某些具備開發能力的公衆號運營者,可以通過高級羣發接口,實現更靈活的羣發能力(這些接口只是說替代了公衆平臺網站的界面操作,不是說就突破條數限制了)。
1.1限制:
1、對於認證訂閱號,羣發接口每天可成功調用1次,此次羣發可選擇發送給全部用戶或某個標籤;
2、對於認證服務號雖然開發者使用高級羣發接口的每日調用限制爲100次,但是用戶每月只能接收4條,無論在公衆平臺網站上,還是使用接口羣發,用戶每月只能接收4條羣發消息,多於4條的羣發將對該用戶發送失敗;
3、開發者可以使用預覽接口校對消息樣式和排版,通過預覽接口可發送編輯好的消息給指定用戶校驗效果;
4、羣發過程中,微信後臺會自動進行圖文消息原創校驗,請提前設置好相關參數(send_ignore等);
5、開發者可以主動設置 clientmsgid 來避免重複推送。
6、羣發接口每分鐘限制請求60次,超過限制的請求會被拒絕。
7、圖文消息正文中插入自己帳號和其他公衆號已羣發文章鏈接的能力。
二、羣發圖文消息
羣發圖文消息的過程如下:
1、首先,預先將圖文消息中需要用到的圖片,使用上傳圖文消息內圖片接口,上傳成功並獲得圖片 URL;
2、上傳圖文消息素材,需要用到圖片時,請使用上一步獲取的圖片 URL;
3、使用對用戶標籤的羣發,或對 OpenID 列表的羣發,將圖文消息羣發出去,羣發時微信會進行原創校驗,並返回羣發操作結果;
4、在上述過程中,如果需要,還可以預覽圖文消息、查詢羣髮狀態,或刪除已羣發的消息等。
三、羣發圖片、文本
羣發圖片、文本等其他消息類型的過程如下:
1、如果是羣發文本消息,則直接根據下面的接口說明進行羣發即可;
2、如果是羣發圖片、視頻等消息,則需要預先通過素材管理接口準備好 mediaID。
四、羣發時使用is_to_all
關於羣發時使用is_to_all爲true(表示對所有用戶發送)使其進入公衆號在微信客戶端的歷史消息列表:
- 使用is_to_all爲true且成功羣發,會使得此次羣發進入歷史消息列表。
- 爲防止異常,認證訂閱號在一天內,只能使用is_to_all爲true進行羣發一次,或者在公衆平臺官網羣發(不管本次羣發是對全體還是對某個分組)一次。以避免一天內有2條羣發進入歷史消息列表。
- 類似地,服務號在一個月內,使用is_to_all爲true羣發的次數,加上公衆平臺官網羣發(不管本次羣發是對全體還是對某個分組)的次數,最多隻能是4次。
- 設置is_to_all爲false時是可以多次羣發的,但每個用戶只會收到最多4條,且這些羣發不會進入歷史消息列表。
五、上傳圖文消息接口
下面介紹上傳圖文消息的接口(僅用於圖文消息)
5.1 上傳圖文消息內的圖片獲取URL【訂閱號與服務號認證後均可用】
請注意,本接口所上傳的圖片不佔用公衆號的素材庫中圖片數量的5000個的限制。圖片僅支持jpg/png格式,大小必須在1MB以下
地址:
post-https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN
調用示例:
curl -F [email protected] "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN"
示例中的media指form-data中媒體文件標識,有filename、filelength、content-type等信息
正常情況下,微信後臺會返回此圖片的URL
5.2 上傳圖文消息素材【訂閱號與服務號認證後均可用】
地址:
post-https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN
post的數據包括文章的信息,如作者、標題、縮略圖、content等,具體參數請看羣發接口和原創校驗的“上傳圖文消息素材”部分(羣發的圖文消息中可以添加小程序)
上傳成功的話微信後臺會返回形如下列數據的信息:
{
"type":"news",
"media_id":"CsEf3ldqkAYJAU6EJeIkStVDSvffUJ54vqbThMgplD-VJXXof6ctX5fI6-aYyUiQ",
"created_at":1391857799
}
六、原創校驗
圖文消息羣發前將進行原創校驗,相關設定如下:
6.1 羣發接口新增原創校驗流程
開發者調用羣發接口進行圖文消息的羣發時,微信會將開發者準備羣發的文章,與公衆平臺原創庫中的文章進行比較,校驗結果分爲以下幾種:
- 當前準備羣發的文章,未命中原創庫中的文章,則可以羣發。
- 當前準備羣發的文章,已命中原創庫中的文章,則:
- 若原創作者允許轉載該文章,則可以進行羣發。羣發時,會自動替換成原文的樣式,且會自動將文章註明爲轉載並顯示來源(若希望修改原文內容或樣式,或羣發時不顯示轉載來源,可自行與原創公衆號作者聯繫並獲得授權之後再進行羣發)。
- 若原創作者禁止轉載該文章,則不能進行羣發(若希望轉載該篇文章,可自行與原創公衆號作者聯繫並獲得授權之後再進行羣發)。
6.2 羣發接口的 send_ignore_reprint 參數
羣發接口新增 send_ignore_reprint 參數,開發者可以對羣發接口的 send_ignore_reprint 參數進行設置,指定待羣發的文章被判定爲轉載時,是否繼續羣發。
- 當 send_ignore_reprint 參數設置爲1時,文章被判定爲轉載時,且原創文允許轉載時,將繼續進行羣發操作。
- 當 send_ignore_reprint 參數設置爲0時(默認),文章被判定爲轉載時,將停止羣發操作。
七、開始羣發
下面介紹羣發的相關接口(兩種方式)
7.1 根據標籤進行羣發【訂閱號與服務號認證後均可用】
地址爲:
post-https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN
post的數據根據消息種類不同有所區別
1、圖文消息(注意:圖文消息的media_id需要通過“上傳圖文消息接口”中的方法來得到)
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"mpnews":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"mpnews",
"send_ignore_reprint":0
}
2、文本
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"text":{
"content":"CONTENT"
},
"msgtype":"text"
}
3、語音/音頻(注意:此處media_id需通過基礎支持中的上傳下載多媒體文件來得到)
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"voice":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"voice"
}
4、圖片(注意:此處media_id需通過基礎支持中的上傳下載多媒體文件來得到)
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"image":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"image"
}
5、視頻
視頻消息較爲特殊,它的media_id需要做一次轉換:
1、通過基礎支持中的上傳下載多媒體文件來得到初步的media_id
2、將此media_id用post請求到https://api.weixin.qq.com/cgi-bin/media/uploadvideo?access_token=ACCESS_TOKEN
3、微信後臺返回新的media_id
4、與其他羣發消息一樣調用接口
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"mpvideo":{
"media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc"
},
"msgtype":"mpvideo"
}
注意:此json中的media_id是轉換後的media_id
6、卡券消息
{
"filter":{
"is_to_all":false,
"tag_id":"2"
},
"wxcard":{
"card_id":"123dsdajkasd231jhksad"
},
"msgtype":"wxcard"
}
以上json數據中的:
- “filter”用於設定圖文消息的接收者;
- “is_to_all”用於設定是否向全部用戶發送,值爲true或false,選擇true該消息羣發給所有用戶,選擇false可根據tag_id發送給指定羣組的用戶;
- “tag_id”爲羣發到的標籤的tag_id,參見用戶管理中用戶分組接口,若is_to_all值爲true,可不填寫tag_id
7.2 根據OpenID列表羣發【訂閱號不可用,服務號認證後可用】
地址爲:
post-https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN
1、圖文消息(注意:圖文消息的media_id需要通過“上傳圖文消息接口”中的方法來得到)
{
"touser":[
"OPENID1",
"OPENID2"
],
"mpnews":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"mpnews",
"send_ignore_reprint":0
}
2、文本
{
"touser":[
"OPENID1",
"OPENID2"
],
"msgtype": "text",
"text": { "content": "hello from boxer."}
}
3、語音
{
"touser":[
"OPENID1",
"OPENID2"
],
"voice":{
"media_id":"mLxl6paC7z2Tl-NJT64yzJve8T9c8u9K2x-Ai6Ujd4lIH9IBuF6-2r66mamn_gIT"
},
"msgtype":"voice"
}
4、圖片
{
"touser":[
"OPENID1",
"OPENID2"
],
"image":{
"media_id":"BTgN0opcW3Y5zV_ZebbsD3NFKRWf6cb7OPswPi9Q83fOJHK2P67dzxn11Cp7THat"
},
"msgtype":"image"
}
5、視頻(視頻的media_id需要做一次轉換,詳細過程請看“根據標籤進行羣發”的“視頻”部分)
{
"touser":[
"OPENID1",
"OPENID2"
],
"mpvideo":{
"media_id":"123dsdajkasd231jhksad",
"title":"TITLE",
"description":"DESCRIPTION"
},
"msgtype":"mpvideo"
}
6、卡券
{
"touser":[
"OPENID1",
"OPENID2"
],
"wxcard": {"card_id":"123dsdajkasd231jhksad"}
"msgtype":"wxcard"
}
以上json數據中的:
- “touser”爲圖文消息的接收者,一串OpenID列表,OpenID最少2個,最多10000個
八、刪除羣發【訂閱號與服務號認證後均可用】
羣發之後,隨時可以通過該接口刪除羣發。
地址爲:
post-https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=ACCESS_TOKEN
post數據如下:
參數 | 是否必須 | 說明 |
---|---|---|
msg_id | 是 | 發送出去的消息ID |
article_idx | 否 | 要刪除的文章在圖文消息中的位置,第一篇編號爲1,該字段不填或填0會刪除全部文章 |
注意:
1、只有已經發送成功的消息才能刪除
2、刪除消息是將消息的圖文詳情頁失效,已經收到的用戶,還是能在其本地看到消息卡片。
3、刪除羣發消息只能刪除圖文消息和視頻消息,其他類型的消息一經發送,無法刪除。
4、如果多次羣發發送的是一個圖文消息,那麼刪除其中一次羣發,就會刪除掉這個圖文消息,導致所有羣發都失效
九、預覽接口【訂閱號與服務號認證後均可用】
開發者可通過該接口發送消息給指定用戶,在手機端查看消息的樣式和排版。爲了滿足第三方平臺開發者的需求,在保留對openID預覽能力的同時,增加了對指定微信號發送預覽的能力,但該能力每日調用次數有限制(100次),請勿濫用。
地址爲:
post-https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=ACCESS_TOKEN
1、圖文消息
{
"touser":"OPENID",
"mpnews":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"mpnews"
}
2、文本
{
"touser":"OPENID",
"text":{
"content":"CONTENT"
},
"msgtype":"text"
}
3、語音
{
"touser":"OPENID",
"voice":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"voice"
}
4、圖片
{
"touser":"OPENID",
"image":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"image"
}
5、視頻
{
"touser":"OPENID",
"mpvideo":{ "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc",
},
"msgtype":"mpvideo"
}
6、卡券
{ "touser":"OPENID",
"wxcard":{
"card_id":"123dsdajkasd231jhksad",
"card_ext": "{"code":"","openid":"","timestamp":"1402057159","signature":"017bb17407c8e0058a66d72dcc61632b70f511ad"}"
},
"msgtype":"wxcard"
}
請注意,上述JSON數據中的touser字段都可以改爲towxname,這樣就可以針對微信號進行預覽(而非openID),towxname和touser同時賦值時,以towxname優先
十、查詢羣發消息發送狀態【訂閱號與服務號認證後均可用】
地址爲:
post-https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=ACCESS_TOKEN
post數據爲:
{
"msg_id": "201053012"
}
返回數據爲(正確時):
{
"msg_id":201053012,
"msg_status":"SEND_SUCCESS"
}
其中msg_status爲消息發送後的狀態,SEND_SUCCESS表示發送成功,SENDING表示發送中,SEND_FAIL表示發送失敗,DELETE表示已刪除
十一、事件推送羣髮結果
由於羣發任務提交後,羣發任務可能在一定時間後才完成,因此,羣發接口調用時,僅會給出羣發任務是否提交成功的提示,若羣發任務提交成功,則在羣發任務結束時,會向開發者在公衆平臺填寫的開發者URL(callback 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>
</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(30001) // 原創校驗出現系統錯誤且用戶選擇了被判爲轉載就不羣發 err(30002) // 原創校驗被判定爲不能羣發 err(30003) // 原創校驗被判定爲轉載文且用戶選擇了被判爲轉載就不羣發 |
TotalCount | tag_id下粉絲數;或者openid_list中的粉絲數 |
FilterCount | 過濾(過濾是指特定地區、性別的過濾、用戶設置拒收的過濾,用戶接收已超4條的過濾)後,準備發送的粉絲數,原則上,FilterCount = SentCount + ErrorCount |
SentCount | 發送成功的粉絲數 |
ErrorCount | 發送失敗的粉絲數 |
ResultList | 各個單圖文校驗結果 |
ArticleIdx | 羣發文章的序號,從1開始 |
UserDeclareState | 用戶聲明文章的狀態 |
AuditState | 系統校驗的狀態 |
OriginalArticleUrl | 相似原創文的url |
OriginalArticleType | 相似原創文的類型 |
CanReprint | 是否能轉載 |
NeedReplaceContent | 是否需要替換成原創文內容 |
NeedShowReprintSource | 是否需要註明轉載來源 |
CheckState | 整體校驗結果,1-未被判爲轉載,可以羣發,2-被判爲轉載,可以羣發,3-被判爲轉載,不能羣發 |
十二、使用 clientmsgid 參數,避免重複推送
羣發接口新增 clientmsgid 參數,開發者調用羣發接口時可以主動設置 clientmsgid 參數,避免重複推送。羣發時,微信後臺將對 24 小時內的羣發記錄進行檢查,如果該 clientmsgid 已經存在一條羣發記錄,則會拒絕本次羣發請求,返回已存在的羣發msgid,開發者可以調用“查詢羣發消息發送狀態”接口查看該條羣發的狀態。
使用方法:
在羣發時(根據OpenID列表羣發或根據標籤進行羣發)在post數據中加入clientmsgid字段(開發方維護的羣發msgid,長度限制64字節,如不填,則後臺默認以羣發範圍和羣發內容的摘要值做爲clientmsgid)。
示例(根據標籤進行羣發):
{
"filter":{
"is_to_all":false,
"tag_id":2
},
"mpnews":{
"media_id":"123dsdajkasd231jhksad"
},
"msgtype":"mpnews",
"send_ignore_reprint":0,
"clientmsgid":"send_tag_2"
}
十三、控制羣發速度
開發者可以使用限速接口來控制羣發速度。
獲取羣發速度
地址爲:
post-https://api.weixin.qq.com/cgi-bin/message/mass/speed/get?access_token=ACCESS_TOKEN
返回結果爲:參數 是否必須 說明 speed 是 羣發速度的級別 realspeed 是 羣發速度的真實值 單位:萬/分鐘 設置羣發速度
地址爲:
post-https://api.weixin.qq.com/cgi-bin/message/mass/speed/set?access_token=ACCESS_TOKEN
post數據爲:{ "speed":1 }
羣發速度(speed)的級別,是一個0到4的整數,數字越大表示羣發速度越慢。
speed 與 realspeed 的關係如下:
speed realspeed 0 80w/分鐘 1 60w/分鐘 2 45w/分鐘 3 30w/分鐘 4 10w/分鐘