热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

小程序模板消息技术博客一、何为模板消息所谓模板消息,就是内容不能完全自定义,必须遵从一个固定模板的对点消息。模板消息的本质是受限制的推送消息࿰

小程序模板消息技术博客

一、何为模板消息

所谓模板消息,就是内容不能完全自定义,必须遵从一个固定模板的对点消息。模板消息的本质是受限制的推送消息,这种限制来源于两个方面:一是模板消息原则上是由用户触发的,在用户不作授权的情况下,小程序无法向用户随意主动推送消息;二是模板消息必需经由微信提供的官方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对应一个用户,我们使用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作为定时任务的驱动器,每十分钟扫描一次数据库,选取那些有人关注的活动,然后对每个关注了此活动而还未收到通知的用户发送一条模板消息。

转:https://www.cnblogs.com/buaareadsun/p/11042336.html



推荐阅读
  • 汇总了2023年7月7日最新的网络安全新闻和技术更新,包括最新的漏洞披露、工具发布及安全事件。 ... [详细]
  • binlog2sql,你该知道的数据恢复工具
    binlog2sql,你该知道的数据恢复工具 ... [详细]
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • 本文回顾了作者在求职阿里和腾讯实习生过程中,从最初的迷茫到最后成功获得Offer的心路历程。文中不仅分享了个人的面试经历,还提供了宝贵的面试准备建议和技巧。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 微信小程序开发指南:创建动态电影选座界面
    本文详细介绍如何在微信小程序中实现一个动态且可视化的电影选座组件,提高用户体验。通过合理的布局和交互设计,使用户能够轻松选择心仪的座位。 ... [详细]
  • Java虚拟机及其发展历程
    Java虚拟机(JVM)是每个Java开发者日常工作中不可或缺的一部分,但其背后的运作机制却往往显得神秘莫测。本文将探讨Java及其虚拟机的发展历程,帮助读者深入了解这一关键技术。 ... [详细]
  • 美团安全响应中心推出全新配送业务测试活动,带来双重福利,邀您共同参与! ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 本文详细介绍了 Redis 中的主要数据类型,包括 String、Hash、List、Set、ZSet、Geo 和 HyperLogLog,并提供了每种类型的基本操作命令和应用场景。 ... [详细]
  • 本文深入探讨了Linux内核中进程地址空间的设计与实现,包括虚拟地址空间的概念、内存描述符`mm_struct`的作用、内核线程与用户进程的区别、进程地址空间的分配方法、虚拟内存区域(VMA)的结构以及地址空间与页表之间的映射机制。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 本文介绍如何使用JavaScript中的for循环来创建一个九九乘法表,适合初学者学习循环结构的应用。 ... [详细]
author-avatar
liu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有