比較正式的說明網站: https://smpp.org/
參考文章: Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=677474
SMPP協議
3.1SMPP規范簡介
SMPP接口協議最初由ETSI收錄在 GSM03.39規范中,描述了短消息中心與短消息實體之間通信交互的協議關系及數據傳輸格式,本規范對SMPP接口協議的描述主要面向簡單的通信交互,制定規范的廠家將其協議版本號定為V3.30;后由SMPP開發者論壇將協議版本向前演進為V3.40,SMPP V3.40協議規范完全兼容GSM 03.39協議標准。本規范中,所采用的短消息中心設備與短消息股票交易業務處理平台之間的接口采用GSM03.39 V3.30協議規范,如無特殊說明全部以此協議規范為准。SMPP協議可以以TCP/IP或X.25作為底層通訊承載。
與SMPP協議規范相關的參考資料如下:
1、 《GSM 03.39(Version 5.0.0)》:European digital cellular telecommunications system(Phase 2);Interface protocols for the connection of Short Message Service Centres(SMSCs)to Short Message Entities(SMEs);
2、 《GSM 03.39(Version 6.0.0)》:European digital cellular telecommunications system(Phase 2+);Interface protocols for the connection of Short Message Service Centres(SMSCs)to Short Message Entities(SMEs);
3、 《GSM 03.40(Version 4.8.1):European digital cellular telecommunications system(Phase 2);Technical realization of the Short Message Service Point to Point》
4、 《GSM 03.38(Version 5.2.0):Digital cellular telecommunications system(Phase 2+);Alphabets and language_specific information》
5、 《GSM 03.47(Version 5.0.0):Digital cellular telecommunications system;Example protocol stacks for interconnecting Service Center(SC) and Mobile_services Switching Center(s)(MSC)》
6、 《900/1800 MHz 數字蜂窩移動通信系統短消息中心設備規范(第一分冊點對點短消息業務)》
SME 短消息實體
SMPP 短消息點對點協議
SMSC 短消息服務中心
ESME 擴展短消息實體
通過SMPP,ESME(例如尋呼台、語音郵箱系統、股票交易業務處理平台等)能連接(Bind)或斷連(UnBind)短消息中心,提交(Submit)短消息或從短消息中心下發(Deliver)。
此協議包含以下兩部分:
*(協議)ESME到SMSC的消息
*(協議)SMSC到擴展ESME的消息
其中用戶管理部分只適用於SMSC有用戶數據庫支持的情況
SMSC和ESME之間的關系如下圖所示:
圖3-1:SMSC和ESME連接的短消息系統網絡
按短消息信息的流向,可以將ESME與SMSC之間的短消息信息分為兩類:1、從SMSC到ESME的消息;2、從ESME到SMSC的消息。對於所有請求消息,無論始發於ESME還是SMSC,都必須產生一個響應消息(acknowledge)。
從ESME到SMSC所提交的消息,可能有兩種響應:
*SMSC收到消息的響應(ACK)
*如果這條短消息設置了需要狀態報告,那么當這條短消息到達目標地之后,SMSC會產生一個狀態報告的消息給ESME。
以下消息是從SMSC到ESME的消息
命令 | 描述 |
bind_receiver_resp | bind_receiver的響應,status表示連接成功與否 |
bind_transmitter_resp | bind_transmitter的響應,status表示連接成功與否 |
unbind_resp | unbind的響應,status表示斷開連接成功與否 |
submit_sm_resp | submit_sm的響應,status表明提交短消息是否成功 |
deliver_sm | SMSC下發短消息到ESME |
enquire_link_resp | Enquire_link的響應 |
generic_nak | 表示消息頭有錯誤的響應 |
.2 ESME到SMSC的消息
以下為ESME到SMSC的消息
命令 | 描述 |
bind_receiver | 短消息實體(ESME/SME)作為服務器與短消息中心(SMSC)建立連接,本連接建立起來后,允許短消息實體接受短消息中心下發的短消。 |
bind_transmitter | 短消息實體(ESME/SME)作為客戶端與短消息中心(SMSC)建立連接,本連接建立起來后,允許短消息實體向短消息中心提交短消息。 |
Unbind | 短消息實體(ESME/SME)與短消息中心系統(SMSC)斷開會話連接。 |
submit_sm | ESME提交短消息到SMSC,以便SMSC下發此短消息到指定的移動台。 |
deliver_sm_resp | deliver_sm的響應。status表示此次下發是否成功。 |
Enquire_link | 短消息實體向短消息中心發起的連路保持查詢請求,以保證通訊鏈路的暢通。一般情況下約每5秒發送一次ENQUIRE_LINK消息。 |
Generic_nak | 表示消息頭有錯誤的響應 |
3.4.1語法定義規則
在以下語法說明中,遵從以下規則:
A.未使用的字段,依據類型必須設置為0或NULL。
B.消息由消息頭和消息體組成
C.狀態(status)如在命令語法中未加說明
0:表示成功
非0:表示失敗
<0x80000000:未定義值保留
D.在類型中,可能用到以下定義
l integer :一定字節數所組成的整數,高位在前,低位在后。例如:1字節(BYTE),2字節(WORD ) , 4字節(DWORD)。
l C_String :以NULL結束的ASCII字符串
l C_DecString :以NULL結束的ASCII字符串,它由一系列的10進制字符組成(‘0’---‘9’)。
l C_OctetString :由任意8位字節組成數據流串。
l C_HexString :以NULL結束的ASCII字符串,它由一系列的16進制字符組成(‘0’---‘9’,‘A’(‘a’)---‘F’(‘f’))
l C_StringTime :表示時間的字符串,它為以下格式 “YYMMDDhhmmsstnnp" ,格式如下
說明
|
|
YY' |
年份的最后2位 (00-99)
|
MM |
月份(01-12)
|
DD |
日 (01-31)
|
Hh |
小時 (00-23)
|
Mm |
分 (00-59)
|
Ss |
秒 (00-59)
|
T |
十分之一秒 (0-9)
|
Nn |
與UTC (Universal Time Constant) 時間超前或落后的差距(00-48).
|
‘+’(p) |
時間超前於UTC time.
|
‘-’(p) |
時間落后於 UTC time.
|
l C_UnicodeString :Unicode編碼的字符串。
3.4.2消息頭語法
字段
|
長度(字節)
|
類型
|
Command Length
|
4
|
Integer
|
Command ID
|
4
|
Integer
|
Command_status
|
4
|
Integer
|
Sequence No.
|
4
|
Integer
|
Optional Message Body
|
可變
|
混合
|
具體字段描述說明:
l Command Length:整個包的長度(包括該字段本身)。
l Command ID :這個字段表明該條短消息的類型,相當於標識符。例如ESME_SUB_SM表示此消息為ESME向SMSC提交短消息。當該標識符表示該條消息是請求消息(request)時,標識符的保留取值范圍是0h到FFh。當該標識符表示該條消息是應答消息(response)時,標識符的保留取值范圍是080000000h到0800000FFh。一般來說,應答消息的類型對應相應的請求消息的類型,所不同的是,應答消息的類型在第31位比特處是置位的。
Command ID命令取值:
Command ID 編碼 | Command ID | 描述 |
Command ID取值
|
ESME_BNDRCV
|
bind_receiver
|
ESME要求以接收者身份連接到SMSC
|
0X00000001
|
ESME_BNDRCV_RESP
|
bind_receiver_resp
|
bind_receiver的響應
|
0X80000001
|
ESME_BNDTRN
|
bind_transmitter
|
ESME要求以發送者身份連接到SMSC
|
0X00000002
|
ESME_BNDTRN_RESP
|
bind_transmitrer_resp
|
bind_transmitter的響應
|
0X80000002
|
ESME_UBD
|
Unbind
|
ESME要求斷開連接到SMSC
|
0X00000006
|
ESME_UBD_RESP
|
Unbind_resp
|
Unbind的響應
|
0X80000006
|
ESME_SUB_SM
|
Submit_sm
|
ESME提交短消息到SMSC
|
0X00000004
|
ESME_SUB_SM_RESP
|
Submit_sm_resp
|
submit_sm的響應
|
0X80000004
|
SMSC_DELIVER_SM
|
Deliver_sm
|
SMSC下發短消息到ESME
|
0X00000005
|
SMSC_DELIVER_SM_RESP
|
Deliver_sm_resp
|
deliver_sm的響應
|
0X80000005
|
ESME_QRYLINK
|
Enquire_link
|
ESME詢問與SMSC的連接情況
|
0X00000015
|
ESME_QRYLINK_RESP
|
Enquire_link_resp
|
enquire_link的響應
|
0X80000015
|
ESME_NACK
|
Nack
|
表示消息頭有錯誤的響應
|
0X80000000
|
l Command Status :此字段表示一個請求消息的成功與失敗,如失敗,指示引起失敗的錯誤類型等信息。該字段只用在應答消息中,在請求消息中,該字段必須為NULL。
Command Status取值說明 :
錯誤代碼 | 錯誤值 | 描述 |
E_SUCCESS
|
0X00000000
|
成功
|
E_OTHERERR
|
0X00000001
|
其他錯誤
|
0X00000002 – 0X0000000F
|
|
保留給SMSC廠商定義錯誤
|
E_MSGLENERR
|
0X00000010
|
消息長度錯誤
|
E_CMDLENERR
|
0X00000011
|
命令長度錯誤
|
E_INVLDCMDID
|
0X00000012
|
消息ID無效
|
E_NORIGHT(0X00000013)
|
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廠商定義錯誤
|
其他
|
|
保留
|
l Sequence No .:此字段表示消息的序列號,它由ESME產生,它是消息和它的應答之間的對應標志,數值在01h到07FFFFFFFh間。對於每條請求消息,該字段的取值必須保證嚴格單調遞增,當序列號值達到最大值時,返回繼續從01h開始。
l Optional Message Body:此字段表示短消息的消息體部分,在移動股票交易應用中承載STK卡應用協議內容。
3.4.3各命令消息體具體格式
1、generic_Nak命令
此命令用於當接收消息頭有錯誤的時候的響應,該響應只能由收到請求方發出。該命令只有消息頭,沒有消息體。
在擴展短消息實體和短消息中心之間建立虛連接,接收SMSC轉發的短消息。
字段
|
長度(字節)
|
類型
|
System_id | 最大 16 | C_String |
Password | 最大 9 | C_String |
System_type | 最大 13 | C_String |
Interface_version | 1 | Integer |
Addr_ton | 1 | Integer |
Addr_npi | 1 | Integer |
Address_range | 最大 41 | C_DecString |
具體字段描述說明:
system_id :該字段是系統登錄到短消息中心所用的接口號。
Password :該字段是系統登錄到短消息中心所用的密碼。
system_type :該字段標明登錄的接口類型。
interface_version :該字段標明登錄的接口版本號。
addr_ton :該字段指明編碼類型。如不需要,可設為NULL。取值說明:
0 未知,當用戶或網絡不含關於編碼方案的較早信息
1 國際號碼,
2 國內號碼
3 網絡特殊號碼
4 用戶號碼
5 字符數字
6 縮寫號碼
7 保留
addr_npi :該字段指明編碼方案。如不需要,可設為NULL。取值說明:
0 未知
1 ISDN或電話號碼編碼方案(E164/E163),對於任意實體SC,MSC或MS,都有效
2 保留
3 數據編碼方案(X121)
4 電報編碼方案
5-7 保留
8 國內編碼方案
9 私有編碼方案
10 ERMES編碼方案(ETSI DE/PS 3 01-3)
11-15 保留
address_range :該字段用來給短消息指明路由,和將狀態報告轉發給ESME。如不需要,可設置為NULL。
3、BIND_RECEIVER_RESP語法
此命令用於對MI_BIND_RECEIVER響應。
字段
|
大小(字節)
|
類型
|
System_id
|
最大 16
|
C_String
|
具體參數說明:
system_id :該字段是系統登錄到短消息中心所用的接口號。
在擴展短消息實體和短消息中心之間建立虛連接,擴展短消息實體能向SMSC提交短消息。此命令和BIND_RECEIVER的語法一樣,只是在消息頭里的Command_id為"bind_transmitter"。
5、BIND_TRANSMITTER_RESP命令
此命令和BIND_RECEIVER_RESP的語法一樣,只是在消息頭里的Command_id為"bind_transmitter_resp"。
此命令用於斷開ESME和SMSC之間的連接。此消息只有消息頭,沒有消息體。
7、UNBIND_RESP命令
此消息只有消息頭,沒有消息體。
此命令用於用於ESME提交短消息到SMSC,以便SMSC把此短消息發給特定ESME。
字段 | 長度(字節) | 類型 |
service_type | 最大6 | C_String |
source_addr_ton | 1 | Integer |
source_addr_npi | 1 | Integer |
source_addr | 最大21 | C_DecString |
dest_addr_ton | 1 | Integer |
dest_addr_npi | 1 | Integer |
destination_addr | 最大21 | C_DecString |
esm_class | 1 | Integer |
protocol ID | 1 | Integer |
priority_flag | 1 | Integer |
schedule_delivery_time | 最大 17 | C_StringTime |
validity_period | 最大 17 | C_StringTime |
registered_delivery_flag | 1 | Integer |
replace_if_present_flag | 1 | Integer |
data_coding | 1 | Integer |
sm_default_msg_id | 1 | Integer |
sm_length | 1 | Integer |
short_message | 最大160 | C_String |
具體參數說明:
service_type :保留字段,為將來擴展用。必須設為NULL。
source_addr_ton :源地址編碼類型,如不需要,可設為NULL。
source_addr_npi :源地址編碼方案,如不需要,可設為NULL。
source_addr :提交該短消息的SME的地址。是提交的短消息的
源地址。如不需要,可設為NULL。
dest_addr_ton :目的地址編碼類型,如不需要,可設為NULL。
dest_addr_npi :目的地址編碼方案,如不需要,可設為NULL。
destination_addr:短消息的目的地址。對於移動終止的短消息來說,
它就是目的手機的MSISDN。如不需要,可設置為
NULL。
esm_class :該字短為短消息類型。對submit_sm消息來說,
該字段必須為NULL;對deliver_sm消息來說,該
字段表示這條消息是狀態報告。該字段的具體解
釋請參考后面的消息體參數說明。但對於普通的
SUBMIT_SM命令,此字段設為0。
取值說明 :
此字段的說明如下:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Flag | Reserved | UDHI | Reserved | Reserved | Reserved |
Delivery
Receipt
|
Reserved | Reserved |
其中:
UDHI:表示短消息內容是否有頭結構。置位表示有。
Delivery Receipt:在DELIVER_SM協議中使用,表示此條消息是否是狀態報告。
protocol ID :GSM協議類型。詳細是解釋請參考GSM03.40中的
9.2.3.9。
priority_flag :短消息的優先級。當設置了短消息為高優先級,
短消息中心會將該短消息移到同一目的地址的消
息隊列的前端,優先進行發送。
取值說明:
0:普通優先級(缺省值)
1:高優先級
>1:保留。
schedule_delivery_time:該字段表示計划下發該短消息的時間。
時間格式請參考前面定義的C_StringTime
的格式. 如不需要,可設置為NULL。
validity_period:該字段表示短消息的最后生存期限。時間格式請
參考前面定義的C_StringTime的格式.如不需要,
可設置為NULL。
registered_delivery_flag:該字段是注冊短消息標志,它表示當
短消息到達最后的目的地后,是否需
要狀態報告。
取值說明:
0:不需要
1:需要
>1:保留。
replace_if_present_flag:該字段表示替換短消息標志。即當提交
的短消息的源地址和目的地址相同時,
是否替換存在的短消息。
取值說明:
0:不替換
1:替換
>1:保留。
data_coding :該字段表示數據編碼方案。
取值說明 :
0 缺省編碼方案(7bit編碼)
4 二進制編碼方案(8bit編碼)
8 UCS2編碼方案(GB13000)
其他 保留
sm_default_msg_id:該字段表示預定義短消息ID。該ID是短消息中
心管理者建立的預定義短消息表的索引。不想
發送預定義短消息時,該字段應設為NULL。預
定義短消息ID值從0x01到0x64。詳細說明請參
考SMPP Applications Guide [9] - Default
Short Message。
sm_length :要發送的短消息數據內容的字節長度。
short_message :該字段表示短消息數據內容。最大可到160字符。
只有sm_length中定義的字節長度可用。此字段的數據編碼格式由data_coding決定。
9、SUBMIT_SM_RESP命令
字段 | 長度(字節) | 類型 |
Message_id | 最大9 | C_HexString |
具體參數說明:
Message_id :該字段表示短消息ID,由短消息中心產生,用於
以后查詢及替換短消息用,或是表明狀態報告所
對應的源消息。如果沒有,該字段必須設為
NULL。
此命令由SMSC產生,SMSC通過此命令發送短消息到目的ESME,它也可用於發送DELIVERY RECEIPT消息。語法格式與SUBMIT_SM的語法消息體是相同的,只是在消息頭中的Command_id是“deliver_sm"。
字段 | 長度(字節) | 類型 |
service_type | 最大6 | C_String |
source_addr_ton | 1 | Integer |
source_addr_npi | 1 | Integer |
source_addr | 最大21 | C_DecString |
dest_addr_ton | 1 | Integer |
dest_addr_npi | 1 | Integer |
destination_addr | 最大21 | C_DecString |
esm_class | 1 | Integer |
protocol ID | 1 | Integer |
priority_flag | 1 | Integer |
schedule_delivery_time | 最大 17 | C_StringTime |
validity_period | 最大 17 | C_StringTime |
registered_delivery_flag | 1 | Integer |
replace_if_present_flag | 1 | Integer |
data_coding | 1 | Integer |
sm_default_msg_id | 1 | Integer |
sm_length | 1 | Integer |
short_message | 最大160 | C_String |
具體參數說明:
service_type :保留字段,為將來擴展用。必須設為NULL。
source_addr_ton :源地址編碼類型,如不需要,可設為NULL。
source_addr_npi :源地址編碼方案,如不需要,可設為NULL。
source_addr :提交該短消息的SME的地址。是提交的短消息的
源地址。如不需要,可設為NULL。
dest_addr_ton :目的地址編碼類型,如不需要,可設為NULL。
dest_addr_npi :目的地址編碼方案,如不需要,可設為NULL。
destination_addr:短消息的目的地址。對於移動終止的短消息來說,
它就是目的手機的MSISDN。如不需要,可設置為
NULL。
esm_class :該字短為短消息類型。對submit_sm消息來說,
該字段必須為NULL;對deliver_sm消息來說,該
字段表示這條消息是狀態報告。該字段的具體解
釋請參考后面的消息體參數說明。但對於普通的
SUBMIT_SM命令,此字段設為0。
取值說明 :
此字段的說明如下:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Flag | Reserved | UDHI | Reserved | Reserved | Reserved |
Delivery
Receipt
|
Reserved | Reserved |
其中:
UDHI:表示短消息內容是否有頭結構。置位表示有。
Delivery Receipt:在DELIVER_SM協議中使用,表示此條消息是否是狀態報告。
protocol ID :GSM協議類型。詳細是解釋請參考GSM03.40中的
9.2.3.9。
priority_flag :短消息的優先級。當設置了短消息為高優先級,
短消息中心會將該短消息移到同一目的地址的消
息隊列的前端,優先進行發送。
取值說明:
0:普通優先級(缺省值)
1:高優先級
>1:保留。
schedule_delivery_time:該字段表示計划下發該短消息的時間。
時間格式請參考前面定義的C_StringTime
的格式. 如不需要,可設置為NULL。
validity_period:該字段表示短消息的最后生存期限。時間格式請
參考前面定義的C_StringTime的格式.如不需要,
可設置為NULL。
registered_delivery_flag:該字段是注冊短消息標志,它表示當
短消息到達最后的目的地后,是否需
要狀態報告。
取值說明:
0:不需要
1:需要
>1:保留。
replace_if_present_flag:該字段表示替換短消息標志。即當提交
的短消息的源地址和目的地址相同時,
是否替換存在的短消息。
取值說明:
0:不替換
1:替換
>1:保留。
data_coding :該字段表示數據編碼方案。
取值說明 :
0 缺省編碼方案(7bit編碼)
4 二進制編碼方案(8bit編碼)
8 UCS2編碼方案(GB13000)
其他 保留
sm_default_msg_id:該字段表示預定義短消息ID。該ID是短消息中
心管理者建立的預定義短消息表的索引。不想
發送預定義短消息時,該字段應設為NULL。預
定義短消息ID值從0x01到0x64。詳細說明請參
考SMPP Applications Guide [9] - Default
Short Message。
sm_length :要發送的短消息數據內容的字節長度。
short_message :該字段表示短消息數據內容。最大可到160字符。
只有sm_length中定義的字節長度可用。此字段的數據編碼格式由data_coding決定。
11、DELIVER_SM_RESP語法
它的語法和SUBMIT_SM_RESP的語法消息體是一樣的,只是在消息頭中的Command_id是“deliver_sm_resp"。
此命令用於ESME確認和SMSC之間的連接。ESME發送一條ENQUIRE_LINK命令,SMSC響應一條ENQUIRE_LINK_ACK命令,表示ESME和SMSC之間的連接正常。此命令只有消息頭,沒有消息體。
13、ENQUIRE_LINK_RESP命令
此命令只有消息頭,沒有消息體。
3.4.4消息體參數說明
l address: 地址號碼
l address_range:地址范圍
l data_coding:數據編碼方案, ( 詳見GSM 03.40 [1] 9.2.3.10)
例如:
0:缺省編碼方案(7位)
4:英文編碼方案(不被手機支持)
8:UCS2編碼方案(比如中文編碼)
l dest_addr_npi:目的地址編碼方案,同npi
l dest_addr_ton:目的地址編碼類型,同ton
l destination_addr: 目的地址,同address
l esm_class: 短消息類型
此字段的說明如下:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Flag | Reserved | UDHI | Reserved | Reserved | Reserved |
Delivery
Receipt
|
Reserved | Reserved |
其中 UDHI 表示短消息內容是否有頭結構。置位表示有。Delivery Receipt,在DELIVER_SM協議中使用,表示是否是此條消息是否是狀態報告。
對於普通的SUBMIT_SM命令,此字段設為0。
l final_date:短消息的生命期終止的實際時間,如果此短消息已從SMSC的等待發送隊列中刪除,即為刪除時間,否則為SMSC當前的時間
l GSM_code: GSM錯誤碼,參見GSM 03.40協議。
l interface_version:用來描述SMEI協議的版本號
l Message_id:短消息ID,它由SMSC設置。用於查詢以及替換短消息等操作時使用。
l Command Status:短消息當前的狀態
l npi:地址編碼方案,(定義詳見GSM03.40[1] 9.1.2.5)
例如: 1 表示ISDN電話編碼計划
l password: 用來登錄的密碼
l priority_flag:優先級
1:高優先級
0:普通優先級
>1:保留
l protocol_ID:GSM協議類型(定義詳見GSM03.40[1] 9.2.3.9)
l registered_delivery_flag: 注冊短消息標志,它表示當此短消息到達最后的目的地后,是否需要 送達狀態報告(DELIVERY RECEIPT)。
0:不需要
1:需要
>1:保留
l replace_if_present_flag:替換標志,當存在的短消息的源地址和目的地址都相同時,是否替換存在的短消息。
0:不替換
1:替換
>1:保留
l schedule_delivery_time: 計划下發短消息的時間
l service_type::保留,必須設為NULL
l short_message: 短消息數據內容。在7bit時,是160字符;在8bit時,是140字符。
l sm_default_msg_id: 預定義短消息ID,不是預定義短消息時應設為0,預定義短消息ID值從0x01到0x64。
l sm_length: 短消息的數據長度,以字節計算
l source_addr:源地址編號,同address
l source_addr_npi: 源地址編碼方案,同npi
l source_addr_ton: 源地址編碼類型,同 ton
l system_id:接口ID,用來描述虛擬連接的用戶名
l system_type:用來描述用戶的類型
l ton:地址編碼類型,(定義詳見GSM03.40[1] 9.1.2.5)
0 未知號碼
1 國際號碼
2 國內號碼
3 網絡專用號碼
4 用戶號碼
5 字母號碼(按照 GSM TS03.38 7-bit 缺省字母表編碼)
6 縮寫號碼
7 保留
l validity_period:短消息的最后生存期限
3.3 SMPP協議流程




附錄一:
SMPP
協議中注意的幾個問題
1、 本規范的各消息的消息頭中,對Sequence No字段,采用嚴格單調遞增函數方式((x
1,y
1),(x
2,y
2)是二維函數空間任意兩個坐標取值;當x
2-x
1>0時,函數(y2-y1)/( x
2-x
1)>0)進行計數;當序列號達到最大值時自動返回最小值起繼續計數。
2、 在BIND_RECEIVER_RESP消息中,system_id字段可以為NULL。
3、 在有STK卡的手機提交一加密的短消息到調度中心,DCS為4(表示短消息內容是8-bit數據,是用戶自定義的編碼方案),短消息的內容由於經過加密,可能成為二進制的數據流,此時短消息中心應將該二進制的數據流完整的送到手機銀行業務模塊;同樣,如果是業務模塊向短消息中心提交一加密的短消息,短消息的DCS為4,內容是二進制的數據流,短消息中心應該將該數據流完整的送到手機或ESME上去。
4、 在本規范 中,short_message字段的類型定義根據《900/1800MHz TDMA數字蜂窩移動通信網短消息中心設備規范書(第一分冊點對點短消息業務)》進一步說明:
l 當DCS=0時,采用OCTET 7-bit編碼方案,short_message字段的類型是C_String,即是以NULL結束的ASCII字符串(文本),最大長度為160個字符;ESME不做編解碼工作,由短消息中心進行編解碼工作;
l 當DCS=4時,是加密數據,二進制的數據流,short_message字段的類型是C_OctetString,即是由任意8位字節組成的數據流串,最大長度為140字節;短消息中心進行透明傳輸,不做任何編解碼工作,編解碼工作由SME/ESME來完成;
l 當DCS=8時,采用的是UCS2編碼方案,short_message字段的類型是C_UnicodeString,即是Unicode編碼的字符串,最大長度為70個字符。也就是說,short_message字段中的內容在送往短消息中心前,已經按UCS2編碼,短消息中心應支持漢字短消息業務的透明傳輸,即UCS2的編解碼應由SME/ESME來完成