微信公衆號羣發接口和原創校驗

一、說明

在公衆平臺網站上,爲訂閱號提供了每天一條的羣發權限,爲服務號提供每月(自然月)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(表示對所有用戶發送)使其進入公衆號在微信客戶端的歷史消息列表:

  1. 使用is_to_all爲true且成功羣發,會使得此次羣發進入歷史消息列表。
  2. 爲防止異常,認證訂閱號在一天內,只能使用is_to_all爲true進行羣發一次,或者在公衆平臺官網羣發(不管本次羣發是對全體還是對某個分組)一次。以避免一天內有2條羣發進入歷史消息列表。
  3. 類似地,服務號在一個月內,使用is_to_all爲true羣發的次數,加上公衆平臺官網羣發(不管本次羣發是對全體還是對某個分組)的次數,最多隻能是4次。
  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/分鐘
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章