OTP SMPP接口

最新更新:2025-01-08

接口信息

本协议定义了EngageLab OTP服务的 SMPP 通信协议,旨在通过TCP连接实现高效、可靠的消息下发和状态回报。接口信息包括IP地址、端口号,以及连接所需的认证信息。请确保按照授权渠道提供的账号密码进行正确配置。

SMPP 地址

请从授权渠道(如商务或技术支持)获取以下信息:

  • IP地址: { ip }
  • 端口: { port }
  • 账号: { system_id }
  • 密码: { password }

建立连接

客户端数据包

建立起TCP连接后,第一个数据包需要发送 BindTransceiver 命令(即 0x00000009)进行鉴权校验。此数据包需要包含以下字段:

  • system_id: 分配给客户的系统账号,用于标识身份。
  • password: 系统账号对应的访问密码,用于身份认证。

服务端响应

成功响应

  • 服务端将发送 BindTransceiverResp 命令(即 0x80000009)响应。
  • 填充 system_id 字段,值与接收到的 system_id 字段一致。

失败响应

  • 若鉴权失败,服务端将断开该TCP连接,并记录失败原因。

消息发送

服务端逻辑

消息发送采用 SUBMIT_SM 命令(即 0x00000004)提交消息下发请求,服务端逻辑如下:

  1. 服务端解析请求内容,并固定使用SMS通道进行下发。
  2. 消息下发为同步模式,结果将以 SUBMIT_SM_RESP 命令(即 0x80000004)响应。
  3. 送达情况将通过消息上报,详情参考 送达报告
  4. 推荐使用 UCS2 编码以支持特殊字符和国际化。

客户端数据包

客户端发送 SUBMIT_SM 命令(即 0x00000004)提交消息,需包含以下字段:

  1. service_type
    • 取值:MSG / CODE / MRKT
    • 默认值:MSG
  2. source_addr
    • 可置空,目前OTP中暂不使用。
  3. destination_addr
    • 消息目标,需为国际手机号码形式(如 +8613800138000)。
  4. short_message
    • 消息内容,采用JSON格式,格式如下:
      { "id": "xxx", // 模版ID "language": "default", // 使用的语言,默认为default "code": "xx", // 验证码,仅当 service_type 为 code 时使用 "params": { // 自定义 key-value 对 "key1": "val1" // val 格式为字符串 } }
                {
        "id": "xxx",          // 模版ID
        "language": "default", // 使用的语言,默认为default
        "code": "xx",          // 验证码,仅当 service_type 为 code 时使用
        "params": {            // 自定义 key-value 对
          "key1": "val1"       // val 格式为字符串
        }
      }
      
              
      此代码块在浮窗中显示
  5. data_coding
    • 推荐使用 UCS2 编码以确保特殊字符 {} 正常解析。
    • 若支持直接发送 {},则可使用默认编码(即 0x00)。
  6. header 中的 status
    • 设置为 0x00000000

服务端响应

服务端发送 SUBMIT_SM_RESP 命令(即 0x80000004)响应消息下发结果。

成功响应

  • header 的 status 字段值: 0x00000000
  • MESSAGE_ID 字段: 响应消息ID,用于关联送达报告。

失败响应

  • 服务端填充 header 的 status 字段 提供失败原因:
状态码 说明
ESME_RINVPARAM 参数无效,请检查请求内容格式 0x00000032
ESME_RSYSERR 内部服务错误,建议稍后重新尝试 0x00000008
ESME_RSUBMITFAIL 下发失败,可能由于模版问题或其他原因 0x00000045
ESME_RINVNUMMSGS short_message 字段内容格式错误 0x00000055
ESME_RUNKNOWNERR 未知错误,请联系技术支持 0x000000FF

送达报告

服务端通过 DELIVER_SM 命令(即 0x00000005)上报送达报告。具体字段如下:

  1. service_type
    • 固定值:MSG
  2. source_addr
    • 置空。
  3. destination_addr
    • SUBMIT_SM 命令中的 destination_addr 一致。
  4. data_coding
    • 编码方式:默认值 0x00
  5. esm_class
    • 设置为 0x00
  6. short_message
    • 采用 delivery receipt 格式封装送达报告。
  7. tlv 中的 ReceiptedMessageID
    • 消息ID,用于关联识别。
  8. tlv 中的 MessageState
    • 消息状态,字段值 0x0427

状态解析

short_message 字段 中,stat 的值含义如下:

状态 含义
DELIVRD 送达成功
UNDELIV 送达失败

其他说明

无效命令

针对客户端提交的无效命令,服务端将返回 GENERIC_NACK 命令(即 0x80000000)并记录相关日志。服务端仅支持以下命令:

  1. EnquireLink 命令(即 0x00000015
  2. Unbind 命令(即 0x00000006
  3. SubmitSM 命令(即 0x00000004
  4. DeliverSMResp 命令(即 0x80000005
  5. BindTransceiver 命令(即 0x00000009

活跃保持

客户端需每30秒(容差 ±5 秒)发送一次 EnquireLink 命令(即 0x00000015),以确保连接活跃。

发送状态含义

状态码 含义
ESME_RINVPARAM 参数无效,请检查请求内容格式
ESME_RINVNUMMSGS short_message 字段内容格式错误
ESME_RSUBMITFAIL 下发失败,可能由于模版问题或其他原因
ESME_RSYSERR 内部服务错误,建议稍后重新尝试
ESME_RUNKNOWNERR 未知错误,请联系技术支持
DELIVRD 消息成功送达
UNDELIV 消息未能送达

术语说明

  • SMPP: 短信消息对等协议(Short Message Peer-to-Peer Protocol),用于短信网关的消息交换。
  • SUBMIT_SM: 提交短信消息的 SMPP 命令。
  • DELIVER_SM: 服务端用于上报消息送达情况的 SMPP 命令。

如有任何问题,请联系 OTP 技术支持

在文档中心打开
icon
联系销售