在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
小程序模板消息技术博客一、何为模板消息所谓模板消息,就是内容不能完全自定义,必须遵从一个固定模板的对点消息。模板消息的本质是受限制的推送消息,这种限制来源于两个方面:一是模板消息原则上是由用户触发的,在用户不作授权的情况下,小程序无法向用户随意主动推送消息;二是模板消息必需经由微信提供的官方API才能够发送,这个API限制了模板消息的内容。 二、模板消息的前端支持为了能够对某一个特定用户发送模板消息,后端服务器必须拥有该用户生成的form_id才行。form_id是小程序前端生成的一串标识码,一个form_id可用于发送一条模板消息。我们的小程序的功能需求是在社团活动开始前一天可以发送一条模板消息提醒用户,因此我们将form_id的收集按键和活动的关注按钮做在了一起,用户每点击一次关注活动,小程序就可以收集到一条form_id,并调用后端提供的接口发送给后端。 三、模板消息的后端支持1. form_id的存储form_id相关操作是一个很高频的操作,而且form_id的有效期只有短短7天,不适合使用数据库存储。对于这样的高频I/O操作,我们选择了Redis保存和查询form_id。Redis是一个K-V数据库,对于form_id而言,由于一个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作为定时任务的驱动器,每十分钟扫描一次数据库,选取那些有人关注的活动,然后对每个关注了此活动而还未收到通知的用户发送一条模板消息。 |
请发表评论