APP下载

SMS自动回复在企业销售平台中的设计与实现

2010-02-23李孝杰

陕西科技大学学报 2010年3期
关键词:短消息短信编码

王 刚, 张 鹰, 潘 刚, 李孝杰

(西华师范大学计算机学院, 四川 南充 637002)

0 前言

SMS是Short Message Service的英文缩写.手机服务主要有电话语音服务和短信服务(SMS)两种,后者的价格要比前者低很多.在公司的一些业务中,公司一般是通过打电话的方式去联系员工,但是当员工很多及业务量很大时这种方式由于价格高、及时性差而影响到了企业效率.短信服务虽然便宜,但是操作复杂使用不方便.经过分析发现,销售员工主要是向相关管理人员查询产品的规格、价格、优惠情况等信息.本系统中,服务器对销售人员的短信内容进行分析,如果是查询类的短信,系统编辑短信息内容并借助GSM MODEM设备通过串行口自动回复短信;如果是非查询类的短信,系统则转入人工服务模式,并提醒相关管理人员进行处理.销售人员可以及时地获取所需信息从而大大提高企业的运行效率[1].

1 PDU编码与解码

目前,发送短消息常用Text和PDU(Protocol Data Unit,协议数据单元)模式.使用Text模式收发短信代码简单,实现起来十分容易,但是不能收发中文短信,主要用于欧美地区.而PDU模式不仅支持英文短信,也能发送中文短信.

PDU模式收发短信共有3种编码方式:7-bit编码、8-bit编码和UCS2编码.7-bit编码用于发送普通的ASCII字符.8-bit编码通常不能在手机上显示,一般作为数据信息,用于发送数据消息如图片、铃声.UCS2编码是将每个字符(1~2个字节)按照ISO/IEC10646的规定,转换为16位的Unicode字符.要发送中文只能用UCS2编码.PDU串的用户信息段最大容量是140字节,3种方式下可发送的最大字符数为160、140、70[2].

下面通过例子说明SMS的中文编码过程[3].

发送短信息:短消息中心地址(SMSC)号码是13800260600,对方号码是13990831020,消息内容是“你好!”,编码过程如表1所示.

表1 PDU编码

从手机发出的PDU串可以是:08 91 68 31 08 20 06 06 F0 11 00 0D 91 68 31 99 80 13 20 F0 00 08 00 06 4F 60 59 7D 00 21.

根据PDU编码规则,UCS2码采用的是16位双字节的编码方式.gsmEncodeUcs2函数用于UCS2编码,gsmDecodeUcs2函数用于UCS2的解码,如图1、图2所示.在Windows系统中,可以简单地调用API函数实现编码和解码.如果没有系统支持,则只能通过查表法获得.

图1 gsmEncodeUcs 2函数工作图 图2 gsmDecodeUcs 2函数工作图

2 系统设计与实现

GSM是一种无线数字蜂窝通信系统网络规范,常用的频率为900 MHz,1 800 MHz,1 900 MHz.中国的GSM网采用的是双频,主要使用900 MHz和1 800 MHz这两种频率.除了GSM网外,CDMA、TDMA、PHS、PDC等都支持SMS,因此SMS是一项普及非常广的业务[4].经过编码的PDU串中包括接收短信的短消息实体的手机号码及处理信息的服务中心号码.

SMS系统采取的是存储转发机制,用户发送的短消息通过无线网络先存储在短信服务中心,如果接收短信的用户不在服务区或没有开机不能接收短信,则短信一直存储在短信服务中心,同时不断地检测用户是否出现,待用户出现后SMSC将短信转发给短信息实体,这时短信中心会向发送方短信实体显示发送结果状态.SMSC负责基站与短信息实体间的中继、存储、转发的工作,实现事务处理能力及信令连接控制部分,并实现短信息业务管理业务以及高层的短信息发送接收功能[5].

不同短信的传送是相互独立的,传送只与用户和SMSC有关,基于这样的系统因此能够保证很高的精确度,实时性较好,并且不与语音业务相冲突.

本系统以Visual C++6.0作为开发工具,借助GSM MODEM 之类的设备,开发了这套用于企业业务人员通过手机短信访问服务器,服务器根据短信内容进行自动回复从而获得所需信息的软件.GSM MODEM通过串行口与服务器相连,服务器通过串行口将SMS传送给MODEM,MODEM再将短信通过无线网络传至SMSC.

2.1 发送接收缓冲区

短消息是通过串行口进行操作实现的,为了避免大量通信资源引起的通信端口堵塞,系统一方面通过设置的定时器检测是否有短信息传入,将其放入接收队列中,按FIFO的原则对信息进行处理,将处理结果放入发送队列;另一方面,系统定时扫描发送队列,并按FIFO的原则将SMS发送给相关的短信息实体.这样更好的利用了系统资源,按照先进先出的原则对短信息进行处理较好的解决了大批量的信息处理过程中所遇到的问题,增强了系统的稳定性,使系统的运行效率得到提高.

2.2 系统设计

图3 系统运行图

本系统使用的MODEM由短信收发模块及单片机(MCU)组成.短信收发模块负责GSM基站与MCU之间的通讯,MCU负责MODEM和服务器的通信,同时负责短信收发模块的相应动作.所使用的MODEM的核心模块由WAVECOM Q2403A模块组成,支持双频即使用EGSM 900 MHz与GSM 1 800 MHz,基于RS-232接口,因此跟普通手机相比效率较高,稳定性较好.用户常用两种方法进行短信猫开发的应用,一种是基于底层的开发模式,即通过串行口用AT指令驱动短信猫收发短信,这种方法需要对AT指令相当熟悉才行;另一种是使用MODEM厂商基于串口AT指令集成的应用开发包,用户操作很简便,只需直接调用短信收发API即可[6].

通过WINDOWS自带的超级终端来检测MODEM的运行情况.将COM口的每秒位数设为9 600,数据位设为8,奇偶校验为无,停止位为1,数据流控制设为无.输入AT,回车,显示“OK”则链接正常,显示“error”表示连接异常[7].

计算机可以直接通过串行口下达AT命令控制SMS的发送、接收、管理.AT指令是计算机操作MODEM的唯一途径,各个厂商的AT指令可能不尽相同,但是变化不会特别大,如:

AT+CMGF=0; //设置SMS编码方式为PDU格式,如果为1则为文本格式

AT+CMGR=1; //设置读取第一条短信,如为6则为读取第6条短信

为了能够读取短信猫当前接收的短信,在获取短信内容时实时将短信删除.这样,短信猫中就没有已存短信了,当从MODEM中读取短信息时,始终获得的都是最新的短信猫接收的短信.为了避免因为使用了不同的MODEM所造成的不便,本系统设置了一个获取短信猫使用的短信号、波特率、机器号码等信息的模块,并将这些信息存放在一个文件中[8].系统运行过程如图3所示[9].

以下是部分核心代码:

// AllData 为短信猫里的信息Phone为电话号码, MessageText为短信内容

AllData = (char*)GSMModemSMSReadAll(0);//0表示实时删除短信猫中的信息

if (AllData != NULL) //获取短信内容及电话号码的总长度Len

{int Num = 0,Content = 0;int phonenum = 0 ; //一个电话号码和一条短信

for(int i=0;i

{if(AllData[i] == ‘|’) {phonenum+=1;}if(phonenum == 0) {……}//获得手机号码

else if(phonenum==1 && AllData[i]!=‘|’){……}//获得短信内容

if(phonenum==3 && AllData[i-1]==‘|’)

{ strPhone.Format(“%s”,number);strNote.Format(“%s”,msgContent);

……………//将电话号码及短信内容转换为字符串}

}} …………//用m_AdoConn连接数据库

sql.Format(“select * from tb_phonebook where 电话号码=‘%s’”,strPhone);

if(!m_AdoConn.m_pRecordset->adoEOF)

{m_Name = (char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect(“姓名”);

if(“CX”==str.Left(2)){…………}//strNote的前两个字符是否为CX,是则进入自动回复模块

else{…………}//不是则进入人工服务模块

}else m_Name = “新号码”;…………//进入人工服务模块

3 结束语

短信服务高效、经济、快捷,在很多行业都能发挥自己的优势.但是手机编写短信往往比较慢,而且麻烦,这给人们带来了很大的不变.本系统以 Visual C++6.0作为开发工具,使用串口发送短信,将手机与计算机紧密联系起来.由于本系统将手机短信应用于企业的业务管理,服务器终端能自动回复大部分查询类的短信息,同时对非查询类短信也可以人工服务,从而解决了很多公司的业务人员与公司联系不便、实时性差、语音联系又过于昂贵的问题.

但是随着MMS( Multimedia Messaging Service)的发展,彩信业务的发展成为必然.本系统目前不能将文本、图像、声音、视频等集成在一起,这是本系统在以后重点研究的一个方向[10].

[1]潘峥嵘, 徐 猛. 基于GSM短消息的水渠水位自动测报系统[J]. 计算机工程,2007,33(7):234-236.

[2] 管恩花,尚传进,张晓峰.VC++实现PC通过串口收发手机短消息[J].计算机应用研究,2005,22(8):215-219.

[3] 沙 泉. 基于嵌入式Linux的短信收发系统设计[J]. 微计算机信息, 2007,23(35):90-92.

[4] 聂捷楠,葛 波,任 伟. 基于手机短信的电子商务平台设计与实现[J]. 微计算机信息,2006,22(27):220-222.

[5] 杨子华,胡 倩,凌江荣. 基于智能手机平台的SMS系统设计与实现[J]. 通信技术,2007,40(9):70-72.

[6] 刘通良,潘仕彬.核环境下基于GSM SMS的无线通信平台的实现[J]. 核电子学与探测技术, 2007,27(6):1 252-1 255.

[7] 谢春祥,张 虹,聂余满.基于GSM/GPRS 的终端式短信平台开发[J].计算机工程与设计,2007, 28(7):1 680-1 729.

[8] 李 言,李伟明,李 贺.Visual C++项目开发全程实录[M].北京:清华大学出版社,2008:74-106.

[9] 史 永,杨 英,陈 强,等. 面向自动回复的公交SMS平台的研究和实现[J].计算机工程,2007,33(21):252-254.

[10] 王徳文,朱永利, 邸 剑,等. 面向电力系统实时通信的MMS协议[J].电力自动化化设备,2009,29(27):101-104.

猜你喜欢

短消息短信编码
基于SAR-SIFT和快速稀疏编码的合成孔径雷达图像配准
《全元诗》未编码疑难字考辨十五则
子带编码在图像压缩编码中的应用
道歉短信
Genome and healthcare
试论电视新闻短消息的采写策略
浅谈广播短消息的采写
代发短信
Android手机系统中的短消息加密研究与实现
短消息业务评估体系的研究与实现