SMPP协议v3.4 中文简明版

yianzhi 贡献于2013-12-26

作者 姜林根  创建于2001-11-14 05:25:00   修改者zhuql  修改于2002-04-22 07:41:00字数11301

文档摘要:SMPP协议描述接口协议简介随着短消息业务在移动通信网上的广泛开展,运营商可以利用短消息平台向用户提供丰富的增值业务。短消息中心(SMSC)可以与人工台、自动台、WEBServer、E-mailServer、WAP网关等各种非PLMN网的扩展短消息实体(ESME)配合工作,从而为移动用户提供丰富多采的功能。在SMSC与ESME间采用标准的协议接口,有助于实现其他厂家的ESME的接入,为运营者集成第三方产品、发展短消息新业务提供方便。SMPP协议规范是内容主要针对扩展短消息实体与短消息中心的通信协议。
关键词:

 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 短消息扩展接口(协议) 文档1 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。 文档1 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 表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必须能够处理没有按顺序回的响应。 文档1 图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) 文档1 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 文档1 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 无效的密码 文档1 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 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"。 文档1 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。 文档1 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。 文档1 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语法 文档1 字段 长度(字节) 类型 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 文档1 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字符。 文档1 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 字母号码(按照 GSMTS03.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后台的配置 文档1 人工台的接入号 7.2人工台开始登录 文档1 发送bindtransmitter请求消息 文档1 码流分析 0 0 0 1d 消息长度: 29 0 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消息 文档1 文档1 短消息中心回复submit响应 常见问题回答: 1. 为什么Esme接入短信中心时报“Esme未配置” 2. 发送短信消息时为何报“无效的绑定状态” 文档1

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 8 金币 [ 分享文档获得金币 ] 1 人已下载

下载文档