概述

SMS(Short Message Service)短消息服务是近年来应用较为广泛的电信增值服务。大量的短信服务提供商(SP)提供了范围广泛SMS的应用服务。

SP将一条短信发送到用户手机,主要通过网关方式。

网关方式是指,通过IP网络,服务器连接到移动运营商的短信网关(ISMG),从而将数据透过ISMG发送到SMSC(短消息业务中心),由SMSC查询目标的当前归属,递送到移动短信中心(MSC),MSC将立即发送到目标手机或保留,等待用户连接到移动运营商的网络而发送出去。此网络结构可以参考图1。SP可以通过移动运营商扣取用户的费用,达到收费的目的。

短信集群架构 短信平台架构设计_短信集群架构

图1互联网短信网关组网结构

可见,对于SP而言,技术上的关键是开发一个同移动运营商短信网关(ISMG)交互收发SMS的程序。

与ISMG交互的方式有两种:一种是运用设备提供商的API;第二种是封装移动运营商提供的接入协议,利用Socket直接与ISMG通讯。

在国内主要的移动运营商在各个地方可能采用不同的设备提供商,而各个产商提供的API都各不相同,甚至同一设备提供商的不同设备其API可能也有所变化,所以采用第一种方式的话,系统的通用性和柔性不够,会绑定在一个产商或一个设备上。

所以比较好的方式是采用第二种方式:实现短信接入协议,直接和ISMG通讯。

国内的四大移动电信运营商:中国移动、中国电信、中国联通、中国网通都提供了短信接入协议:

中国移动的CMPP协议,目前是3.0版本。

中国电信的SMGP协议。

中国联通的SGIP协议。

中国网通的CNGP协议。

以上协议都是以国际标准SMPP(《短消息点对点通讯协议》)为基础,结合各个公司自己的需要,设计的一套企业标准。这几个协议之间的区别甚小。但中国移动是短信经济模式的创始人,故CMPP协议是其它协议的借鉴对象。

SP端SMS平台业务需求分析

   对于SP而言,SMS平台的任务是同移动运营商短信网关(ISMG)交互,和用户收发SMS,并且通过一个或多个收发过程完成特定的内容服务。可以把任务分为两大部分:与ISMG的交互和内容服务管理,以下分别进行分析。

与ISMG的交互:

l         发送短消息(下行):SP向ISMG发送指令,要求向特定的号码发送特定的消息。相关属性有:用户号码(目的)、接入号码(源)、下行内容、业务代码、信息类别(普通短信、图片、铃声)、信息编码类型(纯ASCII字符串、写卡操作、二进制编码、UCS2编码、GBK编码)、是否需要状态报告、下行时间。

l         接受短消息(上行):当有用户向SP发送SMS时,ISMG将此SMS传递给本平台。相关属性有:用户号码(源)、接入号码(目的)、上行内容、上行的LINKID。

l         计费:由于SP向用户提供了服务,应收取相应的费用。而费用的扣除,需要由SP通过ISMG通知移动运营商进行扣除。计费的实现是发送给ISMG的每一条下行SMS中进行说明,SP必须对下行SMS指定的收费选项。相关属性有:

a)         计费用户号码:在下行短信中,实际的目的号码不一定是计费号码。也就是说,虽然此SMS是发给A号码的,若计费号码是B,那么将会对B号码进行计费,A号码不收费。

b)        计费类型:可分为4种:

                         i.              对“计费用户号码”免费

                       ii.              对“计费用户号码”按条计信息费

                      iii.              对“计费用户号码”按包月收取信息费

                     iv.              对“计费用户号码”的收费是由SP实现

c)        费值:取值范围为0-99999,单位为分。对于按月计费的用户,此值为包月费用。

d)        赠送费值:取值范围为0-99999,单位为分,由SP定义,特指由SP向用户发送广告时的赠送话费。

l         连接多ISMG:一个SP会在多个移动网络上提供服务,所以SP的SMS平台应支持连接多个移动运营商。

内容服务管理

一个SP可能会提供多种内容服务,不同内容服务有不同的收发过程设置和逻辑。这个交互的过程必须是可定制的,交互的过程也就是服务的过程。内容服务可能是很简单的,也可能是很复杂的,下面介绍几种典型内容服务:

l         内容定制类:用户向SP发送定制短信,服务记录用户号码和定制的内容。在符合发送条件时,把内容发送给用户。而发送条件有很多种,跟特定内容有关:比如气象,那么可能一天发送一次;而对于新闻,那么可能一天之内会发送多次。此类服务,一般包月计费。

l         信息查询类:此类服务,适用于一次性的查询,一般按次计费。比如:考试成绩查询、交通违章查询。用户向SP发送查询短信,服务根据用户短信中的内容,得知用户要查询何种信息,并把查询结果发给用户。

l         竞猜类:用户向SP发送竞猜短线,服务对符合条件(即答案正确)的用户号码进行随机抽取,得到中奖号码,并且进行短信通知。

l         功能类:用户向SP发送定制短信,SP则为用户提供特定功能。比如:短信隐身,动态文字等。此类服务,一般包月计费。

l         图片铃声类:用户向SP求购特定的图片和铃声。求购方式有多种:网站定制、发送短信等。服务就向用户发送他所订购的图片和铃声。此类服务,既可包月计费也可按次计费。

由此可见,SP提供的内容服务将是多种多样的,SMS平台必须提供开放环境,为内容服务提供支撑。SMS平台将提供统一的接口,内容服务的实现必须以此接口为规范,以插件的形式接入SMS平台。

SP端SMS平台设计

对于SMS平台,不仅需要负责和ISMG进行通讯,还需要系统上执行各种各样的业务,并且要提供一定的监控和管理功能。其主要功能结构如图2。以下介绍系统中核心的几个部分:



短信集群架构 短信平台架构设计_sms_02

图 2 设计结构图

通信协议层

由于SMS平台要求和不同的移动运营商的ISMG进行连接,而不同运营商使用不同的协议,为了屏蔽不同协议的差异性,在此层设计不同协议的通信链接器。SMS平台通过统一的通信I/O与此层交互,而不同的通信链接器使用不同的协议和相应的ISMG交互。此种结构,可以方便的加入对新协议的支持,只要为新协议实现通信链接器并插入此层,就可以实现。

通信管理层

此层处在业务管理层与通信协议层之间,为各内容服务提供发送和接收短信的服务,并且在此层对上行和下行信息进行管理和调度。

上行处理子系统负责发送内容服务要求发送的信息,所以使用的是标准内容存取I/O,也就是提供了一个标准接口供内容服务使用。

下行处理子系统负责对接收到的信息进行处理,按照所属的不同内容服务,分类别存入数据库。信息的分类和筛选通过数据管理器实现,而信息的保存则通过数据库访问I/O实现。

对于一家移动运营商,可能会存在多个ISMG,所以可以在此层当中定义多个网关,由调度管理器负责调度,以达到负载平衡的目的。

业务管理层

此层管理各种类型的内容服务,内容服务以插件的形式接入此层。所以此层必须提供统一的接口以与内容服务插件交互。

系统在CP层的接口上采用预解析处理的策略,由系统通过预先设定的指令表进行匹配,对成功匹配的数据,系统将自动调用指令表设定对应指令的动态业务库的相对应处理函数,进行主动处理方式,系统在解析不成功后将解析失败的的指令,映射为”UNKNOWNCOMMAND”,并进行归档存储。

接口描述如下(C语言描述):

(1)int _stdcall Startup();//系统加载CP动态库后自动调用Startup进行初始化

(2)int _stdcall Close();//系统卸载CP动态库后自动调用Close进行卸载任务

上述两个函数在设计内容服务的插件时名字必须相同。

(3)业务处理函数

int _stdcall LPCPProcessEntry//处理CP业务指令入口函数类型

(

              MODeliver*  pMODeliver,  //上行MO数据

              MOCommand*  pMOCommand,  //解析后对应指令表内的指令描述

       SubmitMsg*  pSubmitMsg,  //返回的下发数据信息(指针数组)

              int*        retMsg,            //返回下发数据信息的条数

              char*       error        //发生错误时,填充错误信息

);

典型内容服务实现实例

这里介绍一个在此平台上实现的较典型的短信内容服务:医院预约门诊服务。

业务流程

图 3 预约门诊服务业务流程图

服务设计和实现

服务实现插件的功能是多种多样的,和系统平台和之间的交互和流程也是多种多样的。但是,服务插件和短信平台之间的接口是确定一致的;系统平台受到用户短信后,处理的过程也是一致的:将用户短信中的服务代码和指令表中进行比较,确定应调用哪个服务插件进行处理。

预约门诊服务插件应实现的接口将用伪码描述如下:

(1)int _stdcall Startup()

{

   初始化数据库连接参数;

   建立数据库连接;

   建立科室目录列表;

}

   (2)int _stdcall Close()

{

   清空科室列表;

   关闭数据库连接;

   销毁相关对象;

}
(3)int _stdcall LPCPProcessEntry(MODeliver*  pMODeliver,MOCommand*  pMOCommand, SubmitMsg*  pSubmitMsg, int* retMsg,    char*  error   )
{
  If(*pMOCommand ==初始信息)
   {
      *pSubmitMsg=科室列表;
      return 1;
}
If(*pMOCommand ==确认预约信息)
   {
     查找空闲门诊时间;
     确定门诊时间;
     记录预约信息(时间、科室、手机号码);
*pSubmitMsg=预约时间;
return 1;
}
return  0;
}

小结

  此平台可以为短信服务提供商(SP)提供了SMS的增值应用服务的完善的解决方案,本系统为一个统一开放的平台,可以支持多种短信接入协议,也可以支持多种内容服务。系统提供了完善了运行期控制功能。系统架构设计合理,柔性较大,可以方便的加入对新协议的支持,也可以迅速的加入新的内容服务。

参考书目

[1].《中国移动通信互联网短信网关接口协议》 中国移动通信有限公司 [S]

[2].     郭金发/张龙《短信与BREW开发技术及实践》西安电子科技大学出版社 2005

[3].     蔡佶/张磊/刘健民《后短信时代》[M] 人民邮电出版社2005