SMGP 3 0協議 多問多答
阿新 • • 發佈:2019-01-24
臨時 query 使用 狀態 ont arch top one 原來
內容列表 | |
---|---|
|
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協議 多問多答