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
)提交消息下发请求,服务端逻辑如下:
- 服务端解析请求内容,并固定使用SMS通道进行下发。
- 消息下发为同步模式,结果将以
SUBMIT_SM_RESP
命令(即0x80000004
)响应。 - 送达情况将通过消息上报,详情参考 送达报告。
- 推荐使用
UCS2
编码以支持特殊字符和国际化。
客户端数据包
客户端发送 SUBMIT_SM
命令(即 0x00000004
)提交消息,需包含以下字段:
- service_type
- 取值:
MSG
/CODE
/MRKT
- 默认值:
MSG
- 取值:
- source_addr
- 可置空,目前OTP中暂不使用。
- destination_addr
- 消息目标,需为国际手机号码形式(如
+8613800138000
)。
- 消息目标,需为国际手机号码形式(如
- 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 格式为字符串 } }
此代码块在浮窗中显示
- 消息内容,采用JSON格式,格式如下:
- data_coding
- 推荐使用
UCS2
编码以确保特殊字符{}
正常解析。 - 若支持直接发送
{}
,则可使用默认编码(即0x00
)。
- 推荐使用
- 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
)上报送达报告。具体字段如下:
- service_type
- 固定值:
MSG
- 固定值:
- source_addr
- 置空。
- destination_addr
- 与
SUBMIT_SM
命令中的destination_addr
一致。
- 与
- data_coding
- 编码方式:默认值
0x00
。
- 编码方式:默认值
- esm_class
- 设置为
0x00
。
- 设置为
- short_message
- 采用
delivery receipt
格式封装送达报告。
- 采用
- tlv 中的 ReceiptedMessageID
- 消息ID,用于关联识别。
- tlv 中的 MessageState
- 消息状态,字段值
0x0427
。
- 消息状态,字段值
状态解析
short_message 字段 中,stat
的值含义如下:
状态 | 含义 |
---|---|
DELIVRD |
送达成功 |
UNDELIV |
送达失败 |
其他说明
无效命令
针对客户端提交的无效命令,服务端将返回 GENERIC_NACK
命令(即 0x80000000
)并记录相关日志。服务端仅支持以下命令:
EnquireLink
命令(即0x00000015
)Unbind
命令(即0x00000006
)SubmitSM
命令(即0x00000004
)DeliverSMResp
命令(即0x80000005
)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 技术支持。