OTP SMPP接口
最新更新:2025-01-08
接口信息
本協議定義了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 命令。
如有任何問題,請聯繫 技術支持。