如何突破模板消息的推送限制?

可以在遵守官方相关运营规范、保证用户体验的情况下, 倒腾一个「让用户一次触发、多次推送,甚至群发模板消息」的解决方案。
其实仔细分析消息下发条件中的「每次触发获得 7 天有效推送码」、「多次提交触发下发的消息条数独立」,突破口就明显了。
只需 收集到足够推送码,即每次提交表单时获取到的 formId,就可以获得我们所需的「推送权限」。它是一次性的,代表着开发者有向当前用户推送模板消息的权限。
为了打造这样一个突破限制的模版消息推送功能,做到 7 天内「任性」推送,我们将小程序前后端的工作明确一下:

  • 小程序前端,即运行在用户微信上的小程序,负责收集推送码。

  • 小程序后端,即服务器负责将推送码存储到数据库中,并在需要推送时,从中取出推送码 formId来推送消息。
    整个方案的前后端业务流程如下:


    image.png

    我们需要结合小程序前端界面、小程序逻辑层、服务器程序、数据库、异步任务系统各自分工,实现将小程序模板消息推送所需的推送码的全过程,最终做到 7 日内更好地推送模板消息、触及用户。

  • 如何尽可能多地收集推送码?
    每次表单提交可以触发一次下发模版消息的机会。前端代码如下:


    image.png

    image.png

    在 <form>组件中,当属性 report-submit为 true时,代表需要请求发模板消息的推送码。

此时,点击按钮提交表单可以获取 formId,用于发送模板消息。
接下来,只需要对原来的页面进行改造,将用户原来绑定了点击事件的界面用表单组件中的 <button>按钮组件来代替。
也就是说,我们把用户的交互点击的 bindtap事件,通过表单 bindsubmit来取代,从而捕获用户的点击事件来产生更多的推送码 formId。
这里还需要对按钮组件的样式进行稍微的修改,以便更好地包裹原来界面的代码。


image.png

![image.png](https://upload-images.jianshu.io/upload_images/4055666-4e2402c00d87b817.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

上面的代码,主要实现了用模拟表单提交事件,来取代原来的点击事件。
用户在点击界面进行交互的同时,能够获得多个推送码。我们将其保存到 app.js的全局变量中。
待用户下一次发起需联网的操作时,即可将存储 formId的数组数据发送给服务器。


image.png

上图以小打卡的打卡详情页为例,用户在这个页面的点击操作可以很快收集到多个 formId。

将界面上用户高频点击的事件用表单的形式重新封装后,可以静默、快速收集到所需的「模板消息推送权限」。

如何传递推送码?


image.png

在小程序的逻辑层中,全局变量 gloabalFomIds 收集到多个 formId 后存储。

当新页面载入且 gloabalFomIds不为空时,可以把 gloabalFomIds数组格式化为字符串发送到服务器,然后并清空当前的 gloabalFomIds,以便继续获取新的 formId。

后端程序如何保存推送码?
这个保存是一个高频 IO 的操作。 我们后端以 java为基础,结合高性能的键值对数据库 Redis 来实现推送码的存储。
相关关键代码如下,简单表达了思路。针对不同的后端环境和开发语言,你可能需要做相应的调整。
这一步,主要是构建服务器程序,高效存储用户的推送码。
这下推送机会有了,接下来,我们考虑如何利用后端程序来想特定用户发送模板消息,考虑怎样去合理运用推送机会。

如何实现高性能的模板消息推送?

构建高性能的服务器端异步任务推送,可以满足模板消息的群发和定时发送的需求。
小打卡就采用了高性能分布式内存队列系统 Beanstalkd,来实现模板消息的异步定时推送。
实现发送模板消息的群发、定时发送分为 2 个步骤:

  • 1.设置任务执行时间并将该发送任务推送到异步任务队列;
  • 2.通过任务发送服务轮询执行任务,获取 access_token、指定你需要推送消息的用户的 openId;
  • 3.根据 openId,获取用户的推送码 formId,并结合模板 ID 拼装模板上的通知内容,调用模板消息发送接口来异步发送。

普通的模板消息的发送,参考官方文档中的模板消息功能一步步进行操作。我们重点来看高性能异步任务推送的实现方法。

Beanstalkd 是一个高性能、轻量级的分布式内存队列系统。通过 Beanstalkd,可以将模板消息推送任务的创建以及任务的执行分开进行。
在创建推送任务时,我们可以设置任务的执行时间,以及定义推送消息的类型、通知内容等数据。
在任务执行时, 我们通过 Beanstalkd 的任务监听函数来捕获任务。
我们通过预先在创建任务时标记的数据,来确定模板消息的具体推送内容。
比如用户 openId,通过用户 openId获取一个可用的推送码 formId,获取推送内容等,最后在调用微信小程序模板消息下发接口完成推送。

getFormId函数主要实现每次取出一个未过期可用的推送码 formId,并且删除不可用的邀请码和当前已选中的邀请码,以保证一定数额的推送码 formId在未来一周内可用。

最后总结一下:整个方案涉及到的关键词有表单、按钮、 formId、模板消息、Redis、Beanstalkd 等。

同时, 整个流程涉及了多项技术的组合,包括前端开发、后端开发、数据库技术等,且前后端分工明确,共同支撑整个方案地实现。


image.png

正如我之前文章里所说的, 微信小程序开发的难点不在于小程序本身,小程序开发技术是前后端一系列的技术的组合。

开发者需要持续学习,掌握、提升更多的相关开发技术,来更好地支撑产品的功能实现。

最后,这个方案可以在用户最后一次使用小程序后的 7 天内,对用户发送多条模板消息,但是请一定要在 遵循微信官方的运营规范的前提下,合理使用这样的模板消息推送功能。

转自

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容