1. 为什么需要定时推送订阅消息
想象一下你正在运营一个健身打卡小程序。用户每天都需要按时完成锻炼打卡,但总有人会忘记。这时候如果能在固定时间自动发送提醒消息,比如每天早上8点和晚上8点各推送一次,用户的打卡率肯定会大幅提升。这就是定时推送订阅消息的典型场景。
在实际开发中,类似的需求比比皆是:
- 教育类小程序需要在上课前15分钟提醒学生进入直播间
- 电商小程序希望在促销活动开始前通知感兴趣的客户
- 工具类小程序需要定期推送使用报告或数据更新
传统做法需要开发者自己搭建服务器,编写复杂的定时任务代码。但借助微信云开发的触发器功能,这一切变得异常简单。我去年帮一个客户实现会议提醒功能,原本预计需要3天开发时间,结果用云函数触发器只用了2小时就搞定了。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 订阅消息的基础配置
2.1 选择合适的消息模板
首先登录微信公众平台,进入"订阅消息-公共模板库"。这里有个小技巧:不要只看模板名称,要仔细查看每个模板包含的字段。比如同样是打卡提醒,有的模板包含"打卡地点"字段,有的则没有。
我建议选择字段最接近你需求的模板,因为:
- 每个小程序最多只能添加50个模板
- 模板一旦添加就无法删除(只能停用)
- 字段名称在代码中是固定的,后期修改很麻烦
以打卡提醒为例,我通常会选择包含以下字段的模板:
- 打卡主题(thing类型)
- 打卡时间(time类型)
- 截止时间(time类型)
- 备注(thing类型)
2.2 前端订阅授权实现
用户必须主动授权才能接收订阅消息。这里有个常见误区:很多开发者以为只需要授权一次就够了。实际上,订阅消息授权是有时效性的,不同模板的有效期可能不同。
这是我优化过的订阅代码示例:
javascript复制// 订阅消息授权
async function requestSubscribeMessage() {
try {
const res = await wx.requestSubscribeMessage({
tmplIds: ['模板ID1', '模板ID2'], // 最多3个模板
})
// 检查每个模板的授权状态
const allAccepted = Object.values(res).every(
status => status === 'accept'
)
if(allAccepted) {
// 将用户openid和订阅状态存入数据库
await saveSubscriptionStatus()
} else {
wx.showToast({
title: '请允许所有通知',
icon: 'none'
})
}
