WePush 5.0.8:一次补齐四种短信通道与极光推送

2026-08-18 34 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:8 分钟

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,可以按以下顺序降低风险:

  1. 备份现有 WePush 配置和联系人数据,再执行升级。
  2. 为新供应商创建权限尽可能小的独立凭据,不复用管理员密钥。
  3. 使用内部号码或测试设备发送 5~10 条消息,核对模板变量、签名和编码。
  4. 检查供应商控制台中的提交状态、送达结果和失败原因。
  5. 为批次设置合理上限,避免一次导入全部用户。
  6. 对接收目标去重,并保留任务编号,防止操作人员重复提交。
  7. 遵守用户授权、退订、发送时段和个人信息保护要求。

WePush 5.0.8 的亮点不是增加复杂功能,而是把更多常见消息通道纳入同一个批量推送工具。对于通道较少、主要依赖人工运营发送的团队,这种“小而专”的定位很实用;如果业务需要自动故障转移、精细化速率控制或完整审计链路,则还应在正式采用前验证工具边界,并考虑配合服务端消息平台使用。


相关推荐