微信公衆號開發 [04] 模板消息功能的開發

一、模板消息的概況

模板消息的定位是用戶觸發後的通知消息, 不容許在用戶沒作任何操做或未經用戶贊成接收的前提下,主動下發消息給用戶。目前在特殊狀況下容許主動下發的消息只有故障類和災害警示警告類通知,除此以外都要通過用戶贊成或用戶有觸發行爲才能下發模板消息。 公衆號只能在模板庫中按照本身的行業來選擇模板。若是模板庫中暫時沒有你想要的模板,在知足微信規範和要求的狀況下,能夠爲你所在的行業貢獻新模板,幫助充實模板庫

再來看下官方對於模板消息的使用規則:
  • 全部服務號均可以在功能->添加功能插件處看到申請模板消息功能的入口,但只有認證後的服務號才能夠申請模板消息的使用權限並得到該權限

  • 須要選擇公衆帳號服務所處的2個行業,每個月可更改1次所選行業;

  • 在所選擇行業的模板庫中選用已有的模板進行調用

  • 每一個帳號能夠同時使用25個模板。

  • 當前每一個帳號的模板消息的日調用上限爲10萬次,單個模板沒有特殊限制。【2014年11月18日將接口調用頻率從默認的日1萬次提高爲日10萬次,可在MP登陸後的開發者中心查看】。當帳號粉絲數超過10W/100W/1000W時,模板消息的日調用上限會相應提高,以公衆號MP後臺開發者中心頁面中標明的數字爲準。

從紅色標記字體部分咱們能夠看到,要想使用模板消息,首先要求是認證後的服務號,其次,模板的框架是微信官方固定好的,根據不一樣的行業能夠不一樣地選擇, 咱們只能針對模板中的填充體進行變化

上面提到的這點,咱們從微信的接口文檔注意事項也能夠看到:
  • 模板消息調用時主要須要模板ID模板中各參數的賦值內容
  • 模板中參數內容必須以".DATA"結尾,不然視爲保留字;
  • 模板保留符號"{{ }}"。

也就是說,當你申請了模板消息之後,設定了所屬行業,你能夠在微信後臺的模板消息看到以下模板庫(借用一下方倍老師的圖片):


每一個模板,均可以經過後面的詳情,來查看其模板形式,和須要填充的內容(以下圖):


以前咱們也從文檔中看到,每一個帳戶能夠同時擁有25個模板,也就是如上圖所示的添加按鈕,你能夠添加25個不一樣模板,最總你會在你的模板庫看到你添加的模板和對應的模板ID:


二、模板消息的推送

好了,如今咱們知道模板消息是官方固定好的格式,咱們填充內容。並且對應給了咱們模板的ID,那麼咱們來看看,對於推送模板消息,須要咱們提供哪些內容:
http請求方式: POST 
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

POST數據示例以下:
{
   "touser":"OPENID",
   "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
   "url":"http://weixin.qq.com/download",  
   "miniprogram":{
     "appid":"xiaochengxuappid12345",
     "pagepath":"index?foo=bar"
   },          
   "data":{
	   "first": {
	       "value":"恭喜你購買成功!",
	       "color":"#173177"
	   },
	   "keynote1":{
	       "value":"巧克力",
	       "color":"#173177"
	   },
	   "keynote2": {
	       "value":"39.8元",
	       "color":"#173177"
	   },
	   "keynote3": {
	       "value":"2014年9月22日",
	       "color":"#173177"
	   },
	   "remark":{
	       "value":"歡迎再次購買!",
	       "color":"#173177"
	   }
   }
}


參數說明:
參數     是否必填 說明
touser 接收者openid
template_id 模板ID
url 模板跳轉連接
miniprogram 跳小程序所需數據,不需跳小程序可不用傳該數據
appid 所需跳轉到的小程序appid(該小程序appid必須與發模板消息的公衆號是綁定關聯關係)
pagepath 所需跳轉到小程序的具體頁面路徑,支持帶參數,(示例index?foo=bar)
data 模板數據
注:url和miniprogram都是非必填字段,若都不傳則模板無跳轉;若都傳,會優先跳轉至小程序。開發者可根據實際須要選擇其中一種跳轉方式便可。當用戶的微信客戶端版本不支持跳小程序時,將會跳轉至url。

咱們主要關注的是,如何構造一個符合格式體的JSON字符串,做爲POST數據進行傳遞。從上面的POST示例中能夠看到,其餘部分的設定基本上都是獲取的能夠固定知曉的,而data部分,是根據模板格式的不一樣來填充,其中first和remark部分固定,而keynote部分根據模板不一樣,要求填寫的也不一樣,必須和模板對應。

三、自定義模板

若是確實找不到咱們本身所須要的模板,那麼就在模板庫中,點擊選擇 」幫助咱們完善模板庫「
 
每月只能自定義三個模板


提交模板以後,要接受7到15天的審覈,審覈一旦經過就能夠開始使用你本身自定義的模版了。

對於自定義模板,還有一系列的審覈標準( 微信文檔 - 消息管理 - 發送消息 - 模板消息運營規範),這裏摘錄格式和內容規範:
(1)格式
格式正確,模板標準格式(三段式模板)
{ {first.DATA} }
關鍵詞1:{ {keyword1.DATA} }           
關鍵詞2:{ {keyword2.DATA} }
關鍵詞3:{ {keyword3.DATA} }                       
{ {remark.DATA} }

(2)內容
①標題、關鍵詞帶有品牌或公司名等沒有行業通用性的內容,不能經過
包括但不限於:某某公司服務通知、某某商品購買通知
②標題不能帶標點或其它特殊符號,且必須以「通知」或「提醒」結尾,不然不能經過
包括不限於:領取紅包!、天氣提醒!
③易被用做羣發,標題或關鍵詞不能簡要說明具體服務行爲或使用場景的模板不能經過
包括但不限於:管理員類通知、公告類通知、系統通知
④易對用戶騷擾的,發送頻率較高的模板不能經過
包括但不限於 :更新類通知、回覆類通知、互動類通知
⑤推廣宣傳、營銷類的模板不能經過
包括但不限於 :紅包類通知、優惠券類通知、活動類通知、積分類通知、獎勵類通知
⑥模板庫裏已存在相似的模板不經過

四、其餘

附:
帶JSON數據POST請求訪問微信接口的方法:
//上傳Json接口POST
public static com.alibaba.fastjson.JSONObject uploadPost(URL url,com.alibaba.fastjson.JSONObject json) throws Exception{
    HttpURLConnection conn =(HttpURLConnection) url.openConnection();
    conn.setConnectTimeout(8000);
    conn.setReadTimeout(8000);
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
    conn.setDoOutput(true);
    conn.setDoInput(true);
    conn.setUseCaches(false);
    conn.connect();
    OutputStream os= conn.getOutputStream();
    os.write(json.toJSONString().getBytes("UTF-8"));//傳入參數
    os.flush();
    os.close();
    InputStream is = conn.getInputStream();
    int size = is.available();
    byte[] buf=new byte[size];
    is.read(buf);
    String result =new String(buf,"UTF-8");
    return JSON.parseObject(result);
}
相關文章
相關標籤/搜索