简短回答
通过 SMPP 连接短信服务商,需先申请绑定并登记源 IP,再用 TLS 连接。以 system_id 和密码发送 bind_transceiver,用 submit_sm 提交短信,应答每条 deliver_sm 回执,并定期发送 enquire_link。
服务商会提供什么
SMPP 接入通常由服务商开通,无法自助开通。请告知服务商您的目的地国家、Sender ID、预计峰值发送量,以及将用于连接的公网 IP 地址。
| 项目 | 说明 |
|---|---|
| 主机和 TLS 端口 | 您的客户端连接的地址 |
| system_id 和密码 | 绑定凭据,请作为机密信息保存 |
| system_type | 除非服务商指定,通常留空 |
| 绑定数和吞吐量 | 可开启的会话数,以及每个绑定约定的速率 |
| IP 白名单 | 只有已登记的源 IP 才能绑定 |
建立并维持会话
transceiver 绑定可在一个会话中同时收发。只有客户端需要时,才分别使用 transmitter 和 receiver 绑定。
- 对服务商提供的主机和端口建立 TLS 连接。
- 用 system_id 和密码发送 bind_transceiver,等待返回 command_status 为 0 的 bind_transceiver_resp。
- 用 submit_sm 提交每条短信,并保存 submit_sm_resp 中的 message_id。
- 以 deliver_sm 接收送达回执,并对每一条都回复 deliver_sm_resp。
- 空闲时发送 enquire_link;若响应中断,则以退避策略重连。
- 用 unbind 关闭会话,并等待 unbind_resp。
哪些 submit_sm 字段最容易导致被拒?
- source_addr_ton 和 source_addr_npi:字母数字 Sender ID 用 5 和 0,国际号码用 1 和 1。
- destination_addr:国家区号加号码,不带加号,也不带前导零。
- data_coding:默认 GSM-7 字符集用 0,UCS-2(阿拉伯语、emoji 及其他文字)用 8。
- registered_delivery:设为 1 表示请求送达回执。
- short_message 最多容纳 254 字节;内容更长时,请使用 sm_length 为 0 的 message_payload TLV,二者不可同时使用。
常见的绑定与提交错误
OmniChannels.ai 按账户开通基于 TLS 的 SMPP 3.4 绑定,并对源 IP 设置白名单;代理商和批发合作伙伴还可获得专用绑定。
| command_status | 可能原因 | 解决办法 |
|---|---|---|
| ESME_RBINDFAIL | system_id 错误,或 IP 不在白名单内 | 检查凭据和源 IP |
| ESME_RINVPASWD | 密码错误 | 检查凭据 |
| ESME_RINVSRCADR | Sender ID 或其 TON/NPI 无效 | 修正发送方及 TON/NPI |
| ESME_RTHROTTLED | 发送速率超过约定 | 降低速率,并以退避策略重试 |
