1. 程式人生 > >SMGP 3 0協議 多問多答

SMGP 3 0協議 多問多答

臨時 query 使用 狀態 ont arch top one 原來

內容列表
  • SMGP 3.0協議有哪些變化
  • 哪些TLV字段必須支持?
  • 什麽是TLV字段?
  • 如何測試正向點播業務?
  • 如何測試正向定制業務?
  • 如何測試正向退定業務?
  • 如何測試反向點播業務?
  • 如何測試反向定制業務?
  • 如何測試反向退定業務?
  • SMGP協議錯誤代碼表
  • SMPP協議錯誤代碼表
  • 短消息中心下發給CTSI時,CTSI回復給短消息中心的錯誤代碼表
  • 短消息中心收條處理
  • ISMAP錯誤代碼(返回給SP為 12××××)
  • 正向業務測試用全部SQL(For Sql Server)
  • 如何從SMGP 3.0平臺實施2.0平臺客戶的反向退定!
  • 湖北省電信錯誤代碼表


SMGP 3.0協議有哪些變化
SMGP 3.0增加了對TLV字段的支持。其中有很多字段關系到業務部分。 回頁首
哪些TLV字段必須支持?
Submit和Deliver包中TLV字段必須支持,其中SubmitMsgType,SPDealResult和LinkID三個TLV字段必須支持。否則無法通過業務測試。 回頁首
什麽是TLV字段?
TLV字段是Token/Length/Value的縮寫。詳細解釋可以參考SMPP協議。
意識是頭2個字節是Token標記。再接2個字節是該參數的長度。Value部分為Length * 8octet。 回頁首
如何測試正向點播業務?
點播業務是電信測試人員發送"db"到UMS2系統。UMS2系統接收到SMGPDeliver後,將解析後的deliver數據插入到數據庫中。回復點播測試的SQL(MS SQL Server)如下:
--Check message content.
IF @msg_content = ‘db‘ OR @msg_content = ‘DB‘
BEGIN
--Reply automatically.
INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘1009‘,‘00‘,‘000000‘,0x01,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘點播‘ + @src_terminal_id),@link_id);
RETURN
END
註意:
1.其中registered_delivery的高四位代表SubmitMsgType = 0(普通信息)。低四位為1表示需要收條。
2.下發的時候需要攜帶linkID。linkID = @linkID
3. 計費模式采用第三方計費模式。fee_terminal_type = 3,fee_terminal_id = @src_terminal_id
4. service_id是點播業務代碼,fee_type,fee_code已經意義不大。 回頁首
如何測試正向定制業務?
電信測試人員會發送定制代碼到系統。例如:定制指令是DZ,業務代碼是STP100009,手機號碼是02022222222。那麽UMS2系統會收到SMGPDeliver消息,其總消息內容將是:
DG[空格]STP100009[空格][空格]02022222222[冒號]DZ
註意:
1.DG指令和業務代碼之間是一個空格;業務代碼和手機號碼之間是兩個空格。
2.手機號碼和指令之間是一個冒號。

回復該消息的SQL(MS SQL Server)如下:

IF RIGHT(@msg_content,2) = ‘DZ‘
BEGIN
--Reply automatically.
INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0xf0,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘DG SPT100009 ‘ + @src_terminal_id),@link_id);

INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0x01,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘普通消息‘ + @src_terminal_id),@link_id);

RETURN
END

註意:
1. 回復的時候,service_id必須是定制的業務代碼。
2. SubmitMsgType = 15所以,registered_delivery的高四位是f,而且這種回復不會有收條。所以registered_delivery = 0xf0。
3.采用第三方計費模式。
4.linkID必須攜帶上。
5.回復的內容必須是:
DG[空格]STP100009[空格][空格]02022222222
6.下發業務信息的時候,原來的linkID必須要攜帶,否則將會被攔截。
7.下發業務信息的時候,registered_delivery的高四位必須是0,而且要收條。所以registered_delivery = 0x01。
回頁首
如何測試正向退定業務?
正向退定的時候,電信測試人員會發送“qx”上行。這個時候UMS2系統會接收到SMGPDeliver,其中內容是“00000”。
下行應答信息如下:
IF @msg_content = ‘00000‘
BEGIN
--Reply automatically.
INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0xf0,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘QX SPT100009 ‘ + @src_terminal_id),@link_id);

RETURN
END
註意:
1. service_id是需要退定的業務。
2. 由於是應答正向退定,所以registered_delivery的高4位是f。這個應答不需要收條,所以registered_delivery = 0xf0。
3. 內容必須填寫:
QX[空格]SPT100009[空格][空格][手機號碼]
4. SPDealResult系統缺省自動設置成0。
5. 如果退定成功,那麽如果再下發普通消息,網關會返回錯誤。 回頁首
如何測試反向點播業務?
測試反向點播業務是SP主動發送請求給網關。格式必須如下:
1. service_id是點播業務代碼。
2. registered_delivery的高4位必須為d,不需要收條。所以registered_delivery = 0xd0
3. 目標地址和計費地址為接收手機號碼。
4. msg_content必須使用如下格式:
DG[空格]1009[空格][空格][手機號碼]
5. SPDealResult缺省為0。

INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0xd0,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘DG 1009 ‘ + @src_terminal_id));

如果反向點播成功後,UMS2會接收到網關發送的SMGPDeliver數據包,其中會帶有link_id。然後利用這個link_id給用戶下發相關普通信息。註意:普通消息的registered_delivery的高4位必須是0。下發的SQL語句如下:

INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘1009‘,‘01‘,‘000100‘,0x01,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘普通消息‘ + @src_terminal_id),@link_id);
回頁首
如何測試反向定制業務?
測試反向定制業務的流程和測試反向點播的流程基本一致,僅僅是使用的指令有所差別。

這裏給出發送反向定制的例子。

INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0xd0,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘DG SPT100009 ‘ + @src_terminal_id));

再得到了網關反饋的link_id(在SMGPDeliver數據包內)以後,下發普通信息。
回頁首
如何測試反向退定業務?
測試反向退定業務是SP主動發送反向推定指令。發送的SQL如下:

INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0xd0,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘00000‘),@link_id);

註意:
1.service_id是需要退定的服務代碼。
2.registered_delivery 必須為0xd0。
3.msg_content必須是“00000”。
4.link_id是訂購的時候返回的link_id。

回頁首
SMGP協議錯誤代碼表
0 成功
1 系統忙
2 超過最大連接數
3-9 保留
10 消息結構錯
11 命令字錯
12 序列號重復
13-19 保留
20 IP地址錯
21 認證錯
22 版本太高
23-29 保留
30 非法消息類型(MsgType)
31 非法優先級(Priority)
32 非法資費類型(FeeType)
33 非法資費代碼(FeeCode)
34 非法短消息格式(MsgFormat)
35 非法時間格式
36 非法短消息長度(MsgLength)
37 有效期已過
38 非法查詢類別(QueryType)
39 路由錯誤
40 非法包月費/封頂費(FixedFee)
41 非法更新類型(UpdateType)
42 非法路由編號(RouteId)
43 非法服務代碼(ServiceId)
44 非法有效期(ValidTime)
45 非法定時發送時間(AtTime)
46 非法發送用戶號碼(SrcTermId)
47 非法接收用戶號碼(DestTermId)
48 非法計費用戶號碼(ChargeTermId)
49 非法CP 代碼
50 非預付費用戶
51 余額不足
52 非註冊用戶
53 非註冊CP
54 賬號不可用
55 扣費失敗
56-127 保留
128-254 廠家自定義
255 未知錯誤
回頁首
SMPP協議錯誤代碼表
1、由ESME提交到短消息中心時,短消息中心回復的錯誤代碼表:
#define smppEsmeROK_M 0 /* no error code given */
#define smppEsmeRInvMsgLen_M 1 /* Invalid Message Length */
#define smppEsmeRInvCmdLen_M 2 /* Invalid Command Length */
#define smppEsmeRInvCmdId_M 3 /* Invalid Command ID */
#define smppEsmeRInvBndSts_M 4 /* Invalid bind status */
#define smppEsmeRAlyBnd_M 5 /* Bind attempted when already bound */
#define smppEsmeRInvPrtFlg_M 6 /* Invalid priority flag */
#define smppEsmeRInvRegDlvFlg_M 7 /* Invalid registered-delivery flag */
#define smppEsmeRSysErr_M 8 /* SMSC system error */
#define smppEsmeRInvPar_M 9 /* Invalid parameter */
#define smppEsmeRInvSrcAdr_M 10 /* Invalid source address */
#define smppEsmeRInvDstAdr_M 11 /* Invalid destination address */
#define smppEsmeRInvMsgId_M 12 /* Invalid message-id */
#define smppEsmeRInvPaswd_M 13 /* Invalid password */
#define smppEsmeRInvPaswdLen_M 14 /* Invalid password length */
#define smppEsmeRInvSysIDSrv_M 15 /* Invalid System-ID */
#define smppEsmeRCntCanMsg_M 16 /* Cannot cancel a message */
#define smppEsmeRInvDatFmt_M 17 /* Invalid date format */
#define smppEsmeRCntRepMsg_M 18 /* Cannot replace a message */
#define smppEsmeRMsgQFul_M 19 /* Too many message in queue, at present */
#define smppEsmeRSerNotSup_M 20 /* Service not supported */
#define smppEsmeRInvRepAddr_M 22 /* Address Mismatch in Replacement attempt */
/* the following is added by shenm. at 99/11/16 */
#define smppEsmeRInvAreaCode_M 50 /* Invalid area code of ESME */
/*為固定電話增加*/
#define smppEsmeAuthFail_M 60 /*Authentication fail*/
#define smppEsmeDestUseBusy_M 61 /*destinantion user busy*/
#define smppEsmeMemCap_M 62 /*話機內存滿*/
#define smppEsmeRInvGwMsgId_M 63 /*無效的網關msgid*/
#define smppEsmeInstMsgIdFail_M 64 /*插入網關msgid失敗*/


#define smppEsmeRUnknownErr_M 0xFF /* Unknown Error */
回頁首
短消息中心下發給CTSI時,CTSI回復給短消息中心的錯誤代碼表
// new error code lide add 2002.05.08
#define smppCtsiUserAbsent 0x0400
#define smppCtsiUserBusy 0x0401
#define smppCtsiNoPart 0x0402
#define smppCtsiUserInvalid 0x0403
#define smppCtsiBlackList 0x0404
#define smppCtsiSysError 0x0405
#define smppCtsiMemCap 0x0406
#define smppCtsiProtocolError 0x0407
#define smppCtsiDataError 0x0408
#define smppCtsiDataMissing 0x0409
#define smppGateWayUserBusy 0x0410
回頁首
短消息中心收條處理
(1) 短消息中心在給ESME代理機deliver回執短消息時把esm_class置為xx0001xx,表示為回執短消息。ESME代理機向短消息中心submit回執短消息時,把submit的esm_class字段置為xx0010xx,表示為回執短消息。
(2) 回執短消息的信息包含在短消息消息包的字段short_message中,其格式如下:

字段 長度 數據類型 說明
id 10 C-Octet String 狀態報告對應原短消息的MsgID
sub 3 C-Octet String 取缺省值001
dlvrd 3 C-Octet String 取缺省值001
Submit_date 10 C-Octet String 短消息提交時間(格式:yymmddhhmm,例如010331200000)
done_date 10 C-Octet String 短消息下發時間(格式:yymmddhhmm,例如010331200000)
Stat 7 C-Octet String 短消息狀態(參見短信狀態表)
Err 3 C-Octet String 參見錯誤代碼表
Txt 20 Octet String 前3個字節,表示短消息長度(用ASCII碼表示)

短信狀態表:
狀態名 狀態值(字符串) 說明
DELIVERED DELIVRD 短消息轉發成功
EXPIRED EXPIRED 短消息超過有效期
DELETED DELETED 短消息已經被刪除
UNDELIVERABLE UNDELIV 短消息是不可轉發的
ACCEPTED ACCEPTD 短消息已經被最終用戶接收(為保持與SMPP兼容,保留)
UNKNOWN UNKNOWN 未知短消息狀態
REJECTED REJECTD 短消息被拒絕(為保持與SMPP兼容,保留)

錯誤代碼表
狀態值(字符串) 說明 對應狀態 command_status對應值 Command_status代碼
000 成功 DELIVRD ESME_ROK 0x00000000
001 用戶不能通信 EXPIRED ESME_RUSRABSENT 0x00000400
002 用戶忙 EXPIRED ESME_RUSRUSY 0x00000401
003 終端無此部件號 UNDELIV ESME_RNOPART 0x00000402
004 非法用戶 UNDELIV ESME_RUSRINVALID 0x00000403
005 用戶在黑名單內 UNDELIV ESME_RBLACKLIST 0x00000404
006 系統錯誤 UNDELIV ESME_RSYSERROR 0x00000405
007 用戶內存滿 EXPIRED ESME_RMEMCAP 0x00000406
008 非信息終端 UNDELIV ESME_RPROTOCOLERROR 0x00000407
009 數據錯誤 UNDELIV ESME_RDATAERROR 0x00000408
010 數據丟失 UNDELIV ESME_RDATAMISSING 0x00000409
999 未知錯誤 UNKNOWN ESME_RUNKNOWNERR 0x000000FF
回頁首
ISMAP錯誤代碼(返回給SP為 12××××)

類別 結果碼 描述
Success 0 Success 成功
Protocol error協議相關錯誤 General error通用錯誤 1 Length of PDU is invalid(greater than 30K or less than zero)消息長度非法
2 Failed to decode the PDU(lack of fields or field type invalid)消息解碼錯誤
6 Service enabler has not binded yet業務系統鏈接未建立
7 Timeout while waiting for the response message等待應答超時
8 Timeout while waiting for the confirmation message等待確認消息超時
Field error or others字段及其他相關錯誤 100 Field value is invalid(not expected or error)字段值無效


101 Source device type is out of range源設備類型無效
102 Source device id is incorrect源設備編號錯誤
103 Destination device type is out of range目的設備類型無效
104 Destination device id is incorrect目的設備編號錯誤

105 Timestamp field is in a bad format時間戳字段格式錯誤
106 Subscriber‘s ID is invalid用戶ID非法
107 MSISDN is invalid手機號碼非法
108 SP identifier is invalidSP ID非法
109 Service identifier is invalid業務ID非法
110 Service code(Access NO) is invalid.接入號非法
System error系統類錯誤 System error系統類錯誤 500 Disk read-write error磁盤讀寫錯誤
501 Network connection is abnormal網絡鏈接異常
502 Network error網絡故障
503 LICENSE file is illegalLICENSE不合法
504 Number of registered user is beyond the limitation of the LICENSE已超過LICENSE限定數量
505 System internal error 系統內部錯誤

506 Database error(Database connection broken, SQL syntax invalid)數據庫錯誤

Subscriber related error用戶相關錯誤 Subscriber related error用戶相關錯誤 1001 The subscriber does not exist用戶不存在
1002 The subscriber‘s status is stopped用戶狀態為停機狀態
1003 The subscriber owes payment用戶欠費
1004 The subscriber is in blacklist用戶已被列入黑名單
1005 用戶不屬於本平臺
1100 The specified service is not open to the subscriber業務對此用戶不開放
1103 The subscriber has already registered用戶已註冊
1104  The subscriber has not registered yet用戶未註冊
1105 Status of the subscriber is abnormal(not normal)用戶狀態異常
1106 Failed to authenticate the subscriber by password用戶密碼認證失敗
1107 Failed to generate a pseudo code偽碼生成失敗
1200 The subscription already exists定購關系已存在
1201 The subscription does not exist定購關系不存在
1202 Status of the subscription is abnormal定購關系狀態異常
1203 定購關系通知sp失敗
SP and service related errorSP和業務相關錯誤 SP related errorSP相關錯誤 2000 The SP does not existSP不存在
2001 Status of the SP is abnormalSP狀態異常
Service related error業務相關錯誤 2100 The service does not exist業務不存在
2101 The service is not open(Its status is abnormal)業務狀態異常
2200 The is no such type of service(SMS, MMS, etc.)業務類型不存在
2201 The service cannot be subscribed業務不能定購
2202 剩余使用量不足
Charging error計費相關錯誤 Charging error計費相關錯誤 3000 CDR format is wrongCDR格式錯誤
3001 The price is negative價格為負數
3002 The price format is wrong價格格式錯誤
3003 The price is out of range價格超界
3100 The subscribe is not a prepaid user用戶不是預付費用戶
3101 Balance of the subscribe is not enough用戶余額不足
3102 Failed to impact balance補款失敗
3103 There is no required charging information沒有對應的計費信息
3104 Failed to write a CDR寫CDR失敗
3105 The CDR is duplicatedCDR重復
3106 Failed to insert the CDR to databaseCDR寫數據庫失敗
3107 Price of the CDR is too highCDR中標識的價格太高
3108 Timeout while waiting for the SCP response等待SCP應答超時
3109 Failed to reload the charging matrix into memory計費矩陣更新失敗
BOSS Integer errorBOSS接口相關錯誤 BOSS Interface errorBOSS接口相關錯誤 4001 There is no subscriber‘s information in BOSSBOSS中無此用戶信息
Default Error 9999 Default Error缺省錯誤

回頁首
正向業務測試用全部SQL(For Sql Server)
DROP TRIGGER cmpp_dispatcher
GO

CREATE TRIGGER cmpp_dispatcher
ON cmpp_deliver
FOR INSERT AS

DECLARE @registered_delivery INT
DECLARE @src_terminal_id VARCHAR(50)
DECLARE @msg_content VARCHAR(255)
DECLARE @service_id VARCHAR(50)
DECLARE @link_id VARCHAR(50)
DECLARE @gateway_name VARCHAR(50)
DECLARE @prefix VARCHAR(50)

--Select parameter from inserted message.
SELECT
@registered_delivery = INSERTED.registered_delivery,
@src_terminal_id = INSERTED.src_terminal_id,
@service_id = INSERTED.service_id,
@msg_content = CONVERT(VARCHAR(255),INSERTED.msg_content),
@link_id = INSERTED.link_id,
@gateway_name = INSERTED.ih_gateway
FROM INSERTED

--Only process normal message.
IF (@registered_delivery <> 0) RETURN
--Print message.
PRINT ‘接收來自‘ + @src_terminal_id + ‘的消息:‘ + @msg_content

--Check message content.
IF @msg_content = ‘db‘ OR @msg_content = ‘DB‘
BEGIN
--Reply automatically.
INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘1009‘,‘00‘,‘000000‘,0x01,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘點播‘ + @src_terminal_id),@link_id);
RETURN
END

IF RIGHT(@msg_content,2) = ‘DZ‘
BEGIN
--Reply automatically.
INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0xf0,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘DG SPT100009 ‘ + @src_terminal_id),@link_id);

INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0x01,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘普通消息‘ + @src_terminal_id),@link_id);

RETURN
END

IF @msg_content = ‘00000‘
BEGIN
--Reply automatically.
INSERT INTO CMPP_SUBMIT
(service_id,fee_type,fee_code,registered_delivery,dest_terminal_id,fee_terminal_type,fee_terminal_id,msg_content,link_id)
VALUES
(‘SPT100009‘,‘03‘,‘000100‘,0xf0,@src_terminal_id,3,@src_terminal_id,convert(varbinary(255),‘QX SPT100009 ‘ + @src_terminal_id),@link_id);

RETURN
END

RETURN
回頁首
如何從SMGP 3.0平臺實施2.0平臺客戶的反向退定!
一般來說,反向退訂需要一個LinkID,而2.0平臺中是沒有的。在3.0中無LinkID直接退定,會返回錯誤。
但是SP在導入電信管理平臺前,需要提供一份需要導入的定購關系文件。然後用這個文件中自定義的LINKID下發反向取消。就可以解決這個問題。 回頁首
湖北省電信錯誤代碼表
505 系統錯誤
506 數據庫錯誤,沒找到記錄或其他錯誤
1001 用戶不存在
1002 用戶為停機狀態
1003 用戶欠費
1004 用戶被列入黑名單
1005 用戶狀態異常
2000 Sp不存在
2001 Sp狀態異常
2100 業務不存在
2101 業務狀態異常
1100 業務對此用戶不開放
2200 不能下發幫助消息
3103 沒有對應的計費信息
1201 定購關系不存在
9999 透傳(高信用度sp)
801 更新消費累計失敗
802 獲得區號失敗
803 讀取系統參數失敗
804 獲取指令類型失敗
805 臨時定購關系不存在
806 SLP執行存儲過程失敗
807 錯誤的指令解析
808 點播關系不存在
809 點播上下行不一致
810 超過允許下發點播次數或超時
811 計費分析錯誤
812 流程參數不正確
813 超過定購下發次數(02.01)

再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!希望你也加入到我們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshow

SMGP 3 0協議 多問多答