[技术博客] 小程序模板消息

小程序模板消息技术博客

1、何为模板消息

所谓模板消息,就是内容不能彻底自定义,必须听从一个固定模板的对点消息。模板消息的本质是受限制的推送消息,这种限制来源于两个方面:一是模板消息原则上是由用户触发的,在用户不做受权的状况下,小程序没法向用户随意主动推送消息;二是模板消息必需经由微信提供的官方API才可以发送,这个API限制了模板消息的内容。前端

2、模板消息的前端支持

为了可以对某一个特定用户发送模板消息,后端服务器必须拥有该用户生成的form_id才行。form_id是小程序前端生成的一串标识码,一个form_id可用于发送一条模板消息。咱们的小程序的功能需求是在社团活动开始前一天能够发送一条模板消息提醒用户,所以咱们将form_id的收集按键和活动的关注按钮作在了一块儿,用户每点击一次关注活动,小程序就能够收集到一条form_id,并调用后端提供的接口发送给后端。数据库

3、模板消息的后端支持

1. form_id的存储

form_id相关操做是一个很高频的操做,并且form_id的有效期只有短短7天,不适合使用数据库存储。对于这样的高频I/O操做,咱们选择了Redis保存和查询form_id。Redis是一个K-V数据库,对于form_id而言,因为一个form_id对应一个用户,咱们使用user_id_form_ids_key做为Redis键值对的键,{form_id: form_id, expire_time: Time.now + 7.days}组成的数组做为值。每当有向用户发送模板消息的需求时,经过用户的key取出一个form_id,而后发送消息便可。小程序

2. form_id的更新

小程序的限制注定了每一个form_id只有7天的有效期。所以,为了不使用一个过时的form_id,form_id要常常被更新才能够。咱们把form_id存储在一个数组中,每次取form_id时,先过滤一遍这个数组,将过时的form_id所有删除,再取出最先的一个form_id发送给微信的API。后端

3. 定时检测模板消息发送时间

因为咱们须要在用户关注的活动开始的前一天向用户推送一条模板消息,所以须要设置一个定时任务来每隔一段时间扫描一次数据库,判断是否有活动即将开始而还未通知用户。咱们使用了Rails做为后端框架,选择了sidekiq-scheduler做为定时任务的驱动器,每十分钟扫描一次数据库,选取那些有人关注的活动,而后对每一个关注了此活动而还未收到通知的用户发送一条模板消息。数组

相关文章
相关标签/搜索