接下来我将为您详细讲解“微信小程序模板消息限制实现无限制主动推送的示例代码”的攻略。
前置要求
在实现无限制主动推送之前,需要先满足微信官方对于小程序模板消息的限制要求,包括以下几点:
- 用户首次在小程序中订阅模板消息需用户手动触发;
- 小程序根据订阅消息的模板发送消息,需用户在小程序中使用过该模板或模板已被用户授权,否则会发送失败;
- 发送模板消息的次数受到限制,每个用户每天最多可接收 1 条模板消息。
示例一:使用云开发实现定时向订阅用户发送模板消息
思路:通过编写定时任务云函数的方式,定时向用户发送模板消息。由于云定时任务的触发时间无法精确控制,因此我们需要保证云函数每次执行时都能找到未发送的消息,并发送出去。
代码示例:
// 定义云函数
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
const db = cloud.database()
const messageCollection = db.collection('message')
const userCollection = db.collection('user')
// 查询未发送的消息
const message = await messageCollection.where({
is_sent: false
}).get()
// 遍历未发送的消息,向用户发送模板消息
for (let i = 0; i < message.data.length; i++) {
const msg = message.data[i]
const user = await userCollection.doc(msg.user_id).get()
try {
const result = await cloud.openapi.subscribeMessage.send({
touser: user.data.openid, // 用户 openid
templateId: '模板消息 ID',
page: '/pages/index/index',
data: {
// 模板数据
}
})
// 发送成功后将消息状态标记为已发送
await messageCollection.doc(msg._id).update({
data: {
is_sent: true
}
})
} catch (err) {
console.log('发送模板消息失败:', err)
}
}
}
示例说明:
- 在消息表中添加
is_sent
字段用于记录消息是否已发送; - 在云函数中查询未发送的消息,并遍历消息列表,向用户发送对应的模板消息;
- 发送成功后将对应的消息状态标记为已发送。
示例二:使用模板库消息实现发送无限制的模板消息
思路:通过调用微信官方提供的模板库消息接口,向用户发送无限制的模板消息。相较于订阅消息,模板库消息无需用户手动订阅,可直接发送。
代码示例:
// 发送模板消息
wx.cloud.callFunction({
name: 'sendTemplateMessage',
data: {
touser: '用户 openid',
templateId: '模板消息 ID',
data: {
// 模板数据
}
}
})
云函数示例:
// 定义云函数
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
try {
// 调用微信官方的模板库消息接口发送消息
await cloud.openapi.uniformMessage.send({
touser: event.touser,
mpTemplateMsg: {
appId: cloud.getWXContext().APPID, // 小程序 appId
templateId: event.templateId,
miniprogram_state: 'formal', // 正式版,可将测试版参数修改为 trial
data: event.data
}
})
return {
code: 0,
msg: '发送成功'
}
} catch (err) {
console.log('发送消息失败:', err)
return {
code: -1,
msg: '发送失败'
}
}
}
示例说明:
- 使用
wx.cloud.callFunction
调用云函数sendTemplateMessage
; - 调用云函数使用微信官方提供的模板库消息接口发送模板消息;
- 实现无限制主动推送。
至此,“微信小程序模板消息限制实现无限制主动推送的示例代码”的攻略讲解结束,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序模板消息限制实现无限制主动推送的示例代码 - Python技术站