册册册册 核核核核
外部外部外部外部 ))))
描述手描述手描述手描述手心子系统心子系统心子系统心子系统
接口接口接口接口((((SMPPSMPPSMPPSMPP
内容介绍
核心子系统外部接口 SMPP 描述手册 对SMSC的SMPP接口进行了详细的说
明 规定了SMSC和ESME之间通信的数据格式 包括SMPP与ESME的消息参数结构和
说明 本手册分为以下几个章节
第一章 概述
对SMPP的功能进行简单描述
第二章 SMPP消息结构
说明了SMPP消息流类型 消息头和消息体结构说明
第三章 返回错误代码
说明SMSC返回给ESME的错误代码及意义
核心子系统外部接口 SMPP 描述手册
撰 稿 高 飞
责任审阅 吴 俊 易 滨
I
目目目目 录录录录
1 概述概述概述概述 ........................................................................................................................................................................................................................................ 1111----1111
2 SMPPSMPPSMPPSMPP消息结构消息结构消息结构消息结构............................................................................................................................................................................................................2222----1111
2.1 SMSC和ESME连接消息流................................................ 2-1
2.2 类型说明............................................................ 2-3
2.3 消息头结构.......................................................... 2-4
2.4 SMPP命令码.......................................................... 2-4
2.5 SMPP消息体结构...................................................... 2-6
2.5.1 BIND_RECEIVER................................................ 2-6
2.5.2 BIND_RECEIVER_RESP........................................... 2-6
2.5.3 BIND_TRANSMITTER............................................. 2-7
2.5.4 BIND_TRANSMITTER_RESP........................................ 2-7
2.5.5 UNBIND....................................................... 2-7
2.5.6 UNBIND_RESP.................................................. 2-8
2.5.7 SUBMIT_SM.................................................... 2-8
2.5.8 SUBMIT_SM_RESP............................................... 2-9
2.5.9 DELIVER_SM.................................................. 2-10
2.5.10 DELIVER_SM_RESP............................................. 2-12
2.5.11 QUERY_SM.................................................... 2-12
2.5.12 QUERY_SM_RESP............................................... 2-12
2.5.13 CANCEL_SM................................................... 2-13
2.5.14 CANCLE_SM_RESP.............................................. 2-14
2.5.15 ENQUIRE_LINK................................................ 2-14
2.5.16 ENQUIRE_LINK_RESP........................................... 2-15
2.5.17 GENERIC_NAK................................................. 2-15
2.5.18 ADD_SUB..................................................... 2-15
II
2.5.19 ADD_SUB_RESP................................................ 2-16
2.5.20 DEL_SUB..................................................... 2-16
2.5.21 DEL_SUB_RESP................................................ 2-17
2.5.22 MOD_SUB..................................................... 2-17
2.5.23 MOD_SUB_RESP................................................ 2-17
2.5.24 ENQUIRE_SUB................................................. 2-18
2.5.25 ENQUIRE_SUB_RESP............................................ 2-18
2.6 SMPP消息体参数含义................................................. 2-20
3 返回错误代码返回错误代码返回错误代码返回错误代码............................................................................................................................................................................................................3333----1111
III
插插插插 图图图图 目目目目 录录录录
图2-1 使用两条虚连接的方式的SMPP会话消息流.................................. 2-1
图2-2 使用一条虚连接的方式的SMPP会话消息流.................................. 2-2
IV
列列列列 表表表表 目目目目 录录录录
表2-1 17个字节的时间字符串.................................................. 2-3
表2-2 SMPP消息头结构........................................................ 2-4
表2-3 SMPP命令码............................................................ 2-4
表2-4 BIND_RECEIVER消息体结构............................................... 2-6
表2-5 BIND_RECEIVER_RESP消息体结构.......................................... 2-6
表2-6 SUBMIT_SM消息体结构................................................... 2-8
表2-7 SUBMIT_SM_RESP消息体结构.............................................. 2-9
表2-8 DELIVER_SM消息体结构................................................. 2-10
表2-9 短消息内容字节定义................................................... 2-11
表2-10 QUERY_SM消息体结构.................................................. 2-12
表2-11 QUERY_SM_RESP消息体结构............................................. 2-13
表2-12 CANCEL_SM消息体结构................................................. 2-13
表2-13 ADD_SUB消息体结构................................................... 2-15
表2-14 DEL_SUB消息体结构................................................... 2-16
表2-15 ENQUIRE_SUB消息体结构............................................... 2-18
表2-16 ENQUIRE_SUB_RESP消息体结构.......................................... 2-18
表2-17 GSM_code............................................................ 2-21
表3-1 返回错误代码.......................................................... 3-1
核心子系统外部接口(SMPP)描述手册 第一章 概述
1-1
1 概述概述概述概述
SMPP协议规定了SMSC和ESME之间通信的数据格式 提供了TCP/IP接口 与SMSC建
立连接 并进行相关操作如提交短消息 查询短消息和删除短消息等等 通过本
接口 其他应用可以将信息以SM的形式发送给相关用户
所有的消息 不管是从ESME到SMSC 还是从SMSC到ESME的消息 都必须产生一个
响应 acknowledge
从ESME到SMSC发送提交短消息的消息 可能有两种响应
!" SMSC收到消息的响应 ACK
!" 如果这条短消息设置了需要状态报告 那么当这条短消息到达目标地之后
SMSC会产生一个状态报告的消息下发给ESME
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-1
2 SMPPSMPPSMPPSMPP消息结构消息结构消息结构消息结构
2.1 SMSCSMSCSMSCSMSC和和和和ESMEESMEESMEESME连接消息流连接消息流连接消息流连接消息流
下面以例图来说明绑定后进行的会话过程 绑定后可进行任意多次会话
使用两条虚连接的方式见图2-1
图2-1 使用两条虚连接的方式的SMPP会话消息流
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-2
使用一条虚连接的方式见图2-2
图2-2 使用一条虚连接的方式的SMPP会话消息流
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-3
2.2 类型说明类型说明类型说明类型说明
在SMPP类型中 可能用到以下定义
!" integer 一定字节数所组成的整数 高位在前 低位在后 例如 1字节
BYTE 2字节 WORD 4字节 DWORD 6字节等等
!" C_String 以NULL结束的ASCII字符串
!" C_DecString 以NULL结束的ASCII字符串 它由一系列的10进制字符组成
(‘0’#’9’).
!" C_OctetString 由任意8位字节组成数据流串
!" C_HexString:以NULL结束的ASCII字符串 它由一系列的16进制字符组成
(‘0’#’9’,‘A’(‘a’)#‘F’(‘f’))
!" C_UnicodeString 以NULL结束的Unicode编码的字符串
!" C_StringTime:表示时间的字符串 格式为 YYMMDDhhmmsstnnp" 长度定
为17个字节或1个字节 最后一个字节值必须为NULL 1个字节表示使用缺省
的时间定义 由短消息中心实现时具体设置 17个字节的具体格式如下表
2-1
表2-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.
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-4
对于千年问题 采用时间窗口的方法来解决 具体方法为YY>90解释为19YY 否
则解释为20YY
2.3 消息头结构消息头结构消息头结构消息头结构
SMPP消息结构见表2-2所示
表2-2 SMPP消息头结构
字 段 长度 字节 类 型 描 述
Command_Length 4 Integer 消息包的长度 包括此字段
Command_ID 4 Integer
这个字段表明此条短消息的类型 例
如 ESME_SUB_SM表示此消息为 ESME向
SMSC提交短消息
Command_status 4 Integer
此字段表示一个命令的成功与失败
如失败 指示引起失败的错误类型等
信息 它在请求中必须设为0
Sequence_No 4 Integer
此字段表示消息的序列号 它由ESME
产生 它是消息和它的应答之间的对
应标志 它的数值在0到0XFFFFFFFF间
必须保证严格单调的递增 当达到
0XFFFFFFFF时 从0开始下一循环
Optional
Message Body 可变 混合
此字段表示短消息的消息体部分 具
体定义参见2.6节
2.4 SMPPSMPPSMPPSMPP命令码命令码命令码命令码
SMPP命令码定义如表2-3所示
表2-3 SMPP命令码
命令码宏定义 数 值 描 述
ESME_BNDRCV 0X00000001 ESME要求连接到SMSC
ESME_BNDRCV_RESP 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下发此短消
息到特定的用户
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-5
命令码宏定义 数 值 描 述
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_QRYLINK 0X00000015 询问扩展短消息实体与短消息中心的连接情况
ESME_QRYLINK_RESP 0X80000015 询问扩展短消息实体与短消息中心的连接情况
的响应
ESME_NACK 0X80000000 接收消息头错误的响应
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_QRYLINK 无响应 则应重新连接
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-6
2.5 SMPPSMPPSMPPSMPP消息体结构消息体结构消息体结构消息体结构
通过SMPP协议 ESME 能连接或断连 UNBIND SMSC 提交 SUBMIT 替换
REPLACE 取消 CANCEL 查询 QUERY 短消息 SMSC能下发
DELIVERY 短消息到ESME
在 传 递 短 消 息 之 前 必 须 先 建 立 虚 连 接 bind_transmitter
bind_receiver 之后才能够进行短消息传递
2.5.1 BIND_RECEIVERBIND_RECEIVERBIND_RECEIVERBIND_RECEIVER
此命令在扩展短消息实体和短消息中心之间产生虚连接 该连接支持所有的协议
命令 可以接收DELIVER及短消息送达状态报告
消息头中的Command_ID是 ESME_BNDRCV" 消息体结构见表2-4所示
表2-4 BIND_RECEIVER消息体结构
字 段 长度(字节) 类 型 描 述
System_id 最大 16 C_String 接口ID
Password 最大 9 C_String 密码
System_type 最大 13 C_String 保留 应设为NULL
Interface_version 1 Integer 接口版本号
Ton 1 Integer 保留 应设为0
Npi 1 Integer 保留 应设为0
Address_range 最大 41 C_DecString 保留 应设为NULL
2.5.2 BIND_RECEIVER_RESPBIND_RECEIVER_RESPBIND_RECEIVER_RESPBIND_RECEIVER_RESP
消息头中的Command_ID 是 ESME_BNDRCV_RESP"
该命令消息体结构见表2-5所示
表2-5 BIND_RECEIVER_RESP消息体结构
字 段 大小(字节) 类 型 描 述
System_id 最大 16 C_String 接口ID
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-7
状态取值范围
ESME_ROK
ESME_RUNKNOWNERR
ESME_RUNKNOWNERR
ESME_RINVBNDSTS
ESME_RINVSYSIDSRV
ESME_RINVSYSIDSRV
ESME_RINVPASWDLEN
ESME_RINVSYSTYP
ESME_RUNKNOWNERR
ESME_RUNKNOWNERR
ESME_RINVMSGLEN
ESME_RINVSYSIDSRV
ESME_RSYSERR
ESME_RLIMITEXCEED
2.5.3 BIND_TRANSMITTERBIND_TRANSMITTERBIND_TRANSMITTERBIND_TRANSMITTER
此命令在扩展短消息实体和短消息中心之间产生虚连接 和BIND_RECEIVER的语
法一样 只是在消息头里的Command_ID为"ESME_BNDTRN"
此命令建立的连接ESME用于发送短消息 不接收短消息
2.5.4 BIND_TRANSMITTER_RESPBIND_TRANSMITTER_RESPBIND_TRANSMITTER_RESPBIND_TRANSMITTER_RESP
此命令和BIND_RECEIVER_RESP的语法一样 只是在消息头里的Command_ID为
"ESME_BNDTRN_RESP"
状态取值范围同BIND_RECEIVER_RESP
2.5.5 UNBINDUNBINDUNBINDUNBIND
此命令用于断开ESME和SMSC之间的连接
此消息只有消息头 没有消息体 消息头中的Command_ID是 ESME_UBD"
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-8
2.5.6 UNBIND_RESPUNBIND_RESPUNBIND_RESPUNBIND_RESP
此消息只有消息头 没有消息体 消息头中的Command_ID是 ESME_UBD_RESP"
状态取值范围
ESME_ROK
ESME_RINVBNDSTS
2.5.7 SUBMIT_SMSUBMIT_SMSUBMIT_SMSUBMIT_SM
此命令用于ESME提交短消息到SMSC 以便SMSC把此短消息发给特定的移动台
注 提交预定义短消息时 短消息内容长度以及短消息内容字段无效
该命令消息头中的Command_ID是"ESME_SUB_SM" 消息体结构见表2-6所示
表2-6 SUBMIT_SM消息体结构
字 段 大小(字节) 类 型 描 述
Service_type 最大6 C_DecString
短消息服务的类别
如果为NULL 或’0’系统自动使用当前systemID代替
Source_address_to
n 1 integer 保留 应设为0
Source_address_np
i 1 integer 保留 应设为0
Source_address 最大21 C_DecString 源地址
Dest_address_ton 1 integer 保留 应设为0
Dest_address_npi 1 integer 保留 应设为0
Destination_addre
ss 最大21 C_DecString 目的地址
Esm_class 1 Integer 短消息类型
Protocol_ID 1 Integer PAS协议类型
Priority_flag 1 integer 优先级
Schedule_delivery
_time 最大17 C_StringTime
计划下发短消息的时间
(当提交预定义短消息时无效)
Validity_peroid 最大17 C_StringTime 短消息的最后生存期限
(当提交预定义短消息时无效)
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-9
字 段 大小(字节) 类 型 描 述
Registered_delive
ry_flag 1 integer
注册短消息标志
0:不需要status report
1:需要status report
Replace_if_presen
t_flag 1 integer
替换短消息标志
0:替换
1:不替换
Data_coding 1 integer 数据编码方案 参见2.6节
(当提交预定义短消息时无效)
Sm_default_msg_id 1 integer 预定义短消息ID
Sm_length 1 integer 短消息的长度
Short_message_tex
t 最大120 C_OctetString 短消息数据内容
2.5.8 SUBMIT_SM_RESPSUBMIT_SM_RESPSUBMIT_SM_RESPSUBMIT_SM_RESP
该命令消息头中的Command_ID是"ESME_SUB_SM_RESP" 消息体结构见表2-7
表2-7 SUBMIT_SM_RESP消息体结构
字 段 大小(字节) 类 型 描 述
Message_id 最大9 C_HexString 短消息ID
状态取值范围
ESME_ROK
ESME_RSERNOTSUP
ESME_RLIMITEXCEED
ESME_RINVBNDSTS
ESME_RINVSRCADR
ESME_RINVDSTADDRLEN
ESME_RINVDSTADR
ESME_RINVSCHED
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-10
ESME_RINVEXPIRY
ESME_RUNKNOWNERR
ESME_RCUSTNOTEXIST
ESME_RINVSYSIDSRV
ESME_RINVMSGLEN
ESME_RSYSERR
2.5.9 DELIVER_SMDELIVER_SMDELIVER_SMDELIVER_SM
此命令由SMSC产生 SMSC通过此命令发送短消息到目的ESME 它也可用于发送送
达状态报告 DELIVERY RECEIPT 消息 ESME只有在由bind_receiver建立的虚
连接中接收此消息
此消息结构中有一些字段是无效的 注意表2-8中的 描述 部分
消息头中的Command_ID是 ESME_DELIVER_SM" 消息体结构见表2-8所示
表2-8 DELIVER_SM消息体结构
字 段 长度(字节) 类 型 描 述
Service_type 最大6 C_DecString 保留 应设为NULL
Source_address_to
n 1 integer 保留 应设为0
Source_address_np
i 1 integer 保留 应设为0
Source_address 最大21 C_DecString 源地址
Dest_address_ton 1 integer 保留 应设为0
Dest_address_npi 1 integer 保留 应设为0
Destination_addre
ss 最大21 C_DecString 目的地址
Esm_class 1 integer
短消息类型
对 于 DELIVER_SM 命 令
esm_class BIT2为1表示此条消
息为送达状态报告消息 为0表
示普通消息
Protocol_ID 1 integer 保留 应设为0
Priority_flag 1 integer 优先级
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-11
字 段 长度(字节) 类 型 描 述
Schedule_delivery
_time 最大17 C_StringTime 保留 应设为NULL
Validity_peroid 最大17 C_StringTime 保留 应设为NULL
Registered_delive
ry_flag 1 integer 保留 应设为0
Replace_if_presen
t_flag 1 integer 保留 应设为0
Data_coding 1 integer 数据编码方案
Sm_default_msg_id 1 integer 保留 应设为0
Sm_length 1 integer 短消息的长度
Short_message_tex
t 最大120 可变 短消息数据内容
状态报告的数据包含在短消息内容字段中 短消息内容的长度是固定值 为66个
字节 具体定义请参考表2-9
表2-9 短消息内容字节定义
字 段 长度(字节) 类 型 描 述
Id 10 数值字符串 上次提交到短消息中心的短消
息编号
Sub 3 数值字符串 保留 未用
Dlvrd 3 数值字符串 保留 未用
Submit date 10 日期字符串 提交短消息时间
时间格式为 YYMMDDhhmm
Done date 10 日期字符串 短消息产生状态报告时间
时间格式为 YYMMDDhhmm
Stat 7 字符串
定义如下
DELIVRD 发送成功
EXPIRED 过期
DELETED 删除
UNDELIV 未发送
REPLACE 被替换
UNKNOWN 未知状态
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-12
字 段 长度(字节) 类 型 描 述
Err 3 数值字符串 GSM errcode,保留
Text 20 八位组 短消息内容前20字节 保留
注 以上字段均为固定长度的字符串 对于数值字符串 如果不足 前面
补’0’ 字段不是以’\0’结尾的
2.5.10 DELIVER_SM_RESPDELIVER_SM_RESPDELIVER_SM_RESPDELIVER_SM_RESP
它的语法和 SUBMIT_SM_RESP的语法消息体是一样的 只是在消息头中的
Command_ID是 ESME_DELIVER_SM_RESP"
2.5.11 QUERY_SMQUERY_SMQUERY_SMQUERY_SM
此命令用于ESME向SMSC查询以前所提交的短消息的状态
查询短消息时 如果此消息在发送消息队列中 Command_status(参见2.4节)将
返回E_SUCCESS QUERY_SM_RESP的GSM_code的有效值 参见2.6节 消息体参数说
明#GSM_code 中有 * 的部分 ;如果此消息已经转存到 CDR 中
Command_status(参见2.4节)返回E_OTHERERR
消息头中的Command_ID是"ESME_QUERY_SM" 消息体结构见表2-10
表2-10 QUERY_SM消息体结构
字 段 长度(字节) 类 型 描 述
Message_id 最大9 C_HexString 短消息ID
Ton 1 Integer 保留 应设为0
Npi 1 Integer 保留 应设为0
Address 最大21 C_DecString 地址
2.5.12 QUERY_SM_RESPQUERY_SM_RESPQUERY_SM_RESPQUERY_SM_RESP
消息头中的Command_ID是"ESME_QUERY_SM_RESP" 消息体结构见表2-11
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-13
表2-11 QUERY_SM_RESP消息体结构
字 段 长度(字节) 类 型 描 述
Message_id 最大9 C_HexString 短消息ID
Final_date 最大17 C_StringTime 短消息生命周期终止时间
Message_status 1 Integer 短消息当前的状态
GSM_code 1 Integer PAS 错误码 参见2.6节
状态取值范围
ESME_ROK
ESME_RUNKNOWNERR
ESME_RINVDSTADDRLEN
ESME_RINVDSTADR
ESME_RINVMSGID
ESME_RSYSERR
ESME_RINVBNDSTS
ESME_RINVMSGLEN
ESME_RLIMITEXCEED
2.5.13 CANCEL_SMCANCEL_SMCANCEL_SMCANCEL_SM
此命令用于取消ESME以前所提交的短消息 能取消指定短消息ID的短消息
消息头中的Command_ID是"ESME_CANCEL_SM" 消息体结构见表2-12
表2-12 CANCEL_SM消息体结构
字 段 长度(字节) 类 型 描 述
Service_type 最大6 C_DecString 短消息服务的类别
Message_id 最大9 C_HexString
短消息ID 设置为NULL时表示
取消所有当前短消息实体所发
出的与目标地址相同的短消息
Source_address_to
n 1 integer 保留 应设为0
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-14
字 段 长度(字节) 类 型 描 述
Source_address_np
i 1 integer 保留 应设为0
Source_address 最大21 C_DecString 源地址
Dest_address_ton 1 integer 保留 应设为0
Dest_address_npi 1 integer 保留 应设为0
Destination_addre
ss 最大21 C_DecString 目的地址
2.5.14 CANCLE_SM_RESPCANCLE_SM_RESPCANCLE_SM_RESPCANCLE_SM_RESP
此 命 令 只 有 消 息 头 没 有 消 息 体 消 息 头 中 的 Command_ID 是
"ESME_CANCEL_SM_RESP"
状态取值范围
ESME_ROK
ESME_RSERNOTSUP
ESME_RINVBNDSTS
ESME_RINVMSGID
ESME_RINVSRCADDRLEN
ESME_RINVDSTADDRLEN
ESME_RINVDSTADR
ESME_RINVMSGLEN
ESME_RSYSERR
ESME_RCNTCANMSG
ESME_RLIMITEXCEED
2.5.15 ENQUIRE_LINKENQUIRE_LINKENQUIRE_LINKENQUIRE_LINK
此命令用于ESME确认和SMSC之间的连接 ESME发送一条ENQUIRE_LINK命令 SMSC
响应一条ENQUIRE_LINK_ACK命令 表示ESME和SMSC之间的连接存在
此命令只有消息头 没有消息体 消息头中的Command_ID是"ESME_QRYLINK"
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-15
2.5.16 ENQUIRE_LINK_RESPENQUIRE_LINK_RESPENQUIRE_LINK_RESPENQUIRE_LINK_RESP
此 命 令 只 有 消 息 头 没 有 消 息 体 消 息 头 中 的 Command_ID 是
"ESME_QRYLINK_RESP"
状态取值范围
ESME_ROK
2.5.17 GENERIC_NAKGENERIC_NAKGENERIC_NAKGENERIC_NAK
此命令用于当接收消息头有错误的时候的响应 该响应只能由收到请求方发出
此命令只有消息头 没有消息体 消息头中的Command_ID是"ESME_NACK"
状态取值范围
ESME_RINVMSGLEN
ESME_RINVCMDID
2.5.18 ADD_SUBADD_SUBADD_SUBADD_SUB
此命令用于在SMSC数据库中增加一个用户
消息头中的Command_ID是"ESME_ADD_SUB" 消息体结构见表2-13
表2-13 ADD_SUB消息体结构
字 段 长度(字节) 类 型 描 述
Sub_ID 最大21 C_DecString 用户ID(手机号码)
Sub_name 最大21 C_String 用户名
Sub_address 最大42 C_String 用户通信地址
MS_type 1 Integer 手机类型 参见2.6节
Ton 1 Integer 保留 应设为0
Npi 1 Integer 保留 应设为0
SM_allowed 1 Integer 是否提供短消息
参见2.6节
OCOS 1 Integer 保留 应设为0
TCOS 1 Integer 保留 应设为0
Password 最大9 C_String 密码
PSNumber 最大21 C_String PS号码
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-16
字 段 长度(字节) 类 型 描 述
Def_dcs 2 Integer 手机用户的默认数据编码方案
高字节设置为0
2.5.19 ADD_SUB_RESPADD_SUB_RESPADD_SUB_RESPADD_SUB_RESP
此 命 令 只 有 消 息 头 没 有 消 息 体 消 息 头 中 的 Command_ID 是
"ESME_ADD_SUB_RESP".
状态取值范围
ESME_ROK
ESME_RINVCUSTNAMLEN
ESME_RINVCUSTADRLEN
ESME_RINVPASWDLEN
ESME_RUNKNOWNERR
ESME_RINVCUSTIDLEN
ESME_RINVCUSTID
ESME_RINVSRCADR
ESME_RINVMSGLEN
ESME_RSYSERR
ESME_RLIMITEXCEED
2.5.20 DEL_SUBDEL_SUBDEL_SUBDEL_SUB
此命令用于删除一个用户
消息头中的Command_ID是"ESME_DEL_SUB" 消息体结构见表2-14
表2-14 DEL_SUB消息体结构
字 段 长度(字节) 类 型 描 述
Ton 1 Integer 保留 应设为0
Npi 1 Integer 保留 应设为0
Sub_ ID 最大 21 C_DecString 用户ID(手机号码)
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-17
2.5.21 DEL_SUB_RESPDEL_SUB_RESPDEL_SUB_RESPDEL_SUB_RESP
此命令只有消息头 没有消息体 消息头中的Command_ID是"DEL_SUB_RESP"
状态取值范围
ESME_ROK
ESME_RUNKNOWNERR
ESME_RINVCUSTIDLEN
ESME_RINVCUSTID
ESME_RINVSRCADDRLEN
ESME_RINVMSGLEN
ESME_RSYSERR
ESME_RLIMITEXCEED
2.5.22 MOD_SUBMOD_SUBMOD_SUBMOD_SUB
此命令用于修改用户信息
此命令的数据结构与ADD_SUB的结构一致 只是Command_ID为"ESME_MOD_SUB"
2.5.23 MOD_SUB_RESPMOD_SUB_RESPMOD_SUB_RESPMOD_SUB_RESP
此 命 令 的 数 据 结 构 与 ADD_SUB_RESP 的 结 构 一 致 只 是 Command_ID 为
"ESME_MOD_SUB_RESP"
状态取值范围
ESME_ROK
ESME_RINVCUSTNAMLEN
ESME_RINVCUSTADRLEN
ESME_RINVPASWDLEN
ESME_RUNKNOWNERR
ESME_RINVCUSTIDLEN
ESME_RINVCUSTID
ESME_RINVSRCADR
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-18
ESME_RINVMSGLEN
ESME_RSYSERR
ESME_RLIMITEXCEED
2.5.24 ENQUIRE_SUBENQUIRE_SUBENQUIRE_SUBENQUIRE_SUB
此命令用于查询用户的详细信息
消息头中的Command_ID是"ESME_QRY_SUB" 消息体结构见表2-15
表2-15 ENQUIRE_SUB消息体结构
字段 长度(字节) 类型 描述
Ton 1 Integer 保留 应设为0
Npi 1 Integer 保留 应设为0
Sub_ID 最大21 C_DecString 用户ID(手机号码)
2.5.25 ENQUIRE_SUB_RESPENQUIRE_SUB_RESPENQUIRE_SUB_RESPENQUIRE_SUB_RESP
消息头中的Command_ID是"ESME_QRY_SUB_RESP" 消息体结构见表2-16
表2-16 ENQUIRE_SUB_RESP消息体结构
字段 长度(字节) 类型 描述
Sub_ID 最大 21 C_DecString 用户ID(手机号码)
Sub_name 最大 21 C_String 用户名
Sub_address 最大 42 C_String 用户通信地址
MS_type 1 Integer 手机类型
Ton 1 Integer 保留 应设为0
Npi 1 Integer 保留 应设为0
SM_allowed 1 Integer 是否提供短消息
参见2.6节
OCOS 1 Integer 保留 应设为0
TCOS 1 Integer 保留 应设为0
Password 最大 9 C_String 密码
Reg_datetime 最大17 C_StringTime 用户注册时间
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-19
字段 长度(字节) 类型 描述
PSNumber 最大21 C_String PS号码
Def_dcs 2 Integer 手机用户的默认数据编码方案
高字节设置为0
状态取值范围
ESME_ROK
ESME_RINVCUSTIDLEN
ESME_RINVCUSTID
ESME_RCUSTNOTEXIST
ESME_RINVMSGLEN
ESME_RSYSERR
ESME_RLIMITEXCEED
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-20
2.6 SMPPSMPPSMPPSMPP消息体参数含义消息体参数含义消息体参数含义消息体参数含义
!" address
地址号码
!" address_range
地址范围
!" data_coding
数据编码方案
- 0__ASCII
- 1__GB2312
- 2__UNICODE
- 3__BIG5
!" def_dcs
手机用户的默认数据编码方案
高字节设置为0 低字节取值与 data_coding 相同
!" dest_address_npi
目的地址编码方案 同npi
!" dest_address_ton
目的地址编码类型 同ton
!" destination_address
目的地址 同address
!" esm_class
短消息类型
对于SUBMIT_SM DELIVER_SM 命令 其余BIT值为0
对于DELIVER_SM命令 BIT 2为1表示此条消息为送达状态报告消息 为0表
示普通消息 其余BIT值为0
!" final_date
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-21
短消息的生命期终止的实际时间 如果此短消息已从SMSC的等待发送队列中
删除 即为删除时间 否则为SMSC当前的时间
!" GSM_code
PAS错误码 见表2-17所示
表2-17 GSM_code
错 误 码 值 描 述
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 内存不足
表2-17中标有 * 的部分请参考2.5.12 QUERY_SM_RESP
!" interface_version
用来描述本协议的版本号
现约定interface_version=10
!" message_id
短消息ID 它由SMSC设置 用于查询以及替换短消息等操作时使用
!" message_status
短消息当前的状态
- 0 工作状态
- 1 发送成功
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-22
- 2 发送失败
- 3 因下发失败而等待
- 4 因定时消息而等待
- 5 短消息被删除
- 6 短消息超时删除
- 7 无效状态
- 8到127 保留
!" MS_type
手机类型标识码
类型定义及其含义在SMSC数据库中定义 在网管前台可以进行配置
例如
- 100 支持ASCII
- 101 支持BIG5
- 102 支持 ASCII 及 BIG5
!" npi
地址编码方案(系统保留)
!" OCOS
最大提交短消息 某移动台提交到SMSC的等待下发的短消息的最大数目(系
统保留)
!" password
用来登录的密码
!" priority_flag
优先级
- 1 高优先级
- 0 普通优先级
- 其它 保留
!" protocol_ID
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-23
PAS协议类型(系统保留 设置为0)
!" registered_delivery_flag
注册短消息标志 它表示当此短消息到达最后的目的地后 是否需要送达状
态报告 DELIVERY RECEIPT
- 0 不需要
- 1 需要
- 其它 保留
!" reg_datetime
用户注册登记时间
!" replace_if_present_flag
替换标志
在当前连接中 SUBMIT命令中指示的目的地址和业务类型 Service_type
与等待下发的短消息的目的地址及业务类型都相同时 是否替换这些等待下
发的短消息 在DELIVERY命令中该参数无效 需置为0
- 0 不替换
- 1 替换
- 其它 保留
!" schedule_delivery_time
对于SUBMIT命令 该参数指计划下发短消息的时间 对于DELIVERY命令 该
参数指SMSC收到要下发到ESME的短消息的时间
!" service_type
短消息服务的类别
!" short_message_text
短消息数据内容 类型为 C_OctetString 最长为120字节
!" SM_allowed
支持两种方式 使用哪一种方式可根据实际项目需要确定
- 用一个字节表示sm_allowed 表示MT MO是否提供短消息业务
0: 不提供
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-24
1: 提供
其余值保留
- 分高四位和低四位
高四位表示mt_allowed 即是否允许mt服务 其中
0 表示禁止
1 表示开通
低四位表示mo_allowed 即是否允许mo服务 其中
0 表示禁止
1 表示开通
其余值保留
!" sm_default_msg_id
预定义短消息ID 不是预定义短消息时应设为0 预定义短消息ID值从0x01
到0xff 其值的具体含义由特定的ESME和SMSC约定
!" sm_length
短消息的数据长度 以字节计算
!" source_address
源地址编号 同address
!" source_address_npi
源地址编码方案 同npi(系统保留)
!" source_address_ton
源地址编码类型 同ton(系统保留)
!" sub_address
用户通信地址
!" sub_ID
用户ID 电话号码
!" sub_name
用户名
核心子系统外部接口(SMPP)描述手册 第二章 SMPP消息结构
2-25
!" system_id
接口ID 用来描述虚拟连接的用户名 即ESME登录SMSC使用的帐号
!" system_type
用来描述用户的类型
!" TCOS
最大下发数 指等待下发到某移动台的最大短消息数目(系统保留)
!" ton
地址编码类型(系统保留)
!" validity_peroid
短消息的最后生存期限
核心子系统外部接口(SMPP)描述手册 第三章 返回错误代码
3-1
3 返回错误代码返回错误代码返回错误代码返回错误代码
SMSC返回ESME的错误代码见表3-1
表3-1 返回错误代码
返 回 信 息 值 描 述
ESME_ROK 0x00000000 成功
ESME_RINVMSGLEN 0x00000001 消息长度错误
ESME_RINVCMDLEN 0x00000002 命令长度错误
ESME_RINVCMDID 0x00000003 消息ID无效
ESME_RINVBNDSTS 0x00000004 无效的BIND状态
ESME_RSYSERR 0x00000008 SMSC 系统错误
ESME_RINVSRCADR 0x0000000A 源地址错误
ESME_RINVDSTADR 0x0000000B 目的地址错误
ESME_RINVMSGID 0x0000000C 无效的消息ID
ESME_RINVPASWD 0x0000000D 无效的密码
ESME_RINVPASWDLEN 0x0000000E 密码长度错误
ESME_RINVSYSIDSRV 0x0000000F 无效的SYSTEMID
ESME_RCNTCANMSG 0x00000011 不能取消此消息
ESME_RMSGQFUL 0x00000014 超过最大下发数
ESME_RSERNOTSUP 0x00000015 不支持此服务类型
ESME_RINVCUSTID 0x0000001D 用户ID错误
ESME_RINVCUSTIDLEN 0x0000001E 用户ID长度错误
ESME_RINVCUSTNAMLEN 0x0000001F 用户名长度错误
ESME_RINVCUSTADRLEN 0x00000021 用户地址长度错误
ESME_RCUSTEXIST 0x00000023 指定用户已经存在
ESME_RCUSTNOTEXIST 0x00000024 指定用户不存在
ESME_RINVSRCADDRLEN 0x00000046 源地址长度错误
ESME_RINVDSTADDRLEN 0x00000047 目的地址长度错误
ESME_RINVSYSTYP 0x00000053 无效的SYSTEMTYPE
ESME_RLIMITEXCEED 0x00000056 消息提交速度超过限定 注1
ESME_RINVSCHED 0x00000061 无效的定时时间
核心子系统外部接口(SMPP)描述手册 第三章 返回错误代码
3-2
返 回 信 息 值 描 述
ESME_RINVEXPIRY 0x00000062 无效的超时时间
ESME_RUNKNOWNERR 0x000000FF 未知错误
注 如果ESME 端发送短消息过快 SMSC 将返回ESME_RLIMITEXCEED 此时ESME
端应在延时后重发此短消息
核心子系统外部接口(SMPP)描述手册 缩写术语
缩写术语缩写术语缩写术语缩写术语
ESMEESMEESMEESME Extended Short Message Entity 外部短消息实体
MOMOMOMO PS Originated(short message is
submitted from a PS)
PS 发起的短消息
MTMTMTMT PS Terminated( A short message is
delivered to a PS)
PS 终止的短消息
PASPASPASPAS Personal Access System 无线市话系统
SMSMSMSM Short Message 短消息
SMPPSMPPSMPPSMPP Short Message Peer to Peer 短消息SMPP协议
SMSMSMSMSSSS Short Message Service 短消息服务
SMSCSMSCSMSCSMSC Short Message Service Center 短消息中心
�����������������������������
� ���� ���� �� � ������ � ����������� ��
� !"#$%&�'()*+,�-.(/ 0#�$123�!"456789:; <
<��=>?@( �
�
���������������� ������������������
�
��� ��������� �� ��
� � � � ���� � � � � � ���� � � � � � ���� � � � � � �����
�� ���������������������������
����� � � � � � � � � � � � � � � � � � � ���������
���������� � � � � � � � � � � � � � � � ����� !"�#�
�$%&'(� � � � � � � )*+,-./�
�01�
2345678�9:;<=+, �
�
�
�� ������ !"�#$� �
�
��� %�&'���( )*+,-��./ �01./2��34567 �
�
��� )�89:�;< �=>? �
�
�$@A��BC �D���EFGH �
>? � � � � � � @A � � � � � BC � � � � � �
�D � � � � � � � � � � � � ������ � � � � � �
EF � � � � � � � � � � � � G� � � � � � �
�
HI8JKLMN �
��O�PQR�STUVWX�
EFEFEFEF QRY�Z [\] ^_`aAb \^cdefghd
BCBCBCBC ijkl[mnnno\pq\rnknod
stststst ijkl[mnn][q[old
G�G�G�G� p[jj[\d