透過範本訊息接口,公眾號能向關注其帳號的使用者發送預設範本的訊息。範本訊息僅用於公眾號向使用者發送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。不支援廣告等行銷類訊息以及其它所有可能對用戶造成騷擾的訊息。本文主要介紹基於C#開發實現公眾號範本訊息的管理功能。
「範本訊息功能的推出,將大大增強服務號的服務通知能力」,在一些一直期待微信範本訊息功能開放的公眾號經營者看來,微信一對一溝通的社群屬性,讓資訊推播的觸達率更加精準,這也讓企業在成本、服務效率、效能上有了不少優勢,不僅豐富了企業的服務形式,增強用戶的互動和黏性,還能為用戶帶來更多樣化、豐富、及時的服務體驗。
模版資訊依行業劃分,並根據使用場景不同設計了不同的模版,如軟體行業下就有報名成功通知、看房提醒、訂單提醒、會員儲值、會員消費通知等各種場景下可能使用到的模版。
如果我們公眾號需要使用模板,那麼我們需要從模板庫裡面新增所需的模板(目前數量上限為15個)。模板加入我的模板後,每個模板就產生了一個隨機值,也就是【模板ID】,我們發送訊息,就是依照這個模板ID進行發送的。
每個模板裡面都有詳細的參數說明,以及範例效果。
微信團隊相關負責人表示:範本訊息的開放主要是為了幫助公眾號完成閉環服務,現有的公眾號,主動發送訊息能力有限(每月可群發四則訊息),這讓許多企業無法向用戶推播服務結果等訊息的主動通知。模板訊息開放後,企業可以藉助微信平台,運用模板訊息,在外部服務和內部管理過程中,讓資訊的接觸更為迅捷,為用戶提供更周到的服務。
微信一直在不斷優化使用者體驗,範本訊息的開放,為企業提供了更多的基礎能力,例如更豐富的雙向互動,更精準的資訊提醒等,這些都提升了企業精品化、個人化服務的深度和廣度,這也是為什麼金融、民航、政務等多領域的機構、企業都期待微信開放模板訊息功能的原因。未來,隨著範本訊息功能的進一步完善,或許企業員工薪資明細、住戶每月用電量、電費等用電詳情,甚至是駕駛證到期需更換等,都能透過企業、部門機構微信公眾帳號的範本訊息即時傳遞給對應使用者。
前面介紹了模板的相關資訊以及單一模板的介紹,我們如果需要在後台程式中整合模板訊息發送的話,那麼我們需要了解模板訊息的API有那些?如何利用模板訊息的API進行訊息發送?
我們先來看看範本訊息使用的說明:
1、所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限; 2、需要选择公众账号服务所处的2个行业,每月可更改1次所选行业; 3、在所选择行业的模板库中选用已有的模板进行调用; 4、每个账号可以同时使用15个模板。 5、当前每个模板的日调用上限为10万次【2014年11月18日将接口调用频率从默认的日1万次提升为日10万次,可在MP登录后的开发者中心查看】。
範本訊息的管理功能有:
1 設定所屬產業
2 取得範本ID
3 發送範本訊息
4 事件推送
設定產業可在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); }
获得模板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); }
根据上面小节处理,添加到我的模板里面的操作得到的模板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#开发微信门户及应用公众号模板消息管理 相关文章请关注PHP中文网!