C#開發微信門戶及應用(27)-公衆號模板消息管理

經過模板消息接口,公衆號能向關注其帳號的用戶發送預設模板的消息。模板消息僅用於公衆號向用戶發送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。不支持廣告等營銷類消息以及其它全部可能對用戶形成騷擾的消息。本文主要介紹基於C#開發實現公衆號模板消息的管理功能。html

「模板消息功能的推出,將極大地加強服務號的服務通知能力」,在一些一直期待微信模板消息功能開放的公衆號運營者看來,微信一對一溝通的社交屬性,讓信息推送的觸達率更加精準,這也讓企業在成本、服務效率、性能上有了很多優點,不只豐富了企業的服務形式,加強用戶的互動和粘性,還能爲用戶帶來更多元、豐富、及時的服務體驗。android

一、模板的行業分類管理及說明

模版信息依行業進行劃分,並根據使用場景不一樣設計了不一樣的模版,如軟件行業下就有報名成功通知、看房提醒、訂單提醒、會員充值、會員消費通知等各類場景下可能使用到的模版。ios

若是咱們公衆號須要使用模板,那麼咱們須要從模板庫裏面添加所需的模板(目前數量上限爲15個)。模板添加到個人模板後,每一個模板就生成了一個隨機值,也就是【模板ID】,咱們發送信息,就是依照這個模板ID進行發送的。api

每一個模板裏面有詳細的參數說明,以及示例效果。服務器

微信團隊相關負責人表示:模板消息的開放主要是爲了幫助公衆號完成閉環服務,現有的公衆號,主動發消息能力有限(每個月可羣發四條消息),這讓許多企業沒法向用戶推送服務結果等消息的主動通知。模板消息開放後,企業能夠藉助微信平臺,運用模板消息,在外部服務和內部管理過程當中,讓信息的觸達更爲迅捷,爲用戶提供更加周到的服務。微信

微信一直在不斷優化用戶體驗,模板消息的開放,爲企業提供了更多的基礎能力,好比更豐富的雙向互動,更精準的信息提醒等,這些都提高了企業精品化、個性化服務的深度和廣度,這也是爲何金融、民航、政務等多領域的機構、企業都期待微信開放模板消息功能的緣由。將來,隨着模板消息功能的進一步完善,或許企業員工工資明細、住戶每個月用電量、電費等用電詳單,甚至是駕駛證到期需更換等,都能經過企業、部門機構微信公衆賬號的模板消息即時傳遞給相應用戶。函數

二、使用模板消息進行開發

前面介紹了模板的相關信息以及單個模板的介紹,咱們若是須要在後臺程序中集成模板消息發送的話,那麼咱們須要瞭解模板消息的API有那些?如何利用模板消息的API進行消息發送?post

咱們先來看看模板消息使用的說明:性能

一、全部服務號均可以在功能->添加功能插件處看到申請模板消息功能的入口,但只有認證後的服務號才能夠申請模板消息的使用權限並得到該權限;
二、須要選擇公衆帳號服務所處的2個行業,每個月可更改1次所選行業;
三、在所選擇行業的模板庫中選用已有的模板進行調用;
四、每一個帳號能夠同時使用15個模板。
五、當前每一個模板的日調用上限爲10萬次【2014年11月18日將接口調用頻率從默認的日1萬次提高爲日10萬次,可在MP登陸後的開發者中心查看】。

模板消息的管理功能有:測試

  1 設置所屬行業
  2 得到模板ID
  3 發送模板消息
  4 事件推送

2.1設置所屬行業

設置行業可在MP中完成,每個月可修改行業1次,帳號僅可以使用所屬行業中相關的模板,爲方便第三方開發者,提供經過接口調用的方式來修改帳號所屬行業,具體以下:

接口調用請求說明

http請求方式: POST
https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token=ACCESS_TOKEN

POST數聽說明

POST數據示例以下:

      {
          "industry_id1":"1",
          "industry_id2":"4"
       }

根聽說明,咱們能夠定義一個接口類ITemplateMessageApi,而後定義設置所屬行業的接口函數以下所示:

        /// <summary>
        /// 設置所屬行業
        /// </summary>
        /// <param name="accessToken"></param>
        /// <param name="industry_id1">公衆號模板消息所屬行業編號(主營行業)</param>
        /// <param name="industry_id2">公衆號模板消息所屬行業編號(副營行業)</param>
        /// <returns></returns>
        CommonResult SetIndustry(string accessToken, IndustryCode industry_id1, IndustryCode industry_id2);

而爲了方便,咱們定義IndustryCode爲一個枚舉對象,裏面列出了系統支持的全部行業代碼,以下所示。

而實現代碼和以前的函數處理相似,都是POST數據到一個鏈接便可,並解析返回的結果就能夠了,具體實現代碼以下所示。

        /// <summary>
        /// 設置所屬行業
        /// </summary>
        /// <param name="accessToken">訪問憑證</param>
        /// <param name="industry_id1">公衆號模板消息所屬行業編號(主營行業)</param>
        /// <param name="industry_id2">公衆號模板消息所屬行業編號(副營行業)</param>
        /// <returns></returns>
        public CommonResult SetIndustry(string accessToken, IndustryCode industry_id1, IndustryCode industry_id2)
        {
            var url = string.Format("https://api.weixin.qq.com/cgi-bin/template/api_set_industry?access_token={0}", accessToken);
            var data = new
            {
                industry_id1 = (int)industry_id1,
                industry_id2 = (int)industry_id2
            };
            string postData = data.ToJson();

            return Helper.GetExecuteResult(url, postData);
        }

2.2 得到模板ID

得到模板ID,也就是從模板庫裏面添加對應的模板消息到個人模板裏面。

從行業模板庫選擇模板到帳號後臺,得到模板ID的過程可在MP中完成。爲方便第三方開發者,提供經過接口調用的方式來修改帳號所屬行業,具體以下:

接口調用請求說明

http請求方式: POST
https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token=ACCESS_TOKEN

POST數聽說明

POST數據示例以下:

      {
           "template_id_short":"TM00015"
       }

C#函數實現代碼以下所示:

        /// <summary>
        /// 得到模板ID.
        /// 從行業模板庫選擇模板到帳號後臺,得到模板ID的過程可在MP中完成。
        /// </summary>
        /// <param name="accessToken">訪問憑證</param>
        /// <param name="template_id_short">模板庫中模板的編號,有「TM**」和「OPENTMTM**」等形式</param>
        /// <returns></returns>
        public AddTemplateResult AddTemplate(string accessToken, string template_id_short)
        {
            var url = string.Format("https://api.weixin.qq.com/cgi-bin/template/api_add_template?access_token={0}", accessToken);
            var data = new
            {
                template_id_short = template_id_short
            };
            string postData = data.ToJson();

            return JsonHelper<AddTemplateResult>.ConvertJson(url, postData);
        }

2.3 發送模板消息

根據上面小節處理,添加到個人模板裏面的操做獲得的模板ID,咱們就能夠調用發送模板消息的API進行模板消息發送了。

接口調用請求說明

http請求方式: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

POST數聽說明

POST數據示例以下:

      {
           "touser":"OPENID",
           "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
           "url":"http://weixin.qq.com/download",
           "topcolor":"#FF0000",
           "data":{
                   "first": {
                       "value":"恭喜你購買成功!",
                       "color":"#173177"
                   },
                   "keynote1":{
                       "value":"巧克力",
                       "color":"#173177"
                   },
                   "keynote2": {
                       "value":"39.8元",
                       "color":"#173177"
                   },
                   "keynote3": {
                       "value":"2014年9月16日",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"歡迎再次購買!",
                       "color":"#173177"
                   }
           }
       }

根據上面的JSON參數,咱們能夠看到,有部分是模板消息公共的部分,有部分則是模板消息的具體參數,這些參數須要根據不一樣的模板進行不一樣的賦值。

如這部分是共同的:

   touser":"OPENID",
   "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
   "url":"http://weixin.qq.com/download",
   "topcolor":"#FF0000",

根據這個特色,咱們定義發送模板消息的接口以下所示:

        /// <summary>
        /// 模板消息僅用於公衆號向用戶發送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。
        /// 不支持廣告等營銷類消息以及其它全部可能對用戶形成騷擾的消息。
        /// </summary>
        /// <param name="accessToken">訪問憑證</param>
        /// <param name="openId">帳號的openID</param>
        /// <param name="templateId">在公衆平臺線上模板庫中選用模板得到ID</param>
        /// <param name="data">模板的變化參數數據</param>
        /// <param name="url">,URL置空,則在發送後,點擊模板消息會進入一個空白頁面(ios),或沒法點擊(android)。</param>
        /// <param name="topcolor">頂部顏色,默認爲#173177</param>
        /// <returns></returns>
        SendMassMessageResult SendTemplateMessage(string accessToken, string openId, string templateId, object data, string url, string topcolor = "#173177");

咱們用object data來定義模板的變化參數數據。

具體的實現仍是和前面的方法提交數據處理差很少,代碼以下所示。

        /// <summary>
        /// 模板消息僅用於公衆號向用戶發送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。
        /// 不支持廣告等營銷類消息以及其它全部可能對用戶形成騷擾的消息。
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="accessToken">訪問憑證</param>
        /// <param name="openId"></param>
        /// <param name="templateId">在公衆平臺線上模板庫中選用模板得到ID</param>
        /// <param name="data"></param>
        /// <param name="url">,URL置空,則在發送後,點擊模板消息會進入一個空白頁面(ios),或沒法點擊(android)。</param>
        /// <param name="topcolor"></param>
        /// <returns></returns>
        public SendMassMessageResult SendTemplateMessage(string accessToken, string openId, string templateId, object data, string url, string topcolor = "#173177")
        {
            var postUrl = string.Format("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token={0}", accessToken);
            var msgData = new TemplateData()
            {
                touser = openId,
                template_id = templateId,
                topcolor = topcolor,
                url = url,
                data = data
            };
            string postData = msgData.ToJson();

            SendMassMessageResult result = JsonHelper<SendMassMessageResult>.ConvertJson(postUrl, postData);
            return result;
        }

發送模板的消息相對其餘兩個接口的使用複雜一些,例如我以一個會員通知的模板消息爲例,模板的詳細狀況以下:

具體的測試代碼以下所示。

            #region 發送模板消息

            var data = new
            {
                //使用TemplateDataItem簡單建立數據。
                first = new TemplateDataItem("您好,您已成爲微信【廣州愛奇迪】會員。"),
                type = new TemplateDataItem("18620292076"),
                address = new TemplateDataItem("廣州市白雲區廣州大道北"),
                VIPName = new
                {
                    //使用new 方式,構建數據,包括value, color兩個固定屬性。
                    value = "伍華聰",
                    color = "#173177"
                },
                VIPPhone = new TemplateDataItem("18620292076"),
                expDate = new TemplateDataItem("2016年4月18日"),
                remark = new TemplateDataItem("若有疑問,請諮詢18620292076。", "#173177"),
            };

            #endregion
            string url = "http://www.iqidi.com";
            string topColor = "#173177";

            string templateId = "-5LbClAa9KUlEmr5bCSS0rxU_I2iT16iYBDxCVU1iJg";
            SendMassMessageResult sendResult = api.SendTemplateMessage(token, openId, templateId, data, url, topColor);
            if(sendResult != null)
            {
                Console.WriteLine(sendResult.msg_id);
            }

那麼咱們獲得的提示效果以下所示。

微信模板消息,可以讓咱們與客戶之間溝通不受每個月幾條數量的限制,同時也可以利用微信模板庫豐富的內容,實現強大的應用場景。

 

 

若是對這個《C#開發微信門戶及應用》系列感興趣,能夠關注個人其餘文章,系列隨筆以下所示:

C#開發微信門戶及應用(26)-公衆號微信素材管理

C#開發微信門戶及應用(25)-微信企業號的客戶端管理功能

C#開發微信門戶及應用(24)-微信小店貨架信息管理

C#開發微信門戶及應用(23)-微信小店商品管理接口的封裝和測試

C#開發微信門戶及應用(22)-微信小店的開發和使用

C#開發微信門戶及應用(21)-微信企業號的消息和事件的接收處理及解密 

C#開發微信門戶及應用(20)-微信企業號的菜單管理

C#開發微信門戶及應用(19)-微信企業號的消息發送(文本、圖片、文件、語音、視頻、圖文消息等)

C#開發微信門戶及應用(18)-微信企業號的通信錄管理開發之成員管理

C#開發微信門戶及應用(17)-微信企業號的通信錄管理開發之部門管理

C#開發微信門戶及應用(16)-微信企業號的配置和使用

C#開發微信門戶及應用(15)-微信菜單增長掃一掃、發圖片、發地理位置功能

 C#開發微信門戶及應用(14)-在微信菜單中採用重定向獲取用戶數據

C#開發微信門戶及應用(13)-使用地理位置擴展相關應用

C#開發微信門戶及應用(12)-使用語音處理

C#開發微信門戶及應用(11)--微信菜單的多種表現方式介紹

C#開發微信門戶及應用(10)--在管理系統中同步微信用戶分組信息

C#開發微信門戶及應用(9)-微信門戶菜單管理及提交到微信服務器

C#開發微信門戶及應用(8)-微信門戶應用管理系統功能介紹

C#開發微信門戶及應用(7)-微信多客服功能及開發集成

C#開發微信門戶及應用(6)--微信門戶菜單的管理操做

C#開發微信門戶及應用(5)--用戶分組信息管理

C#開發微信門戶及應用(4)--關注用戶列表及詳細信息管理

C#開發微信門戶及應用(3)--文本消息和圖文消息的應答

C#開發微信門戶及應用(2)--微信消息的處理和應答

C#開發微信門戶及應用(1)--開始使用微信接口

相關文章
相關標籤/搜索