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)提交消息下發請求,服務端邏輯如下:

  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 命令。

如有任何問題,請聯繫 技術支持

在文档中心打开
icon
聯繫銷售