WePush 5.0.8 的变化很集中:继续围绕批量消息发送扩展通道。本次版本新增网易云信短信、榛子云短信、luosimao 短信、极光短信,并加入极光推送支持。对于需要在不同供应商之间切换,或者同时覆盖短信和移动端推送的团队,这次更新减少了自行拼装发送工具的工作量。
新版本增加了哪些发送通道
5.0.8 新增五项通道支持:
- 网易云信短信
- 榛子云短信
- luosimao 短信
- 极光短信
- 极光推送
前四项解决的是短信触达问题,极光推送则面向移动应用的通知场景。虽然它们都可以发送“消息”,但接收目标、凭据、模板规则和失败处理通常并不相同。
实际选型时,不要只比较是否能够发送,还应核对以下事项:
| 维度 | 短信通道 | 移动推送 |
|---|---|---|
| 接收目标 | 手机号码 | 设备、别名、标签等应用侧标识 |
| 前置条件 | 签名、模板及供应商审核 | App 集成推送 SDK 并取得设备标识 |
| 成本模型 | 通常按短信条数计费 | 取决于推送平台方案 |
| 常见失败 | 号码无效、模板不符、频率受限 | 设备失效、用户关闭通知、目标不存在 |
| 适合场景 | 验证码、重要通知、服务提醒 | 活动通知、内容更新、应用内召回 |
WePush 提供的是批量推送入口,而送达能力、审核规则和限流策略仍然取决于具体供应商。接入新通道前,应先在对应平台完成账号、签名、模板或应用配置。
多通道的价值不只是“多几个按钮”
增加供应商之后,工具更适合作为统一的消息操作台。例如,同一批用户可以按照业务条件选择不同通道:
- App 活跃用户优先使用极光推送。
- 没有有效设备标识的用户改用短信。
- 按地区、成本或可用性选择不同短信供应商。
- 小批量验证内容后,再扩大批次。
不过,多通道并不等于自动容灾。是否支持失败重试、通道降级、发送结果回执以及重复消息去重,需要根据 WePush 的实际配置和各供应商能力逐项验证,不能默认所有通道行为一致。
可以这样实践:发送前生成并校验任务
下面是一个可直接运行的“发送前检查”示例。它不是 WePush 的官方配置格式,也不会调用供应商接口;它用于演示如何在导入批量任务之前,统一描述通道、检查接收目标并避免把密钥写进任务文件。
先创建 task.json:
{
"channel": "jpush",
"template": "订单 {{order_id}} 已发货",
"recipients": [
{"target": "device-alias-1001", "order_id": "A20250001"},
{"target": "device-alias-1002", "order_id": "A20250002"}
]
}
再保存下面的脚本为 validate_task.py:
#!/usr/bin/env python3
import json
import re
import sys
from pathlib import Path
SUPPORTED_CHANNELS = {
"netease_yunxin_sms",
"zhenziyun_sms",
"luosimao_sms",
"jiguang_sms",
"jpush",
}
PHONE_RE = re.compile(r"^\+?[1-9]\d{7,14}$")
def render(template, values):
result = template
for key, value in values.items():
result = result.replace("{{" + key + "}}", str(value))
return result
def main(path):
task = json.loads(Path(path).read_text(encoding="utf-8"))
channel = task.get("channel")
recipients = task.get("recipients", [])
if channel not in SUPPORTED_CHANNELS:
raise SystemExit(f"不支持的通道: {channel}")
if not recipients:
raise SystemExit("接收目标不能为空")
seen = set()
for index, recipient in enumerate(recipients, start=1):
target = str(recipient.get("target", "")).strip()
if not target:
raise SystemExit(f"第 {index} 条记录缺少 target")
if target in seen:
raise SystemExit(f"发现重复目标: {target}")
if channel.endswith("_sms") and not PHONE_RE.fullmatch(target):
raise SystemExit(f"手机号格式不正确: {target}")
seen.add(target)
message = render(task["template"], recipient)
print(f"[DRY-RUN] channel={channel} target={target} message={message}")
print(f"校验完成,共 {len(recipients)} 条;尚未实际发送。")
if __name__ == "__main__":
if len(sys.argv) != 2:
raise SystemExit("用法: python validate_task.py task.json")
main(sys.argv[1])
运行:
python validate_task.py task.json
如果要测试短信,只需把 channel 改成四个短信标识之一,并将 target 换成带国家或地区码的手机号。实际导入 WePush 时,应按照软件支持的字段格式重新整理数据;供应商密钥应通过 WePush 的安全配置入口填写,不要放进 CSV、JSON 或共享脚本。
升级与批量发送前的检查清单
在生产环境采用 5.0.8,可以按以下顺序降低风险:
- 备份现有 WePush 配置和联系人数据,再执行升级。
- 为新供应商创建权限尽可能小的独立凭据,不复用管理员密钥。
- 使用内部号码或测试设备发送 5~10 条消息,核对模板变量、签名和编码。
- 检查供应商控制台中的提交状态、送达结果和失败原因。
- 为批次设置合理上限,避免一次导入全部用户。
- 对接收目标去重,并保留任务编号,防止操作人员重复提交。
- 遵守用户授权、退订、发送时段和个人信息保护要求。
WePush 5.0.8 的亮点不是增加复杂功能,而是把更多常见消息通道纳入同一个批量推送工具。对于通道较少、主要依赖人工运营发送的团队,这种“小而专”的定位很实用;如果业务需要自动故障转移、精细化速率控制或完整审计链路,则还应在正式采用前验证工具边界,并考虑配合服务端消息平台使用。