狗尾草

导航

900/1800MHz TDMA数字蜂窝移动通信网扩展短消息实体到短消息中心接口协议规范

前 言

随着短消息业务在移动通信网上的广泛开展,运营商可以利用短消息平台向用户提供丰富的增值业务。短消息中心(SMSC)可以与人工台、自动台、WEB Server、E-mail Server、WAP网关等各种非PLMN网的扩展短消息实体(ESME)配合工作,从而为移动用户提供丰富多采的功能。在SMSC与ESME间采用标准的协议接口,有助于实现其他厂家的ESME的接入,为运营者集成第三方产品、发展短消息新业务提供方便。
本规范主要是参考了ETSI相关的技术规定(GSM 03.39 v5.0.0)以及有关厂家的技术规范,并根据我国网络的实际业务和功能需要而制定的。本规范的内容主要针对扩展短消息实体与短消息中心的通信协议。
本规范是在GSM03.39推荐的SMPP协议的基础上,经过扩展而成。它包含了GSM 03.39 v5.0.0中SMPP协议的所有内容,能支持GSM的 PHASE2+的业务,另外还包括了可选的短消息用户管理的功能。本规范面向现有的短消息业务,兼容ETSI GSM规范 03.39 v5.0.0中的SMPP协议,以后对于新业务(如WAP业务)的支持,可做相应修改。GSM 03.39 v5.0.0协议中错误状态和短消息状态没有定义具体的值,本规范对错误状态值和短消息状态值给与明确定义。
附录A为本规范的协议命令标志的数值定义。
附录B为本规范扩展协议的命令标志的数值定义。

1 适用范围
本规范规定了900/1800MHz TDMA数字蜂窝移动通信网扩展短消息实体与短消息中心的通信协议的技术细节。
本规范主要适用于900/1800MHz TDMA数字蜂窝移动通信网扩展短消息实体和短消息中心,为短消息中心接入扩展短消息实体提供技术依据。

2 引用标准
下列标准包括的条文,通过在本规范中引用而构成为本规范的条文。本规范出版时,所示版本均为有效。所有标准都会被修订,使用本规范的各方应探讨使用下列标准最新版本的可能性。
- ETSI GSM规范 03.38(5.2.0): 欧洲数字蜂窝通信系统; 字符和特定语言信息
- ETSI GSM规范 03.39(5.0.0): 欧洲数字蜂窝通信系统; 短消息中心和短消息实体间连接的接口协议
- ETSI GSM规范 03.40 (7.2.0): 欧洲数字蜂窝通信系统; 点对点短消息业务技术实现
- ETSI GSM规范 03.47(5.0.0)欧洲数字蜂窝通信系统;短消息中心与移动交换中心间互联协议栈举例

3 符号和缩略语

ESME  Agent External Short Message Entity Agent 扩展短消息实体代理
ESME  External Short Message Entity 扩展短消息实体
PLMN  Public Land Mobile Network 公共陆地移动网
SMSC  Short Message Service Center 短消息中心
SMPP  Short Message Peer to Peer 短消息点对点协议
SS       Secretary System 秘书台
AS       Auto System 自动台

5 协议总述
本规范规定了SMSC和ESME之间通信的数据格式。本规范是在GSM 03.39 v5.0.0中的SMPP协议的基础上,经过扩展而成。它包含了SMPP协议的内容,能支持GSM的 PHASE2+的业务,另外还包括了可选的短消息用户管理协议。

5.1 协议功能
通过本规范,ESME(比如AS,SS,寻呼台,语音邮箱系统)能连接(BIND)或断连(UNBIND)SMSC,提交(SUBMIT),替换(REPLACE),取消(CANCEL),查询(QUERY) 短消息;SMSC能下发(DELIVERY)短消息到ESME。
        此规范包含以下两部分:
                (1)ESME到SMSC的消息
                (2)SMSC到ESME的消息
        协议又可分为短消息业务部分和用户管理部分,其中用户管理部分只适用于SMSC有用户数据库支持的情况,与短消息业务部分相独立,在实现上是可选部分。

5.2 SMPP协议兼容性
本规范兼容ETSI GSM规范 03.39(5.0.0)中的SMPP协议,但不保证兼容以后的SMPP协议,本规范将SMPP协议没有明确定义的错误值和短消息状态值明确定义。

5.3 向下兼容性
由协议版本号指示协议版本,ESME和SMSC之间根据不同的版本号进行处理,图2是在ESME和SMSC之间进行连接时版本处理会话的示意图,说明高版本ESME与低版本SMSC之间连接的会话过程,括号中的数字是版本号,本规范的此版本的版本号为1。SMSC给回的响应消息中,Status参数如果为0,表示其SMSC同意ESME提出的版本号,如果不为0,指示SMSC自己的版本号。

5.4 ESME与SMSC的直接和间接连接方式
ESME可以与SMSC直接或者间接相连,直接相连时通过本规范确定的协议与SMSC通信,间接相连时,通过ESME Agent与SMSC相连,ESME Agent为ESME与SMSC之间的连接代理。ESME Agent与SMSC间协议要求是本规范确定的协议,ESME和ESME Agent之间可以是自定义的协议,也可以是本协议。采用ESME Agent间接相连方式,对接入SMSC的ESME提供了分类管理的便利,也提供了接入使用非本协议的ESME的一种方式。

5.5 对PHASE2+的支持
本规范支持ETSI GSM3.40(7.2.0)中有关PHASE2+的规定,支持有头结构的PHASEII+短消息。

6 协议规格说明

6.1 ESME到SMSC的消息
ESME到SMSC的消息,如:提交、查询、删除短消息等请求,ESME必须以TRANSMITTER类型连接到SMSC。
图4描述了一个典型的TRANSMITTER类型的请求应答的示例。TRANSMITTER类型的ESME是以BIND_TRANCESMITTER连接到SMSC的ESME,此类型的ESME向SMSC发起提交短消息,查询短消息状态,删除短消息等请求,SMSC返回请求的应答。
ESME和SMSC之间的请求应答消息可以是阻塞方式也可以是异步方式的。所以ESME可能在SMSC没有应答的情况下,发起多个请求到SMSC。
SMSC应该按照收到的请求顺序,给EMSE回响应。但是ESME必须能够处理没有按顺序的响应。

6.2 SMSC到ESME的消息
SMSC到ESME的消息,如:SMSC转发短消息到ESME,ESME必须以RECEIVER类型连接到SMSC。
RECEIVER类型的ESME是以BIND_RECEIVER连接到SMSC的ESME,SMSC向此类ESME转发短消息,ESME向SMSC回应答。
ESME和SMSC之间的请求应答消息可以是阻塞方式也可以是异步方式的。所以SMSC可能在ESME没有回应答的情况下,发送发起多个deliver_sm请求到ESME。
ESME应该按照收到的请求顺序,给SMSC返回响应。但是SMSC必须能够处理没有按顺序回的响应。

6.3 消息流
本规范中规定的所有协议,不管是从ESME到SMSC,还是从SMSC到ESME的消息,接收到请求的一方,都必须给请求方回一个应答消息(acknowledge)。
       
6.4 消息列表
6.4.1 ESME到SMSC的消息
表1:ESME到SMSC的消息
命令        描述
bind_receiver        ESME要求以接收者身份连接到SMSC
bind_transmitter        ESME要求以发送者身份连接到SMSC
Unbind        ESME要求断开连接到SMSC
submit_sm        ESME提交短消息到SMSC,以便SMSC下发此短消息到指定的移动台。
deliver_sm_resp        deliver_sm的响应。

query_sm        ESME查询以前所提交的短消息的状态
cancel_sm        ESME要求取消以前所提交的某条短消息
replace_sm        ESME要求替换以前所提交的某条短消息
enquire_link        询问与SMSC的连接情况
generic_nak        表示消息头有错误的响应
replace_sm_ex        ESME要求替换以前所提交的某条短消息的扩展命令,它比replace_sm增加了数据编码格式字段
add_sub        增加用户
del_sub        删除用户
mod_sub        修改用户
enquire_sub        查询用户的信息
       
6.4.2 SMSC到ESME的消息
表2:SMSC到ESME的消息
        命令        描述
bind_receiver_resp        bind_receiver的响应,status表示连接成功与否
bind_transmitter_resp        bind_transmitter的响应,status表示连接成功与否
unbind_resp        unbind的响应,status表示断开连接成功与否
submit_sm_resp        submit_sm的响应,status表明提交短消息是否成功
deliver_sm        SMSC下发短消息到ESME
query_sm_resp        query_sm的响应,status表明此次询问是否成功,其它内容返回查询到的短消息信息
cancel_sm_resp        cancel_sm的响应。Status表明取消短消息是否成功
replace_sm_resp        replace_sm的响应,status表明此次替换是否成功
enquire_link_resp        Enquire_link的响应
generic_nak        表示消息头有错误的响应
replace_sm_ex_resp        replace_sm_ex的响应,status表明此次替换是否成功
add_sub_resp        add_sub的响应,status表明此次增加用户是否成功。
del_sub_resp        del_sub的响应,status表明此次删除用户是否成功。
mod_sub_resp        mod_sub的响应,status表明此次修改用户是否成功。
enquire_sub_resp        enquire_sub的响应,status表明此次询问是否成功。 其它内容返回查询到的用户信息

6.5 消息语法
        在以下语法说明中,遵从以下规则:
                A.未使用的字段,依据类型必须设置为0或NULL。
                B.消息由消息头和消息体组成。
                C.状态(Command_status)的定义如表3所示。
表3:状态定义
错误代码        描述
E_SUCCESS(0X00000000)        成功
E_OTHERERR(0X00000001)        其他错误
0X00000002 – 0X0000000F        保留给SMSC厂商定义错误
E_MSGLENERR(0X00000010)        消息长度错误
E_CMDLENERR(0X00000011)        命令长度错误
E_INVLDCMDID(0X00000012)        消息ID无效
E_NORIGHT(0X00000013)        没有执行此命令的权限
0X00000014 – 0X0000001F        保留
E_INVLDSYSTEMID(0X00000020)        无效的SYSTEMID
E_INVLDPASSWORD(0X00000021)        无效的密码
E_INVLDSYSTEMTYPE(0X00000022)        无效的SYSTEMTYPE
0X00000023 – 0X0000003F        保留
E_ADDRERR(0X00000040)        地址错误
E_MOEXCEED(0X00000041)        超过最大提交数
E_MTEXCEED(0X00000042)        超过最大下发数
E_INVLDUSER(0X00000043)        无效的用户
E_INVLDDATAFMT(0X00000044)        无效的数据格式
E_CREATEMSGFAILURE(0X00000045)        创建消息失败
E_INVLDMSGID(0X00000046)        无效的短消息ID
E_DATABASEFAILURE(0X00000047)        数据库失败
E_CANCELMSGFAILURE(0X00000048)        取消消息失败
E_MSGSTATEERR(0X00000049)        短消息状态错误
E_REPLACEMSGFAILURE(0X0000004A)        替换消息失败
E_INVLDRPLADDR(0X0000004B)        替换消息源地址错误
0X0000004C – 0X0000005F        保留
E_INVLDORGTON(0X00000060)        无效的源地址TON
E_INVLDORGNPI(0X00000061)        无效的源地址NPI
E_ORGADDRERR(0X00000062)        源地址错误
E_INVLDDESTTON(0X00000063)        无效的目的地址TON
E_INVLDDESTNPI(0X00000064)        无效的目的地址NPI
E_DESTADDRERR(0X00000065)        目的地址错误
E_INVLDSCHEDULE(0X00000066)        无效的定时时间
E_INVLDEXPIRE(0X00000067)        无效的超时时间
E_INVLDESM(0X00000068)        无效的ESM_CALSS
E_INVLDUDLEN(0X00000069)        无效的UDLEN
E_INVLDPRI(0X0000006A)        无效的PRI
E_INVLDRDF(0X0000006B)        无效的Registered_delivery_flag
E_INVLDRPF(0X0000006C)        无效的Replace_if_present_flag
0X0000006D – 0X0000007F        保留
用户管理部分(可选)       
E_USERALREADYEXIST(0X00000080)        指定用户已经存在
E_CREATEUSERERR(0X00000081)        创建用户失败
E_USERIDERR(0X00000082)        用户ID错误
E_USERNOTEXIST(0X00000083)        指定用户不存在
0X00000084 – 0X0000008F        保留
0X00000090 – 0X00000FFF        保留给SMSC厂商定义错误
其他        保留
       
                D.在类型中,可能用到以下定义:
                (1)integer:一定字节数所组成的整数,高位在前,低位在后。例                                                        如:1字节(BYTE),2字节(WORD )  , 4字节 (DWORD)                                                        ,6字节等等。
                (2)C_String:以NULL结束的ASCII字符串。
(3)C_DecString:以NULL结束的ASCII字符串,它由一系列的10进制字符                        组成(‘0’---‘9’)。
        (4)C_OctetString:由任意8位字节组成数据流串。
                (5)C_HexString:以NULL结束的ASCII字符串,它由一系列的16进制字符组                                成(‘0’---‘9’,‘A’(‘a’)---‘F’(‘f’))。
                (6)C_UnicodeString:以NULL结束的Unicode编码的字符串。
                (7)C_StringTime:表示时间的字符串,它为以下格式。“YYMMDDhhmmsstnnp" ,                        长度定为17个字节或1个字节,最后一个字节值必须为NULL,1个字节表示                                使用缺省的时间定义(由短消息中心实现时具体设置),17个字节的具体格式                                如下:
YY'        年份的最后2位 (00-99)
MM        月份(01-12)
DD        日 (01-31)
Hh        小时 (00-23)
Mm        分 (00-59)
Ss        秒 (00-59)
T        十分之一秒 (0-9)
Nn        与UTC (Universal Time Constant) 时间超前或落后 的差距(00-48).
‘+’(p)        时间超前于UTC time.
‘-’(p)        时间落后于 UTC time.
        对于千年问题,采用时间窗口的方法来解决,具体方法为YY>90解释为19YY;否则解释为20YY。

6.5.1 消息头语法
表4:短消息头语法
字段        长度(字节)        类型        描述
Command_Length        4        integer        消息包的长度,包括此字段
Command_ID        4        integer        这个字段表明此条短消息的类型,例如ESME_SUB_SM表示此消息为ESME向SMSC提交短消息。具体数值定义见附录A。
Command_status        4        integer        此字段表示一个命令的成功与失败,如失败,指示引起失败的错误类型等信息,它在请求中必须设为0。
Sequence_No        4        integer        此字段表示消息的序列号,它由ESME产生,它是消息和它的应答之间的对应标志,它的数值在0到0XFFFFFFFF间必须保证严格单调的递增,当达到0XFFFFFFFF时,从0开始下一循环。
Optional Message Body        可变        混合        此字段表示短消息的消息体部分,具体定义见6.5.2

6.5.2 消息体语法
6.5.2.1 BIND_RECEIVER命令
        此命令在扩展短消息实体和短消息中心之间产生虚连接,该连接支持所有的协议命令。
BIND_RECEIVER语法
消息头中的Command_ID是“bind_receiver"
表5:BIND_RECEIVER语法
字段        长度(字节)        类型        描述
system_id        最大 16        C_String        接口ID
password        最大 9        C_String        密码
system_type        最大 13        C_String        接口类型
interface_version        1        integer        接口版本号
ton        1        integer        保留,应设置为0
npi        1        integer        保留,应设置为0
address_range        最大 41        C_DecString        保留,应设置为NULL

BIND_RECEIVER_RESP语法
消息头中的Command_ID 是“bind_receiver_resp"。
表6:BIND_RECEIVER_RESP语法
字段        大小(字节)        类型        描述
System_id        最大 16        C_String        接口ID

状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT
E_INVLDSYSTEMID
E_INVLDPASSWORD
E_INVLDSYSTEMTYPE
E_INVLDIFVER
6.5.2.2 BIND_TRANSMITTER命令
它在扩展短消息实体和短消息中心之间产生虚连接,该连接支持除下发短消息(deliver_sm,deliver_sm_resp)以外的所有协议命令。
BIND_TRANSMITTER语法
此命令和BIND_RECEIVER的语法一样,只是在消息头里的Command_ID为"bind_transmitter"。
BIND_TRANSMITTER_RESP语法
此命令和BIND_RECEIVER_RESP的语法一样,只是在消息头里的Command_ID为"bind_transmitter_resp"。
状态取值范围:
同BIND_RECEIVER_RESP
       
6.5.2.3 UNBIND命令
此命令用于断开ESME和SMSC之间的连接。
UNBIND语法
此消息只有消息头,没有消息体,消息头中的Command_ID是“unbind"。
UNBIND_RESP语法
此消息只有消息头,没有消息体,消息头中的Command_ID是“unbind_resp"。
状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT
6.5.2.4 SUBMIT_SM命令
此命令用于ESME提交短消息到SMSC,以便SMSC把此短消息发给特定的移动台。
SUBMIT_SM语法
消息头中的Command_ID是"submit_sm"
表7:SUBMIT_SM语法
字段        长度(字节)        类型        描述
service_type        最大6        C_OctetString        保留,必须设为0
source_address_ton        1        integer        源地址编码类型
source_address_npi        1        integer        源地址编码方案
source_address        最大21        C_DecString        源地址
dest_address_ton        1        integer        目的地址编码类型
dest_address_npi        1        integer        目的地址编码方案
destination_address        最大21        C_DecString        目的地址
esm_class        1        integer        短消息类型
protocol_ID        1        integer        GSM协议类型
priority_flag        1        integer        优先级
schedule_delivery_time        最大17        C_StringTime        计划下发短消息的时间
validity_peroid        最大17        C_StringTime        短消息的最后有效期限
registered_delivery_flag        1        integer        注册短消息标志

replace_if_present_flag        1        integer        替换短消息标志。

data_coding        1        integer        数据编码方案
sm_default_msg_id        1        integer        预定义短消息ID
sm_length        1        integer        短消息的长度
short_message_text        最大161        可变        短消息数据内容


SUBMIT_SM_RESP语法
消息头中的Command_ID是"submit_sm_resp"
表8:SUBMIT_SM_RESP语法
字段        长度(字节)        类型        描述
Message_id        最大9        C_HexString        短消息ID
状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

E_ADDRERR
E_MOEXCEED
E_MTEXCEED
E_INVLDUSER
E_INVLDDATAFMT
E_CREATEMSGFAILURE
E_INVLDORGTON
E_INVLDORGNPI
E_ORGADDRERR
E_INVLDDESTTON
E_INVLDDESTNPI
E_DESTADDRERR
E_INVLDSCHEDULE
E_INVLDEXPIRE
E_INVLDESM
E_INVLDUDLEN
E_INVLDPRI
E_INVLDRDF
E_INVLDRPF

6.5.2.5 DELIVER_SM命令
此命令由SMSC产生,SMSC通过此命令发送短消息到目的ESME,它也可用于发送转发状态报告(DELIVERY RECEIPT)消息。
DELIVER_SM语法
它的语法和SUBMIT_SM的语法消息体是相同的,只是在消息头中的Command_ID是“deliver_sm"。
DELIVER_SM_RESP语法
它的语法和SUBMIT_SM_RESP的语法消息体是一样的,只是在消息头中的Command_ID是“deliver_sm_resp"。
6.5.2.6 QUERY_SM命令
此命令用于ESME向SMSC查询以前所提交的短消息的状态。
QUERY_SM语法
消息头中的Command_ID是"query_sm"
表9:QUERY_SM语法
        字段                长度(字节)                类型                描述
Message_id        最大9        C_HexString        短消息ID
Ton        1        Integer        地址编码类型
Npi        1        Integer        地址编码方案
Address        最大21        C_DecString        地址
QUERY_SM_RESP语法
消息头中的Command_ID是"query_sm_resp"
表10:QUERY_SM_RESP语法
字段        长度(字节)        类型        描述
Message_id        最大9        C_HexString        短消息ID
final_date        最大17        C_StringTime        短消息生命周期终止时间
Message_status        1        Integer        短消息当前的状态

GSM_code        1        Integer        GSM错误码

状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

E_ADDRERR
E_INVLDMSGID
E_DATABASEFAILURE

E_INVLDORGTON
E_INVLDORGNPI
E_ORGADDRERR

6.5.2.7 CANCEL_SM命令
此命令用于取消ESME以前所提交的短消息。此命令能取消指定短消息ID的短消息,也可取消等待下发的由CANCEL_SM所确定的源地址和目的址的所有短消息(此时,message_id为NULL)。
CANCEL_SM语法
消息头中的Command_ID是"cancel_sm"
表11:CANCEL_SM语法
        字段                长度(字节)                类型                描述
service_type        最大6        C_OctetString         保留,必须设为NULL
message_id        最大9        C_HexString        短消息ID,设置为NULL时表示取消所有源编码地址和目标编码地址与下述地址相同的短消息
source_address_ton        1        Integer        源地址编码类型
source_address_npi        1        Integer        源地址编码方案
source_address        最大21        C_DecString        源地址
dest_address_ton        1        Integer        目的地址编码类型
dest_address_npi        1        Integer        目的地址编码方案
destination_address        最大21        C_DecString        目的地址

CANCLE_SM_RESP语法
此命令只有消息头,没有消息体,消息头中的Command_ID是"cancel_sm_resp"
状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

E_ADDRERR
E_INVLDMSGID
E_DATABASEFAILURE
E_CANCELMSGFAILURE
E_MSGSTATEERR

E_INVLDORGTON
E_INVLDORGNPI
E_ORGADDRERR
E_INVLDDESTTON
E_INVLDDESTNPI
E_DESTADDRERR
       
6.5.2.8 REPLACE_SM命令
此命令用于ESME替换以前所提交的短消息。此命令中所确定的源地址必须与提交短消息时的源地址相同,消息头中的Command_ID是"replace_sm"。
REPLACE_SM语法
表12:REPLACE_SM语法
        字段                长度(字节)                类型                描述
message_id        最大9        C_HexString        短消息的ID
source_address_ton        1        Integer        源地址编码类型
source_address_npi        1        Integer        源地址编码方案
source_address        最大21        C_DecString        源地址
schedule_delivery_time        最大17        C_StringTime        计划下发短消息的时间
validity_peroid        最大17        C_StringTime        短消息的最后生存期限
registered_delivery_flag        1        integer        注册短消息标志
sm_default_msg_id        1        integer        预定义短消息ID
sm_length        1        integer        短消息数据的长度
short_message_text        最大161        可变        短消息数据内容

REPLACE_SM_RESP语法
此命令只有消息头,没有消息体,消息头中的Command_ID是"replace_sm_resp"。
状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

E_ADDRERR
E_INVLDMSGID
E_REPLACEMSGFAILURE
E_MSGSTATEERR
E_INVLDDATAFMT
E_CREATEMSGFAILURE

E_INVLDORGTON
E_INVLDORGNPI
E_ORGADDRERR
E_INVLDSCHEDULE
E_INVLDEXPIRE
E_INVLDESM
E_INVLDUDLEN
E_INVLDRDF
6.5.2.9 ENQUIRE_LINK命令
此命令用于ESME确认和SMSC之间的连接。ESME发送一条ENQUIRE_LINK命令,SMSC响应一条ENQUIRE_LINK_ACK命令,表示ESME和SMSC之间的连接存在。
ENQUIRE_LINK语法
此命令只有消息头,没有消息体,消息头中的Command_ID是"enquire_link"。
ENQUIRE_LINK_RESP语法
此命令只有消息头,没有消息体,消息头中的Command_ID是"enquire_link_resp"。
状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

6.5.2.10 GENERIC_NAK命令
此命令用于当接收消息头有错误的时候的响应,该响应只能由收到请求方发出。
GENERIC_NAK语法
此命令只有消息头,没有消息体,消息头中的Command_ID是"generic_nak"。
状态取值范围:
E_SUCCESS
E_OTHERERR
E_MSGLENERR
E_CMDLENERR
E_NORIGHT
E_INVLDCMDID

6.5.2.11 REPLACE_SM_EX命令
此命令用于扩展REPLACE SM命令。它完成的功能与REPLACE_SM相同,但增加了字段data_coding,符合Phase2+规范。
REPLACE_SM_EX语法
消息头中的Command_ID是"replace_sm_ex"
表13:REPLACE_SM_EX语法
        字段                长度(字节)                类型                描述
message_id        最大9        C_HexString        短消息的ID
source_address_ton        1        integer        源地址编码类型
source_address_npi        1        integer        源地址编码方案
source_address        最大21        C_DecString        源地址
esm_class        1        integer        短消息类型
schedule_delivery_time        最大17        C_StringTime        计划下发短消息的时间
validity_peroid        最大17        C_StringTime        短消息的最后生存期限
registered_delivery_flag        1        integer        注册短消息标志
data_coding        1        integer        数据编码方案
sm_default_msg_id        1        integer        预定义短消息ID
sm_length        1        integer        短消息长度
short_message        最大161        可变        短消息内容

REPLACE_SM_EX_RESP语法
此命令只有消息头,没有消息体,消息头中的Command_ID是"replace_sm_ex_resp"。
状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

E_ADDRERR
E_INVLDMSGID
E_REPLACEMSGFAILURE
E_MSGSTATEERR
E_INVLDDATAFMT
E_CREATEMSGFAILURE
       
E_INVLDORGTON
E_INVLDORGNPI
E_ORGADDRERR
E_INVLDSCHEDULE
E_INVLDEXPIRE
E_INVLDESM
E_INVLDUDLEN
E_INVLDRDF
E_INVLDESM

6.5.2.12 ADD_SUB命令
此命令用于在SMSC数据库中增加一个用户。
ADD_SUB语法
消息头中的Command_ID是"add_sub"
表14:ADD_SUB语法
        字段                长度(字节)                类型                描述
sub_ID        最大21        C_DecString        用户ID,同address
sub_name        最大21        C_String        用户名
sub_address        最大42        C_String        用户通信地址
MS_type        1        integer        手机类型
ton        1        integer        地址编码类型
npi        1        integer        地址编码方案
SM_allowed        1        integer        是否提供短消息
OCOS        1        integer        保留
TCOS        1        integer        保留
password        最大9        C_String        密码

ADD_SUB_RESP语法
        此命令只有消息头,没有消息体,消息头中的Command_ID是"add_sub_resp"。
状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

E_USERALREADYEXIST
E_CREATEUSERERR
E_USERIDERR

6.5.2.13 DEL_SUB命令
此命令用于删除一个用户
DEL_SUB 语法
消息头中的Command_ID是"del_sub"
表14:DEL_SUB_RESP语法
字段        长度(字节)        类型        描述
ton        1        Integer        地址编码类型
npi        1        Integer        地址编码方案
sub_ ID        最大 21        C_DecString        用户ID,同address

DEL_SUB_RESP语法
此命令只有消息头,没有消息体,消息头中的Command_ID是"del_sub_resp"。
状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

E_USERIDERR
E_USERNOTEXIST

6.5.2.14 MOD_SUB命令
此命令用于修改用户信息
MOD_SUB语法
此命令的数据结构与ADD_SUB的结构一致,只是Command_ID为mod_sub。
MOD_SUB_RESP语法
此命令的数据结构与ADD_SUB_RESP的结构一致,只是Command_ID为mod_sub_resp。
        状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT

E_USERIDERR
E_USERNOTEXIST

6.5.2.15 ENQUIRE_SUB命令
此命令用于查询用户的详细信息。
ENQUIRE_SUB语法
消息头中的Command_ID是"enquire_sub "
表15:ENQUIRE_SUB语法
        字段                长度(字节)                类型                描述
Ton        1        Integer        地址编码类型
Npi        1        Integer        地址编码方案
sub_ID        最大21        C_DecString        用户ID,同address

ENQUIRE_SUB_RESP语法
消息头中的Command_ID是"enquire_sub_resp"
表16:ENQUIRE_SUB_RESP语法
字段        长度(字节)        类型        描述
sub_ID        最大 21        C_DecString        用户ID,同address
sub_name        最大 21        C_String        用户名
sub_address        最大 42        C_String        用户通信地址
MS_type        1        integer        手机类型
Ton        1        integer        地址编码类型
Npi        1        integer        地址编码方案
SM_allowed        1        integer        是否提供短消息
OCOS        1        integer        保留
TCOS        1        integer        保留
Password        最大 9        C_String        密码
reg_datetime        最大17        C_StringTime        用户注册时间

状态取值范围:
E_SUCCESS
E_OTHERERR
E_CMDLENERR
E_NORIGHT
E_USERIDERR
E_USERNOTEXIST

6.5.3 消息体参数说明
        address:
        地址号码

        address_range
        地址范围       
       
        data_coding:
        数据编码方案, ( 详见GSM 03.40 [1]   9.2.3.10)

        dest_address_npi:
        目的地址编码方案,同npi

        dest_address_ton:               
        目的地址编码类型,同ton

        destination_address:
        目的地址,同address

        esm_class:
        短消息类型
Bit:        7        6        5        4        3        2        1        0
Flag:        Reserved        UDHI        Reserved        Delivery
RCPT        Reserved

其中UDHI为1表示短消息内容中有头结构,为0表示没有头结构。
Delivery RCPT为1表示是此条短消息是状态报告,0表示为正常的下发短消息。此位只对DELIVER_SM有效。
其他为保留。

如果有头结构,short_message_text为以下格式:
{
                BYTE UDHL;        //信息元素的结构集合所用的字节数
                Information Element-struct Information Element;
        //若干信息元素的结构集合, 其占用的字节数目由UDHL指示
                ...
                SM;        短消息内容
}
其中Information Element-struct的结构如下:
{
                BYTE  Information Element Identifier         // 信息元素的标志
                BYTE  Length of Information Element                //信息元素数据所用的字节数
                Information Element  Data                       
//信息元素数据,其占用的字节数目由Length of Information Element指示
}

定义详见GSM 03.40 (7.2.0) 9.2.3.24

        final_date:
        短消息的生命期终止的实际时间,如果此短消息已从SMSC的等待发送队列中删除,即为删除时间,否则为SMSC当前的时间

        GSM_code:
        GSM错误码,见下表

错误码        值        描述
ERROR_NONE        0        无错误
P_UNKNOWN        1        不知道的用户
P_PROVISION        2        不提供此功能
T_BARRED        3        呼叫废弃
T_SUPPORT        4        此机制不支持
T_ABSENT        5        用户不能通讯
T_MSSUPPORT        6        移动台不支持短消息
T_MSERROR        7        移动台接收短消息出现错误
P_ILLEGAL_SUB        8        不合法的用户
P_ILLEGAL_EQUIP        9        不合法的设备
T_SYSTEM        10        系统失败
T_MEMCAP        11        内存不足

        interface_version:
        用来描述本协议的版本号
在ESME连接SMSC时,如果ESME提出的版本号高于SMSC的版本号,则SMSC给出否定响应,响应中的status表示SMSC的版本号;ESME提出的版本号低于或等于SMSC的版本号,则SMSC给出肯定响应,在连接成功后的会话过程中,双方将以ESME提出的版本号作为通信的依据。interface_version的值从1开始,0保留。
现约定,对于interface_version>=1,必须支持除REPLACE_SM_EX命令和用户管理命令以外的所有协议命令, 对于interface_version>=2, 必须支持所有本文中提到的协议命令。

        message_id:
        短消息ID,它由SMSC设置。用于查询以及替换短消息等操作时使用。
       
        message_status:
        短消息当前的状态:
0:转发状态
1:发送成功(不在尝试转发)
2:发送失败(不在尝试转发)
3:因下发失败而等待(继续尝试转发)
4:因定时消息而等待(继续尝试转发)
5:短消息被删除(不在尝试转发)
6:短消息超时删除(不在尝试转发)
7:无效状态(不在尝试转发)
8:EN_ROUTE,为兼容SMPP协议保留
9:DELIVERED,为兼容SMPP协议保留
10:EXPIRED,为兼容SMPP协议保留
11:DELETED,为兼容SMPP协议保留
12:UNDELIVERABLE,为兼容SMPP协议保留
13:ACCEPTED,为兼容SMPP协议保留
14:INVALID,为兼容SMPP协议保留
其他:保留

        MS_type:
        手机类型
        0:中文手机
                1:英文手机
        >1:保留

        npi:
        地址编码方案,(定义详见GSM03.40[1]  9.1.2.5)
0:未知
1:ISDN电话编码方案
3:数据编码方案(X.121)
4:电报编码方案
8:国家编码方案
9:专用编码方案
10:ERMES 编码方案(ETSI DE/PS 3 01 3)
15:扩充保留
从0到15的其他值保留

        OCOS:
        最大提交短消息,某移动台提交到SMSC的等待下发的短消息的最大数目

        password:       
        用来登录的密码

        priority_flag:
        优先级
        1:高优先级
        0:普通优先级
        >1:保留

        protocol_ID:
        GSM协议类型(定义详见GSM03.40[1]  9.2.3.9)
       
        registered_delivery_flag:
        注册短消息标志,它表示当此短消息到达最后的目的地后,是否需要        转发状态报告(DELIVERY RECEIPT)。
        0:不需要
        1:需要
        >1:保留

        replace_if_present_flag:
        替换标志,当SUBMIT命令中指示的源地址和目的地址与等待下发的短消息的源地址和目的地址都相同时,是否替换这些等待下发的短消息。在DELIVERY命令中该参数无效,需置为0。
        0:不替换
        1:替换
        >1:保留

        schedule_delivery_time:
        对于SUBMIT命令,该参数指计划下发短消息的时间,对于DELIVERY命令,该参数指SMSC收到要下发到ESME的短消息的时间。

        service_type:
        保留,必须设为NULL,原该参数指明短消息服务的类别

        short_message_text:
        短消息数据内容,当编码类型为7位码,类型为C_String,最大长度为160个字符。8位码时,类型为C_String,最大长度为140个字节。当为Unicode时,类型为C_UnicodeString,最大长度为70个字符。

        SM_allowed:
        是否提供短消息业务
                0:不提供
        1:提供
其余值保留

        sm_default_msg_id:
        预定义短消息ID,不是预定义短消息时应设为0。预定义短消息ID值从0x01到        0x64,其值的具体含义由特定的ESME和SMSC约定。其余值保留。

        sm_length:
        短消息的数据长度,以字节计算。

        source_address:
        源地址编号,同address。

        source_address_npi:
        源地址编码方案,同npi。

        source_address_ton:
        源地址编码类型,同        ton。

        sub_address:
        用户通信地址。

        sub_ID:
        用户ID,同address。
       
        sub_name:
        用户名。

        reg_datetime:
        用户注册登记时间        。

        system_id:
        接口ID,用来描述虚拟连接的用户名,即ESME登录SMSC使用的帐号。

        system_type:
        用来描述用户的类型。

        TCOS:
        最大下发数,指等待下发到某移动台的最大短消息数目。

        ton:
        地址编码类型,(定义详见GSM03.40[1]  9.1.2.5)
                0                未知号码
        1                国际号码,例如8613901234567
        2                国内号码,例如13901234567
        3                网络专用号码
        4                用户号码
        5                字母号码(按照 GSM TS03.38 7-bit 缺省字母表编码)
        6                缩写号码
        7                保留

        validity_peroid:
        短消息的最后生存期限。

附录A:命令标志数值定义

命令码宏定义        数值        描述
ESME_BNDRCV        0X00000001        ESME要求连接到SMSC
ESME_BNDRCV        0X80000001        连接SMSC的响应
ESME_BNDTRN        0X00000002        ESME要求连接到SMSC
ESME_BNDTRN_RESP        0X80000002        连接SMSC的响应
ESME_UBD        0X00000006        ESME要求断开连接到SMSC
ESME_UBD_RESP        0X80000006        断开连接的响应
ESME_SUB_SM                0X00000004        ESME提交短消息到SMSC,以便SMSC下发此短消息到特定的用户。
ESME_SUB_SM_RESP        0X80000004        提交短消息的响应
ESME_DELIVER_SM        0X00000005        SMSC下发短消息到特定的ESME
ESME_DELIVER_SM_RESP        0X80000005        下发短消息的响应
ESME_QUERY_SM        0X00000003        ESME查询以前所提交的短消息的状态
ESME_QUERY_SM_RESP        0X80000003        查询短消息的响应
ESME_CANCEL_SM        0X00000008        ESME要求取消以前所提交的某条短消息
ESME_CANCEL_SM_RESP        0X80000008        ESME要求取消以前所提交的某条短消息的响应
ESME_REPLACE_SM        0X00000007        ESME要求替换以前所提交的某条短消息
ESME_REPLACE_SM_RESP        0X80000007        ESME要求替换以前所提交的某条短消息的响应
ESME_QRYLINK        0X00000015        询问扩展短消息实体与短消息中心的连接情况
ESME_QRYLINK_RESP        0X80000015        询问扩展短消息实体与短消息中心的连接情况的响应
ESME_NACK        0X80000000        接收消息头错误的响应
ESME_REPLACE_SM_EX        0X00000090        ESME要求替换以前所提交的某条短消息的扩展命令,它增加了数据编码格式字段
ESME_REPLACE_SM_EX_RESP        0X80000090        扩展替换短消息的的响应
ESME_ADD_SUB        0X000000A0        增加用户
ESME_ADD_SUB_RESP        0X800000A0        增加用户的响应
ESME_DEL_SUB        0X000000A1        删除用户
ESME_DEL_SUB_RESP        0X800000A1        删除用户的响应
ESME_MOD_SUB        0X000000A2        修改用户
ESME_MOD_SUB_RESP        0X800000A2        修改用户的响应
ESME_QRY_SUB        0X000000A3        查询用户的信息
ESME_QRY_SUB_RESP        0X800000A3        查询用户的信息的响应



附录B:扩展的命令标志数值定义

以下为本协议在SMPP上扩充的命令,它包括以下内容
ESME_REPLACE_SM_EX        0X00000090
ESME_REPLACE_SM_EX_RESP        0X80000090
ESME_ADD_SUB        0X000000A0
ESME_ADD_SUB_RESP        0X800000A0
ESME_DEL_SUB        0X000000A1
ESME_DEL_SUB_RESP        0X800000A1
ESME_MOD_SUB        0X000000A2
ESME_MOD_SUB_RESP        0X800000A2
ESME_QRY_SUB        0X000000A3
ESME_QRY_SUB_RESP        0X800000A3

ESME_REPLACE_SM_EX比ESME_REPLACE_SM 增加了data_coding域,该域指明数据的编码方法,从而指示了短消息数据内容的格式,从而能够支持中文等非英语语种,支持PHASE2+  规范。

ESME_ADD_SUB,ESME_DEL_SUB,ESME_MOD_SUB,ESME_QRY_SUB属于用户管理部分,在SMSC有用户数据库支持的条件下选用,增强了ESME的业务能力,使ESME
具有营业受理功能。

posted on 2008-10-13 15:15  狗尾草-大数据收割基  阅读(1132)  评论(0)    收藏  举报