模板消息

最近更新时间:2019-07-26 17:01:44

本文主要介绍模板消息功能,它类似一个访客预约系统,当用户预约成功后,下发一条消息,这条消息可以是单纯的小程序模板消息,如果小程序与公众号进行了关联,那么也可以使用统一服务消息,按需发送小程序的模板消息或是公众号的模板消息。

体验功能

体验 DEMO

本章的案例代码,请参考 代码 tcb-demo-basic

DEMO 接入流程

  1. 使用小程序登录微信公众平台,选择【访客登记通知】 > 【消息模板】。添加通知到个人模板库,记录模板 ID,供后续使用。
  2. 在小程序公众号平台, 选择【设置】>【开发设置】,找到开发者密码(AppSecret) ,记录密码供后续使用。
  3. 在公众号平台登录小程序绑定的公众号。
    a.在【首页】>【功能】>【添加功能】插件里选择模板消息,添加成功后,等待公众平台审核,审核通过后才能开始使用。
    b.审核通过后,选择【来访申请提醒】模板,搜索结果列表中编号为 OPENTM410586240 ,添加提醒到个人模板库后,记录其 ID 供后续使用。
  4. 在公众号管理平台,选择【开发】>【基本配置】里找到开发者 appId ,记录 appId 供后续使用。
  5. 请按以下步骤操作:
    • 首先在 cloud/functions 目录下,找到 send-message 云函数。
    • 其次在其根目录下新建 config 目录,复制 example.jsconfig 下,并改名为 index.js
    • 再而将上面收集保存的信息分别填入对应字段,内容如下所示。
    • 然后上传并安装云函数依赖。
      module.exports = {
      weappSecret: '', // 小程序 secret ID
      weappTemplateId: '', // 小程序模板消息 ID
      mpAppId: '', // 公众号 appid
      mpTemplateId: '' // 公众号模板消息 ID
      }
  6. 打开云控制台,选择【数据库】>【添加集合】 ,新建一个名为 reserves 的集合。
    以上步骤全部完成后,您就可以编译预览体验本 demo 了。

源码介绍

自定义消息模板

发送模板消息,首先需要在模板库里选择对应的模板,并按需选择所需字段。如果模板库中已有模板不能满足业务需求,您可以自己定义后提交审核,审核通过后即可选择使用。

使用 wx-js-utils 发送模板消息

官方的发送模板消息 API 如下所示:

POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=ACCESS_TOKEN

具体的参数请参考 小程序开发文档

使用 wx-js-utils 封装方法,如下所示:

  const wxMiniUser = new WXMINIUser({ appId, secret });
  const access_token = await wxMiniUser.getAccessToken();

  const wxMiniMessage = new WXMINIMessage({ openId, formId, templateId });

  return wxMiniMessage.sendMessage({
    access_token,
    data,
    page
  });

您只需要关注发布的消息内容即可。

统一服务消息

统一服务消息既可以发送小程序的模板消息,如有公众号与之绑定,则它也可以发送公众号模板消息,此时只需要提供公众号的一些配置即可,详细的参数请查看 DEMO 代码。通过消息发送的公众号推送消息,单击可以跳转到小程序页面,为小程序访问提供便利的入口。

注意:

发送公众号模板消息也需要提前在公众号管理平台选择模板消息。

官方发送统一服务消息 API ,如下所示:

POST https://api.weixin.qq.com/cgi-bin/message/wxopen/template/uniform_send?access_token=ACCESS_TOKEN

具体的参数请参考 小程序开发文档

利用小程序发送绑定公众号的消息模板,必须是当前小程序已上线,不然接口始终会报如下错误。

{"errcode":40165,"errmsg":"invalid weapp pagepath hint: [uQN5tA0640shc2]"}

使用 wx-js-utils 接口发送统一服务消息

主要代码如下所示:

  const {
    WXMINIUser,
    WXUniformMessage,
  } = require('wx-js-utils');
  const {
    touser,
    appId,
    secret,
    weapp_template_msg,
    mp_template_msg
  } = event

  const wxMiniUser = new WXMINIUser({ appId, secret });
  const access_token = await wxMiniUser.getAccessToken();

  const wxUniformMessage = new WXUniformMessage();

  return wxUniformMessage.sendMessage({
    access_token,
    touser,
    weapp_template_msg,
    mp_template_msg
  });

weapp_template_msg 和 mp_template_msg 的关系,两者都有。

  • 发送 weapp_template_msg 代表的小程序模板消息。
  • weapp_template_msg 不存在而 mp_template_msg 存在时,则发送公众号模板消息。