SMPP是一种通用的短信接口协议
SMPP是一种通用的短信接口协议,本文摘录了能实现短信基本功能的内容。
前言
短消息中心(SMSC)可以与各种扩展短消息实体(ESME)配合工作,从而为移动用户提供丰富多采的功能。
符号和缩略语
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 自动台 |
SMSC指短消息中心。
ESME在本规范中指的是通过本规范规定的协议与SMSC通信,请求特定的短消息服务的功能实体。
SS指人工话务接入并受理短消息服务请求的系统。
AS指利用交互式语音技术受理短消息服务请求的系统。
SS(秘书台)和AS(自动台)是典型的ESME。
SMSC和ESME之间的传输网络可以是基于X.25, 或TCP/IP。
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必须能够处理没有按顺序的响应。
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必须能够处理没有按顺序回的响应。
消息流
本规范中规定的所有协议,不管是从ESME到SMSC,还是从SMSC到ESME的消息,接收到请求的一方,都必须给请求方回一个应答消息(acknowledge)。
消息语法
在以下语法说明中,遵从以下规则:
A.未使用的字段,依据类型必须设置为0或NULL。
B.消息由消息头和消息体组成。
C.状态(Command_status)的定义如表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厂商定义错误 |
其他 | 保留 |
类型定义
(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) |