日常的微信H5营销活动/微信小程序中,经常会碰到需要定时通知/提醒用户的场景,本文主要帮你了解各种通知用户的方法和场景.
各类消息功能对比
先上各类消息功能和限制上的对比结果,如下表
服务号也有客服消息,但触发条件比较苛刻,需要
1、用户发送信息
2、点击自定义菜单(仅有点击推事件、扫码推事件、扫码推事件且弹出“消息接收中”提示框这3种菜单类型是会触发客服接口的)
3、关注公众号
4、扫描二维码
5、支付成功
6、用户维权
跟平时H5跟小程序的场景不符合,本文暂不讨论服务号的客服消息
服务号发送模板消息流程
1.第一次使用模板消息需要申请模板:
登陆服务号后台,访问功能->模板消息,设置对应的行业,并申请模板,并获得模板id和模板格式
2.调用发送接口
用户必须关注才能收到服务号模板消息!
用户必须关注才能收到服务号模板消息!
用户必须关注才能收到服务号模板消息!
发送给未关注的用户会得到类似的返回结果:
{“errcode”:43004,“errmsg”:“require subscribe hint: [l8Xf.a0132dsz1]”}
详细参数接口请看:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433751277
3.用户接收消息效果图
会话列表:
会话内容页:
发送一次性订阅消息流程
1.获取用户授权
控制页面跳转到https://mp.weixin.qq.com/mp/subscribemsg?action=get_confirm&appid=你的AppId&scene=1000&template_id=1uDxHNXwYQfBmXOfPJcjAS3FynHArD8aWMEFNRGSbCc&redirect_url=跳转回来的链接&reserved=test#wechat_redirect
参数说明:
appid:服务号appid
scene:场景值id,一般一个活动页面用一个唯一的即可,1-10000的int类型
reserved:防CSRF的参数,随机值就可以,回调地址再校验一次,可选参数
redirect_url:接收回调参数的地址,urlencode,第一次接入必须在设置-公众号设置-功能设置 添加业务域名,如下图
template_id:在公众号后台获取即可,接口权限->一次性订阅消息->查看模板id,如下图
2.用户跳转到页面后会微信显示如下内容
用户确认后,会跳转到上面传过去的redirect_url,会带上以下参数
openid:用户id,用户拒绝没有此参数
template_id:模板id
action:用户确认则是confirm,反之为cancel
scene:场景值
reserved:防csrf攻击的参数
后端保存openid,template和scene,用于发送数据
3.后端调用接口发送消息
到了需要发送的时候(活动到点提醒/抽奖结果通知等等),后端再调用接口发送:
可发送小程序或网页url,网页的url无域名限制,用户无需关注也可以发送消息,订阅号也可以发送此类消息.
更多参数以官方文档为准:
https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1500374289_66bvB
3.发送效果图
已关注服务号的用户会出现在服务号会话里,如下:
未关注服务号的用户会出现在服务通知:
小程序发送客服消息流程
由于前期开发者对客服消息的滥用,微信封禁了用户进入会话的事件,现在需要用户从客服会话窗口主动发送消息,服务端收到事件才可以对用户推送消息.
自4月9日起,用户通过客服消息按钮进入会话,该动作不再支持开发者给用户下发客服消息,改由平台统一给用户展示接入提示。开发者仅可在用户主动咨询后进行回复,否则将收到45047的错误码返回:客服接口下行条数超过上限。请尽快进行适配。
1.设置消息推送URL
如果是第一次接入客服消息,需要设置消息推送url
设置->开发设置->消息推送
接入的详细文档请看:https://developers.weixin.qq.com/miniprogram/dev/api/custommsg/callback_help.html
2.引导用户发送消息到客服消息
引导用户点击’open-type=“contact”'的button进入客服会话聊天窗口,并让用户发送对应文字
<button class="download" open-type="contact" session-from="wesixpuzzleapp"></button>
如下图,点击后即进入客服会话
服务端接收微信的消息推送后,可以下发消息到聊天窗,该消息可以打开任意url和小程序,可拉起应用下载
小程序发送模板消息流程
1.一如既往地先申请/添加模板
2.引导用户提交form
一般是让用户点击form里面的button,如签到/留言等功能按钮,form标签的report-submit属性必须设置为true,如:
<form bindsubmit="formSubmit" report-submit="{{true}}">
<button class="download" formType="submit"></button>
</form>
(样式也是继续使用上面客服消息的例子)
3.向后台传递formId
用户点击后,触发bindsubmit的事件,callback的参数会带上formId,传递这个formId到后台
formSubmit: function(e) {
wx.request({
url: ‘https://xxxx.xxx/miniapp/push-message’,
method: “post”,
data: {
session_id: app.globalData.sessionId,
form_id: e.detail.formId, //formId,重要
},
success(e) {
console.log(e)
},
})
},
4.后台发送模板消息
注意,formId七天内有效,超过其他就不能再用该formId向用户发送模板消息,该消息只能打开原有的小程序
后台的api文档请看这里https://developers.weixin.qq.com/miniprogram/dev/api/notice.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF
5.用户将在服务通知收到推送的模板消息
效果如下:
公众号发送模板消息,出现过以下情况,不知道为什么:
用户关注时间为 2020-01-02 09:01:12
然后推送一条模板消息时间为 2020-01-02 09:02:11,248 推送失败 43004:require subscribe hint: [tT6zgA09294125]
我也遇到了,这个异常网上一搜一大片,能从微信公号端继续分析下原因吗??
感谢你的回答,非常清楚了
大神,请教一下,公众号里面触发客服消息的一个动作:扫描二维码,是指的什么场景?我找不到答案
请问有小程序发送订阅消息的流程吗?求大神指导