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)--开始使用微信接口

相关文章
相关标签/搜索