消息名
|
傳遞方向
|
解釋說明
|
CMPP_CONNECT
|
SP---à
ISMG
|
CMPP_CONNECT操作的目的是SP向ISMG註冊作爲一個合法SP身份,此消息需要向ISMG發出驗證信息,驗證方式採用md5加密密碼方式,若註冊成功後即建立了應用層的連接(否則ISMG會立即斷開Socket),此後SP可以通過此ISMG接收和發送短信。
ISMG以CMPP_CONNECT_RESP消息響應SP的請求。具體的算法實現參考CMPP2.0文檔和本文附件代碼。
|
CMPP_CONNECT_RESP
|
SPß
---ISMG
|
ISMG對CMPP_CONNECT消息的回覆(無論是否驗證成功);如果未通過,會在消息中包含參考信息,但ISMG會立即斷開連接。
|
CMPP_ACTIVE_TEST
|
SPß
à
ISMG
|
這個消息通信雙方都可以發出,目的是在沒有其他消息發送時,保持雙方的通信鏈路的連接,避免系統認爲通信通道已經關閉。每一個收到此消息的實體應當返回CMPP_ACTIVE_TEST_RESP消息,以“禮節性”表示自己的還在通信,維持數據連接有效性。
不
過,據網友交流,有些廠家實現的ISMG,僅僅靠自己發出此消息等待SP回答CMPP_ACTIVE_TEST_RESP來確定數據鏈路的有效性,而忽略
SP的CMPP_ACTIVE_TEST消息(有些霸道吧?)這個值得注意,不要僅僅實現發送而不響應此消息,避免數據連接失效。
|
CMPP_ACTIVE_TEST_RESP
|
SPß
à
ISMG
|
對通信的另一端的CMPP_ACTIVE_TEST消息的回覆。作用參考CMPP_ACTIVE_TEST的解釋。
|
CMPP_SUBMIT
|
SP---à
ISMG
|
在
正確建立了數據連接後,SP向ISMG發送一個SMS數據包。本消息需要仔細研究。接收到此消息後,ISMG需要以CMPP_SUBMIT_RESP消息
作爲回答。如果在一定時間時間內(移動給出的參考值60秒)內未得到消息迴應,那麼SP需要重新發送此數據包,以確保消息得到投遞。如果重發達到3次後仍
然得不到迴應,SP端應該考慮可能ISMG已經失效,應當停止發送此短消息。
|
CMPP_SUBMIT_RESP
|
SPß
---ISMG
|
該
消息由ISMG發送給SP,同時返回一個“收條”(源CMPP_SUBMIT消息的ISMG端的標示MSGID)給SP,表示“我ISMG已經確認收到你
這條消息了”。收到此消息後,SP需要保留此“收條”,因爲後面ISMG會最終報告本消息是否正確發送到用戶手機。那個報告就是以此消息的“收條”作爲確
認那一條消息的。
|
CMPP_QUERY
|
SP---à
ISMG
|
這個查詢不是查詢單條消息的,是查詢SP發送給ISMG的短信的業務情況。可以查總計數,還可以分類查詢。(基本就是發起對移動sms業務數據庫的查詢統計)
|
CMPP_QUERY_RESP
|
SPß
---ISMG
|
ISMG將查詢的數據返回給SP。
|
CMPP_CANCEL
|
SP---à
ISMG
|
SP發起的取消某條消息的命令消息,其中包含了之前已經發送給ISMG消息的“收條”以便ISMG可以確定是那一條消息。如果消息已經發送給用戶了,那麼此消息/命令會無效,ISMG返回失敗。
|
CMPP_CANCEL_RES
|
SPß
---ISMG
|
ISMG返回的對CMPP_CANCEL的回覆,並告知是否刪除成功。
|
CMPP_DELIVER
|
SPß
---ISMG
|
當有MO或者狀態報告時,ISMG發送此消息。注意,此消息的數據可以是用戶手機發送給SP的消息,也可是對於之前SP發送到ISMG的短信的最終狀態的回覆,報告短信的最終狀態。
|
CMPP_DELIVER_RESP
|
SP---à
ISMG
|
SP禮節性的回覆告知收到CMPP_DELIVER消息。要指出SP報告的CMPP_DELIVER消息的MSGID,以便ISMG知道那一條消息SP已經確認收到。
|
CMPP_TERMINAT
|
SPß
à
ISMG
|
SP和ISMG都可以主動發消息給對方,自己這端由於某種原因需要終止當前的數據連接。終止後,要經過重新Connection(驗證)之後纔可以(進入事務階段)發送SMS數據消息。
|
CMPP_TERMINATE_RES
|
SPß
à
ISMG
|
通知對方,本端已經最好撤除連接的準備。
|
字段名
|
長度(byte)
|
類型
|
描述
|
Msg_Id
|
8
|
Unsigned Integer
|
信息標識,應該由SP側ISMG本身產生,本處填空,供ISMG傳輸時使用。SP提交時候應當留空。
|
Pk_total
|
1
|
Unsigned Integer
|
相同Msg_Id的信息總條數,從1開始。如果一條消息長度超多一條短信,可能需要分解成多條消息,那麼實際上這多條消息屬於一條完整消息,所以可以根據此給分解得到的多條短信進行編號,那麼總計需要編成多少條短信,此處就填寫多少。
|
Pk_number
|
1
|
Unsigned Integer
|
相同Msg_Id的信息序號,從1開始。編號決定消息的相對位置。
|
Registered_Delivery
|
1
|
Unsigned Integer
|
是否要求返回狀態確認報告:
0:不需要
1:需要
2:產生SMC話單(該類型短信僅供網關計費使用,不發送給目的終端)。
一
般情況下,都需要確認報告。SMC話單也需要返回是否成功的報告。這條消息用於包月SMC時,當你發送消息給移動的ISMG,移動的計費系統會一次性扣除
用戶的信息費,但是此消息不會送到用戶手機。但是注意,有的ISMG廠商(很可能是移動要求)實現此消息時候,如果你並沒有發送任何此包月類型的消息給用
戶手機,是不發生扣費行爲的。移動會認爲這是屬於違規的“代收費”行爲,會影響同移動的合作關係。
|
Msg_level
|
1
|
Unsigned Integer
|
信息級別,信息的優先級。不過實際當中,感覺ISMG端並沒有區分優先級。
|
Service_Id
|
10
|
Octet String
|
業務類型,是數字、字母和符號的組合。這個表示業務的字符串可以給發出的短信分類。通過此字段大約可以知道每個服務項目的業務量,有利於統計和計費以及結算。
|
Fee_UserType
|
1
|
Unsigned Integer
|
計費用戶類型字段
0:對目的終端MSISDN計費;
1:對源終端MSISDN計費;
2:對SP計費;
3:表示本字段無效,對誰計費參見Fee_terminal_Id
字段。
|
Fee_terminal_Id
|
21
|
Unsigned Integer
|
被計費用戶的號碼(如本字節填空,則表示本字段無效,對誰計費參見Fee_UserType字段,本字段與Fee_UserType字段取0、1、2時互斥)
|
TP_pId
|
1
|
Unsigned Integer
|
GSM協議類型。詳細是解釋請參考GSM03.40中的9.2.3.9
|
TP_udhi
|
1
|
Unsigned Integer
|
GSM協議類型。詳細是解釋請參考GSM03.40中的9.2.3.23,僅使用1位,右對齊
|
Msg_Fmt
|
1
|
Unsigned Integer
|
信息格式
0:ASCII串
3:短信寫卡操作
4:二進制信息
8:UCS2編碼
15:含GB漢字
這個決定了Msg_Content字段的字節內容應該按照什麼編碼來解碼/編碼。
|
Msg_src
|
6
|
Octet String
|
信息內容來源(SP的企業代碼),例如919000。
|
FeeType
|
2
|
Octet String
|
資費類別
01:對“計費用戶號碼”免費
02:對“計費用戶號碼”按條計信息費
03:對“計費用戶號碼”按包月收信息費
04:對“計費用戶號碼”的信息費封頂
05:對“計費用戶號碼”的收費是由SP實現。
通常值爲02,注意這是一個字符串,並非整型。
|
FeeCode
|
6
|
Octet String
|
資費代碼(以分爲單位),如:“
0050
”代表人民幣
0.50
元。
|
ValId_Time
|
17
|
Octet String
|
存活有效期,格式遵循SMPP3.3協議
|
At_Time
|
17
|
Octet String
|
定時發送時間,格式遵循SMPP3.3協議。這個字段可以讓短信在規定的時間給手機用戶。一般情況下不填,保留爲空字符串。
|
Src_Id
|
21
|
Octet String
|
源號碼
SP的服務代碼或前綴爲服務代碼的長號碼, 網關將該號碼完整的填到SMPP協議Submit_SM消息相應的source_addr字段,該號碼最終在用戶手機上顯示爲短消息的主叫號碼。實際上就是服務代碼,可以是長號碼
|
DestUsr_tl
|
1
|
Unsigned Integer
|
接收信息的用戶數量(小於100個用戶),通常是1。移動是忌諱一條消息發給多個用戶的。
|
Dest_terminal_Id
|
21*DestUsr_tl
|
Octet String
|
接收短信的MSISDN號碼,一個類似字符串數組的結構。受DestUsr_tl的約束,決定了本字段的長度。
|
Msg_Length
|
1
|
Unsigned Integer
|
信
息長度(Msg_Fmt值爲0時:<160個字節;其它<=140個字節)。如果是ASCII碼,可以達到160個英文字母。原因是因爲英文
字母僅佔用7bit,而中文等雙字節代碼需要16位,同時每一個字節最高爲都佔用,所以最多140個字節,也就是70個漢字。
|
Msg_Content
|