「从模板消息改版订阅消息」小程序推送

前言

只有光头才能变强。

文本已收录至个人GitHub精选文章,欢迎Starhttps://github.com/ZhongFuCheng3y/3y前端

若是近期有看我文章的同窗,会知道我最近在公司作的是推送系统。推送系统在我这也叫作消息管理平台,其实很容易理解:提供一个支持多渠道发送消息的系统。git

推送系统支持的渠道

在前段时间,微信公布:小程序模板消息接口将于2020年1月10日下线,开发者可以使用订阅消息功能程序员

底层接口的变更,对程序员来讲意味着什么,你懂的。

人在家中坐,班从天上来github

本篇文章主要来聊聊我这边是怎么发送小程序消息的,以及改版后的简单介绍,但愿对你们有帮助。面试

  • 本文不涉及任何的高深知识,放心观看。

1、前置知识

发送小程序消息其实很简单,微信提供了微信官方文档供咱们开发者去查阅相关的基础知识,提供HTTP接口给咱们去方便调用:数据库

微信文档

对开发者来讲,发送小程序消息总结来讲就三步:小程序

  • 在微信后台建立模板
  • 获取下发的权限
  • 调用发送接口,发送消息

不管是之前的模板消息,仍是如今新的订阅消息,步骤都是同样的。后端

2、模板消息和订阅消息的区别

为何微信要把模板消息下线,要上线订阅消息呢?咱们从发送小程序的步骤来看,只有“获取下发的权限”是可动的,其他的两步都是相同的。微信小程序

咱们开发者要借助微信平台向用户发消息,须要一个理由(下发的权限)。由于微信仍是注重用户体验的。服务器

2.1 模板消息

模板消息下发的理由是:用户最近在小程序活跃过,有过交互的行为(好比说表单提交)。那么开发者能够从这些交互行为中收集formId

一条formId会保留7天,当咱们调用发送接口的时候须要消耗一条formId。若是该用户没有formId的话,那么咱们则会发送失败

  • 重点:发送模板消息必定要携带formId

说白了,这个formId就是用户与小程序的交互凭证。微信认为:用户最近使用过你的小程序,你才能够给他/她发送消息。

2.2 订阅消息

模板消息的下发理由咱们能够发现:下发的权利是掌握在咱们开发者手上的,只要咱们经过用户的各类行为收集到大量的formId,那咱们在7天内就能够发送多条消息给到用户。

订阅消息的下发理由是:把消息是否推送的权利还给用户。用户来决定能不能收到推送,简单来讲就是:

  • 当用户触发某些场景时,给用户弹框,让用户决定是否收到推送(并且只会收到一次)

示例

2.3 让用户收到本身想要的消息

在最开始使用微信的时候,你可能还能收到一些营销类的小程序通知,但近期你应该就收不到的。

  1. 不容许恶意诱导用户进行触发操做,以达到可向用户下发模板目的
  2. 不容许恶意骚扰,下发对用户形成骚扰的模板
  3. 不容许恶意营销,下发营销目的模板

标题不能涉及营销相关内容,包括不限于:消费优惠类、购物返利类、商品更新类、优惠券类、代金券类、红包类、会员卡类、积分类、活动类等营销倾向通知

微信会检测你的模板有无问题,若是有问题就会把你的模板给删掉(固然了,也不让你建立多是营销类的模板)。没有了模板,消费就发不出去了。

总的来讲:微信会经过各类方式来限制你的消息下发,目的是想让用户收到他本身想要的消息。此次将模板消息改为订阅消息,更是把下发消息的权限交给用户了。

至于这件是好事,仍是坏事。不一样人有不一样的见解。

有的人会以为:让用户选择是否收到消息,用户所须要的操做就多了,弹窗也是对用户的一种打扰。若是用户不熟悉订阅消息或者直接点了“取消”,小程序就无法通知到用户了,用户可能所以错失服务,对商家和用户都是损失。

有的人也会以为:把推送消息的权利掌握在用户手里,能很大程度上避免商家的恶意骚扰

对于这次的改版,能够在评论区下谈谈你的见解~

3、咱们是怎么作的?

我这边来简单说一下我这边是怎么接入推送小程序消息的,但愿对想要接入小程序消息的同窗有必定的帮助。

首先,针对在微信后台建立的模板,咱们是先把微信后台的模板拉取到本身的数据库保存起来,而后再作一个管理页面对模板进行管理。

后台管理页面

若是某个消息使用到了该模板,咱们一样也会作关联起来(由于这样能够方便查阅哪些消息使用了这个模板)

  • 正由于有了这个功能,因此咱们此次迁移就能够很方便整理出目前还在使用的模板有哪些,使用的场景在哪。后续只要将消息的模板ID改为订阅消息的模板ID就行了。

将模板同步到本身的数据库

像我司不仅仅只有一个小程序,因此要对小程序进行分类,这里就再也不赘述了。实际上就是封装了一层,例如:蘑菇街女装 标识为88,蘑菇街直播购物台标识为 99

在设计和写代码的时候要考虑后续的可扩展性

模板消息的时候,前端会打formId的点,我这边会在StormMQ的数据清洗放到Redis里边。而后我这边在发送以前就判断用户有没有对应的formId

formId流程

如今微信将模板消息改成订阅消息,formId的收集到我这边的Storm解析进Redis的操做都免去了。微信貌似也没有提供接口给我判断用户是否有受权过。因此我只能在调用下发接口时,根据返回值来判断用户是否受权。

若是新接入微信小程序消息的同窗,那整块流程就简单不少了。

  • 前端同窗只要在必要的场景下弹窗,让用户受权
  • 后端的同窗直接下发到用户,根据返回值判断下发的状况。

因此,如今我这边若是要下发一条消息主要有两个步骤:

  1. 在推送后台新建一条消息(选择微信的模板、消息建立者的基本信息、消息相关的规则处理(是否去重等等)
  2. 业务方调用我暴露的接口

业务方调用我这边的暴露接口,我主要作如下的事情:

  1. 对业务方的传入参数进行简单的校验,拼接成完整的一个模板消息内容
  2. 若是业务方传入的是userId,我这边须要转为openId
  3. 对消息速度限流,调用微信的下发接口

流程

除了消息下发之后,咱们还会考虑到消息下发是否成功以及效果的问题(有无实时数据供查看,有无离线报表分析),因此我这边是这样作的:

  • 在关键的链路上进行打点

    • 业务方调用我接口,我已经确认收到消息了
    • 这条消息因为业务缘由被过滤掉了(多是userId转openId失败了)
    • 在下发时可能因为模板/token/用户无受权等等状况
  • 将打点的信息写到Kafka,再由Storm清洗,实时的查询的进Redis,离线的落到Hive表
这里的打点实际上就是咱们 打日志

报表or查询消息发送状态

好比下面是我实时推送后,根据userId查询推送的状况:

实时查看消息的发送状况

最后

推广服务器89/年,229/3年,买来送本身,送女友立刻过年再合适不过了,买了搭建个项目给面试官看也香,还能够熟悉技术栈,(老用户用家人帐号买就行了,我用我女友的😂)。扫码或者点击购买

搭建教程,从0开始一步一步带你搭建😂

总的来讲,小程序推送消息并不难,也仅仅是几个接口而已。如今改版为订阅消息后,那接入起来就更加方便了。再过一个月,大家使用小程序的时候可能就会收到各类的弹窗提醒大家是否要受权xxx模板消息。

不知道你们看完我这篇文章有什么见解,欢迎在评论区留言。我会常常分享我在工做中遇到的问题以及学习后精心整理后的笔记,但愿对你们有所帮助,以为个人文章还有点东西,不妨关注我!

本已收录至个人GitHub精选文章,欢迎Starhttps://github.com/ZhongFuCheng3y/3y

乐于输出干货的Java技术公众号:Java3y。公众号内有300多篇原创技术文章、海量视频资源、精美脑图,关注便可获取!

转发到朋友圈是对我最大的支持!

很是感谢人才们能看到这里,若是这个文章写得还不错,以为「三歪」我有点东西的话 求点赞 求关注️ 求分享👥 求留言💬 对暖男我来讲真的 很是有用!!!

创做不易,各位的支持和承认,就是我创做的最大动力,咱们下篇文章见!

相关文章
相关标签/搜索