评论

微信服务号/小程序提醒消息机制简述

一文教你接入服务号一次性订阅消息,模板消息和小程序客服消息,模板消息,帮助新入坑的开发者区分不同消息类型的营销应用场景和接入防止.

日常的微信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.用户将在服务通知收到推送的模板消息
效果如下:

点赞 6
收藏
评论

4 个评论

  • suyuanzuo
    suyuanzuo
    2020-01-03

    公众号发送模板消息,出现过以下情况,不知道为什么:

    用户关注时间为 2020-01-02 09:01:12

    然后推送一条模板消息时间为  2020-01-02 09:02:11,248 推送失败 43004:require subscribe hint: [tT6zgA09294125]

    2020-01-03
    赞同 1
    回复 2
    • 2020-07-31
      应该是该openid没关注服务号,不允许推送
      2020-07-31
      回复
    • 干雨
      干雨
      2022-01-18回复
      关注1分钟后取消关注了?不大可能吧。
      我也遇到了,这个异常网上一搜一大片,能从微信公号端继续分析下原因吗??
      2022-01-18
      回复
  • 楽
    2019-09-17

    感谢你的回答,非常清楚了

    2019-09-17
    赞同 1
    回复
  • 叶轻轻
    叶轻轻
    2020-01-19

    大神,请教一下,公众号里面触发客服消息的一个动作:扫描二维码,是指的什么场景?我找不到答案


    2020-01-19
    赞同
    回复 1
    • 2020-07-31
      扫描公众号的二维码进入公众号
      2020-07-31
      回复
  • 勿忘我
    勿忘我
    2019-11-06

    请问有小程序发送订阅消息的流程吗?求大神指导

    2019-11-06
    赞同
    回复
登录 后发表内容