SMPP协议
比较正式的说明网站: https://smpp.org/
参考文章: Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=677474
SMPP协议
3.1SMPP规范简介
SMPP接口协议最初由ETSI收录在 GSM03.39规范中,描述了短消息中心与短消息实体之间通信交互的协议关系及数据传输格式,本规范对SMPP接口协议的描述主要面向简单的通信交互,制定规范的厂家将其协议版本号定为V3.30;后由SMPP开发者论坛将协议版本向前演进为V3.40,SMPP V3.40协议规范完全兼容GSM 03.39协议标准。本规范中,所采用的短消息中心设备与短消息股票交易业务处理平台之间的接口采用GSM03.39 V3.30协议规范,如无特殊说明全部以此协议规范为准。SMPP协议可以以TCP/IP或X.25作为底层通讯承载。
与SMPP协议规范相关的参考资料如下:
1、 《GSM 03.39(Version 5.0.0)》:European digital cellular telecommunications system(Phase 2);Interface protocols for the connection of Short Message Service Centres(SMSCs)to Short Message Entities(SMEs);
2、 《GSM 03.39(Version 6.0.0)》:European digital cellular telecommunications system(Phase 2+);Interface protocols for the connection of Short Message Service Centres(SMSCs)to Short Message Entities(SMEs);
3、 《GSM 03.40(Version 4.8.1):European digital cellular telecommunications system(Phase 2);Technical realization of the Short Message Service Point to Point》
4、 《GSM 03.38(Version 5.2.0):Digital cellular telecommunications system(Phase 2+);Alphabets and language_specific information》
5、 《GSM 03.47(Version 5.0.0):Digital cellular telecommunications system;Example protocol stacks for interconnecting Service Center(SC) and Mobile_services Switching Center(s)(MSC)》
6、 《900/1800 MHz 数字蜂窝移动通信系统短消息中心设备规范(第一分册点对点短消息业务)》
SME 短消息实体
SMPP 短消息点对点协议
SMSC 短消息服务中心
ESME 扩展短消息实体
通过SMPP,ESME(例如寻呼台、语音邮箱系统、股票交易业务处理平台等)能连接(Bind)或断连(UnBind)短消息中心,提交(Submit)短消息或从短消息中心下发(Deliver)。
此协议包含以下两部分:
*(协议)ESME到SMSC的消息
*(协议)SMSC到扩展ESME的消息
其中用户管理部分只适用于SMSC有用户数据库支持的情况
SMSC和ESME之间的关系如下图所示:
图3-1:SMSC和ESME连接的短消息系统网络
按短消息信息的流向,可以将ESME与SMSC之间的短消息信息分为两类:1、从SMSC到ESME的消息;2、从ESME到SMSC的消息。对于所有请求消息,无论始发于ESME还是SMSC,都必须产生一个响应消息(acknowledge)。
从ESME到SMSC所提交的消息,可能有两种响应:
*SMSC收到消息的响应(ACK)
*如果这条短消息设置了需要状态报告,那么当这条短消息到达目标地之后,SMSC会产生一个状态报告的消息给ESME。
以下消息是从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 |
enquire_link_resp | Enquire_link的响应 |
generic_nak | 表示消息头有错误的响应 |
.2 ESME到SMSC的消息
以下为ESME到SMSC的消息
命令 | 描述 |
bind_receiver | 短消息实体(ESME/SME)作为服务器与短消息中心(SMSC)建立连接,本连接建立起来后,允许短消息实体接受短消息中心下发的短消。 |
bind_transmitter | 短消息实体(ESME/SME)作为客户端与短消息中心(SMSC)建立连接,本连接建立起来后,允许短消息实体向短消息中心提交短消息。 |
Unbind | 短消息实体(ESME/SME)与短消息中心系统(SMSC)断开会话连接。 |
submit_sm | ESME提交短消息到SMSC,以便SMSC下发此短消息到指定的移动台。 |
deliver_sm_resp | deliver_sm的响应。status表示此次下发是否成功。 |
Enquire_link | 短消息实体向短消息中心发起的连路保持查询请求,以保证通讯链路的畅通。一般情况下约每5秒发送一次ENQUIRE_LINK消息。 |
Generic_nak | 表示消息头有错误的响应 |
3.4.1语法定义规则
在以下语法说明中,遵从以下规则:
A.未使用的字段,依据类型必须设置为0或NULL。
B.消息由消息头和消息体组成
C.状态(status)如在命令语法中未加说明
0:表示成功
非0:表示失败
<0x80000000:未定义值保留
D.在类型中,可能用到以下定义
l integer :一定字节数所组成的整数,高位在前,低位在后。例如:1字节(BYTE),2字节(WORD ) , 4字节(DWORD)。
l C_String :以NULL结束的ASCII字符串
l C_DecString :以NULL结束的ASCII字符串,它由一系列的10进制字符组成(‘0’---‘9’)。
l C_OctetString :由任意8位字节组成数据流串。
l C_HexString :以NULL结束的ASCII字符串,它由一系列的16进制字符组成(‘0’---‘9’,‘A’(‘a’)---‘F’(‘f’))
l C_StringTime :表示时间的字符串,它为以下格式 “YYMMDDhhmmsstnnp" ,格式如下
说明
|
|
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.
|
l C_UnicodeString :Unicode编码的字符串。
3.4.2消息头语法
字段
|
长度(字节)
|
类型
|
Command Length
|
4
|
Integer
|
Command ID
|
4
|
Integer
|
Command_status
|
4
|
Integer
|
Sequence No.
|
4
|
Integer
|
Optional Message Body
|
可变
|
混合
|
具体字段描述说明:
l Command Length:整个包的长度(包括该字段本身)。
l Command ID :这个字段表明该条短消息的类型,相当于标识符。例如ESME_SUB_SM表示此消息为ESME向SMSC提交短消息。当该标识符表示该条消息是请求消息(request)时,标识符的保留取值范围是0h到FFh。当该标识符表示该条消息是应答消息(response)时,标识符的保留取值范围是080000000h到0800000FFh。一般来说,应答消息的类型对应相应的请求消息的类型,所不同的是,应答消息的类型在第31位比特处是置位的。
Command ID命令取值:
Command ID 编码 | Command ID | 描述 |
Command ID取值
|
ESME_BNDRCV
|
bind_receiver
|
ESME要求以接收者身份连接到SMSC
|
0X00000001
|
ESME_BNDRCV_RESP
|
bind_receiver_resp
|
bind_receiver的响应
|
0X80000001
|
ESME_BNDTRN
|
bind_transmitter
|
ESME要求以发送者身份连接到SMSC
|
0X00000002
|
ESME_BNDTRN_RESP
|
bind_transmitrer_resp
|
bind_transmitter的响应
|
0X80000002
|
ESME_UBD
|
Unbind
|
ESME要求断开连接到SMSC
|
0X00000006
|
ESME_UBD_RESP
|
Unbind_resp
|
Unbind的响应
|
0X80000006
|
ESME_SUB_SM
|
Submit_sm
|
ESME提交短消息到SMSC
|
0X00000004
|
ESME_SUB_SM_RESP
|
Submit_sm_resp
|
submit_sm的响应
|
0X80000004
|
SMSC_DELIVER_SM
|
Deliver_sm
|
SMSC下发短消息到ESME
|
0X00000005
|
SMSC_DELIVER_SM_RESP
|
Deliver_sm_resp
|
deliver_sm的响应
|
0X80000005
|
ESME_QRYLINK
|
Enquire_link
|
ESME询问与SMSC的连接情况
|
0X00000015
|
ESME_QRYLINK_RESP
|
Enquire_link_resp
|
enquire_link的响应
|
0X80000015
|
ESME_NACK
|
Nack
|
表示消息头有错误的响应
|
0X80000000
|
l Command Status :此字段表示一个请求消息的成功与失败,如失败,指示引起失败的错误类型等信息。该字段只用在应答消息中,在请求消息中,该字段必须为NULL。
Command Status取值说明 :
错误代码 | 错误值 | 描述 |
E_SUCCESS
|
0X00000000
|
成功
|
E_OTHERERR
|
0X00000001
|
其他错误
|
0X00000002 – 0X0000000F
|
|
保留给SMSC厂商定义错误
|
E_MSGLENERR
|
0X00000010
|
消息长度错误
|
E_CMDLENERR
|
0X00000011
|
命令长度错误
|
E_INVLDCMDID
|
0X00000012
|
消息ID无效
|
E_NORIGHT(0X00000013)
|
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厂商定义错误
|
其他
|
|
保留
|
l Sequence No .:此字段表示消息的序列号,它由ESME产生,它是消息和它的应答之间的对应标志,数值在01h到07FFFFFFFh间。对于每条请求消息,该字段的取值必须保证严格单调递增,当序列号值达到最大值时,返回继续从01h开始。
l Optional Message Body:此字段表示短消息的消息体部分,在移动股票交易应用中承载STK卡应用协议内容。
3.4.3各命令消息体具体格式
1、generic_Nak命令
此命令用于当接收消息头有错误的时候的响应,该响应只能由收到请求方发出。该命令只有消息头,没有消息体。
在扩展短消息实体和短消息中心之间建立虚连接,接收SMSC转发的短消息。
字段
|
长度(字节)
|
类型
|
System_id | 最大 16 | C_String |
Password | 最大 9 | C_String |
System_type | 最大 13 | C_String |
Interface_version | 1 | Integer |
Addr_ton | 1 | Integer |
Addr_npi | 1 | Integer |
Address_range | 最大 41 | C_DecString |
具体字段描述说明:
system_id :该字段是系统登录到短消息中心所用的接口号。
Password :该字段是系统登录到短消息中心所用的密码。
system_type :该字段标明登录的接口类型。
interface_version :该字段标明登录的接口版本号。
addr_ton :该字段指明编码类型。如不需要,可设为NULL。取值说明:
0 未知,当用户或网络不含关于编码方案的较早信息
1 国际号码,
2 国内号码
3 网络特殊号码
4 用户号码
5 字符数字
6 缩写号码
7 保留
addr_npi :该字段指明编码方案。如不需要,可设为NULL。取值说明:
0 未知
1 ISDN或电话号码编码方案(E164/E163),对于任意实体SC,MSC或MS,都有效
2 保留
3 数据编码方案(X121)
4 电报编码方案
5-7 保留
8 国内编码方案
9 私有编码方案
10 ERMES编码方案(ETSI DE/PS 3 01-3)
11-15 保留
address_range :该字段用来给短消息指明路由,和将状态报告转发给ESME。如不需要,可设置为NULL。
3、BIND_RECEIVER_RESP语法
此命令用于对MI_BIND_RECEIVER响应。
字段
|
大小(字节)
|
类型
|
System_id
|
最大 16
|
C_String
|
具体参数说明:
system_id :该字段是系统登录到短消息中心所用的接口号。
在扩展短消息实体和短消息中心之间建立虚连接,扩展短消息实体能向SMSC提交短消息。此命令和BIND_RECEIVER的语法一样,只是在消息头里的Command_id为"bind_transmitter"。
5、BIND_TRANSMITTER_RESP命令
此命令和BIND_RECEIVER_RESP的语法一样,只是在消息头里的Command_id为"bind_transmitter_resp"。
此命令用于断开ESME和SMSC之间的连接。此消息只有消息头,没有消息体。
7、UNBIND_RESP命令
此消息只有消息头,没有消息体。
此命令用于用于ESME提交短消息到SMSC,以便SMSC把此短消息发给特定ESME。
字段 | 长度(字节) | 类型 |
service_type | 最大6 | C_String |
source_addr_ton | 1 | Integer |
source_addr_npi | 1 | Integer |
source_addr | 最大21 | C_DecString |
dest_addr_ton | 1 | Integer |
dest_addr_npi | 1 | Integer |
destination_addr | 最大21 | C_DecString |
esm_class | 1 | Integer |
protocol ID | 1 | Integer |
priority_flag | 1 | Integer |
schedule_delivery_time | 最大 17 | C_StringTime |
validity_period | 最大 17 | C_StringTime |
registered_delivery_flag | 1 | Integer |
replace_if_present_flag | 1 | Integer |
data_coding | 1 | Integer |
sm_default_msg_id | 1 | Integer |
sm_length | 1 | Integer |
short_message | 最大160 | C_String |
具体参数说明:
service_type :保留字段,为将来扩展用。必须设为NULL。
source_addr_ton :源地址编码类型,如不需要,可设为NULL。
source_addr_npi :源地址编码方案,如不需要,可设为NULL。
source_addr :提交该短消息的SME的地址。是提交的短消息的
源地址。如不需要,可设为NULL。
dest_addr_ton :目的地址编码类型,如不需要,可设为NULL。
dest_addr_npi :目的地址编码方案,如不需要,可设为NULL。
destination_addr:短消息的目的地址。对于移动终止的短消息来说,
它就是目的手机的MSISDN。如不需要,可设置为
NULL。
esm_class :该字短为短消息类型。对submit_sm消息来说,
该字段必须为NULL;对deliver_sm消息来说,该
字段表示这条消息是状态报告。该字段的具体解
释请参考后面的消息体参数说明。但对于普通的
SUBMIT_SM命令,此字段设为0。
取值说明 :
此字段的说明如下:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Flag | Reserved | UDHI | Reserved | Reserved | Reserved |
Delivery
Receipt
|
Reserved | Reserved |
其中:
UDHI:表示短消息内容是否有头结构。置位表示有。
Delivery Receipt:在DELIVER_SM协议中使用,表示此条消息是否是状态报告。
protocol ID :GSM协议类型。详细是解释请参考GSM03.40中的
9.2.3.9。
priority_flag :短消息的优先级。当设置了短消息为高优先级,
短消息中心会将该短消息移到同一目的地址的消
息队列的前端,优先进行发送。
取值说明:
0:普通优先级(缺省值)
1:高优先级
>1:保留。
schedule_delivery_time:该字段表示计划下发该短消息的时间。
时间格式请参考前面定义的C_StringTime
的格式. 如不需要,可设置为NULL。
validity_period:该字段表示短消息的最后生存期限。时间格式请
参考前面定义的C_StringTime的格式.如不需要,
可设置为NULL。
registered_delivery_flag:该字段是注册短消息标志,它表示当
短消息到达最后的目的地后,是否需
要状态报告。
取值说明:
0:不需要
1:需要
>1:保留。
replace_if_present_flag:该字段表示替换短消息标志。即当提交
的短消息的源地址和目的地址相同时,
是否替换存在的短消息。
取值说明:
0:不替换
1:替换
>1:保留。
data_coding :该字段表示数据编码方案。
取值说明 :
0 缺省编码方案(7bit编码)
4 二进制编码方案(8bit编码)
8 UCS2编码方案(GB13000)
其他 保留
sm_default_msg_id:该字段表示预定义短消息ID。该ID是短消息中
心管理者建立的预定义短消息表的索引。不想
发送预定义短消息时,该字段应设为NULL。预
定义短消息ID值从0x01到0x64。详细说明请参
考SMPP Applications Guide [9] - Default
Short Message。
sm_length :要发送的短消息数据内容的字节长度。
short_message :该字段表示短消息数据内容。最大可到160字符。
只有sm_length中定义的字节长度可用。此字段的数据编码格式由data_coding决定。
9、SUBMIT_SM_RESP命令
字段 | 长度(字节) | 类型 |
Message_id | 最大9 | C_HexString |
具体参数说明:
Message_id :该字段表示短消息ID,由短消息中心产生,用于
以后查询及替换短消息用,或是表明状态报告所
对应的源消息。如果没有,该字段必须设为
NULL。
此命令由SMSC产生,SMSC通过此命令发送短消息到目的ESME,它也可用于发送DELIVERY RECEIPT消息。语法格式与SUBMIT_SM的语法消息体是相同的,只是在消息头中的Command_id是“deliver_sm"。
字段 | 长度(字节) | 类型 |
service_type | 最大6 | C_String |
source_addr_ton | 1 | Integer |
source_addr_npi | 1 | Integer |
source_addr | 最大21 | C_DecString |
dest_addr_ton | 1 | Integer |
dest_addr_npi | 1 | Integer |
destination_addr | 最大21 | C_DecString |
esm_class | 1 | Integer |
protocol ID | 1 | Integer |
priority_flag | 1 | Integer |
schedule_delivery_time | 最大 17 | C_StringTime |
validity_period | 最大 17 | C_StringTime |
registered_delivery_flag | 1 | Integer |
replace_if_present_flag | 1 | Integer |
data_coding | 1 | Integer |
sm_default_msg_id | 1 | Integer |
sm_length | 1 | Integer |
short_message | 最大160 | C_String |
具体参数说明:
service_type :保留字段,为将来扩展用。必须设为NULL。
source_addr_ton :源地址编码类型,如不需要,可设为NULL。
source_addr_npi :源地址编码方案,如不需要,可设为NULL。
source_addr :提交该短消息的SME的地址。是提交的短消息的
源地址。如不需要,可设为NULL。
dest_addr_ton :目的地址编码类型,如不需要,可设为NULL。
dest_addr_npi :目的地址编码方案,如不需要,可设为NULL。
destination_addr:短消息的目的地址。对于移动终止的短消息来说,
它就是目的手机的MSISDN。如不需要,可设置为
NULL。
esm_class :该字短为短消息类型。对submit_sm消息来说,
该字段必须为NULL;对deliver_sm消息来说,该
字段表示这条消息是状态报告。该字段的具体解
释请参考后面的消息体参数说明。但对于普通的
SUBMIT_SM命令,此字段设为0。
取值说明 :
此字段的说明如下:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Flag | Reserved | UDHI | Reserved | Reserved | Reserved |
Delivery
Receipt
|
Reserved | Reserved |
其中:
UDHI:表示短消息内容是否有头结构。置位表示有。
Delivery Receipt:在DELIVER_SM协议中使用,表示此条消息是否是状态报告。
protocol ID :GSM协议类型。详细是解释请参考GSM03.40中的
9.2.3.9。
priority_flag :短消息的优先级。当设置了短消息为高优先级,
短消息中心会将该短消息移到同一目的地址的消
息队列的前端,优先进行发送。
取值说明:
0:普通优先级(缺省值)
1:高优先级
>1:保留。
schedule_delivery_time:该字段表示计划下发该短消息的时间。
时间格式请参考前面定义的C_StringTime
的格式. 如不需要,可设置为NULL。
validity_period:该字段表示短消息的最后生存期限。时间格式请
参考前面定义的C_StringTime的格式.如不需要,
可设置为NULL。
registered_delivery_flag:该字段是注册短消息标志,它表示当
短消息到达最后的目的地后,是否需
要状态报告。
取值说明:
0:不需要
1:需要
>1:保留。
replace_if_present_flag:该字段表示替换短消息标志。即当提交
的短消息的源地址和目的地址相同时,
是否替换存在的短消息。
取值说明:
0:不替换
1:替换
>1:保留。
data_coding :该字段表示数据编码方案。
取值说明 :
0 缺省编码方案(7bit编码)
4 二进制编码方案(8bit编码)
8 UCS2编码方案(GB13000)
其他 保留
sm_default_msg_id:该字段表示预定义短消息ID。该ID是短消息中
心管理者建立的预定义短消息表的索引。不想
发送预定义短消息时,该字段应设为NULL。预
定义短消息ID值从0x01到0x64。详细说明请参
考SMPP Applications Guide [9] - Default
Short Message。
sm_length :要发送的短消息数据内容的字节长度。
short_message :该字段表示短消息数据内容。最大可到160字符。
只有sm_length中定义的字节长度可用。此字段的数据编码格式由data_coding决定。
11、DELIVER_SM_RESP语法
它的语法和SUBMIT_SM_RESP的语法消息体是一样的,只是在消息头中的Command_id是“deliver_sm_resp"。
此命令用于ESME确认和SMSC之间的连接。ESME发送一条ENQUIRE_LINK命令,SMSC响应一条ENQUIRE_LINK_ACK命令,表示ESME和SMSC之间的连接正常。此命令只有消息头,没有消息体。
13、ENQUIRE_LINK_RESP命令
此命令只有消息头,没有消息体。
3.4.4消息体参数说明
l address: 地址号码
l address_range:地址范围
l data_coding:数据编码方案, ( 详见GSM 03.40 [1] 9.2.3.10)
例如:
0:缺省编码方案(7位)
4:英文编码方案(不被手机支持)
8:UCS2编码方案(比如中文编码)
l dest_addr_npi:目的地址编码方案,同npi
l dest_addr_ton:目的地址编码类型,同ton
l destination_addr: 目的地址,同address
l esm_class: 短消息类型
此字段的说明如下:
Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Flag | Reserved | UDHI | Reserved | Reserved | Reserved |
Delivery
Receipt
|
Reserved | Reserved |
其中 UDHI 表示短消息内容是否有头结构。置位表示有。Delivery Receipt,在DELIVER_SM协议中使用,表示是否是此条消息是否是状态报告。
对于普通的SUBMIT_SM命令,此字段设为0。
l final_date:短消息的生命期终止的实际时间,如果此短消息已从SMSC的等待发送队列中删除,即为删除时间,否则为SMSC当前的时间
l GSM_code: GSM错误码,参见GSM 03.40协议。
l interface_version:用来描述SMEI协议的版本号
l Message_id:短消息ID,它由SMSC设置。用于查询以及替换短消息等操作时使用。
l Command Status:短消息当前的状态
l npi:地址编码方案,(定义详见GSM03.40[1] 9.1.2.5)
例如: 1 表示ISDN电话编码计划
l password: 用来登录的密码
l priority_flag:优先级
1:高优先级
0:普通优先级
>1:保留
l protocol_ID:GSM协议类型(定义详见GSM03.40[1] 9.2.3.9)
l registered_delivery_flag: 注册短消息标志,它表示当此短消息到达最后的目的地后,是否需要 送达状态报告(DELIVERY RECEIPT)。
0:不需要
1:需要
>1:保留
l replace_if_present_flag:替换标志,当存在的短消息的源地址和目的地址都相同时,是否替换存在的短消息。
0:不替换
1:替换
>1:保留
l schedule_delivery_time: 计划下发短消息的时间
l service_type::保留,必须设为NULL
l short_message: 短消息数据内容。在7bit时,是160字符;在8bit时,是140字符。
l sm_default_msg_id: 预定义短消息ID,不是预定义短消息时应设为0,预定义短消息ID值从0x01到0x64。
l sm_length: 短消息的数据长度,以字节计算
l source_addr:源地址编号,同address
l source_addr_npi: 源地址编码方案,同npi
l source_addr_ton: 源地址编码类型,同 ton
l system_id:接口ID,用来描述虚拟连接的用户名
l system_type:用来描述用户的类型
l ton:地址编码类型,(定义详见GSM03.40[1] 9.1.2.5)
0 未知号码
1 国际号码
2 国内号码
3 网络专用号码
4 用户号码
5 字母号码(按照 GSM TS03.38 7-bit 缺省字母表编码)
6 缩写号码
7 保留
l validity_period:短消息的最后生存期限
3.3 SMPP协议流程
![](http://blog.csdn.net/images/blog_csdn_net/kof820/snap30.jpg)
![](http://blog.csdn.net/images/blog_csdn_net/kof820/snap31.jpg)
![](http://blog.csdn.net/images/blog_csdn_net/kof820/snap32.jpg)
![](http://blog.csdn.net/images/blog_csdn_net/kof820/snap33.jpg)
附录一:SMPP协议中注意的几个问题
1、 本规范的各消息的消息头中,对Sequence No字段,采用严格单调递增函数方式((x1,y1),(x2,y2)是二维函数空间任意两个坐标取值;当x2-x1>0时,函数(y2-y1)/( x2-x1)>0)进行计数;当序列号达到最大值时自动返回最小值起继续计数。
2、 在BIND_RECEIVER_RESP消息中,system_id字段可以为NULL。
3、 在有STK卡的手机提交一加密的短消息到调度中心,DCS为4(表示短消息内容是8-bit数据,是用户自定义的编码方案),短消息的内容由于经过加密,可能成为二进制的数据流,此时短消息中心应将该二进制的数据流完整的送到手机银行业务模块;同样,如果是业务模块向短消息中心提交一加密的短消息,短消息的DCS为4,内容是二进制的数据流,短消息中心应该将该数据流完整的送到手机或ESME上去。
4、 在本规范 中,short_message字段的类型定义根据《900/1800MHz TDMA数字蜂窝移动通信网短消息中心设备规范书(第一分册点对点短消息业务)》进一步说明:
l 当DCS=0时,采用OCTET 7-bit编码方案,short_message字段的类型是C_String,即是以NULL结束的ASCII字符串(文本),最大长度为160个字符;ESME不做编解码工作,由短消息中心进行编解码工作;
l 当DCS=4时,是加密数据,二进制的数据流,short_message字段的类型是C_OctetString,即是由任意8位字节组成的数据流串,最大长度为140字节;短消息中心进行透明传输,不做任何编解码工作,编解码工作由SME/ESME来完成;
l 当DCS=8时,采用的是UCS2编码方案,short_message字段的类型是C_UnicodeString,即是Unicode编码的字符串,最大长度为70个字符。也就是说,short_message字段中的内容在送往短消息中心前,已经按UCS2编码,短消息中心应支持汉字短消息业务的透明传输,即UCS2的编解码应由SME/ESME来完成