跳转到正文
OmniChannels.ai

API 与 SMPP

如何通过 SMPP 连接短信服务商?

更新于

简短回答

通过 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 绑定。

  1. 对服务商提供的主机和端口建立 TLS 连接。
  2. 用 system_id 和密码发送 bind_transceiver,等待返回 command_status 为 0 的 bind_transceiver_resp。
  3. 用 submit_sm 提交每条短信,并保存 submit_sm_resp 中的 message_id。
  4. 以 deliver_sm 接收送达回执,并对每一条都回复 deliver_sm_resp。
  5. 空闲时发送 enquire_link;若响应中断,则以退避策略重连。
  6. 用 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_RBINDFAILsystem_id 错误,或 IP 不在白名单内检查凭据和源 IP
ESME_RINVPASWD密码错误检查凭据
ESME_RINVSRCADRSender ID 或其 TON/NPI 无效修正发送方及 TON/NPI
ESME_RTHROTTLED发送速率超过约定降低速率,并以退避策略重试

官方来源