王朝网络
分享
 
 
 

短消息SMPP开发接口概要

王朝other·作者佚名  2006-01-30
宽屏版  字体: |||超大  

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)

Mm

分 (00-59)

Ss

秒 (00-59)

T

十分之一秒 (0-9)

Nn

与UTC (Universal Time Constant) 时间超前或落后 的差距(00-48).

‘+’(p)

时间超前于UTC time.

‘-’(p)

时间落后于 UTC time.

对于千年问题,采用时间窗口的方法来解决,具体方法为YY>90解释为19YY;否则解释为20YY。

消息头语法

表4:短消息头语法

字段

长度(字节)

类型

描述

Command_Length

4

integer

消息包的长度,包括此字段

Command_ID

4

integer

这个字段表明此条短消息的类型,例如ESME_SUB_SM表示此消息为ESME向SMSC提交短消息。具体数值定义见附录A。

Command_status

4

integer

此字段表示一个命令的成功与失败,如失败,指示引起失败的错误类型等信息,它在请求中必须设为0。

Sequence_No

4

integer

此字段表示消息的序列号,它由ESME产生,它是消息和它的应答之间的对应标志,它的数值在0到0XFFFFFFFF间必须保证严格单调的递增,当达到0XFFFFFFFF时,从0开始下一循环。

Optional Message Body

可变

混合

此字段表示短消息的消息体部分,具体定义见6.5.2

消息体语法

以下几条命令实现后,就可以实现短消息的收发。

BIND_RECEIVER命令

此命令在扩展短消息实体和短消息中心之间产生虚连接,该连接支持所有的协议命令。

BIND_RECEIVER语法

消息头中的Command_ID是“bind_receiver"

表5:BIND_RECEIVER语法

字段

长度(字节)

类型

描述

system_id

最大 16

C_String

接口ID

password

最大 9

C_String

密码

system_type

最大 13

C_String

接口类型

Interface_version

1

integer

接口版本号

Ton

1

integer

保留,应设置为0

npi

1

integer

保留,应设置为0

address_range

最大 41

C_DecString

保留,应设置为NULL

BIND_RECEIVER_RESP语法

消息头中的Command_ID 是“bind_receiver_resp"。

表6:BIND_RECEIVER_RESP语法

字段

大小(字节)

类型

描述

System_id

最大 16

C_String

接口ID

状态取值范围:

E_SUCCESS

E_OTHERERR

E_CMDLENERR

E_NORIGHT

E_INVLDSYSTEMID

E_INVLDPASSWORD

E_INVLDSYSTEMTYPE

E_INVLDIFVER

UNBIND命令

此命令用于断开ESME和SMSC之间的连接。

UNBIND语法

此消息只有消息头,没有消息体,消息头中的Command_ID是“unbind"。

UNBIND_RESP语法

此消息只有消息头,没有消息体,消息头中的Command_ID是“unbind_resp"。

状态取值范围:

E_SUCCESS

E_OTHERERR

E_CMDLENERR

E_NORIGHT

6.5.2.4 SUBMIT_SM命令

此命令用于ESME提交短消息到SMSC,以便SMSC把此短消息发给特定的移动台。

SUBMIT_SM语法

消息头中的Command_ID是"submit_sm"

表7:SUBMIT_SM语法

字段

长度(字节)

类型

描述

service_type

最大6

C_OctetString

保留,必须设为0

source_address_ton

1

integer

源地址编码类型

source_address_npi

1

integer

源地址编码方案

source_address

最大21

C_DecString

源地址

dest_address_ton

1

integer

目的地址编码类型

dest_address_npi

1

integer

目的地址编码方案

destination_address

最大21

C_DecString

目的地址

esm_class

1

integer

短消息类型

protocol_ID

1

integer

GSM协议类型

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

预定义短消息ID

sm_length

1

integer

短消息的长度

short_message_text

最大161

可变

短消息数据内容

SUBMIT_SM_RESP语法

消息头中的Command_ID是"submit_sm_resp"

表8:SUBMIT_SM_RESP语法

字段

长度(字节)

类型

描述

Message_id

最大9

C_HexString

短消息ID

状态取值范围:

E_SUCCESS

E_OTHERERR

E_CMDLENERR

E_NORIGHT

E_ADDRERR

E_MOEXCEED

E_MTEXCEED

E_INVLDUSER

E_INVLDDATAFMT

E_CREATEMSGFAILURE

E_INVLDORGTON

E_INVLDORGNPI

E_ORGADDRERR

E_INVLDDESTTON

E_INVLDDESTNPI

E_DESTADDRERR

E_INVLDSCHEDULE

E_INVLDEXPIRE

E_INVLDESM

E_INVLDUDLEN

E_INVLDPRI

E_INVLDRDF

E_INVLDRPF

DELIVER_SM命令

此命令由SMSC产生,SMSC通过此命令发送短消息到目的ESME,它也可用于发送转发状态报告(DELIVERY RECEIPT)消息。

DELIVER_SM语法

它的语法和SUBMIT_SM的语法消息体是相同的,只是在消息头中的Command_ID是“deliver_sm"。

DELIVER_SM_RESP语法

它的语法和SUBMIT_SM_RESP的语法消息体是一样的,只是在消息头中的Command_ID是“deliver_sm_resp"。

附:消息体参数说明

address:

地址号码

address_range

地址范围

data_coding:

数据编码方案, ( 详见GSM 03.40 [1] 9.2.3.10)

dest_address_npi:

目的地址编码方案,同npi

dest_address_ton:

目的地址编码类型,同ton

destination_address:

目的地址,同address

esm_class:

短消息类型

Bit:

7

6

5

4

3

2

1

0

Flag:

Reserved

UDHI

Reserved

Delivery

RCPT

Reserved

其中UDHI为1表示短消息内容中有头结构,为0表示没有头结构。

Delivery RCPT为1表示是此条短消息是状态报告,0表示为正常的下发短消息。此位只对DELIVER_SM有效。

其他为保留。

如果有头结构,short_message_text为以下格式:

{

BYTE UDHL; //信息元素的结构集合所用的字节数

Information?Element-struct Information?Element;

//若干信息元素的结构集合, 其占用的字节数目由UDHL指示

...

SM; 短消息内容

}

其中Information?Element-struct的结构如下:

{

BYTE Information?Element?Identifier // 信息元素的标志

BYTE Length of Information?Element //信息元素数据所用的字节数

Information?Element Data

//信息元素数据,其占用的字节数目由Length of Information?Element指示

}

定义详见GSM 03.40 (7.2.0) 9.2.3.24

final_date:

短消息的生命期终止的实际时间,如果此短消息已从SMSC的等待发送队列中删除,即为删除时间,否则为SMSC当前的时间

GSM_code:

GSM错误码,见下表

错误码

描述

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

内存不足

interface_version:

用来描述本协议的版本号

在ESME连接SMSC时,如果ESME提出的版本号高于SMSC的版本号,则SMSC给出否定响应,响应中的status表示SMSC的版本号;ESME提出的版本号低于或等于SMSC的版本号,则SMSC给出肯定响应,在连接成功后的会话过程中,双方将以ESME提出的版本号作为通信的依据。interface_version的值从1开始,0保留。

现约定,对于interface_version>=1,必须支持除REPLACE_SM_EX命令和用户管理命令以外的所有协议命令, 对于interface_version>=2, 必须支持所有本文中提到的协议命令。

message_id:

短消息ID,它由SMSC设置。用于查询以及替换短消息等操作时使用。

message_status:

短消息当前的状态:

0:转发状态

1:发送成功(不在尝试转发)

2:发送失败(不在尝试转发)

3:因下发失败而等待(继续尝试转发)

4:因定时消息而等待(继续尝试转发)

5:短消息被删除(不在尝试转发)

6:短消息超时删除(不在尝试转发)

7:无效状态(不在尝试转发)

8:EN_ROUTE,为兼容SMPP协议保留

9:DELIVERED,为兼容SMPP协议保留

10:EXPIRED,为兼容SMPP协议保留

11:DELETED,为兼容SMPP协议保留

12:UNDELIVERABLE,为兼容SMPP协议保留

13:ACCEPTED,为兼容SMPP协议保留

14:INVALID,为兼容SMPP协议保留

其他:保留

MS_type:

手机类型

0:中文手机

1:英文手机

>1:保留

npi:

地址编码方案,(定义详见GSM03.40[1] 9.1.2.5)

0:未知

1:ISDN电话编码方案

3:数据编码方案(X.121)

4:电报编码方案

8:国家编码方案

9:专用编码方案

10:ERMES 编码方案(ETSI DE/PS 3 01?3)

15:扩充保留

从0到15的其他值保留

OCOS:

最大提交短消息,某移动台提交到SMSC的等待下发的短消息的最大数目

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:

替换标志,当SUBMIT命令中指示的源地址和目的地址与等待下发的短消息的源地址和目的地址都相同时,是否替换这些等待下发的短消息。在DELIVERY命令中该参数无效,需置为0。

0:不替换

1:替换

>1:保留

schedule_delivery_time:

对于SUBMIT命令,该参数指计划下发短消息的时间,对于DELIVERY命令,该参数指SMSC收到要下发到ESME的短消息的时间。

service_type:

保留,必须设为NULL,原该参数指明短消息服务的类别

short_message_text:

短消息数据内容,当编码类型为7位码,类型为C_String,最大长度为160个字符。8位码时,类型为C_String,最大长度为140个字节。当为Unicode时,类型为C_UnicodeString,最大长度为70个字符。

SM_allowed:

是否提供短消息业务

0:不提供

1:提供

其余值保留

sm_default_msg_id:

预定义短消息ID,不是预定义短消息时应设为0。预定义短消息ID值从0x01到 0x64,其值的具体含义由特定的ESME和SMSC约定。其余值保留。

sm_length:

短消息的数据长度,以字节计算。

source_address:

源地址编号,同address。

source_address_npi:

源地址编码方案,同npi。

source_address_ton:

源地址编码类型,同 ton。

sub_address:

用户通信地址。

sub_ID:

用户ID,同address。

sub_name:

用户名。

reg_datetime:

用户注册登记时间 。

system_id:

接口ID,用来描述虚拟连接的用户名,即ESME登录SMSC使用的帐号。

system_type:

用来描述用户的类型。

TCOS:

最大下发数,指等待下发到某移动台的最大短消息数目。

ton:

地址编码类型,(定义详见GSM03.40[1] 9.1.2.5)

0 未知号码

1 国际号码,例如8613901234567

2 国内号码,例如13901234567

3 网络专用号码

4 用户号码

5 字母号码(按照 GSM?TS03.38 7-bit 缺省字母表编码)

6 缩写号码

7 保留

validity_peroid:

短消息的最后生存期限。

附录A:命令标志数值定义

命令码宏定义

数值

描述

ESME_BNDRCV

0X00000001

ESME要求连接到SMSC

ESME_BNDRCV

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下发此短消息到特定的用户。

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_REPLACE_SM

0X00000007

ESME要求替换以前所提交的某条短消息

ESME_REPLACE_SM_RESP

0X80000007

ESME要求替换以前所提交的某条短消息的响应

ESME_QRYLINK

0X00000015

询问扩展短消息实体与短消息中心的连接情况

ESME_QRYLINK_RESP

0X80000015

询问扩展短消息实体与短消息中心的连接情况的响应

ESME_NACK

0X80000000

接收消息头错误的响应

ESME_REPLACE_SM_EX

0X00000090

ESME要求替换以前所提交的某条短消息的扩展命令,它增加了数据编码格式字段

ESME_REPLACE_SM_EX_RESP

0X80000090

扩展替换短消息的的响应

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

查询用户的信息的响应

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有