SMPP是一种通用的短信接口协议

时间:2021-03-24 20:21:19

前言

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