用 SMPP 和 HTTP 接入短信
把测试路由带到生产而不弄坏绑定、窗口和回执:绑定状态、吞吐、心跳、编码、回调与故障处理。
生产环境的短信连接是一份运维约定,不只是一个端点。SMPP 多了绑定状态、吞吐窗口、心跳和会话上的回执;HTTP 多了逐请求认证和回调。这份指南把两者都拆成从测试到生产的一段顺序。
本页内容
先管住绑定状态
绑定是一条带方向的会话。发送绑定负责提交,接收绑定接收上行短信和回执,收发绑定两者兼顾。服务商为您需要的绑定类型发凭据,客户端要把绑定当成状态来管:正在打开、已绑定、被限流、正在重连、已关闭。把绑定当作永远在线的客户端,第一次掉线就会丢消息。
把绑定状态显式记下来。每次绑定请求和响应、接口版本、system ID 和错误码都写进日志。掉线后按退避重连,不确定短信中心有没有受理之前,不要重放已经在途的提交。唯一可靠的判断依据是 submit_sm_resp 里的 message ID。
绑定与第一次提交
- 应用(ESME)
- bind_transceiver 建立会话
- SMSC
- submit_sm_resp 已受理
- 送达回执
文字说明
客户端发出绑定请求并收到响应。它用 submit_sm 提交短信,收到带 message ID 的 submit_sm_resp。稍后短信中心发来 deliver_sm,携带回执,客户端用 deliver_sm_resp 确认。unbind 关闭会话。
窗口、心跳与编码
窗口是一条绑定上短信中心允许的在途请求数。把在途计数压在窗口以内,发下一波之前先让窗口排空。被限流的提交是降速信号。按原速率重试只会把队列填满,把一条慢短信变成一次拥堵。绑定数量按峰值速率算,不按月均算。
心跳让两端都知道会话还活着。按节奏发 enquire_link,对不再响应的会话要主动关闭。编码方面,内容允许就用 GSM-7,否则用 UCS-2。只要有一个字符不在 GSM-7 字符集里,整条短信就会转成 UCS-2,分段数也可能变。用真实模板测试,把变量值也带上。
送达回执
回执以 deliver_sm PDU 异步到达,携带原始 message ID、状态(已送达、已过期、未送达、未知),往往还有网络错误码。按 message ID 匹配,把状态和消息记录存在一起。不要按到达顺序匹配,也不要把“回执没到”当成“短信失败”。
回执格式因短信中心而异。新的实现用 message_state 这个标签-长度-值字段;旧实现把键值文本放在短消息字段里。两种都要解析。把应用需要的状态归一化,同时保留原始错误码,工单才能追到网络当时到底说了什么。
故障形态与第一步
| 症状 | 可能原因 | 第一步检查 |
|---|---|---|
| 绑定被拒 | 凭据、绑定类型或接口版本不对 | 读绑定响应码和接口版本 |
| 超时上升 | 窗口超了,或者路由慢 | 重试前先看在途请求数和响应码 |
| 绑定开着,没有响应 | 会话已死,或客户端停了心跳 | 发 enquire_link,再退避重连 |
| 回执缺失 | 回执没到处理程序 | 重发前先查会话日志和 message ID |
| 字符错误 | GSM-7 内容按 UCS-2 发,或反过来 | 查数据编码和分段数 |
| 回调超时 | 端点慢或不可达 | 快速响应,异步处理,验签 |
处理时先观察,再只改一个变量。
从测试路由到生产
-
连上测试路由
用测试凭据和生产要用的绑定类型。确认绑定响应和接口版本。
-
发真实模板
测您真正要上线的内容,包括链接、变量和最长的短信。记录编码和分段数。
-
读回执
每条回执按 message ID 匹配。确认应用会收到的状态和错误码。
-
测故障路径
发往无效号码、收件箱已满的手机和被停服务的号码。确认回执状态和应用的处置。
-
算窗口
按峰值速率压测,确认在途请求仍在窗口以内。不够就加绑定。
-
开监控
对绑定状态、提交时延、回执时延和状态分布告警。每条告警都要有明确的处理人。
-
切生产流量
先切一小部分,把回执和测试结果对上,再逐步加量。测试路由留着当备用。
HTTP 认证与回调
HTTP 接入用开户时签发的密钥认证每一次请求。密钥到期前轮换,重叠期内旧密钥继续有效。提交成功会返回带 message ID 的响应,回执和上行短信送到您的回调 URL。
回调端点要验签、快速响应,再处理事件。端点一慢就会触发重试,处理程序不幂等就会产生重复。证书和 DNS 变更时端点仍要可达,回调失败率上升要告警。SMPP 详解讲会话,传输方式对比讲选择。
常见问题
该用哪个 SMPP 版本?
需要几条绑定?
回调要先响应再处理吗?
回执一直不来怎么办?
故障怎么测?
相关内容
- 全球 A2P 发送方 ID 手册
发送方 ID 在各市场如何运作:字母数字、数字与短码路径,注册要求与国家示例。
- A2P SMS
应用对个人短信:应用经已注册的发送方路由发往用户手机的流量,例如验证码或交易提醒。
- DLR
送达回执报告移动网络针对已发送短信返回的状态,例如已送达、已过期、已拒绝或未知。
与我们提供的服务相关
我们在这里说明,因为它会影响您使用我们服务的方式。