它是你的应用和 Maxis、CelcomDigi、U Mobile、YES、Unifi 之间的那一层。它做什么、哪里会出问题,以及怎么分辨正规网关和换了皮的后台。
你没办法自己把短信交给 Maxis。网关握有和电信之间的商业和技术连接,替你做四件事:接收你提交的短信、选一条通往收件人网络的线路、把短信交出去、收回传来的送达回执。
你在群发短信上遇到的每一个问题,都出在这四步之一。知道是哪一步出问题,修复的工作就完成了一大半。
马来西亚可以携号转网,号段已经不能准确告诉你号码在哪家电信。网关会解析并按实际网络选线路。线路之间真正的差别在质量:
这是服务商之间最大的质量差别,而价格页上完全看不出来。价格远低于本地行情,通常就说明线路不是本地的。症状大家都熟悉:后台显示送达率接近 100%,客户却说什么都没收到。
送达回执(DLR)从收件人手机所在的网络,经过运营商、网关,一路传回给你。每一跳都可能提早回报。这就产生了大多数账单纠纷核心的「三段式混乱」:
| 阶段 | 谁回报 | 能证明什么 |
|---|---|---|
| 已提交 | 网关 | 它收下了你的短信并扣了钱 |
| 已接收 | 运营商 | 网络收下了 —— 不代表手机收到了 |
| 已送达(DLR) | 收件人手机所在网络 | 送到了设备上 |
把第 1 阶段当成「已送达」回报的网关,不管实际如何,后台永远完美。检验方法很直接:请对方给你一份「已提交」和「已送达」数字不一样的活动报告。拿不出来的服务商,就没有把真实回执传给你。
也要问清楚:回执一直没回来时怎么处理。有些运营商对一部分流量根本不回回执 —— 诚实的网关会告诉你回执缺失,而不是往让统计数字好看的方向自己假设结果。
吞吐量的上限由运营商线路决定,不是网关的宣传文案。比峰值速度更重要的,是出问题时队列怎么处理:线路一抖就把剩下的批次丢掉的网关,和只重发没发出去的部分、不重复发已发出的网关,是两种完全不同的产品。具体问一句:5,000 个号码的批次发到一半线路断了,会怎样?
| 方式 | 适合 | 代价 |
|---|---|---|
| 网页后台 | 偶尔发活动、不懂技术的用户 | 手动,不能自动重复 |
| REST API | 由应用触发的发送 | 需要开发人员接一次 |
| SMPP | 持续的超大量发送 | 要维护长连接,运维更重 |
对几乎所有达不到电信级用量的用户来说,HTTPS 上的 REST 就是正确答案 —— 不用看着长连接,任何技术栈都能用。我们的接口文档在 API 文档,选型层面的介绍在短信 API。
最后一个问题成本最低、也最能说明问题。对自己线路有信心的服务商,都会让你先发到自己手机再花钱。想从价格和客服角度比较服务商,见群发平台怎么选。
把你的系统接到电信的服务,让你可以用程序或网页发送短信。它负责选对网络的线路、把短信提交给运营商、传回送达回执。一般商家没办法直接接 Maxis 或 CelcomDigi,这正是网关存在的原因。
在马来西亚这两个词基本混用。「网关」强调技术连接,「聚合商」强调和多家运营商的商业关系。重要的不是名称,而是线路是不是本地直连、传给你的送达回执是不是真的。
通常是线路问题。绕道国际或灰色线路进马来西亚的短信更便宜、送达更差 —— Sender ID 可能被改、过滤更严,送达回执可能是中间某一跳生成的,而不是收件人网络回报的。后台显示接近完美、客户却说没收到,就是典型症状。
几乎可以肯定不需要。SMPP 只有在持续电信级用量、长连接的维护成本划得来时才有意义。低于那个量,HTTPS 上的 REST API 更容易开发、更容易排查,任何技术栈都能用。
发真实短信到至少两家不同电信的手机,然后看逐个号码的送达报告,确认「已提交」和「已送达」不是一模一样的数字。不肯让你付款前先真实测试的服务商,已经告诉你很多了。