资源描述
SMPP协议描述
1 接口协议简介
随着短消息业务在移动通信网上的广泛开展,运营商可以利用短消息平台向用户提供丰富的增值业务。短消息中心(SMSC)可以与人工台、自动台、WEB Server、E-mail Server、WAP网关等各种非PLMN网的扩展短消息实体(ESME)配合工作,从而为移动用户提供丰富多采的功能。在SMSC与ESME间采用标准的协议接口,有助于实现其他厂家的ESME的接入,为运营者集成第三方产品、发展短消息新业务提供方便。
SMPP协议规范的内容主要针对扩展短消息实体与短消息中心的通信协议。协议主要描述短消息中心和扩展短消息实体之间的协议数据传输格式。此协议运行在底层通讯协议(例如TCP/IP,X.25)上。
GSM03.39 v5.0.0中推荐的SMPP协议的内容中,能支持GSM的 PHASE2+的业务,另外还包括了可选的短消息用户管理的功能。规范面向现有的短消息业务,以后对于新业务(如WAP业务)的支持,可做相应修改。GSM 03.39 v5.0.0协议中错误状态和短消息状态没有定义具体的值,以Aldiscon的SMPP Application定义为准。
参考资料
《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);
《GSM 03.40(Version 4.8.1):European digital cellular telecommunications system(Phase 2);Technical realization of the Short Message Service Point to Point》
《GSM 03.38(Version 5.2.0):Digital cellular telecommunications system(Phase 2+);Alphabets and language_specific information》
《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)》
1.1 缩略语
SME 短消息实体
SMPP 短消息点对点协议
SMSC 短消息服务中心
ESME 扩展短消息实体
SMEI 短消息扩展接口(协议)
2 功能概述
通过SMEI,ESME(例如寻呼台,语音邮箱系统)能连接(BIND)或断连(UNBIND)短消息中心,提交(SUBMIT)短消息。
此协议包含以下两部分:
*(协议)ESME到SMSC的消息
*(协议)SMSC到扩展ESME的消息
其中用户管理部分只适用于SMSC有用户数据库支持的情况
ESME可以与SMSC直接或者间接相连,直接相连时通过本规范确定的协议与SMSC通信,间接相连时,通过ESME Agent与SMSC相连,ESME Agent为ESME与SMSC之间的连接代理。ESME Agent与SMSC间走内部消息,ESME和ESME Agent之间则走标准的SMPP协议。采用ESME Agent间接相连方式,对接入SMSC的ESME提供了分类管理的便利(不同ESME连接到不同的Agent),有利于负荷分担和系统的稳定。见图1。
图1:ESME与SMSC的直接和间接连接方式图
SMSC和ESME连接的短消息系统网络
ESME到SMSC的消息
ESME能提交短消息到SMSC,也可以查询以前所提交的短消息的状态等信息。
SMSC到ESME的消息
SMSC可以下发短消息到ESME。
3 消息协议
l 所有的消息,不管是从ESME到SMSC,还是从SMSC到ESME的消息,消息都是交互的,都必须产生一个响应(acknowledge)。
l 从ESME到SMSC所提交的消息,可能有两种响应:
*SMSC收到消息的响应(ACK)
*如果这条短消息设置了需要状态报告,那么当这条短消息到达目标地之后,SMSC会产生一个状态报告的消息给ESME。
4 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必须能够处理没有按顺序的响应。
图4:TRANSMITTER类型的EMSE和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
表示消息头有错误的响应
5 SMSC到ESME的消息
SMSC到ESME的消息,如:SMSC转发短消息到ESME,ESME必须以RECEIVER类型连接到SMSC。
图5描述了一个典型的RECEIVER类型的ESME和SMSC之间的消息序列的示例。RECEIVER类型的ESME是以BIND_RECEIVER连接到SMSC的ESME,SMSC向此类ESME转发短消息,ESME向SMSC回应答。
ESME和SMSC之间的请求应答消息可以是阻塞方式也可以是异步方式的。所以SMSC可能在ESME没有回应答的情况下,发送发起多个deliver_sm请求到ESME。
ESME应该按照收到的请求顺序,给SMSC返回响应。但是SMSC必须能够处理没有按顺序回的响应。
图5:RECEIVER类型的EMSE和SMSC的消息序列示例
表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的响应
enquire_link
询问与ESME的连接情况
generic_nak
表示消息头有错误的响应
6 消息语法
在以下语法说明中,遵从以下规则:
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编码的字符串。
6.1 消息头语法
字段
长度(字节)
类型
Command Length
4
Integer
Command ID
4
Integer
Command_status
4
integer
Sequence No.
4
integer
Optional Message Body
可变
混合
具体字段描述说明:
Command Length:整个包的长度(包括该字段本身)。
Command ID :这个字段表明该条短消息的类型,相当于标识符。例如
ESME_SUB_SM表示此消息为ESME向SMSC提交短
消息。当该标识符表示该条消息是请求消息(request)
时,标识符的保留取值范围是0h到FFh。当该标识符表
示该条消息是应答消息(response)时,标识符的保留
取值范围是080000000h到0800000FFh。一般来说,
应答消息的类型对应相应的请求消息的类型,所不同的
是,应答消息的类型在第31位比特处是置位的。
取值说明 :
Command ID 编码
Command ID
描述
ESME_BNDRCV
bind_receiver
0x00000001
ESME要求以接收者身份连接到SMSC
ESME_BNDRCV_RESP
bind_receiver_resp
0x80000001
bind_receiver的响应
ESME_BNDTRN
bind_transmitter
0x00000002
ESME要求以发送者身份连接到SMSC
ESME_BNDTRN_RESP
bind_transmitrer_resp
0x80000002
bind_transmitter的响应
ESME_UBD
Unbind
0x00000006
ESME要求断开连接到SMSC
ESME_UBD_RESP
unbind_resp
0x80000006
Unbind的响应
ESME_SUB_SM
submit_sm
0x00000004
ESME提交短消息到SMSC
ESME_SUB_SM_RESP
submit_sm_resp
0x80000004
submit_sm的响应
SMSC_DELIVER_SM
deliver_sm
0x00000005
SMSC下发短消息到ESME
SMSC_DELIVER_SM_RESP
deliver_sm_resp
0x80000005
deliver_sm的响应
ESME_QRYLINK
enquire_link
0x00000015
ESME询问与SMSC的连接情况
ESME_QRYLINK_RESP
enquire_link_resp
0x80000015
enquire_link的响应
ESME_NACK
Nack 0x80000000
表示消息头有错误的响应
Command Status :此字段表示一个请求消息的成功与失败,如失败,指
示引起失败的错误类型等信息。该字段只用在应答消
息中,在请求消息中,该字段必须为NULL。
取值说明 :
错误码
描述
ESME_ROK
消息发送成功
ESME_RINVMSGLEN
无效的消息长度
ESME_RINVCMDLEN
无效的命令长度
ESME_RINVCMDID
无效的Command ID
ESME_RINVBNDSTS
无效的连接状态
ESME_RALYBND
已经处于连接状态
ESME_RINVPRTFLG
无效的优先级标志
ESME_RINVREGDLVFLG
无效的注册短消息标志
ESME_RSYSERR
短消息中心系统错误
ESME_RINVPAR
参数无效
ESME_RINVSRCADR
源地址无效
ESME_RINVDSTADR
目的地址无效
ESME_RINVMSGID
无效的message-id
ESME_RINVPASWD
无效的密码
ESME_RINVPASWDLEN
密码长度错误
ESME_RINVSYSIDSRV
无效的接口ID
ESME_RCNTCANMSG
不能删除短消息
ESME_RINVDATFMT
无效的日期格式
ESME_RCNTREPMSG
不能替换短消息
ESME_RMSGQFUL
目前队列中有太多的短消息
ESME_RSERNOTSUP
服务不支持
ESME_RINVREPADDR
尝试替换时地址不匹配
ESME_RUNKNOWNERR
未知错误
Sequence No .:此字段表示消息的序列号,它由ESME产生,它是消息和
它的应答之间的对应标志,数值在01h到07FFFFFFFh
间。对于每条请求消息,该字段必须保证严格单调的递增。
Optional Message Body:此字段表示短消息的消息体部分,具体定义见1.1。
6.1.1 generic_Nak命令
此命令用于当接收消息头有错误的时候的响应,该响应只能由收到请求方发出。
6.1.1.1 generic_Nak语法
该命令只有消息头,没有消息体。
6.2 消息体语法
6.2.1 BIND_RECEIVER命令
在扩展短消息实体和短消息中心之间建立虚连接,接收SMSC转发的短消息。
6.2.1.1 BIND_RECEIVER语法
字段
长度(字节)
类型
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。
6.2.1.2 BIND_RECEIVER_RESP语法
此命令用于对MI_BIND_RECEIVER响应。
字段
大小(字节)
类型
system_id
最大 16
C_String
具体参数说明:
system_id :该字段是系统登录到短消息中心所用的接口号。
6.2.2 BIND_TRANSMITTER命令
在扩展短消息实体和短消息中心之间建立虚连接,扩展短消息实体能向SMSC提交短消息。
6.2.2.1 BIND_TRANSMITTER语法
此命令和BIND_RECEIVER的语法一样,只是在消息头里的Command_id为"bind_transmitter"。
6.2.2.2 BIND_TRANSMITTER_RESP语法
此命令和BIND_RECEIVER_RESP的语法一样,只是在消息头里的Command_id为"bind_transmitter_resp"。
6.2.3 UNBIND命令
此命令用于断开ESME和SMSC之间的连接。
6.2.3.1 UNBIND语法
此消息只有消息头,没有消息体。
6.2.3.2 UNBIND_RESP语法
此消息只有消息头,没有消息体。
6.2.4 SUBMIT_SM命令
此命令用于用于ESME提交短消息到SMSC,以便SMSC把此短消息发给特定ESME。
6.2.4.1 SUBMIT_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
可变
具体参数说明:
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 缺省编码方案(7位)
4 英文编码方案(不被手机支持)
8 UCS2编码方案
其他 保留
sm_default_msg_id:该字段表示预定义短消息ID。该ID是短消息中
心管理者建立的预定义短消息表的索引。不想
发送预定义短消息时,该字段应设为NULL。预
定义短消息ID值从0x01到0x64。详细说明请参
考SMPP Applications Guide [9] - Default
Short Message。
sm_length :要发送的短消息数据内容的字节长度。
short_message :该字段表示短消息数据内容。最大可到160字符。
只有sm_length中定义的字节长度可用。
6.2.4.2 SUBMIT_SM_RESP语法
字段
长度(字节)
类型
Message_id
最大9
C_HexString
具体参数说明:
Message_id :该字段表示短消息ID,由短消息中心产生,用于
以后查询及替换短消息用,或是表明状态报告所
对应的源消息。如果没有,该字段必须设为
NULL。
6.2.5 DELIVER_SM命令
此命令由SMSC产生,SMSC通过此命令发送短消息到目的ESME,它也可用于发送DELIVERY RECEIPT消息。
6.2.5.1 DELIVER_SM语法
它的语法和SUBMIT_SM的语法消息体是相同的,只是在消息头中的Command_id是“deliver_sm"。
6.2.5.2 DELIVER_SM_RESP语法
它的语法和SUBMIT_SM_RESP的语法消息体是一样的,只是在消息头中的Command_id是“deliver_sm_resp"。
6.2.6 ENQUIRE_LINK命令
此命令用于ESME确认和SMSC之间的连接。ESME发送一条ENQUIRE_LINK命令,SMSC响应一条ENQUIRE_LINK_ACK命令,表示ESME和SMSC之间的连接正常。
6.2.6.1 ENQUIRE_LINK语法
此命令只有消息头,没有消息体。
6.2.6.2 ENQUIRE_LINK_RESP语法
此命令只有消息头,没有消息体。
6.3 消息体参数说明
address: 地址号码
address_range:地址范围
data_coding:数据编码方案, ( 详见GSM 03.40 [1] 9.2.3.10)
例如:
0:缺省编码方案(7位)
4:英文编码方案(不被手机支持)
8:UCS2编码方案(比如中文编码)
dest_addr_npi:目的地址编码方案,同npi
dest_addr_ton:目的地址编码类型,同ton
destination_addr: 目的地址,同address
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。
final_date:短消息的生命期终止的实际时间,如果此短消息已从SMSC的等待发送队列中删除,即为删除时间,否则为SMSC当前的时间
interface_version:用来描述SMEI协议的版本号
Message_id:短消息ID,它由SMSC设置。用于查询以及替换短消息等操作时使用。
Command Status:短消息当前的状态.0表示成功,非0表示失败
npi:地址编码方案,(定义详见GSM03.40[1] 9.1.2.5)
例如: 1 表示ISDN电话编码计划
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:替换标志,当存在的短消息的源地址和目的地址都相同时,是否替换存在的短消息。
0:不替换
1:替换
>1:保留
schedule_delivery_time: 计划下发短消息的时间
service_type:: 保留,必须设为NULL
short_message: 短消息数据内容。在7bit时,是160字符;在8bit时,是140字符。
sm_default_msg_id: 预定义短消息ID,不是预定义短消息时应设为0,预定义短消息ID值从0x01到0x64。
sm_length: 短消息的数据长度,以字节计算
source_addr:源地址编号,同address
source_addr_npi: 源地址编码方案,同npi
source_addr_ton: 源地址编码类型,同 ton
system_id:接口ID,用来描述虚拟连接的用户名
system_type:用来描述用户的类型
ton:地址编码类型,(定义详见GSM03.40[1] 9.1.2.5)
0 未知号码
1 国际号码
2 国内号码
3 网络专用号码
4 用户号码
5 字母号码(按照 GSM TS03.38 7-bit 缺省字母表编码)
6 缩写号码
7 保留
validity_period:短消息的最后生存期限
npi:
地址编码方案,(定义详见GSM03.40[1] 9.1.2.5)
0:未知
1:ISDN电话编码方案
3:数据编码方案(X.121)
4:电报编码方案
8:国家编码方案
9:专用编码方案
10:ERMES 编码方案(ETSI DE/PS 3 013)
15:扩充保留
从0到15的其他值保留
7.举例
人工台发一条消息到某一手机用户的所有动作:
7.1人工台在129后台的配置
人工台的接入号
7.2人工台开始登录
发送bindtransmitter请求消息
码流分析
0 0 0 1d 消息长度: 29
1 0 0 2 消息类型: Bind_Transmitter 消息头
0 0 0 0 消息状态: 成功
0 0 0 1 序列号: 1
31 30 32 0 system_id =“102”最后 0 表示字符串结束符
0 password = 0 此时 0 既表示该字段值为0 也表示分隔符
4d 41 4e 0 system_type =“MAN”最后 0 表示分隔符
3 接口版本 3.3 消息体
0 ton
0 npi
0 address_range
smsc给以bindtransmitter响应消息
链路建立成功,人工台发送SubmitReq消息
短消息中心回复submit响应
常见问题回答:
1. 为什么Esme接入短信中心时报“Esme未配置”
2. 发送短信消息时为何报“无效的绑定状态”
展开阅读全文