如何实现短信补充服务
短信补充服务用于在 App 推送无法及时触达时,通过短信通道补充送达关键信息。典型原因包括用户断网、App 被系统限制后台运行、通知权限关闭、设备长期未活跃等。
最佳实践不建议“推送和短信都发一遍”,而是优先使用 App 推送,在指定等待时间内未达到成功标准时,再触发短信补充。这样既能控制短信成本,也能提升重要消息的最终触达率。
适用场景
建议用于用户必须及时感知、且短信成本可接受的场景:
- 交易与账户安全:登录提醒、异地登录、支付结果、风控拦截、密码变更。
- 服务履约通知:订单状态、配送异常、排队叫号、预约提醒、工单进度。
- 高价值业务提醒:会员权益到期、重要活动确认、合同或账单提醒。
- 推送不可达补偿:通知权限关闭、设备离线、厂商通道不稳定、长时间未活跃用户。
不建议用于普通营销消息、低优先级运营活动、已在 App 内可自然曝光的内容。此类场景更适合通过推送频控、站内信、应用内消息等方式触达,避免对用户造成打扰。
能力说明
极光推送通过 Push API 的 sms_message 字段提供短信补充能力。原有 App 推送流程不变,只是在一次推送请求中增加短信补充配置。
短信补充分为两种模式:
- 短信补发:
delay_time设置为非 0。系统先下发推送,在指定时间内未达到成功标准时,再发送短信。 - 短信并发:
delay_time设置为 0。推送和短信同时发送,适合极少数强时效、强触达场景。
短信由签名和正文模板组成。签名、模板需要先完成审核。自 2018 年 3 月起,短信补充必须使用已审核通过的正文内容模板,因此推送时需要填写 temp_id;如果模板包含变量,还需要填写 temp_para。
接入前准备
上线前建议先完成以下准备:
- 开通短信服务并确认账户余额充足,短信会产生额外运营商费用。
- 在极光短信侧完成签名和正文模板审核,确认
signid、temp_id和模板变量。 - 建立用户手机号与设备
registrationID的绑定关系。可通过极光服务端 Device API 或客户端设置手机号 API 完成绑定。 - 明确哪些业务允许短信补充,避免所有推送默认开启短信补充。
- 为短信补充配置预算、频控、告警和失败重试策略。
相关接口参考:
推荐实现流程
1. 先做消息分级
不是所有推送都需要短信补充。建议按业务重要性分级:
| 消息级别 | 示例 | 建议策略 |
|---|---|---|
| P0 强触达 | 账户安全、支付风险、履约异常 | 开启短信补发,必要时短信并发 |
| P1 重要通知 | 订单进度、预约提醒、重要服务状态 | 开启短信补发 |
| P2 普通运营 | 活动提醒、内容推荐 | 默认不开启短信补充 |
| P3 低优先级 | 泛营销、低价值召回 | 不建议使用短信补充 |
2. 选择合适的 delay_time
delay_time 决定等待推送成功的时间:
0:短信并发,推送和短信同时发送。60到300:适合登录、安全、支付、叫号等强时效消息。300到1800:适合订单、物流、预约、工单等重要但不要求秒级触达的消息。- 不超过 24 小时:超过 24 小时不支持。
推荐默认使用短信补发模式,不要默认使用短信并发。并发短信会显著增加成本,也更容易造成用户重复感知。
3. 配置短信模板变量
短信正文应短、清晰、可行动。建议只保留用户做决策所需的信息,例如订单号后 4 位、业务状态、操作入口提示等。
模板变量通过 temp_para 传入,变量名需要与短信模板中配置的变量保持一致。不要在短信中放入敏感明文信息,例如完整身份证号、银行卡号、密码、验证码以外的高敏字段。
4. 控制活跃过滤
active_filter 用于控制是否对补发短信的用户进行活跃过滤:
- 默认
true:做活跃过滤,适合大多数场景,可减少对活跃用户的重复打扰。 - 设置为
false:不做活跃过滤,适合强触达场景,但需要配合更严格的业务频控。
如果业务已经在服务端自行判断用户活跃状态、通知权限、最近触达记录,也可以结合自身策略决定是否关闭活跃过滤。
API 示例
以下示例表示先发送推送;如果 180 秒内未达到推送成功标准,则使用短信模板补发:
{
"platform": "all",
"audience": {
"registration_id": ["registration_id_1"]
},
"notification": {
"alert": "您的订单状态已更新,请及时查看。"
},
"sms_message": {
"delay_time": 180,
"signid": 12345,
"temp_id": 67890,
"temp_para": {
"order_no": "A1234",
"status": "配送异常"
},
"active_filter": true
}
}
如需短信并发,将 delay_time 设置为 0:
{
"platform": "all",
"audience": {
"registration_id": ["registration_id_1"]
},
"notification": {
"alert": "您的账户存在异常登录风险,请立即确认。"
},
"sms_message": {
"delay_time": 0,
"signid": 12345,
"temp_id": 67891,
"temp_para": {
"time": "10:30",
"location": "深圳"
},
"active_filter": false
}
}
成功标准与厂商通道策略
短信补发是否触发,取决于推送成功标准:
- 极光通道以真实送达为推送成功。
- 厂商通道可配置判断标准,支持 API 调用成功、全部补发、不补发、送达回执等策略。若未配置,默认以提交厂商服务器成功为准。
如果业务对最终触达要求较高,建议联系商务确认厂商通道成功标准。对于支持送达回执的通道,可优先使用送达回执作为判断依据;对于无稳定回执能力的通道,需要结合业务成本和打扰风险选择“全部补发”或“API 调用成功”。
成本与打扰控制
短信补充容易带来额外成本和用户打扰,建议在服务端增加以下控制:
- 单用户频控:同一用户在 1 分钟、1 小时、24 小时内限制短信补充次数。
- 单业务频控:按业务类型设置不同上限,例如安全类高于营销类。
- 去重控制:同一业务事件只允许触发一次短信补充,避免重试导致重复发送。
- 预算控制:按日或按活动设置短信预算阈值,达到阈值后降级为仅推送。
- 黑名单控制:对退订、投诉、异常号码、无效号码做过滤。
- 夜间策略:非紧急消息避免在夜间触发短信。
文案与合规建议
- 短信签名需与企业资质、品牌、业务场景保持一致。
- 正文模板需提前审核,变量内容不得改变模板原意。
- 营销类短信需遵守退订要求,不建议作为推送补充的默认方案。
- 文案应说明清楚业务来源和用户动作,避免让用户误判为垃圾短信。
- 避免在短信中包含完整敏感信息,必要时引导用户回到 App 或官网查看详情。
排查清单
如果短信补充未按预期触发,可按以下顺序排查:
- 是否已开通短信服务,账户余额是否充足。
- 手机号与
registrationID是否已正确绑定。 - Push API 请求中是否包含
sms_message.temp_id。 temp_id、signid、temp_para是否与已审核模板一致。delay_time是否设置正确,是否误设为 0 或超过 24 小时。- 该次推送是否已经达到成功标准,导致无需补发短信。
active_filter是否过滤了近期活跃用户。- 厂商通道成功标准是否符合业务预期。
- 目标手机号是否为空号、停机、携号转网异常或被运营商拦截。
- 是否触发了业务侧频控、预算限制或黑名单过滤。
推荐方案
建议采用“重要消息分级 + 默认短信补发 + 少量场景短信并发”的方案:
- P0 消息:
delay_time设置为 0 到 180 秒,必要时关闭active_filter,但必须做严格频控。 - P1 消息:
delay_time设置为 180 到 600 秒,默认开启active_filter。 - P2/P3 消息:默认不使用短信补充,优先通过推送策略、应用内消息、站内信等方式触达。
这样可以在不显著增加短信成本的前提下,提高关键业务通知的最终触达率。