小程序的推送与消息通知
小程序的推送与消息通知
小程序推送与消息通知是提升用户留存和活跃度的重要手段。合理利用推送功能可以及时触达用户,但过度推送可能导致用户反感甚至卸载。微信小程序提供了多种消息推送方式,开发者需要根据业务场景选择合适的方式。
消息类型与使用场景
微信小程序主要支持以下几种消息类型:
- 模板消息(已逐步被订阅消息替代)
- 订阅消息(长期订阅和一次性订阅)
- 客服消息
- 统一服务消息
订阅消息是目前主要使用的推送方式,适用于订单状态变更、物流信息、服务提醒等场景。例如电商小程序可以在用户下单后发送支付成功通知:
// 发送订阅消息示例
wx.requestSubscribeMessage({
tmplIds: ['订单状态变更模板ID'],
success(res) {
if (res['订单状态变更模板ID'] === 'accept') {
// 用户同意订阅,可以发送消息
wx.cloud.callFunction({
name: 'sendSubscribeMessage',
data: {
templateId: '订单状态变更模板ID',
page: 'pages/order/detail?id=123',
data: {
thing1: { value: '您的订单已支付成功' },
amount2: { value: '99.00' },
time3: { value: '2023-05-20 14:30' }
}
}
})
}
}
})
订阅消息的实现
一次性订阅消息
一次性订阅需要用户每次主动触发,适合低频重要通知。实现步骤:
- 获取模板ID
- 前端调用wx.requestSubscribeMessage
- 后端调用subscribeMessage.send接口
// 前端请求用户授权
Page({
onPaySuccess() {
wx.requestSubscribeMessage({
tmplIds: ['模板ID1', '模板ID2'],
success(res) {
console.log('订阅结果', res)
}
})
}
})
长期订阅消息
仅限政务、医疗、教育等特定类目使用,需要额外申请权限。
消息发送限制与策略
微信对消息推送有严格限制:
- 一次性订阅消息7天内有效
- 每个用户每天接收同一模板的消息不超过3条
- 同一用户同一模板的订阅消息7天内最多发送5条
优化策略:
- 合并通知内容,减少发送频次
- 设置消息免打扰时段(如23:00-8:00)
- 提供消息偏好设置,让用户自主选择
服务端实现示例
Node.js发送订阅消息示例:
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
try {
const result = await cloud.openapi.subscribeMessage.send({
touser: event.userOpenId,
templateId: event.templateId,
page: event.page,
data: event.data
})
return result
} catch (err) {
console.error(err)
return err
}
}
消息模板设计技巧
好的消息模板应遵循以下原则:
- 简洁明了:核心信息前置
- 行动导向:包含明确操作指引
- 个性化:加入用户专属信息
示例模板:
{{thing1.DATA}}(状态更新)
金额:{{amount2.DATA}}
时间:{{time3.DATA}}
点击查看详情
异常处理与监控
必须实现的监控点:
- 消息发送成功率
- 用户点击率
- 订阅拒绝率
- 消息送达延迟
// 监控消息发送状态
wx.onMessageSentCallback(res => {
if (res.errCode === 0) {
// 发送成功
reportAnalytics('message_sent', { templateId: res.templateId })
} else {
// 发送失败
reportAnalytics('message_failed', {
templateId: res.templateId,
errCode: res.errCode
})
}
})
用户偏好管理
提供用户控制选项可显著降低退订率:
Page({
data: {
messageSettings: {
orderNotify: true,
promotionNotify: false,
systemNotify: true
}
},
toggleSetting(e) {
const type = e.currentTarget.dataset.type
this.setData({
[`messageSettings.${type}`]: !this.data.messageSettings[type]
})
// 同步到服务端
wx.request({
url: 'https://api.example.com/settings',
method: 'POST',
data: this.data.messageSettings
})
}
})
消息推送最佳实践
-
场景化推送:根据用户行为触发相关消息
- 购物车放弃:2小时后提醒
- 课程开始前:15分钟提醒
-
A/B测试:对比不同文案效果
// 随机选择消息模板 const templates = ['templateA', 'templateB'] const selectedTemplate = templates[Math.floor(Math.random() * templates.length)]
-
链路追踪:添加UTM参数
pages/order/detail?id=123&utm_source=message&utm_medium=push
特殊场景处理
多端同步
用户可能在多个设备登录,需要同步消息状态:
// 使用云数据库标记已读状态
const db = wx.cloud.database()
db.collection('user_messages').doc(messageId).update({
data: {
read: true,
readTime: new Date()
}
})
国际化消息
根据用户语言设置发送不同内容:
function getMessageTemplate(locale) {
const templates = {
'zh_CN': {
paymentSuccess: '支付成功'
},
'en_US': {
paymentSuccess: 'Payment successful'
}
}
return templates[locale] || templates['zh_CN']
}
性能优化
大量消息发送时的优化方案:
- 队列处理:使用消息队列控制发送速率
- 批量发送:合并相同模板的消息
- 延迟发送:非紧急消息延迟处理
// 使用云函数批量处理
const batchSize = 100
const messages = [...] // 待发送消息数组
for (let i = 0; i < messages.length; i += batchSize) {
const batch = messages.slice(i, i + batchSize)
await processBatch(batch)
}
async function processBatch(batch) {
return Promise.all(batch.map(msg => sendMessage(msg)))
}
合规与用户体验
必须遵守的规则:
- 不得发送营销内容
- 重要操作需二次确认
- 提供明显的退订入口
示例合规检查:
function validateMessageContent(content) {
const forbiddenWords = ['促销', '打折', '限时']
return !forbiddenWords.some(word => content.includes(word))
}
本站部分内容来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益,请来信告知我们删除。邮箱:cc@cccx.cn
上一篇:小程序的支付功能集成
下一篇:小程序的审核与发布流程