SMPP是一種通用的簡訊介面協議
前言
短訊息中心(SMSC)可以與各種擴充套件短訊息實體(ESME)配合工作,從而為移動使用者提供豐富多采的功能。
ESME Agent |
External Short Message Entity Agent 擴充套件短訊息實體代理 |
ESME |
External Short Message Entity 擴充套件短訊息實體 |
PLMN |
Public Land Mobile Network 公共陸地移動網 |
SMSC |
Short Message Service Center 短訊息中心 |
SMPP |
Short Message Peer to Peer 短訊息點對點協議 |
SS |
Secretary System 祕書檯 |
AS |
Auto System 自動臺 |
SMSC指短訊息中心。
ESME在本規範中指的是通過本規範規定的協議與SMSC通訊,請求特定的短訊息服務的功能實體。
SS指人工話務接入並受理短訊息服務請求的系統。
AS指利用互動式語音技術受理短訊息服務請求的系統。
SS(祕書檯)和AS(自動臺)是典型的ESME。
SMSC和ESME之間的傳輸網路可以是基於X.25, 或TCP/IP。
ESME到SMSC的訊息
ESME到SMSC的訊息,如:提交、查詢、刪除短訊息等請求,ESME必須以TRANSMITTER型別連線到SMSC。
圖4描述了一個典型的TRANSMITTER型別的請求應答的示例。TRANSMITTER型別的ESME是以BIND_TRANCESMITTER連線到SMSC的ESME,此型別的ESME向SMSC發起提交短訊息,查詢短訊息狀態,刪除短訊息等請求,SMSC返回請求的應答。
ESME和SMSC之間的請求應答訊息可以是阻塞方式也可以是非同步方式的。所以ESME可能在SMSC沒有應答的情況下,發起多個請求到SMSC。
SMSC應該按照收到的請求順序,給EMSE迴響應。但是ESME必須能夠處理沒有按順序的響應。
SMSC到ESME的訊息
SMSC到ESME的訊息,如:SMSC轉發短訊息到ESME,ESME必須以RECEIVER型別連線到SMSC。
圖5描述了一個典型的RECEIVER型別的ESME和SMSC之間的訊息序列的示例。RECEIVER型別的ESME是以BIND_RECEIVER連線到SMSC的ESME,SMSC向此類ESME轉發短訊息,ESME向SMSC迴應答。
ESME和SMSC之間的請求應答訊息可以是阻塞方式也可以是非同步方式的。所以SMSC可能在ESME沒有迴應答的情況下,傳送發起多個deliver_sm請求到ESME。
ESME應該按照收到的請求順序,給SMSC返回響應。但是SMSC必須能夠處理沒有按順序回的響應。
本規範中規定的所有協議,不管是從ESME到SMSC,還是從SMSC到ESME的訊息,接收到請求的一方,都必須給請求方回一個應答訊息(acknowledge)。
訊息語法
在以下語法說明中,遵從以下規則:
A.未使用的欄位,依據型別必須設定為0或NULL。
B.訊息由訊息頭和訊息體組成。
C.狀態(Command_status)的定義如表3所示。
狀態定義
錯誤程式碼 |
描述 |
E_SUCCESS(0X00000000) |
成功 |
E_OTHERERR(0X00000001) |
其他錯誤 |
0X00000002 – 0X0000000F |
保留給SMSC廠商定義錯誤 |
E_MSGLENERR(0X00000010) |
訊息長度錯誤 |
E_CMDLENERR(0X00000011) |
命令長度錯誤 |
E_INVLDCMDID(0X00000012) |
訊息ID無效 |
E_NORIGHT(0X00000013) |
沒有執行此命令的許可權 |
0X00000014 – 0X0000001F |
保留 |
E_INVLDSYSTEMID(0X00000020) |
無效的SYSTEMID |
E_INVLDPASSWORD(0X00000021) |
無效的密碼 |
E_INVLDSYSTEMTYPE(0X00000022) |
無效的SYSTEMTYPE |
0X00000023 – 0X0000003F |
保留 |
E_ADDRERR(0X00000040) |
地址錯誤 |
E_MOEXCEED(0X00000041) |
超過最大提交數 |
E_MTEXCEED(0X00000042) |
超過最大下發數 |
E_INVLDUSER(0X00000043) |
無效的使用者 |
E_INVLDDATAFMT(0X00000044) |
無效的資料格式 |
E_CREATEMSGFAILURE(0X00000045) |
建立訊息失敗 |
E_INVLDMSGID(0X00000046) |
無效的短訊息ID |
E_DATABASEFAILURE(0X00000047) |
資料庫失敗 |
E_CANCELMSGFAILURE(0X00000048) |
取消訊息失敗 |
E_MSGSTATEERR(0X00000049) |
短訊息狀態錯誤 |
E_REPLACEMSGFAILURE(0X0000004A) |
替換訊息失敗 |
E_INVLDRPLADDR(0X0000004B) |
替換訊息源地址錯誤 |
0X0000004C – 0X0000005F |
保留 |
E_INVLDORGTON(0X00000060) |
無效的源地址TON |
E_INVLDORGNPI(0X00000061) |
無效的源地址NPI |
E_ORGADDRERR(0X00000062) |
源地址錯誤 |
E_INVLDDESTTON(0X00000063) |
無效的目的地址TON |
E_INVLDDESTNPI(0X00000064) |
無效的目的地址NPI |
E_DESTADDRERR(0X00000065) |
目的地址錯誤 |
E_INVLDSCHEDULE(0X00000066) |
無效的定時時間 |
E_INVLDEXPIRE(0X00000067) |
無效的超時時間 |
E_INVLDESM(0X00000068) |
無效的ESM_CALSS |
E_INVLDUDLEN(0X00000069) |
無效的UDLEN |
E_INVLDPRI(0X0000006A) |
無效的PRI |
E_INVLDRDF(0X0000006B) |
無效的Registered_delivery_flag |
E_INVLDRPF(0X0000006C) |
無效的Replace_if_present_flag |
0X0000006D – 0X0000007F |
保留 |
使用者管理部分(可選) |
|
E_USERALREADYEXIST(0X00000080) |
指定使用者已經存在 |
E_CREATEUSERERR(0X00000081) |
建立使用者失敗 |
E_USERIDERR(0X00000082) |
使用者ID錯誤 |
E_USERNOTEXIST(0X00000083) |
指定使用者不存在 |
0X00000084 – 0X0000008F |
保留 |
0X00000090 – 0X00000FFF |
保留給SMSC廠商定義錯誤 |
其他 |
保留 |
型別定義
(1)integer:一定位元組數所組成的整數,高位在前,低位在後。例 如:1位元組(BYTE),2位元組(WORD ) , 4位元組 (DWORD) ,6位元組等等。
(2)C_String:以NULL結束的ASCII字串。
(3)C_DecString:以NULL結束的ASCII字串,它由一系列的10進位制字元 組成(‘0’---‘9’)。
(4)C_OctetString:由任意8位位元組組成資料流串。
(5)C_HexString:以NULL結束的ASCII字串,它由一系列的16進位制字元組 成(‘0’---‘9’,‘A’(‘a’)---‘F’(‘f’))。
(6)C_UnicodeString:以NULL結束的Unicode編碼的字串。
(7)C_StringTime:表示時間的字串,它為以下格式。“YYMMDDhhmmsstnnp" , 長度定為17個位元組或1個位元組,最後一個位元組值必須為NULL,1個位元組表示 使用預設的時間定義(由短訊息中心實現時具體設定),17個位元組的具體格式 如下:
YY' |
年份的最後2位 (00-99) |
MM |
月份(01-12) |
DD |
日 (01-31) |
Hh |
小時 (00-23) |