本规范规定了以下三方面的内容:
1)
业务提供商与互联网短信网关之间的接口协议;
2)
互联网短信网关之间的接口协议;
3)
互联网短信网关与汇接网关之间的接口协议。
本规范适用于各SP和ISMG、GNS的开发厂商。
下列标准所包含的条文,通过在本标准中引用而成为本标准的条文。本标准出版时,所示版本均为有效。所有标准都会被修订,使用本标准的各方应探讨使用下列标准最新版本的可能性。
《SMPP》
《移动梦网短信业务技术方案》
英文缩写
|
英文全称
|
说明
|
ISMG
|
Intenet Short Message Gateway
|
互联网短信网关
|
DSMP
|
Data Service Manage Platform
|
数据业务管理平台
|
SMPP
|
Short Message Peer to Peer
|
短消息点对点协议
|
CMPP
|
China
Mobile
Peer to Peer
|
中国移动点对点协议
|
SMSC
|
Short
Message
Service
Center
|
短消息中心
|
GNS
|
Gateway Name Server
|
网关名称服务器(汇接网关)
|
SP
|
Service Provider
|
业务提供者
|
ISMG_Id
|
|
网关代码:
0XYZ01~0XYZ99
,其中
XYZ
为省会区号,位数不足时左补零,如北京编号为
1
的网关代码为
001001
,江西编号为
1
的网关代码为
079101
,依此类推
|
SP_Id
|
|
SP
的企业代码:网络中
SP
地址和身份的标识、地址翻译、计费、结算等均以企业代码为依据。企业代码以数字表示,共
6
位,从“
9XY000
”至“
9XY999
”,其中“
XY
”为各移动公司代码
|
SP_Code
|
|
SP
的服务代码:服务代码是在使用短信方式的上行类业务中,提供给用户使用的服务提供商代码。服务代码以数字表示,全国业务服务代码长度为
4
位,即“
1000
”-“
9999
”;本地业务服务代码长度统一为
5
位,即“
01000
”-“
09999
”;信产部对新的
SP
的服务代码分配提出了新的要求,要求以“
1061
”-“
1069
”作为前缀,目前中国移动进行了如下分配:
1062
:用于省内
SP
服务代码
1066
:用于全国
SP
服务代码
其它号段保留。
|
Service_Id
|
|
SP
的业务类型,数字、字母和符号的组合,由
SP
自定,如图片传情可定为
TPCQ
,股票查询可定义为
11
|
图1
互联网短信网关组网结构
如图1所示,互联网短信网关(ISMG)是业务提供商(SP)与移动网内短信中心之间的中介实体,互联网短信网关一方面负责接收SP发送给移动用户的信息和提交给短信中心。另一方面,移动用户点播SP业务的信息将由短信中心通过互联网短信网关发给SP。另外,为了减轻短信中心的信令负荷,互联网短信网关还应根据路由原则将SP提交的信息转发到相应的互联网短信网关。互联网短信网关通过向汇接网关(GNS)查询的方式获得网关间的转发路由信息。
另外,ISMG还必须与数据业务管理平台DSMP进行连接,在业务流程中对用户、业务以及定购关系等进行鉴权并对业务进行批价。
CMPP
协议主要提供以下两类业务操作:
(1)短信发送(Short
Message Mobile Originate,SM MO)
详细的流程请参考《移动梦网短信业务信令流程规范V3.0.0》;
(2) 短信接收(Short Message
Mobile Terminated,SM MT)
详细的流程请参考《移动梦网短信业务信令流程规范V3.0.0》;
CMPP
协议以TCP/IP作为底层通信承载,具体结构由图4所示:
图2
CMPP
协议栈
各网元之间共有两种连接方式:长连接和短连接。所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发链路检测包以维持此连接。短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接,即每次TCP连接只完成一对CMPP消息的发送。
现阶段,要求ISMG之间必须采用长连接的通信方式,建议SP与ISMG之间采用长连接的通信方式。
通信双方以客户-服务器方式建立TCP连接,用于双方信息的相互提交。当信道上没有数据传输时,通信双方应每隔时间C发送链路检测包以维持此连接,当链路检测包发出超过时间T后未收到响应,应立即再发送链路检测包,再连续发送N-1次后仍未得到响应则断开此连接。
参数C、T、N原则上应可配置,现阶段建议取值为:C=3分钟,T=60秒,N=3。
网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。
消息采用并发方式发送,加以滑动窗口流量控制,窗口大小参数W可配置,现阶段建议为16,即接收方在应答前一次收到的消息最多不超过16条。
长连接的操作流程举例如图5所示:
图3
长连接操作流程
通信双方以客户-服务器方式建立TCP连接,应答与请求在同一个连接中完成。系统采用客户/服务器模式,操作以客户端驱动方式发起连接请求,完成一次操作后关闭此连接。
网关与SP之间、网关之间的消息发送后等待T秒后未收到响应,应立即重发,再连续发送N-1次后仍未得到响应则停发。现阶段建议取值为:T=60秒,N=3。
短连接的操作流程举例如图6所示:
图4
短连接操作流程
端口号
|
应用
|
7890
|
长连接(
SP
与网关间)
|
7900
|
短连接(
SP
与网关间)
|
7930
|
长连接(网关之间)
|
9168
|
短连接(短信网关与汇接网关之间)
|
在SP与ISMG之间、SMSC与ISMG之间及ISMG之间的交互过程中均采用异步方式,即任一个网元在收到请求消息后应立即回送响应消息。举例如图7所示:
图5
异步交互方式示意图
Unsigned Integer
|
无符号整数
|
Integer
|
整数,可为正整数、负整数或零
|
Octet String
|
定长字符串,位数不足时,如果左补
0
则补
ASCII
表示的零以填充,如果右补
0
则补二进制的零以表示字符串的结束符
|
项目
|
说明
|
Message Header
|
消息头
(
所有消息公共包头
)
|
Message Body
|
消息体
|
字段名
|
字节数
|
类型
|
描述
|
Total_Length
|
4
|
Unsigned Integer
|
消息总长度
(
含消息头及消息体
)
|
Command_Id
|
4
|
Unsigned Integer
|
命令或响应类型
|
Sequence_Id
|
4
|
Unsigned Integer
|
消息流水号
,
顺序累加
,
步长为
1,
循环使用(一对请求和应答消息的流水号必须相同)
|
SP
为客户端,向作为服务器端的
ISMG
发起连接请求,在通过身份验证之后
SP
与
ISMG
之间方可进行数据传输。
8.4.1
SP
请求连接到
ISMG
(
CMPP_CONNECT
)操作
CMPP_CONNECT
操作的目的是
SP
向
ISMG
注册作为一个合法
SP
身份,若注册成功后即建立了应用层的连接,此后
SP
可以通过此
ISMG
接收和发送短信。
ISMG
以
CMPP_CONNECT_RESP
消息响应
SP
的请求。
字段名
|
字节数
|
属性
|
描述
|
Source_Addr
|
6
|
Octet String
|
源地址,此处为
SP_Id
,即
SP
的企业代码。
|
AuthenticatorSource
|
16
|
Octet String
|
用于鉴别源地址。其值通过单向
MD5 hash
计算得出,表示如下:
AuthenticatorS
ource
=
MD5
(
Source_Addr+9
字节的
0 +shared secret+timestamp
)
Shared secret
由中国移动与源地址实体事先商定,
timestamp
格式为:
MMDDHHMMSS
,即月日时分秒,
10
位。
|
Version
|
1
|
Unsigned Integer
|
双方协商的版本号
(
高位
4bit
表示主版本号
,
低位
4bit
表示次版本号
)
,对于
3.0
的版本,高
4bit
为
3
,低
4
位为
0
|
Timestamp
|
4
|
Unsigned Integer
|
时间戳的明文
,
由客户端产生
,
格式为
MMDDHHMMSS
,即月日时分秒,
10
位数字的整型,右对齐
。
|
字段名
|
字节数
|
属性
|
描述
|
Status
|
4
|
Unsigned Integer
|
状态
0
:正确
1
:消息结构错
2
:非法源地址
3
:认证错
4
:版本太高
5~
:其他错误
|
AuthenticatorISMG
|
16
|
Octet String
|
ISMG
认证码,用于鉴别
ISMG
。
其值通过单向
MD5
hash
计算得出,表示如下:
AuthenticatorISMG =MD5
(
Status+AuthenticatorS
ource
+shared secret
),
Shared secret
由中国移动与源地址实体事先商定,
AuthenticatorSource
为源地址实体发送给
ISMG
的对应消息
CMPP_Connect
中的值。
认证出错时,此项为空。
|
Version
|
1
|
Unsigned Integer
|
服务器支持的最高版本号,对于
3.0
的版本,高
4bit
为
3
,低
4
位为
0
|
8.4.2
SP
或
ISMG
请求拆除连接(
CMPP_TERMINATE
)操作
CMPP_TERMINATE
操作的目的是
SP
或
ISMG
基于某些原因决定拆除当前的应用层连接而发起的操作。此操作完成后
SP
与
ISMG
之间的应用层连接被释放,此后
SP
若再要与
ISMG
通信时应发起
CMPP_CONNECT
操作。
ISMG
或
SP
以
CMPP_TERMINATE_RESP
消息响应请求。
无消息体。
无消息体。
8.4.3
SP
向
ISMG
提交短信(
CMPP_SUBMIT
)操作
CMPP_SUBMIT
操作的目的是
SP
在与
ISMG
建立应用层连接后向
ISMG
提交短信。
ISMG
以
CMPP_SUBMIT_RESP
消息响应。
字段名
|
字节数
|
属性
|
描述
|
Msg_Id
|
8
|
Unsigned Integer
|
信息标识。
|
Pk_total
|
1
|
Unsigned Integer
|
相同
Msg_Id
的信息总条数,从
1
开始。
|
Pk_number
|
1
|
Unsigned Integer
|
相同
Msg_Id
的信息序号,从
1
开始。
|
Registered_Delivery
|
1
|
Unsigned Integer
|
是否要求返回状态确认报告:
0
:不需要;
1
:需要。
|
Msg_level
|
1
|
Unsigned Integer
|
信息级别。
|
Service_Id
|
10
|
Octet String
|
业务标识,是数字、字母和符号的组合。
|
Fee_UserType
|
1
|
Unsigned Integer
|
计费用户类型字段:
0
:对目的终端
MSISDN
计费;
1
:对源终端
MSISDN
计费;
2
:对
SP
计费;
3
:表示本字段无效,对谁计费参见
Fee_terminal_Id
字段。
|
Fee_terminal_Id
|
32
|
Octet String
|
被计费用户的号码,当
Fee_UserType
为
3
时该值有效,当
Fee_UserType
为
0
、
1
、
2
时该值无意义。
|
Fee_terminal_type
|
1
|
Unsigned Integer
|
被计费用户的号码类型,
0
:真实号码;
1
:伪码。
|
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
:含
GBK
汉字。。。。。。
|
Msg_src
|
6
|
Octet String
|
信息内容来源
(SP_Id)
。
|
FeeType
|
2
|
Octet String
|
资费类别:
01
:对“计费用户号码”免费;
02
:对“计费用户号码”按条计信息费;
03
:对“计费用户号码”按包月收取信息费。
|
FeeCode
|
6
|
Octet String
|
资费代码(以分为单位)。
|
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
个用户
)
。
|
Dest_terminal_Id
|
32*DestUsr_tl
|
Octet String
|
接收短信的
MSISDN
号码。
|
Dest_terminal_type
|
1
|
Unsigned Integer
|
接收短信的用户的号码类型,
0
:真实号码;
1
:伪码。
|
Msg_Length
|
1
|
Unsigned Integer
|
信息长度
(Msg_Fmt
值为
0
时:
<160
个字节;其它
<=140
个字节
)
,取值大于或等于
0
。
|
Msg_Content
|
Msg_length
|
Octet String
|
信息内容。
|
LinkID
|
20
|
Octet String
|
点播业务使用的
LinkID
,非点播类业务的
MT
流程不使用该字段。
|
系统应该支持短信的群发功能,关于短信群发功能的实现请参阅“附录
1
短信群发功能的实现”。
字段名
|
字节数
|
属性
|
描述
|
Msg_Id
|
8
|
Unsigned Integer
|
信息标识,生成算法如下:
采用
64
位(
8
字节)的整数:
(1)
时间(格式为
MMDDHHMMSS
,即月日时分秒):
bit64~bit39
,其中
bit64~bit61
:月份的二进制表示;
bit60~bit56
:日的二进制表示;
bit55~bit51
:小时的二进制表示;
bit50~bit45
:分的二进制表示;
bit44~bit39
:秒的二进制表示;
(2)
短信网关代码:
bit38~bit17
,把短信网关的代码转换为整数填写到该字段中;
(3)
序列号:
bit16~bit1
,顺序增加,步长为
1
,循环使用。
各部分如不能填满,左补零,右对齐。
(
SP
根据请求和应答消息的
Sequence_Id
一致性就可得到
CMPP_Submit
消息的
Msg_Id
)
|
Result
|
4
|
Unsigned Integer
|
结果:
0
:正确;
1
:消息结构错;
2
:命令字错;
3
:消息序号重复;
4
:消息长度错;
5
:资费代码错;
6
:超过最大信息长;
7
:业务代码错;
8
:流量控制错;
9
:本网关不负责服务此计费号码;
10
:
Src_Id
错误;
11
:
Msg_src
错误;
12
:
Fee_terminal_Id
错误;
13
:
Dest_terminal_Id
错误;
……
|
8.4.4
SP
向
ISMG
查询发送短信状态(
CMPP_QUERY
)操作
CMPP_QUERY
操作的目的是
SP
向
ISMG
查询某时间的业务统计情况,可以按总数或按业务代码查询。
ISMG
以
CMPP_QUERY_RESP
应答。
字段名
|
字节数
|
属性
|
描述
|
Time
|
8
|
Octet String
|
时间
YYYYMMDD(
精确至日
)
。
|
Query_Type
|
1
|
Unsigned Integer
|
查询类别:
0
:总数查询;
1
:按业务类型查询。
|
Query_Code
|
10
|
Octet String
|
查询码。
当
Query_Type
为
0
时,此项无效;当
Query_Type
为
1
时,此项填写业务类型
Service_Id.
。
|
Reserve
|
8
|
Octet String
|
保留。
|
字段名
|
字节数
|
属性
|
描述
|
Time
|
8
|
Octet String
|
时间
(
精确至日
)
。
|
Query_Type
|
1
|
Unsigned Integer
|
查询类别:
0
:总数查询;
1
:按业务类型查询。
|
Query_Code
|
10
|
Octet String
|
查询码。
|
MT_TLMsg
|
4
|
Unsigned Integer
|
从
SP
接收信息总数。
|
MT_Tlusr
|
4
|
Unsigned Integer
|
从
SP
接收用户总数。
|
MT_Scs
|
4
|
Unsigned Integer
|
成功转发数量。
|
MT_WT
|
4
|
Unsigned Integer
|
待转发数量。
|
MT_FL
|
4
|
Unsigned Integer
|
转发失败数量。
|
MO_Scs
|
4
|
Unsigned Integer
|
向
SP
成功送达数量。
|
MO_WT
|
4
|
Unsigned Integer
|
向
SP
待送达数量。
|
MO_FL
|
4
|
Unsigned Integer
|
向
SP
送达失败数量。
|
8.4.5
ISMG
向
SP
送交短信(
CMPP_DELIVER
)操作
CMPP_DELIVER
操作的目的是
ISMG
把从短信中心或其它
ISMG
转发来的短信送交
SP
,
SP
以
CMPP_DELIVER_RESP
消息回应。
字段名
|
字节数
|
属性
|
描述
|
Msg_Id
|
8
|
Unsigned
Integer
|
信息标识。
生成算法如下:
采用
64
位(
8
字节)的整数:
(1)
时间(格式为
MMDDHHMMSS
,即月日时分秒):
bit64~bit39
,其中
bit64~bit61
:月份的二进制表示;
bit60~bit56
:日的二进制表示;
bit55~bit51
:小时的二进制表示;
bit50~bit45
:分的二进制表示;
bit44~bit39
:秒的二进制表示;
(2)
短信网关代码:
bit38~bit17
,把短信网关的代码转换为整数填写到该字段中;
(3)
序列号:
bit16~bit1
,顺序增加,步长为
1
,循环使用。
各部分如不能填满,左补零,右对齐。
|
Dest_Id
|
21
|
Octet
String
|
目的号码。
SP
的服务代码,一般
4--6
位,或者是前缀为服务代码的长号码;该号码是手机用户短消息的被叫号码。
|
Service_Id
|
10
|
Octet
String
|
业务标识,是数字、字母和符号的组合。
|
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
汉字。
|
Src_terminal_Id
|
32
|
Octet
String
|
源终端
MSISDN
号码(状态报告时填为
CMPP_SUBMIT
消息的目的终端号码)。
|
Src_terminal_type
|
1
|
Unsigned
Integer
|
源终端号码类型,
0
:真实号码;
1
:伪码。
|
Registered_Delivery
|
1
|
Unsigned
Integer
|
是否为状态报告:
0
:非状态报告;
1
:状态报告。
|
Msg_Length
|
1
|
Unsigned
Integer
|
消息长度,
取值大于或等于
0
。
|
Msg_Content
|
Msg_length
|
Octet
String
|
消息内容。
|
LinkID
|
20
|
Octet
String
|
点播业务使用的
LinkID
,非点播类业务的
MT
流程不使用该字段。
|
当
ISMG
向
SP
送交状态报告时,信息内容字段(
Msg_Content
)格式定义如下:
字段名
|
字节数
|
属性
|
描述
|
Msg_Id
|
8
|
Unsigned Integer
|
信息标识。
SP
提交短信(
CMPP_SUBMIT
)操作时,与
SP
相连的
ISMG
产生的
Msg_Id
。
|
Stat
|
7
|
Octet String
|
发送短信的应答结果,含义详见表一。
SP
根据该字段确定
CMPP_SUBMIT
消息的处理状态。
|
Submit_time
|
10
|
Octet String
|
YYMMDDHHMM
(
YY
为年的后两位
00-99
,
MM
:
01-12
,
DD
:
01-31
,
HH
:
00-23
,
MM
:
00-59
)。
|
Done_time
|
10
|
Octet String
|
YYMMDDHHMM
。
|
Dest_terminal_Id
|
32
|
Octet String
|
目的终端
MSISDN
号码
(SP
发送
CMPP_SUBMIT
消息的目标终端
)
。
|
SMSC_sequence
|
4
|
Unsigned Integer
|
取自
SMSC
发送状态报告的消息体中的消息标识。
|
表一
Stat
字段定义
Message
State
|
Final Message States
|
Description
|
DELIVERED
|
DELIVRD
|
Message is delivered to destination
|
EXPIRED
|
EXPIRED
|
Message validity period has
expired
|
DELETED
|
DELETED
|
Message has been deleted.
|
UNDELIVERABLE
|
UNDELIV
|
Message is undeliverable
|
ACCEPTED
|
ACCEPTD
|
Message is in accepted state(i.e. has
been manually read on behalf of the subscriber by customer service)
|
UNKNOWN
|
UNKNOWN
|
Message is in invalid state
|
REJECTED
|
REJECTD
|
Message is in a rejected state
|
MA:xxxx
|
MA:xxxx
|
SMSC
不返回响应消息时的状态报告
|
MB:xxxx
|
MB:xxxx
|
SMSC
返回错误响应消息时的状态报告
|
MC:xxxx
|
MC:xxxx
|
没有从
SMSC
处接收到状态报告时的状态报告
|
CA:xxxx
|
CA:xxxx
|
SCP
不返回响应消息时的状态报告
|
CB:xxxx
|
CB:xxxx
|
SCP
返回错误响应消息时的状态报告
|
DA:xxxx
|
DA:xxxx
|
DSMP
不返回响应消息时的状态报告
|
DB:xxxx
|
DB:xxxx
|
DSMP
返回错误响应消息时的状态报告
|
SA:xxxx
|
SA:xxxx
|
SP
不返回响应消息时的状态报告
|
SB:xxxx
|
SB:xxxx
|
SP
返回错误响应消息时的状态报告
|
IA:xxxx
|
IA:xxxx
|
下一级
ISMG
不返回响应消息时的状态报告
|
IB:xxxx
|
IB:xxxx
|
下一级
ISMG
返回错误响应消息时的状态报告
|
IC:xxxx
|
IC:xxxx
|
没有从下一级
ISMG
处接收到状态报告时的状态报告
|
注意:
1.
其中
ACCEPTED
为中间状态,网关若从短信中心收到后应丢弃,不做任何操作;
2.
Stat
字段长度为
7
个字节,填写时应填表一中
Final Message States
中的缩写形式,如状态为
DELIVERED
时填写
DELIVRD
,依此类推;
3.
SP
等待状态报告缺省时间为
48
小时。
字段名
|
字节数
|
属性
|
描述
|
Msg_Id
|
8
|
Unsigned Integer
|
信息标识(
CMPP_DELIVER
中的
Msg_Id
字段)。
|
Result
|
4
|
Unsigned Integer
|
结果:
0
:正确;
1
:消息结构错;
2
:命令字错;
3
:消息序号重复;
4
:消息长度错;
5
:资费代码错;
6
:超过最大信息长;
7
:业务代码错;
8:
流量控制错;
9~
:其他错误。
|
8.4.6
SP
向
ISMG
发起删除短信(
CMPP_CANCEL
)操作
CMPP_CANCEL
操作的目的是
SP
通过此操作可以将已经提交给
ISMG
的短信删除,
ISMG
将以
CMPP_CANCEL_RESP
回应删除操作的结果。
字段名
|
字节数
|
属性
|
描述
|
Msg_Id
|
8
|
Unsigned Integer
|
信息标识(
SP
想要删除的信息标识)。
|
字段名
|
字节数
|
属性
|
描述
|
Success_Id
|
4
|
Unsigned Integer
|
成功标识。
0
:成功;
1
:失败。
|
本操作仅适用于通信双方采用长连接通信方式时用于保持连接。
无消息体。
网关之间互为客户
/
服务器,任一方在需要传递消息时,向对方请求建立连接,并在身份验证通过后进行数据传输。
8.5.1
源
ISMG
请求连接到目的
ISMG
(
CMPP_CONNECT
)操作
消息定义同
8.4.1.1
和
8.4.1.2
所述。其中
Source_Addr
填源网关代码。
8.5.2
源
ISMG
请求拆除到目的
ISMG
的连接(
CMPP_TERMINATE
)操作
消息定义同
8.4.2.1
和
8.4.2.2
所述。
本操作仅用于通信双方采用长连接通信方式时保持连接。消息定义同
8.4.6.1
和
8.4.6.2
所述。
8.5.4
源
ISMG
向目的
ISMG
转发短信(
CMPP_FWD
)操作
CMPP_FWD
操作的目的是源
ISMG
可以根据一定的路由策略将
SP
提交的短信、
MO
状态报告、短信中心产生的状态报告、用户提交的短信转发到目的
ISMG
,目的
ISMG
以
CMPP_FWD_RESP
回应。
字段名
|
字节数
|
属性
|
描述
|
Source_Id
|
6
|
Octet
String
|
源网关的代码(右对齐,左补
0
)。
|
Destination_Id
|
6
|
Octet
String
|
目的网关代码(右对齐,左补
0
)。
|
NodesCount
|
1
|
Unsigned
Integer
|
经过的网关数量。
|
Msg_Fwd_Type
|
1
|
Unsigned
Integer
|
前转的消息类型:
0
:
MT
前转;
1
:
MO
前转;
2
:
MT
时的状态报告;
3
:
MO
时的状态报告;
|
Msg_Id
|
8
|
Unsigned
Integer
|
信息标识。
|
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
话单。
|
Msg_level
|
1
|
Unsigned
Integer
|
信息级别。
|
Service_Id
|
10
|
Octet
String
|
业务标识。
|
Fee_UserType
|
1
|
Unsigned
Integer
|
计费用户类型字段:
0
:对目的终端
MSISDN
计费;
1
:对源终端
MSISDN
计费;
2
:对
SP
计费;
3
:表示本字段无效,对谁计费参见
Fee_terminal_Id
字段。
|
Fee_terminal_Id
|
21
|
Octet
String
|
被计费用户的号码,当
Fee_UserType
为
3
时该值有效,当
Fee_UserType
为
0
、
1
、
2
时该值无意义。
|
Fee_terminal_Pseudo
|
32
|
Octet
String
|
被计费用户的伪码。
|
Fee_terminal_UserType
|
1
|
Unsigned
Integer
|
计费用户号码的用户类型,
0
:全球通,
1
:神州行。
|
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_src
|
6
|
Octet
String
|
信息内容来源(
SP_Id
,
SP
的企业代码)。
|
FeeType
|
2
|
Octet
String
|
资费类别。
01
:对“计费用户号码”免费;
02
:对“计费用户号码”按条计信息费;
03
:对“计费用户号码”按包月收取信息费;
06
:对“计费用户号码”按包月查询收费。
|
FeeCode
|
6
|
Octet
String
|
资费代码(以分为单位)。
|
Valid_Time
|
17
|
Octet
String
|
有效期。
|
At_Time
|
17
|
Octet
String
|
定时发送的时间。
|
Src_Id
|
21
|
Octet
String
|
源号码。
1.
MT
时为
SP
的服务代码,即
CMPP_SUBMIT
消息中的
Src_Id
。
2.
MO
时为发送此消息的源终端
MSISDN
号码。
3.
MT
状态报告时,填接收到短信的终端
MSISDN
号码,即对应
CMPP_SUBMIT
消息中的
Dest_Terminal_Id
。
4.
MO
状态报告时,填
SP
的服务代码,即
CMPP_DELIVER
中的
Dest_Id
。
|
Src_Pseudo
|
32
|
Octet
String
|
源号码的伪码。
|
Src_UserType
|
1
|
Unsigned
Integer
|
源号码的用户类型,
0
:全球通,
1
:神州行。
|
Src_type
|
1
|
Unsigned
Integer
|
传递给
SP
的源号码的类型,
0
:真实号码;
1
:伪码。
|
DestUsr_tl
|
1
|
Unsigned
Integer
|
接收消息的用户数量,必须为
1
。
|
Dest_Id
|
21*DestUsr_tl
|
Octet
String
|
目的号码。
1.
MT
转发时为目的终端
MSISDN
号码,即对应
CMPP_SUBMIT
消息中的
Dest_Terminal_Id
。
2.
MO
转发时为
SP
的服务代码,一般
4--6
位,或者是前缀为服务代码的长号码,该号码是手机用户短消息的被叫号码。
3.
MT
状态报告时,填目的
SP
的服务代码,即
CMPP_SUBMIT
消息中的
Src_Id
。
4.
MO
状态报告时,填发送短信的移动用户
MSISDN
号码。
|
Dest_Pseudo
|
32
|
Octet
String
|
目的用户的伪码。
|
Dest_UserType
|
1
|
Unsigned
Integer
|
目的号码的用户类型,
0
:全球通,
1
:神州行。
|
Msg_Length
|
1
|
Unsigned
Integer
|
消息长度
,取值大于或等于
0
。
|
Msg_Content
|
Msg_length
|
Octet
String
|
消息内容。
|
LinkID
|
20
|
Octet
String
|
点播业务使用的
LinkID
。
|
注意:
1.
当转发消息为
MO
状态报告时,信息内容字段(
Msg_Content
)格式定义如下:
字段名
|
字节数
|
属性
|
描述
|
Msg_Id
|
8
|
Unsigned Integer
|
信息标识。
给
SP
的
CMPP_Deliver
消息中的
Msg_Id
,与源网关转发
MO
消息时产生的
Msg_Id
相同。
|
Stat
|
7
|
Octet String
|
SP
的应答结果,
CMPP_DELIVER_RESP
中
Result
为
0
时,填字符
DELIVRD
,其余异常的值可能为
SA:xxxx
或
SB:xxxx
,含义请参考
CMPP_DELIVER
中对状态报告的说明。
|
CMPP_DELIVER_time
|
10
|
Octet String
|
YYMMDDHHMM
(
YY
为年的后两位
00-99
,
MM
:
01-12
,
DD
:
01-31
,
HH
:
00-23
,
MM
:
00-59
)。
注:短信网关发出
CMPP_DELIVER
的时间。
|
CMPP_DELIVER_RESP_time
|
10
|
Octet String
|
YYMMDDHHMM
。
注:短信网关收到
CMPP_DELIVER_RESP
的时间。
|
Dest_Id
|
21
|
Octet String
|
目的
SP
的服务代码,左对齐。
|
Reserved
|
4
|
|
|
2.
当转发消息为
MT
状态报告时,信息内容字段(
Msg_Content
)格式同
8.4.5.1
定义。
字段名
|
字节数
|
属性
|
描述
|
Msg_Id
|
8
|
Unsigned
Integer
|
信息标识(
CMPP_FWD
中字段值)
|
Pk_total
|
1
|
Unsigned
Integer
|
相同
Msg_Id
的消息总条数
|
Pk_number
|
1
|
Unsigned
Integer
|
相同
Msg_Id
的消息序号
|
Result
|
4
|
Unsigned
Integer
|
结果
0
:正确
1
:消息结构错
2
:命令字错
3
:消息序号重复
4
:消息长度错
5
:资费代码错
6
:超过最大信息长
7
:业务代码错
8:
流量控制错
9:
前转判断错
(
此
SP
不应发往本
ISMG)
10~
:其他错误
|
8.6
互联网短信网关
(ISMG)
与汇接网关
(GNS)
之间的消息定义
要求
ISMG
与
GNS
在信息交互时使用短连接的通信方式。
ISMG
与
GNS
可互为客户
/
服务器。
8.6.1
ISMG
请求连接到
GNS
或
GNS
请求连接到
ISMG
(
CMPP_CONNECT
)操作
消息定义同
8.4.1.1
和
8.4.1.2
所述,其中
Source_Addr
填源网关代码,可能是
ISMG
代码或
GNS
代码。
8.6.2
ISMG
请求拆除到
GNS
的连接或
GNS
请求拆除到
ISMG
的连接(
CMPP_TERMINATE
)操作
消息定义同
8.4.2.1
和
8.4.2.2
所述。
8.6.3
ISMG
向汇接网关查询
MT
路由(
CMPP_MT_ROUTE
)操作
CMPP_MT_ROUTE
操作用于
ISMG
不知道需要转发
MT
消息的路由时查询
GNS
。
GNS
以
CMPP_MT_ROUTE_RESP
应答。
字段名
|
字节数
|
属性
|
描述
|
Source_Id
|
6
|
Octet String
|
源网关代码
|
Terminal_Id
|
21
|
Octet String
|
目的终端
MSISDN
号码
|
字段名
|
字节数
|
属性
|
描述
|
Route_Id
|
4
|
Unsigned Integer
|
路由编号
(MO/MT
分别从
0
开始
,
由
GNS
统一分配
)
|
Destination_Id
|
6
|
Octet String
|
目标网关代码
|
Gateway_IP
|
15
|
Octet String
|
目标网关
IP
地址
(
地址格式举例:
67.221.134.12
,左对齐
)
|
Gateway_port
|
2
|
Unsigned Integer
|
目标网关
IP
端口
|
Start_Id
|
9
|
Octet
String
|
MT
路由起始号码段
|
End_Id
|
9
|
Octet
String
|
MT
路由截止号码段
|
Area_code
|
4
|
Octet
String
|
手机所属省代号
|
Result
|
1
|
Unsigned
Integer
|
结果
0
:正常
1
:没有匹配路由
2
:源网关代码错
9
:系统繁忙
|
User_type
|
1
|
Unsigned
Integer
|
用户类型
0
:全球通
1
:神州行
2
:
M-Zone
…...
|
Time_stamp
|
14
|
Octet
String
|
本路由信息的最后修改时间
格式是:
yyyymmddhhmmss
,
例如
20030117014512
|
8.6.4
ISMG
向汇接网关查询
MO
路由(
CMPP_MO_ROUTE
)操作
CMPP_MO_ROUTE
操作的目的是使
ISMG
当不知道需要转发
MO
消息的路由时可向
GNS
查询得到。
GNS
以
CMPP_MO_ROUTE_RESP
应答。
字段名
|
字节数
|
属性
|
描述
|
Source_Id
|
6
|
Octet String
|
源网关代码
|
SP_Code
|
21
|
Octet String
|
SP
的服务代码
|
Service_Id
|
10
|
Octet String
|
请求的业务类型(此项适合全网服务内容,如梦网卡图片传情)
|
Service_Code
|
4
|
Unsigned Integer
|
请求的业务代码
(如果未置
Service_Id
字段,此字段为空,如梦网卡图片传情
TPCQ1000—2000
对应某个网站的某些相应图片)
|
字段名
|
字节数
|
属性
|
描述
|
Route_Id
|
4
|
Unsigned Integer
|
路由编号(
MO/MT
分别从
0
开始
,
由
GNS
统一分配)
|
Destination_Id
|
6
|
Octet String
|
目标网关代码
|
Gateway_IP
|
15
|
Octet String
|
目标网关
IP
地址
|
Gateway_port
|
2
|
Unsigned Integer
|
目标网关
IP
端口
|
SP_Id
|
6
|
Octet
String
|
SP
的企业代码
|
SP_Code
|
21
|
Octet
String
|
SP
的服务代码
|
SP_AcessType
|
1
|
Unsigned
Integer
|
SP
接入类型
0
:全网业务
SP
全网接入,即接入网关为
SP
的主力接入点
1
:全网业务
SP
镜像接入,即接入网关为
SP
的镜像接入点
|
Start_code
|
4
|
Unsigned
Integer
|
MO
路由起始业务代码
(如果未置请求的
Service_Id
字段,此字段为空)
|
End_code
|
4
|
Unsigned
Integer
|
MO
路由截止业务代码
(如果未置请求的
Service_Id
字段,此字段为空)
|
Result
|
1
|
Unsigned
Integer
|
结果
0
:正常
1
:没有匹配路由
2
:源网关服务代码错
9
:系统繁忙
|
Time_stamp
|
14
|
Octet
String
|
本路由信息的最后修改时间
格式是:
yyyymmddhhmmss
,
例如
20030117014512
|
8.6.5
ISMG
向汇接网关获取
MT
路由(
CMPP_GET_MT_ROUTE
)操作
CMPP_GET_MT_ROUTE
操作的目的是使
ISMG
可向
GNS
查询
MT
的路由信息。
GNS
以
CMPP_GET_MT_ROUTE_RESP
消息回应。
字段名
|
字节数
|
属性
|
描述
|
Source_Id
|
6
|
Octet String
|
源网关代码
|
Route_type
|
4
|
Octet String
|
路由类型
MT
:
MT
路由
(考虑今后的扩展性,故保留此字段)
|
Last_route_Id
|
4
|
Integer
|
已经接收的上一条路由编号
(第
1
次发送此请求时
Last_route_Id=
-1
)
|
字段名
|
字节数
|
属性
|
描述
|
Route_Id
|
4
|
Unsigned Integer
|
路由编号(
MO/MT
分别从
0
开始
,
由
GNS
统一分配)
|
Destination_Id
|
6
|
Octet String
|
目标网关代码
|
Gateway_IP
|
15
|
Octet String
|
目标网关
IP
地址
|
Gateway_port
|
2
|
Unsigned Integer
|
目标网关
IP
端口
|
Start_Id
|
9
|
Octet String
|
手机号码段的起始号码
|
End_Id
|
9
|
Octet String
|
手机号码段的截止号码
|
Area_code
|
4
|
Octet String
|
手机所属省代码
|
Result
|
1
|
Unsigned
Integer
|
结果
0
:正常
1
:没有匹配路由
2
:源网关代码错
3
:路由类型错
9
:系统繁忙
|
User_type
|
1
|
Unsigned
Integer
|
用户类型
0
:全球通
1
:神州行
2
:
M-Zone
……
|
Route_total
|
4
|
Unsigned
Integer
|
返回路由总数
|
Route_number
|
4
|
Unsigned
Integer
|
当前返回的路由序号,从
1
开始,顺序递增
|
Time_stamp
|
14
|
Octet
String
|
本路由信息的最后修改时间
格式是:
yyyymmddhhmmss
,
例如
20030117014512
|
说明:
Route_total
和
Route_number
两个字段,能够让短信网关清楚地知道
MT/MO
的总路由数,以及当前拿的是第几条路由记录。这样,短信网关就可以更加方便地检验是否已经完全获取所有路由记录,以便更新本地缓存的路由表。
8.6.6
SMG
向汇接网关获取
MO
路由(
CMPP_GET_MO_ROUTE
)操作
字段名
|
字节数
|
属性
|
描述
|
Source_Id
|
6
|
Octet String
|
源网关代码
|
Route_type
|
4
|
Octet String
|
路由类型
MO
:
MO
路由
(考虑今后的扩展性,故保留此字段)
|
Last_route_Id
|
4
|
Integer
|
已经接收的上一条路由编号
(第
1
次发送此请求时
Last_route_Id=
-1
)
|
字段名
|
字节数
|
属性
|
描述
|
Route_Id
|
4
|
Unsigned Integer
|
路由编号(
MO/MT
分别从
0
开始
,
由
GNS
统一分配)
|
Destination_Id
|
6
|
Octet String
|
目标网关代码
|
Gateway_IP
|
15
|
Octet String
|
目标网关
IP
地址
|
Gateway_port
|
2
|
Unsigned Integer
|
目标网关
IP
端口
|
SP_Id
|
6
|
Octet String
|
SP
的企业代码
|
SP_Code
|
21
|
Octet String
|
SP
的服务代码
|
SP_AcessType
|
1
|
Unsigned Integer
|
SP
接入类型
0
:全网业务
SP
全网接入,即接入网关为
SP
的主力接入点
1
:全网业务
SP
镜像接入,即接入网关为
SP
的镜像接入点
|
Service_Id
|
10
|
Octet String
|
请求的业务类型
(此项适合全网服务内容,如梦网卡图片传情)
|
Start_code
|
4
|
Unsigned Integer
|
请求的路由类型
=MO
时:
起始业务代码(如果未置
Service_Id
字段,此字段为空)
|
End_code
|
4
|
Unsigned Integer
|
请求的路由类型
=MO
时:
截止业务代码(如果未置
Service_Id
字段,此字段为空)
|
Result
|
1
|
Unsigned Integer
|
结果
0
:正常
1
:没有匹配路由
2
:源网关代码错
3
:路由类型错
9
:系统繁忙
|
Route_total
|
4
|
Unsigned Integer
|
返回路由总数
|
Route_number
|
4
|
Unsigned Integer
|
当前返回的路由序号,从
1
开始,顺序递增
|
Time_stamp
|
14
|
Octet String
|
本路由信息的最后修改时间
格式是:
yyyymmddhhmmss
,
例如
20030117014512
|
8.6.7
ISMG
向汇接网关更新
MT
路由(
CMPP_MT_ROUTE_UPDATE
)操作
CMPP_MT_ROUTE_UPDATE
操作的目的是使
ISMG
可向
GNS
更新
MT
路由信息。
GNS
以
CMPP_MT_ROUTE_UPDATE _RESP
消息回应。
字段名
|
字节数
|
属性
|
描述
|
Update_type
|
1
|
Unsigned Integer
|
0
:添加
1
:删除
2
:更新
|
Route_Id
|
4
|
Unsigned Integer
|
路由编号(
MO/MT
分别从
0
开始
,
由
GNS
统一分配)
(若
update_type
为
0
,即添加时,此字段为零)
|
Destination_Id
|
6
|
Octet String
|
目标网关代码
|
Gateway_IP
|
15
|
Octet String
|
目标网关
IP
地址
|
Gateway_port
|
2
|
Unsigned Integer
|
目标网关
IP
端口
|
Start_Id
|
9
|
Octet
String
|
MT
路由起始号码段
|
End_Id
|
9
|
Octet
String
|
MT
路由截止号码段
|
Area_code
|
4
|
Octet
String
|
手机所属省代码
|
User_type
|
1
|
Unsigned
Integer
|
用户类型
0
:全球通
1
:神州行
2
:
M-Zone
……
|
字段名
|
字节数
|
属性
|
描述
|
Result
|
1
|
Unsigned
Integer
|
0
:数据合法,等待核实
4
:本节点不支持更新(
GNS
分节点)
9
:系统繁忙
10
:
Update_type
错误
11
:路由编号错误
12
:目的网关代码错误
13
:目的网关
IP
错误
14
:目的网关
Port
错误
15
:
MT
路由起始号码段错误
16
:
MT
路由截止号码段错误
17
:手机所属省代码错误
18
:用户类型错误
|
Route_Id
|
4
|
Unsigned
Integer
|
路由编号
(当路由更新类型为更新和删除时返回原路由编号,当路由更新类型为添加时返回新分配的路由编号)
|
Time_stamp
|
14
|
Octet
String
|
本路由信息的更新请求收到时间
格式是:
yyyymmddhhmmss
,
例如
20030117014512
|
说明:如果插入新路由,汇接网关就分配新的
Route_Id
,并且返回。
8.6.8
ISMG
向汇接网关更新
MO
路由(
CMPP_MO_ROUTE_UPDATE
)操作
CMPP_MO_ROUTE_UPDATE
操作的目的是使
ISMG
可向
GNS
更新
MO
路由信息。
GNS
以
CMPP_MO_ROUTE_UPDATE _RESP
消息回应。
字段名
|
字节数
|
属性
|
描述
|
Update_type
|
1
|
Unsigned Integer
|
0
:添加
1
:删除
2
:更新
|
Route_Id
|
4
|
Unsigned Integer
|
路由编号
(若
update_type
为
0
,即添加时,此字段为零)
|
Destination_Id
|
6
|
Octet String
|
目标网关代码
|
Gateway_IP
|
15
|
Octet String
|
目标网关
IP
地址
|
Gateway_port
|
2
|
Unsigned Integer
|
目标网关
IP
端口
|
SP_Id
|
6
|
Octet
String
|
SP
的企业代码
|
SP_Code
|
21
|
Octet
String
|
SP
的服务号码
|
SP_AcessType
|
1
|
Unsigned
Integer
|
SP
接入类型
0
:全网业务
SP
全网接入,即接入网关为
SP
的主力接入点
1
:全网业务
SP
镜像接入,即接入网关为
SP
的镜像接入点
|
Service_Id
|
10
|
Octet String
|
请求的业务类型(此项适合全网服务内容,如梦网卡图片传情
,
如该路由不包含此业务,此字段为空)
|
Start_code
|
4
|
Unsigned Integer
|
MO
路由起始业务代码(如果未置请求的
Service_Id
字段,此字段为空)
|
End_code
|
4
|
Unsigned Integer
|
MO
路由截止业务代码(如果未置请求的
Service_Id
字段,此字段为空)
|
字段名
|
字节数
|
属性
|
描述
|
Result
|
1
|
Unsigned Integer
|
0
:数据合法,等待核实
4
:本节点不支持更新(
GNS
分节点)
9
:系统繁忙
10
:
Update_type
错误
11
:路由编号
错误
12
:目标网关代码错误
13
:目标网关
IP
错误
14
:目标网关
Port
错误
19
:
SP_Id
错误
20
:
SP_Code
错误
21
:
SP_AccessType
错误
22
:
Service_Id
错误
23
:
Start_code
错误
24
:
End_code
错误
|
Route_Id
|
4
|
Unsigned
Integer
|
路由编号
(当路由更新类型为更新和删除时返回原路由编号,当路由更新类型为添加时返回新分配的路由编号)
|
Time_stamp
|
14
|
Octet
String
|
本路由信息的更新请求收到时间
格式是:
yyyymmddhhmmss
,
例如
20030117014512
|
说明:如果插入新路由,汇接网关就分配新的
Route_Id
,并且返回。
8.6.9
汇接网关向
ISMG
更新
MT
路由(
CMPP_PUSH_MT_ROUTE_UPDATE
)操作
CMPP_PUSH_MT_ROUTE_UPDATE
操作的目的是使
GNS
可向
ISMG
更新
MT
路由信息。
ISMG
以
CMPP_PUSH_MT_ROUTE_UPDATE_RESP
消息回应。
字段名
|
字节数
|
属性
|
描述
|
Update_type
|
1
|
Unsigned Integer
|
0
:添加;
1
:删除;
2
:更新
|
Route_Id
|
4
|
Unsigned Integer
|
路由编号
|
Destination_Id
|
6
|
Octet String
|
目标网关代码
|
Gateway_IP
|
15
|
Octet String
|
目标网关
IP
地址
|
Gateway_port
|
2
|
Unsigned Integer
|
目标网关
IP
端口
|
Start_Id
|
9
|
Octet
String
|
MT
路由起始号码段
|
End_Id
|
9
|
Octet
String
|
MT
路由截止号码段
|
Area_code
|
4
|
Octet
String
|
手机所属省代码
|
User_type
|
1
|
Unsigned
Integer
|
用户类型
0
:全球通
1
:神州行
2
:
M-Zone
……
|
Time_stamp
|
14
|
Octet
String
|
本路由信息的最后修改时间
格式是:
yyyymmddhhmmss
,
例如
20030117014512
|
字段名
|
字节数
|
属性
|
描述
|
Result
|
1
|
Unsigned Integer
|
0
:成功更改
5
:路由信息更新失败
6
:汇接网关路由信息时间戳比本地路由信息时间戳旧
9
:系统繁忙
|
8.6.10
汇接网关向
ISMG
更新
MO
路由(
CMPP_PUSH_MO_ROUTE_UPDATE
)操作
CMPP_PUSH_MO_ROUTE_UPDATE
操作的目的是使
GNS
可向
ISMG
更新
MO
路由信息。
ISMG
以
CMPP_PUSH_MO_ROUTE_UPDATE_RESP
消息回应。
字段名
|
字节数
|
属性
|
描述
|
Update_type
|
1
|
Unsigned Integer
|
0
:添加;
1
:删除;
2
:更新
|
Route_Id
|
4
|
Unsigned Integer
|
路由编号
|
Destination_Id
|
6
|
Octet String
|
目标网关代码
|
Gateway_IP
|
15
|
Octet String
|
目标网关
IP
地址
|
Gateway_port
|
2
|
Unsigned Integer
|
目标网关
IP
端口
|
SP_Id
|
6
|
Octet
String
|
SP
的企业代码
|
SP_Code
|
21
|
Octet
String
|
SP
的服务号码
|
SP_AcessType
|
1
|
Unsigned
Integer
|
SP
接入类型
0
:全网业务
SP
全网接入,即接入网关为
SP
的主力接入点
1
:全网业务
SP
镜像接入,即接入网关为
SP
的镜像接入点
|
Service_Id
|
10
|
Octet
String
|
请求的业务类型(此项适合全网服务内容,如梦网卡图片传情
,
如该路由不包含此业务,此字段为空)
|
Start_code
|
4
|
Unsigned
Integer
|
MO
路由起始业务代码(如果未置请求的
Service_Id
字段,此字段为空)
|
End_code
|
4
|
Unsigned
Integer
|
MO
路由截止业务代码(如果未置请求的
Service_Id
字段,此字段为空)
|
time_stamp
|
14
|
Octet
String
|
本路由信息的最后修改时间
格式是:
yyyymmddhhmmss
,
例如
20030117014512
|
字段名
|
字节数
|
属性
|
描述
|
Result
|
1
|
Unsigned
Integer
|
0
:成功更改
5
:路由信息更新失败
6
:汇接网关路由信息时间戳比本地路由信息时间戳旧
9
:系统繁忙
|
消息
|
Command_Id
值
|
说明
|
CMPP_CONNECT
|
0x00000001
|
请求连接
|
CMPP_CONNECT_RESP
|
0x80000001
|
请求连接应答
|
CMPP_TERMINATE
|
0x00000002
|
终止连接
|
CMPP_TERMINATE_RESP
|
0x80000002
|
终止连接应答
|
CMPP_SUBMIT
|
0x00000004
|
提交短信
|
CMPP_SUBMIT_RESP
|
0x80000004
|
提交短信应答
|
CMPP_DELIVER
|
0x00000005
|
短信下发
|
CMPP_DELIVER_RESP
|
0x80000005
|
下发短信应答
|
CMPP_QUERY
|
0x00000006
|
发送短信状态查询
|
CMPP_QUERY_RESP
|
0x80000006
|
发送短信状态查询应答
|
CMPP_CANCEL
|
0x00000007
|
删除短信
|
CMPP_CANCEL_RESP
|
0x80000007
|
删除短信应答
|
CMPP_ACTIVE_TEST
|
0x00000008
|
激活测试
|
CMPP_ACTIVE_TEST_RESP
|
0x80000008
|
激活测试应答
|
CMPP_FWD
|
0x00000009
|
消息前转
|
CMPP_FWD_RESP
|
0x80000009
|
消息前转应答
|
CMPP_MT_ROUTE
|
0x00000010
|
MT
路由请求
|
CMPP_MT_ROUTE_RESP
|
0x80000010
|
MT
路由请求应答
|
CMPP_MO_ROUTE
|
0x00000011
|
MO
路由请求
|
CMPP_MO_ROUTE_RESP
|
0x80000011
|
MO
路由请求应答
|
CMPP_GET_MT_ROUTE
|
0x00000012
|
获取
MT
路由请求
|
CMPP_GET_MT_ROUTE_RESP
|
0x80000012
|
获取
MT
路由请求应答
|
CMPP_MT_ROUTE_UPDATE
|
0x00000013
|
MT
路由更新
|
CMPP_MT_ROUTE_UPDATE_RESP
|
0x80000013
|
MT
路由更新应答
|
CMPP_MO_ROUTE_UPDATE
|
0x00000014
|
MO
路由更新
|
CMPP_MO_ROUTE_UPDATE_RESP
|
0x80000014
|
MO
路由更新应答
|
CMPP_PUSH_MT_ROUTE_UPDATE
|
0x00000015
|
MT
路由更新
|
CMPP_PUSH_MT_ROUTE_UPDATE_RESP
|
0x80000015
|
MT
路由更新应答
|
CMPP_PUSH_MO_ROUTE_UPDATE
|
0x00000016
|
MO
路由更新
|
CMPP_PUSH_MO_ROUTE_UPDATE_RESP
|
0x80000016
|
MO
路由更新应答
|
CMPP_GET_MO_ROUTE
|
0x00000017
|
获取
MO
路由请求
|
CMPP_GET_MO_ROUTE_RESP
|
0x80000017
|
获取
MO
路由请求应答
|
目前
CMPP2.0
中定义了响应消息中的
10
个返回码,其中
0
表示成功,
1-9
分别表示各种错误类型,各厂家在返回错误码时应尽可能向这
9
个错误码靠拢,当然,因为设计的原因或者查错的方便,厂家可以在规定的厂家自定义错误码空间中定义自己的错误码,但是,定义错误码时不允许存在类似与“其它错误”或者“系统错误”这类含义模糊的情况,即各厂家能够对自己返回的每一个错误码给出明确的含义解释,以利于错误发生时的定位工作。
0
-
99
为
CMPP
协议保留的错误码空间,请各厂家在预留的错误码空间范围:
100
-
199
内自行定义,并提供详细的编码解释列表。
0
:系统操作成功;
1
:没有匹配路由;
2
:源网关代码错误;
3
:路由类型错误;
4
:本节点不支持更新(
GNS
分节点);
5
:路由信息更新失败;
6
:汇接网关路由信息时间戳比本地路由信息时间戳旧;
9
:系统繁忙;
10
:
Update_type
错误;
11
:路由编号错误;
12
:目的网关代码错误;
13
:目的网关
IP
错误;
14
:目的网关
Port
错误;
15
:
MT
路由起始号码段错误;
16
:
MT
路由截止号码段错误;
17
:手机所属省代码错误;
18
:用户类型错误;
19
:
SP_Id
错误;
20
:
SP_Code
错误;
21
:
SP_AccessType
错误;
22
:
Service_Id
错误;
23
:
Start_code
错误;
24
:
End_code
错误。
100~199
:厂家自定义错误码空间。
8.7.4
GNS
上路由信息的
Route_Id
的编号规则
按运营商、
MO/MT
分类,由
0
开始往上分配。
目前拟定按如下方式实现
MT
短信的群发功能(对
SMC
暂不实现群发):
SP
侧
ISMG
接收到
CMPP_SUBMIT
消息后,判断是否为群发的
MT
短信,如果为群发的
SMC
,则返回错误;如果为其它类型的操作,仍旧按照以前的业务流程进行。如果是群发的
MT
短信(假设群发目的号码数为
n
),则将该消息拆包为
n
条
CMPP_Fwd
消息或直接发给
SMSC
的
SUBMIT_SM
消息,其中计费规则(对谁计费和计费多少)与单条
MT
短信的计费规则相同。返回给
SP
的
CMPP_SUBMIT_RESP
消息中的
Msg_Id
则暗示一个范围,即
Msg_Id
~
Msg_Id
+(
n
-
1
)分别对应
n
个目的手机用户的信息标识,那么在返回的状态报告中可以依据
Msg_Id
~
Msg_Id
+(
n
-
1
)范围内的数字匹配出群发短信中的每一个短信发送请求。需要注意的是,
Msg_Id
~
Msg_Id
+(
n
-
1
)范围内的信息标识不能被随后的其它
CMPP_SUBMIT_RESP
消息使用。
在
Msg_Id
中的“序列号”如下定义:“序列号:
bit16~bit1
,顺序增加,步长为
1
,循环使用。”,那么如果在
Msg_Id
~
Msg_Id
+(
n
-
1
)范围中仍然依据此规则,如果其中“序列号”到达最大值,则从
0
开始循环使用。
增加此短信群发功能,实际上等同于
SP
把以前分为
n
次发送的短信合并到一条消息中,但是
SP
仍然应该把此一条消息当作
n
条短信提交请求,并相应记录
n
条话单,
SP
拿
n
条话单与移动公司进行对帐和结算。
在短信群发的消息中,仍然需要判断消息中的计费号码、所有的目的号码的合法性,
SP
应该保证其中每个号码都是合法的,如果其中任何一个号码有错误,接入
ISMG
对此消息判断为错误,并给
SP
返回错误,不对其中任何号码进行发送处理。
接入
ISMG
对
SP
下发的短信的流量具有限制功能,对
SP
流量的统计对短信群发来说,应该计算为
n
条短信。