订阅消息是什么
用户用完小程序就退出了,想再提醒他回来,得靠订阅消息。它是微信给小程序的一条官方通道:用户订阅之后,后端可以给他推一条服务通知,出现在他的微信聊天列表里。
和以前的模板消息不同,订阅消息必须用户主动同意一次才能发一条,不能像短信那样想发就发。这个限制是为了防打扰,也是开发者必须遵守的规则。
- 一次性订阅同意一次发一条。
- 长期订阅特定类目可用。
- 模板在公众平台申请。
- 下发后端调接口发送。
一次性订阅与长期订阅
大多数小程序用的是一次性订阅:用户点一次允许,你就能给他发一条。发完就没了,想再发要再让用户同意一次。
| 类型 | 能不能发 | 适用 |
|---|---|---|
| 一次性订阅 | 同意一次发一条 | 大多数小程序 |
| 长期订阅 | 同意后可多次发 | 政务、医疗等特定类目 |
长期订阅不是谁都能开,得是符合要求的服务类目。普通电商和工具类,老老实实做一次性订阅。
一次性订阅虽然一次只发一条,但可以让用户一次同意多个模板。比如用户提交预约时,同时申请「预约成功提醒」和「就诊结果通知」两个模板,他一次授权你就攒下两条额度,后面两件事各发一条。合理攒额度,能少打扰用户好几次。
申请模板与下发
先在小程序公众平台的订阅消息里申请一个模板,选好要用的字段,拿到模板 ID。真正发的时候由后端调用发送接口,把用户的 openid、模板 ID 和字段内容传过去。
wx.requestSubscribeMessage({
tmplIds: ["模板ID"],
success: function (res) { console.log(res); }
});
前端负责弹起订阅授权,后端负责真正下发。下发接口需要 access_token,注意它有有效期,要缓存别每次重取。
模板里的字段内容也要按模板申请时的格式填:是数字就别塞一长串文字,是时间就传标准格式。填错了接口会直接拒绝。发布前先拿自己的小号测试一遍,确认通知能正常收到、点进去能跳到对应页面,再放量给真实用户。
引导用户订阅
用户不会无缘无故同意订阅,要在他确实需要提醒的时机引导。比如提交订单后、预约成功后,告诉他「开启提醒,结果出来第一时间通知你」。
- 在用户真正需要通知的节点引导。
- 说清楚订阅了会收到什么。
- 别一进小程序就弹,那样多半被拒绝。
用户拒绝过一次,短期内再弹也没用,别反复骚扰。
引导订阅时,那个弹起授权的动作必须由用户的点击直接触发,不能页面一加载就自动弹。所以要把订阅授权绑在一个明确的按钮上,比如用户点「开启结果通知」时再调起。这样既符合平台规则,用户也知道自己正在同意什么,授权率自然就更高了。
召回与提醒用法
订阅消息用好了,是免费的召回通道:订单状态变了发一条、预约快到了发一条、活动开始前发一条。用户点通知就能回到小程序,比发短信便宜,也更自然。
通知要有用,别为了发而发,不然用户下次直接关。
常见订阅消息坑
| 坑 | 后果 | 应对 |
|---|---|---|
| 没订阅就发 | 接口报错 | 先订阅再下发 |
| 频繁弹授权 | 用户反感 | 有用时才引导 |
| access_token 不缓存 | 性能差甚至限流 | 缓存并提前续期 |
订阅消息清单
- 公众平台申请模板拿到模板 ID。
- 前端弹授权,后端下发。
- 在用户需要的节点引导订阅。
- 通知要有价值,别滥发。
- access_token 缓存复用。
好通知是用户盼着收到的,不是想躲的。
实际用的时候,可以把订阅消息和用户的具体动作绑在一起:下了单就订一条订单进度,约了号就订一条就诊提醒,报名了活动就订一条开始通知。每条通知都对应一件用户关心的事,打开率自然就高。
反过来,如果一条通知点进去对用户没什么用,他下次不仅不订阅,还可能直接卸载。所以发之前先想清楚:这条消息对用户有什么用?没用就别发。