1、中国电信集团公司2023-08实行2023-08发布CP/SP开发-中国电信短消息网关协议(SMGP)CT/T SN RC1 CP/SP开发-SMGP V3.0.3CT中国电信公司标准目 录1合用范围22引用标准33缩略语44SMGP协议概述54.1定义54.2通信方式54.3协议应用及涉及的端标语75SMGP协议105.1数据类型105.2消息结构106参数定义236.1消息头参数描述236.2消息体必选参数描述256.3消息体可选参数描述407基于SMGP协议的API函数47附录A 基于SMGP协议的API函数说明(规范性附录)48A.1基本规定48A.2 API数据结构说明(以C语言为例
2、)49A.3 API函数说明51A.4配置SMGP API55A.5短消息的自动分割功能56A.6错误代码含义57附录B 短消息群发功能的实现(资料性附录)59附录C 修改历史记录59前 言本标准规定了短消息网关与其它网元之间进行短消息传输的接口协议。本标准是在SMGP协议V2.0的基础上,基于3G网络的短消息业务发展需求进行修订而成。本标准共包含3部分:1、SMGP基本协议;2、SMGP协议扩展计费接口;3、SMGP协议扩展电子商务接口。本文只描述了第1部分SMGP基本协议,第2部分和第3部分同SMGP协议V2.0。本标准起草单位:中国电信股份有限公司、中国电信股份有限公司上海研究院本标准重
3、要起草人:葛敏 周文君 顾丽丽 蒋力 董斌 施唯佳1 合用范围本协议合用于短消息网络上(固定网、移动网)短消息网关与其它网元之间进行短消息的传输。本协议合用于短消息网关、相关网元设备开发商及内容提供商。2 引用标准下列文献通过本文的参考而成为本规范的条款。凡是注日期的参考文献,其随后所有的修改单(不涉及勘误的内容)或修订版均不合用于本文,凡是不注日期的参考文献,其最新版本合用于本文。【1】Short Message Peer to Peer Protocol Specification【2】中国电信CDMA短消息网关设备规范v1.0.1【3】中国电信CDMA短消息网关测试规范v1.0.1【4】
4、中国电信综合业务管理平台ISMP接口规范_RC1.0.1_-SS接口3 缩略语缩略语英文全名中文全名ESMEExternal Short Message Entity外部短消息实体GNSGateway Name Server汇接网关SPService Provider服务提供商SMSCShort Message Service Center短消息业务中心SMGPShort Message Gateway Protocol短消息网关协议SMGWShort Message Gateway短消息网关SMPPShort Message Point to Point Protocol短消息点到点协议4
5、SMGP协议概述4.1 定义SMGP协议是SMGW与其它网元设备(除SMC外)进行短消息传输的接口协议。非SMC网元设备向SMGW发送或从SMGW接受短消息,这些非SMC网元设备称为ESME。4.2 通信方式SMGW与ESME之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,假如没有数据包发送,需要双方发链路检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完毕后,则断开此TCP连接,即每次TCP连接只完毕一对SMGP消息的发送。4.2.1 长连接通信双方以客户-服务器方式建立TCP连接,用于双方
6、信息的互相提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。参数C、T、N原则上应可配置,现阶段建议取值为:C=3分钟,T=60秒,N=3。通信双方之间的消息假如不能成功发送,应隔时间R进行重发,再连续发送N-1次后仍未发送成功则停发。现阶段建议取值为:R=60秒,N=3。通信双方之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。消息采用并发方式发送,加以滑动窗口流量控制,窗口大小
7、参数W可配置,现阶段建议为16,即接受方在应答前一次收到的消息最多不超过16条。长连接的操作流程举例如图1所示: . . . . . . 滑动窗口不大于WWSMGP消息1客户端服务器端SMGP消息2对SMGP消息1的响应对SMGP消息2的响应链路检测包 链路检测包响应建立TCP连接链路检测包 链路检测包响应拆除TCP连接 . . . . . . 图4.1 长连接操作流程4.2.2 短连接通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完毕。系统采用客户/服务器模式,操作以客户端驱动方式发起连接请求,完毕一次操作后关闭此连接。通信双方之间的消息发送后等待T秒后未收到响应,应立即
8、重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。短连接的操作流程举例如图2所示:对SMGP消息1的响应SMGP消息1建立TCP连接拆除TCP连接SMGP消息2对SMGP消息2的响应建立TCP连接拆除TCP连接 . . . . . . 客户端服务器端图4.2 短连接操作流程 4.3 协议应用及涉及的端标语SMGP协议在中国电信中的应用重要体现在两类短消息业务上:一类是固定网短消息业务,另一类是移动网短消息业务。4.3.1 固定网短消息业务图4.3 固定网短消息业务系统结构简图固定网短消息业务系统结构简图如图3所示。SMGP协议在固网短消息系统中应用情况如下:1
9、. 二级SMGW与SP二级SMGW与SP之间采用SMGP协议进行短消息的传输,端标语为8890,二级SMGW为服务器端,SP为客户端;2. 二级SMGW与一级SMGW二级SMGW与一级SMGW之间采用SMGP协议进行短消息的传输,端标语为8900,二级SMGW与一级SMGW互为客户/服务器端;二级SMGW与一级SMGW之间采用SMGP协议扩展计费接口(参见SMGP V2.0)进行计费信息的传输,端标语为8900,二级SMGW作为服务器端,一级SMGW作为客户端;3. 一级SMGW与SP一级SMGW与SP之间采用SMGP协议进行短消息的传输,端标语为8890,一级SMGW为服务器端,SP为客户端
10、;4. 二级SMGW和PHS预付费平台二级SMGW与PHS预付费平台之间采用SMGP协议扩展计费接口(参见SMGP V2.0)进行计费信息的传输,端标语为9100,预付费平台作为服务器端,二级SMGW作为客户端。4.3.2 移动网短消息业务GNSSMGWSMGWSMCSMC图4.4移动网短消息业务系统结构简图构图SMGPSMGPSPSPSMGPSMGPSMGP移动网移动网移动网终端移动网终端移动网短消息业务系统结构简图如图4所示。SMGP协议在移动网短消息系统中应用情况如下:1. SMGW与SP SMGW与SP之间采用SMGP协议进行短消息的传输,端标语为8890,SMGW为服务器端,SP为客
11、户端;2. SMGW与SMGW SMGW与SMGW之间采用SMGP协议进行短消息的传输,端标语为8900,SMGW与SMGW互为客户/服务器端;3. SMGW与GNS SMGW与GNS之间采用SMGP协议进行消息传输,端标语为8901,SMGW为服务器端,GNS为客户端。5 SMGP协议5.1 数据类型5.1.1 基本数据类型Integer无符号整数Octet String不强制以0x00结尾的定长字符串。当位数局限性时,在不明确注明的情况下,应左对齐,右补0x00。在明确注明的情况下,以该字段的明确注明为准。5.1.2 可选参数可选参数采用TLV(Tag、Length、Value)形式定义,
12、每个可选参数的Tag、Length、Value的定义见6.3节。字段长度(字节)数据类型说明Tag2Integer字段的标签,用于唯一标记可选参数Length2Integer字段的长度Value可变长度可变类型字段内容5.2 消息结构项目说明Message Header消息头(所有消息公共包头)Message Body消息体5.2.1 消息头结构字段长度(字节)数据类型说明参考PacketLength4Integer数据包长度6.1.1RequestID4Integer请求标记6.1.2SequenceID4Integer消息流水号6.1.35.2.2 消息体结构5.2.2.1 登录操作(Lo
13、gin)Login操作的目的是客户端向服务器端注册作为一个合法客户端身份,若注册成功后即建立了应用层的连接,此后客户端可以与此服务器端进行消息的接受和发送。服务器端以Login_Resp消息响应客户端的请求。5.2.2.1.1 Login字段长度(字节)数据类型说明参考必选参数ClientID8Octet String客户端用来登录服务器端的用户账号。6.2.1AuthenticatorClient16Octet String客户端认证码,用来鉴别客户端的合法性。6.2.2LoginMode1Integer客户端用来登录服务器端的登录类型。6.2.3TimeStamp4Integer时间戳6.
14、2.4ClientVersion1Integer客户端支持的协议版本号6.2.55.2.2.1.2 Login_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返回结果6.2.6AuthenticatorServer16Octet String服务器端返回给客户端的认证码6.2.7ServerVersion1Integer服务器端支持的最高版本号6.2.85.2.2.2 SP向SMGW提交短消息的操作(Submit)5.2.2.2.1 Submit字段长度(字节)数据类型说明参考必选参数MsgType1Integer短消息类型6.2.9NeedReport1In
15、tegerSP是否规定返回状态报告6.2.10Priority1Integer短消息发送优先级6.2.11ServiceID10Octet String业务代码6.2.12FeeType2Octet String收费类型6.2.13FeeCode6Octet String资费代码6.2.14FixedFee6Octet String包月费/封顶费6.2.15MsgFormat1Integer短消息格式6.2.16ValidTime17Octet String短消息有效时间6.2.17AtTime17Octet String短消息定期发送时间6.2.18SrcTermID21Octet Stri
16、ng短信息发送方号码6.2.19ChargeTermID21Octet String计费用户号码6.2.20DestTermIDCount1Integer短消息接受号码总数6.2.21DestTermID21*DestTermCountOctet String*短消息接受号码6.2.22MsgLength1Integer短消息长度6.2.23MsgContentMsgLengthOctet String短消息内容6.2.24Reserve8Octet String保存6.2.25可选参数字段数据类型说明参考TP_pidTLVGSM协议类型6.3.2TP_udhiTLVGSM协议类型6.3.3L
17、inkIDTLV交易标记6.3.4MsgSrcTLV信息内容的来源6.3.17ChargeUserTypeTLV计费用户类型6.3.5ChargeTermTypeTLV计费用户的号码类型6.3.6ChargeTermPseudoTLV计费用户的伪码6.3.7DestTermTypeTLV短消息接受方号码的类型6.3.8DestTermPseudoTLV短消息接受方的伪码6.3.9PkTotalTLV相同MsgID的消息总条数6.3.10PkNumberTLV相同MsgID的消息序号6.3.11SubmitMsgTypeTLVSP发送的消息类型6.3.12SPDealResultTLVSP对消息
18、的解决结果6.3.13MServiceIDTLV业务代码(用于移动网业务)6.3.19短信平台支持短信的群发功能,关于短信群发功能的实现请参阅“附录B 短消息群发功能的实现”。5.2.2.2.2 Submit_Resp字段长度(字节)数据类型说明参考必选参数MsgID10Octet String短消息流水号6.2.26Status4Integer请求返回结果6.2.65.2.2.3 SMGW向SP下发短消息的操作(Deliver)5.2.2.3.1 Deliver字段长度(字节)数据类型说明参考必选参数MsgID10Octet String短消息流水号6.2.26IsReport1Intege
19、r是否为状态报告6.2.27MsgFormat1Integer短消息格式6.2.16RecvTime14Octet String短消息接受时间6.2.28SrcTermID21Octet String短消息发送号码6.2.19DestTermID21Octet String短消息接受号码6.2.22MsgLength1Integer短消息长度6.2.23MsgContentMsgLengthOctet String短消息内容6.2.24Reserve8Octet String保存6.2.25可选参数字段数据类型说明参考TP_pidTLVGSM协议类型6.3.2TP_udhiTLVGSM协议类型
20、6.3.3LinkIDTLV交易标记6.3.4SrcTermTypeTLV短消息发送方的号码类型6.3.14SrcTermPseudoTLV短消息发送方的伪码6.3.15SubmitMsgTypeTLVSP发送的消息类型6.3.12SPDealResultTLVSP对消息的解决结果6.3.135.2.2.3.2 Deliver_Resp字段长度(字节)数据类型说明参考必选参数MsgID10Octet String短消息流水号6.2.26Status4Integer请求返回结果6.2.65.2.2.4 链路检测操作(Active_Test)本操作仅合用于通信双方采用长连接通信方式时用于保持连接。
21、5.2.2.4.1 Active_Test无消息体。5.2.2.4.2 Active_Test_Resp无消息体。5.2.2.5 请求关闭连接的操作(Exit)Exit操作的目的是客户端或服务器端基于某些因素决定拆除当前的应用层连接而发起的操作。此操作完毕后客户端与服务器端的应用层连接被释放,此后通信时应由客户端重新发起Login操作。5.2.2.5.1 Exit无消息体。5.2.2.5.2 Exit_Resp无消息体。5.2.2.6 SP向SMGW查询短消息发送状态的操作(Query,可选)5.2.2.6.1 Query字段长度(字节)数据类型说明参考必选参数QueryTime8Octet
22、String查询时间6.2.33QueryType1Integer查询类别6.2.34QueryCode10Octet String查询码6.2.355.2.2.6.2 Query_Resp字段长度(字节)数据类型说明参考必选参数QueryTime8Octet String查询时间6.2.33QueryType1Integer查询类别6.2.34QueryCode10Octet String查询码(业务类型)6.2.35MT_TLMsg4Integer接受短消息总数6.2.36MT_Tlusr4Integer接受用户总数6.2.37MT_Scs4Integer成功转发数量6.2.38MT_WT
23、4Integer待转发数量6.2.39MT_FL4Integer转发失败数量6.2.40MO_Scs4Integer成功送达数量6.2.41MO_WT4Integer待送达数量6.2.42MO_FL4Integer送达失败数量6.2.43Reverse8Octet String保存6.2.255.2.2.7 SMGW向GNS查询终端路由的操作(Query_TE_Route,可选)5.2.2.7.1 Query_TE_Route字段长度(字节)数据类型说明参考必选参数SrcGatewayID6Octet String源网关代码6.2.44QueryTermID21Octet String查询号码
24、6.2.455.2.2.7.2 Query_TE_Route_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返回结果6.2.6RouteID4Integer路由编号6.2.46DestGatewayID6Octet String目的网关代码6.2.47DestGatewayIP15Octet String目的网关IP地址6.2.48DestGatewayPort2Integer目的网关IP端口6.2.49TermRangeID10Octet String路由号码段6.2.50ProvinceCode4Octet String终端所属省代号6.2.51UserT
25、ype1Integer用户类型(该字段保存)6.2.52Time14Octet String时间戳6.2.535.2.2.8 SMGW向GNS查询SP路由的操作(Query_SP_Route,可选)5.2.2.8.1 Query_SP_Route字段长度(字节)数据类型说明参考必选参数SrcGatewayID6Octet String源网关代码6.2.44QueryTermID21Octet String查询号码6.2.455.2.2.8.2 Query_SP_Route_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返回结果6.2.6RouteID4Inte
26、ger路由编号6.2.46DestGatewayID6Octet String目的网关代码6.2.47DestGatewayIP15Octet String目的网关IP地址6.2.48DestGatewayPort2Integer目的网关IP端口6.2.49SPID8Octet StringSP的公司代码6.2.54SPCode21Octet StringSP的服务代码6.2.55SPAccessType1IntegerSP接入类型6.2.56SPType1IntegerSP类型6.2.57Time14Octet String时间戳6.2.535.2.2.9 SMGW向GNS获取所有终端路由的
27、操作(Get_All_TE_Route,可选)5.2.2.9.1 Get_All_TE_Route字段长度(字节)数据类型说明参考必选参数SrcGatewayID6Octet String源网关代码6.2.44RouteType4Octet String路由类型6.2.58LastRouteID4Integer已经接受的上一条路由编号6.2.595.2.2.9.2 Get_All_TE_Route_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返回结果6.2.6RouteID4Integer路由编号6.2.46DestGatewayID6Octet Strin
28、g目的网关代码6.2.47DestGatewayIP15Octet String目的网关IP地址6.2.48DestGatewayPort2Integer目的网关IP端口6.2.49TermRangeID10Octet String路由号码段6.2.50ProvinceCode4Octet String终端所属省代号6.2.51UserType1Integer用户类型(该字段保存)6.2.52RouteTotal4Integer返回路由总数6.2.60RouteNumber4Integer当前返回的路由序号6.2.61Time14Octet String时间戳6.2.535.2.2.10 SM
29、GW向GNS获取所有SP路由的操作(Get_All_SP_Route,可选)5.2.2.10.1 Get_All_SP_Route字段长度(字节)数据类型说明参考必选参数SrcGatewayID6Octet String源网关代码6.2.44RouteType4Octet String路由类型6.2.58LastRouteID4Integer已经接受的上一条路由编号6.2.595.2.2.10.2 Get_All_SP_Route_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返回结果6.2.6RouteID4Integer路由编号6.2.46DestGate
30、wayID6Octet String目的网关代码6.2.47DestGatewayIP15Octet String目的网关IP地址6.2.48DestGatewayPort2Integer目的网关IP端口6.2.49SPID8Octet StringSP的公司代码6.2.54SPCode21Octet StringSP的服务代码6.2.55SPAccessType1IntegerSP接入类型6.2.56SPType1IntegerSP类型6.2.57RouteTotal4Integer返回路由总数6.2.60RouteNumber4Integer当前返回的路由序号6.2.61Time14Oct
31、et String时间戳6.2.535.2.2.11 SMGW向GNS更新终端路由的操作(Update_TE_Route,可选)5.2.2.11.1 Update_TE_Route字段长度(字节)数据类型说明参考必选参数UpdateType1Integer更新类型6.2.62RouteID4Integer路由编号6.2.46DestGatewayID6Octet String目的网关代码6.2.47DestGatewayIP15Octet String目的网关IP地址6.2.48DestGatewayPort2Integer目的网关IP端口6.2.49TermRangeID10Octet St
32、ring路由号码段6.2.50ProvinceCode4Octet String终端所属省代号6.2.51UserType1Integer用户类型(该字段保存)6.2.525.2.2.11.2 Update_TE_Route_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返回结果6.2.6RouteID4Integer路由编号6.2.46Time14Octet String时间戳6.2.535.2.2.12 SMGW向GNS更新SP路由的操作(Update_SP_Route,可选)5.2.2.12.1 Update_SP_Route字段长度(字节)数据类型说明
33、参考必选参数UpdateType1Integer更新类型6.2.62RouteID4Integer路由编号6.2.46DestGatewayID6Octet String目的网关代码6.2.47DestGatewayIP15Octet String目的网关IP地址6.2.48DestGatewayPort2Integer目的网关IP端口6.2.49SPID8Octet StringSP的公司代码6.2.54SPCode21Octet StringSP的服务代码6.2.55SPAccessType1IntegerSP接入类型6.2.56SPType1IntegerSP类型6.2.575.2.2.
34、12.2 Update_SP_Route_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返回结果6.2.6RouteID4Integer路由编号6.2.46Time14Octet String时间戳6.2.535.2.2.13 GNS向SMGW更新终端路由的操作(Push_Update_TE_Route,可选)5.2.2.13.1 Push_Update_TE_Route字段长度(字节)数据类型说明参考必选参数UpdateType1Integer更新类型6.2.62RouteID4Integer路由编号6.2.46DestGatewayID6Octet Str
35、ing目的网关代码6.2.47DestGatewayIP15Octet String目的网关IP地址6.2.48DestGatewayPort2Integer目的网关IP端口6.2.49TermRangeID10Octet String路由号码段6.2.50ProvinceCode4Octet String终端所属省代号6.2.51UserType1Integer用户类型(该字段保存)6.2.52Time14Octet String时间戳6.2.535.2.2.13.2 Push_Update_TE_Route_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返
36、回结果6.2.65.2.2.14 GNS向SMGW更新SP路由的操作(Push_Update_SP_Route,可选)5.2.2.14.1 Push_Update_SP_Route字段长度(字节)数据类型说明参考必选参数UpdateType1Integer更新类型6.2.62RouteID4Integer路由编号6.2.46DestGatewayID6Octet String目的网关代码6.2.47DestGatewayIP15Octet String目的网关IP地址6.2.48DestGatewayPort2Integer目的网关IP端口6.2.49SPID8Octet StringSP的公
37、司代码6.2.54SPCode21Octet StringSP的服务代码6.2.55SPAccessType1IntegerSP接入类型6.2.56SPType1IntegerSP类型6.2.57Time14Octet String时间戳6.2.535.2.2.14.2 Push_Update_SP_Route_Resp字段长度(字节)数据类型说明参考必选参数Status4Integer请求返回结果6.2.66 参数定义6.1 消息头参数描述6.1.1 PacketLengthSMGP数据包长度,指包头和包体的长度之和。单位是“字节”。6.1.2 RequestId请求标记表达SMGP数据包的
38、类型,请求包的请求标记和应答包的请求标记一一相应。SMGP协议的请求标记定义如下:请求名称请求标记说明Login0x00000001客户端登录Login_Resp0x80000001客户端登录应答Submit0x00000002提交短消息Submit_Resp0x80000002提交短消息应答Deliver0x00000003下发短消息Deliver_Resp0x80000003下发短消息应答Active_Test0x00000004链路检测Active_Test_Resp0x80000004链路检测应答Forward0x00000005短消息前转Forward_Resp0x80000005短
39、消息前转应答Exit0x00000006退出请求Exit_Resp0x80000006退出应答Query0x00000007SP记录查询Query_Resp0x80000007SP记录查询应答Query_TE_Route0x00000008查询TE路由Query_TE_Route_Resp0x80000008查询TE路由应答Query_SP_Route0x00000009查询SP路由Query_SP_Route_Resp0x80000009查询SP路由应答Payment_Request0x0000000A扣款请求(用于预付费系统,参见增值业务计费方案)Payment_Request_Resp0x8000000A扣款请求响应(用于预付费系统,参见增值业务计费方案,下同)Payment_Affirm0x0000000B扣款确认(用于预付费系统,参见增值业务计费方案)Payment_Affirm_Resp0x8000000B扣款