高級接口--高級群發接口


官方文檔 (由於本人公眾號權限的原因,這一節的大部分例子都沒有測試)

注意:

1、對於認證訂閱號,群發接口每天可成功調用1次,此次群發可選擇發送給全部用戶或某個標簽;
2、對於認證服務號雖然開發者使用高級群發接口的每日調用限制為100次,但是用戶每月只能接收4條,無論在公眾平台網站上,還是使用接口群發,用戶每月只能接收4條群發消息,多於4條的群發將對該用戶發送失敗;
3、開發者可以使用預覽接口校對消息樣式和排版,通過預覽接口可發送編輯好的消息給指定用戶校驗效果;
4、群發過程中,微信后台會自動進行圖文消息原創校驗,請提前設置好相關參數(send_ignore等);
5、開發者可以主動設置 clientmsgid 來避免重復推送。
6、群發接口每分鍾限制請求60次,超過限制的請求會被拒絕。
7、圖文消息正文中插入自己帳號和其他公眾號已群發文章鏈接的能力

關於群發時使用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條,且這些群發不會進入歷史消息列表。

另外,請開發者注意,本接口中所有使用到media_id的地方,現在都可以使用素材管理中的永久素材media_id了。請但注意,使用同一個素材群發出去的鏈接是一樣的,
這意味着,刪除某一次群發,會導致整個鏈接失效。

群發圖文消息:
  1、首先,預先將圖文消息中需要用到的圖片,使用上傳圖文消息內圖片接口,上傳成功並獲得圖片 URL;
    def upload_newsurl(self,access_token,picfile):
        upload_url = 'https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=%s'% access_token
        postData ={
            'media':open(picfile,'rb')
        }
        response = requests.post(upload_url,files=postData)
        return json.loads(response)['url']

  2.上傳圖文消息素材,需要用到圖片時,請使用上一步獲取的圖片 URL;

如果需要在群發圖文中插入小程序,則在調用上傳圖文消息素材接口時,需在content字段中添加小程序跳轉鏈接,有以下三種樣式的可供選擇。

小程序卡片跳轉小程序,代碼示例:

<mp-miniprogram data-miniprogram-appid="wx123123123" data-miniprogram-path="pages/index/index" data-miniprogram-title="小程序示例" data-progarm-imageurl="http://mmbizqbic.cn/demo.jpg"></mp-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="http://mmbiz.qpic.cn/mmbiz_jpg/demo/0?wx_fmt=jpg" alt="" data-width="null" data-ratio="NaN"></a></p>


3. 根據標簽進行群發:
def send_massmsg(access_token,postData):
    send_url ='https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=%s'% access_token
    response = requests.post(send_url,json.dumps(postData))
    return json.loads(response.text)
mpnews
{ "filter":{ "is_to_all":false, "tag_id":2 }, "mpnews":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"mpnews", "send_ignore_reprint":0 }
text
{ "filter":{ "is_to_all":false, "tag_id":2 }, "text":{ "content":"CONTENT" }, "msgtype":"text" }
voice
{ "filter":{ "is_to_all":false, "tag_id":2 }, "voice":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"voice" }
image
{ "filter":{ "is_to_all":false, "tag_id":2 }, "image":{ "media_id":"123dsdajkasd231jhksad" }, "msgtype":"image" }
mpvideo
{ "filter":{ "is_to_all":false, "tag_id":2 }, "mpvideo":{ "media_id":"IhdaAQXuvJtGzwwc0abfXnzeezfO0NgPK6AQYShD8RQYMTtfzbLdBIQkQziv2XJc" }, "msgtype":"mpvideo" }
卡券消息
{ "filter":{ "is_to_all":false, "tag_id":"2" }, "wxcard":{ "card_id":"123dsdajkasd231jhksad" }, "msgtype":"wxcard" }
視頻消息的media_id需要通過 先上傳視頻,再從素材中獲取得到的media_id為准:
    def get_uploadedvideo(self,access_token,media_id,video_title='',video_intro=''):
        '''為群發視頻消息使用
        https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Batch_Sends_and_Originality_Checks.html
        '''
        upload_url = 'https://api.weixin.qq.com/cgi-bin/media/uploadvideo?access_token=%s'% access_token
        postData ={
            'media_id':media_id,
            "title": video_title,
            "description": video_intro
        }
        result = requests.post(upload_url,json.dumps(postData,ensure_ascii=False).encode('utf-8'))
        return json.loads(result.text)

返回數據示例(正確時的JSON返回結果):

{ "errcode":0, "errmsg":"send job submission success", "msg_id":34182, "msg_data_id": 206227730 #圖文消息專有 }

預覽消息:
POST數據說明

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" 
}
def preview_massmsg(access_token,postData):
    '''預覽接口'''
    send_url = 'https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=%s' % access_token
    response = requests.post(send_url, json.dumps(postData))
    return json.loads(response.text)

 

刪除消息:
def del_massmsg(access_token,msg_id, article_idx=0):
    '''只能刪除圖文和視頻消息.收到消息的用戶點擊時會顯示已被刪除'''
    del_url = 'https://api.weixin.qq.com/cgi-bin/message/mass/delete?access_token=%s'% access_token
    postData={
        "msg_id": msg_id,
        "article_idx": article_idx
    }
    response = requests.post(del_url, json.dumps(postData))
    return json.loads(response.text)

查詢群發消息發送狀態

def get_massmsg_status(access_token,msg_id):
    '''查看消息狀態'''
    send_url = 'https://api.weixin.qq.com/cgi-bin/message/mass/get?access_token=%s' % access_token
    postData = {
   "msg_id": msg_id
}
    response = requests.post(send_url, json.dumps(postData))
    return json.loads(response.text)

 

事件推送群發結果

由於群發任務提交后,群發任務可能在一定時間后才完成,因此,群發接口調用時,僅會給出群發任務是否提交成功的提示,若群發任務提交成功,則在群發任務結束時,會向開發者在公眾平台填寫的開發者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>

獲取或設置速度:
ef get_massend_speed(access_token):
    speed_url ='https://api.weixin.qq.com/cgi-bin/message/mass/speed/get?access_token=%s'% access_token
    response = requests.get(speed_url, json.dumps(postData))
    return json.loads(response.text)

def set_massend_speed(access_token,speed):
    speed_url = 'https://api.weixin.qq.com/cgi-bin/message/mass/speed/set?access_token=%s'%access_token
    postData = {
        'speed':speed
    }
    response = requests.post(speed_url, json.dumps(postData))
    return json.loads(response.text)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM