短消息中心(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) |