用常规拨号方式来实现网络呼叫的方法研究

2013-12-22 12:21李艳红李国徽
关键词:关键字电话号码客服

李艳红,李国徽

(1中南民族大学 计算机科学学院 ,武汉 430074;2华中科技大学 计算机科学与技术学院,武汉 430074)

随着互联网的发展和普及,越来越多的网络应用程序和设备进入到人们生活,在网络呼叫方面研究者们提出了许多研究成果[1-7].孟宪明等人提出一种基于网关位置寄存器(GLR)的3G网络呼叫建立机制.利用GLR在3G网络中的作用,采用本地路由和缓存策略改进现有3G系统中的呼叫建立机制.张姣姣等人研究了IP软交换的基本原理,并提出了相应的实现方法.我们平时用QQ、飞信聊天,在论坛发表评论,在博客发表文章,使用网上银行,甚至是收发邮件时,都在跟ID打交道.这些网络应用程序都需要账号(ID),所使用的ID,其类型以及系统对其使用方法各有不同,但是有一个共同的特点,就是难以记忆,并且密码容易忘记.

于是出现了一些试图改善这种状况的方法:比如和手机绑定的方法,典型的例子是飞信,除了飞信号,也同时有一个手机号码与之对应,这样用户只要用自己的手机号即可登录飞信,忘记了密码还可以通过短信的方式来重新设置.又比如委托第三方验证授权,典型的例子是PPTV可以委托新浪微博、人人网、QQ、腾讯微博来验证授权的方式登录,这种方法可以通过已有的ID来使用新的网络应用.也有人在不同的网络应用中使用相同的ID,缺点是ID的选择要尽可能复杂,在新应用中注册时才不会被人抢先一步,这个方法是用户的行为,与程序和系统无关.

全球范围内固定电话的绑定,鲜有人研究出实用性强的方法.究其原因,主要是以下几个方面:(1)固话的通讯方式是电路交换,边拨号边连接线路,与手机的拨号完毕再建立连接不同,与互联网的包交换方式更是有本质的区别[8];(2)每个国家的国家代码长短不一,区号编码各国自定,同样长短不一,各区(城市)内的电话号码也长短不一;(3)各国有一到几个运营商,每个运营商有各自的国际长途前缀和各自的国内长途前缀;(4)有的国家和地区没有区号,也就没有国内长途前缀的说法;(5)世界各地都可能随时有城市合并、分裂,号码升位,出现新运营商等情况,也即如果不是特殊的电信机构,很难及时更新这些数据;(6)绑定的电话可能需要更换,比如搬家、旅游、换号.

本文研究的是一种适用的、ID绑定固定电话,进而用固定电话号码替代ID来呼叫和建立网络通讯的方法,可用于网络电话的拨号、寻址和呼叫.本方法涉及固话号码与ID的绑定方法、以及根据绑定数据来解析出被叫终端的ID的方法两部分.绑定流程涉及通讯终端、服务器端以及绑定客服端.

1 根据绑定数据解析出被叫ID的流程和算法

1.1 绑定数据的组成

终端的ID与固定电话绑定完成后,在服务器的数据库中,有一个根据“国家代码+区号+电话号码”(后文用ID查询关键字)查找“终端ID”的表,本文称为绑定数据表.该表包含“ID”、“国家代码+区号+电话号码”、“国家代码”、“国际直拨前缀”、“区号”、“国内直拨前缀”以及“电话号码”等信息.终端可以根据自己的ID到服务器获取表中的信息.

国际直拨前缀,又称为国际长途出局号.例如:在中国打国际长途要先拨00,这个“00”就是中国的国际直拨前缀.国际直拨前缀是与运营商相关的,比如香港电讯盈科(PCCW)的国际直拨前缀是001,新世界(New World)是009.而美国、加拿大同属“北美区号规划”,国家代码都是1,两个国家的城市区号也是统一编号的,国际直拨前缀都是011,两国城市之间的长途前缀都是1.

也有一些特殊的情况:有的国家或地区没有国内长途区号,例如新加坡;有的国家甚至没有(或暂时没有)自己的国家代码,比如梵蒂冈,现在使用意大利的国家代码39,和罗马同区号06,只是形如698x xxxx的电话代表梵蒂冈.

为了描述清楚起见,下面举例说明绑定数据的组成部分:

a) 国家或地区代码:例如中国是86、中国香港是852、美国是1;

b) 国际长途(IDD)前缀:中国为00,中国香港新世界电信用户是009,美国为011;

c) 国内长途(DDD)前缀:中国为0,中国香港无,美国为1;

d) 区号:武汉为27,香港无,美国洛杉矶为213;

e) 电话号码:武汉某用户81234567,香港某用户91234567,美国洛杉矶某用户8765432;

f) ID查询关键字:武汉某用户862781234567,香港某用户85291234567,美国洛杉矶某用户12138765432.

1.2 用固话号码来呼叫网络终端,根据被叫号码解析出被叫ID的算法

用固话号码来呼叫网络终端的含义是:在终端程序中填入与拨打对方固话相同的号码,输入完毕之后,终端程序计算出被叫终端的ID查询关键字.然后,根据ID查询关键字去服务器查找,就可以得到被叫终端的ID,使用ID就可以启动网络呼叫建立会话.从拨号字符串求得被叫终端ID查询关键字的步骤如算法 1所示.

Algorithm 1: calculateIDLookupKey

input: Data_Binding,

Number_DialingOut

output: Key_IDLookup

1 if Number_DialingOut prefixed with IDD

2 Key_IDLookup = remain of Number_DialingOut with IDD canceled

3 else if Number_DialingOut prefixed with DDD

4 Key_IDLookup = remain of Number_DialingOut with DDD canceled

5 Key_IDLookup = country code + Key_IDLookup

6 else

7 Key_IDLookup = country code + area code + Number_DialingOut

以下分别举例说明在拨打市话、国内长途以及国际长途时,从拨出的号码解析出ID查询关键字的步骤.

a) 拨打市话:拨打市话时,不需要地区出局号、国际出局号,只需拨打电话号码.这时终端将自己(主叫方)绑定的国家代码和区号加在拨出的电话号码前面,就得到被叫的ID查询关键字.例如武汉用户,输入号码11223344,号码不是“00”开头也不是“0”开头(也即开头数字不是IDD前缀,也不是DDD前缀),所以这是个市话,终端程序将8627加在前面,得到862711223344,这就是被叫终端的ID查询关键字.

b) 国内长途直拨:拨打国内长途时,需要先拨地区出局号(在中国是0),再拨被叫的区号,最后拨被叫的电话号码.这时终端将自己(主叫方)拨出码中的地区出局号去掉,在前面加上自己(主叫方)绑定的国家代码,就得到被叫的ID查询关键字.例如武汉用户欲与深圳用户通讯,输入号码075511223344,号码以“0”开头(也即开头数字不是IDD前缀,而是DDD前缀),所以这是个国内长途电话,终端程序去掉0,再在前面加上86,得到8675511223344,也即被叫终端的ID查询关键字.

c) 国际长途直拨:拨打国际长途时,需要先拨国际出局号(在中国是00),再拨国家代码、区号、电话号码.这时终端将自己(主叫方)拨出码中的国际出局号去掉,就得到被叫的ID查询关键字.例如武汉欲与洛杉矶用户通讯,输入0012138765432,号码以“00”开头(也即开头数字是IDD前缀),所以这是个国际长途电话,终端程序将00去掉,这就是被叫终端的ID查询关键字.

2 固话绑定终端ID的流程和算法

2.1 固话绑定工作原理及约束条件

终端呼叫另一终端需要服务器提供软交换服务,真正用来呼叫从而建立网络会话的是终端ID,这里涉及主叫方的ID和被叫方的ID.终端的ID,可以是预设固化在设备中不可更改的标识,也可以是用户到服务器注册得到的账号,也就是说终端程序知道自己的ID.被叫终端的ID则采用上一节的方法来求得.

固话绑定的目的是在服务器存放终端的PSTN信息(Public Switched Telephone Network,也即固定电话),包括终端ID查询关键字、国家代码、IDD前缀、DDD前缀、区号、电话号码.

绑定最简单的方法是用户在终端的UI输入所有上述信息,但是这样做有两个严重的问题:1)这涉及到用户的操作,则肯定需要验证,经过验证的数据才能写入到绑定数据库.否则如果出现错误的绑定,就会扰乱其他用户,扰乱系统的运行;2)大多数用户不清楚国际长途出入局号、国内长途出入局号等概念.因此,要求绑定的使用难度小、输入尽可能少,又能保证用户输入的绑定信息是正确的.

本文的绑定功能由普通电话机、通讯终端、服务器、绑定客服机组成的系统来完成.通讯终端需要设计一个绑定向导,用户在向导的国家列表中选择国家,终端程序到服务器去查询本国的运营商列表以及运营商对应的国际长途出入局号及国内长途出入局号,向导显示出运营商列表,用户选择他的固话的运营商,然后填入电话号码,程序则将“ID”、“国家代码”、“国际出入局号”、“国内出入局号”以及“电话号码”封装为“绑定请求”,发送给服务器要求绑定.这时向导显示一个客服号码(本国的客服机),让用户用绑定ID的电话拨打这个号码,然后用一个倒计时的方式来提醒用户要拨打电话,用户打通客服后能听到电脑应答的声音后挂机.很快,终端的绑定向导将显示出绑定结果.

绑定客服机,则是在安装了语音卡的PC机上运行绑定客服程序,同时还能从服务器收发绑定服务相关的网络数据.语音卡要求接上电话线,它有接收来电显示和自动语音应答的功能,同时绑定客服程序需要知道这根电话线的各种信息,就像客服机也是绑定了固话的终端那样.

终端向导程序发送给服务器的“绑定请求”信息,将通过互联网转交给绑定客服机来处理.用户拨打客服电话时,客户机的语音卡将收到来电显示.这些信息和语音卡收到的来电显示号码进行对照,就能验证用户填入的电话号码是否是真实的.如果是正确的,则客服程序计算出终端的“ID查询关键字”、“区号”,从而得到完整的绑定数据,接着将这些绑定数据发回服务器.验证错误时,也向服务器发回验证错误的信息.服务器收到验证正确的信息,则将绑定数据写入数据库,验证错误则不写数据库,然后向终端返回绑定结果.终端UI显示出结果.

绑定客服是同时为很多用户服务的,所以需要解决并发的问题,包括同一个终端经服务器转发来的信息与来电号码不同步的问题.

2.2 固话绑定流程和算法

绑定流程涉及到多个设备和程序,这里用图1所示的时序图来表示.其中需要说明的是绑定客服机如何计算出待绑定终端的“区号”和“ID查询关键字”.接到电话时,语音卡获得的来电显示(CallerID),如果不以IDD入局号开头也不以DDD入局号开头(因为是来电,所以叫做入局号),那么是市话来电,绑定程序只要在前面加上本身的区号以及国家代码就得到了待绑定终端的“ID查询关键字”了.如果以DDD入局号开头而不以IDD入局号则为国内长途来电,绑定程序只要将DDD入局号去掉,再在前面加上国家代码就得到待绑定终端的“ID查询关键字”.如果是以IDD入局号开头则为国际长途来电,绑定程序只要将IDD入局号去掉就得到待绑定终端的“ID查询关键字”.

图1 终端ID与固话绑定时序图

对于市话来电,终端绑定的区号与绑定客服机相同.对于国内长途,终端绑定的区号在CallerID中,将电话号码去掉就是终端绑定区号,电话号码可从服务器转发来的“绑定请求”中获得.对于国际长途来电,需要去掉CallerID尾部的电话号码,还要去掉头部的IDD入局号以及终端所在国的国家代码,这里的国家代码需要客服机自己在国家代码列表去查找.

本文的绑定方法涉及到3个算法,分别用于终端程序、服务器程序和客服机程序.其中终端和服务器的算法相对简单,此处只介绍客服机的算法,如算法2所示.

Algorithm 2: Binding customer service

input: Binding request,

Incoming call

output: Binding acknowledgement

1 while incoming network data or incoming PSTN call do

2 if incoming network data then

3 if it’s binding request then

4 insert request data into request list

5 else if incoming PSTN call then

6 get CallerID

7 iterate request list,compare CallerID with phone-No in the list

8 if match then

9 fetch area code from CallerID

10 calculate key for ID-lookup,formatted with “countrCode+areaCode+phoneNo”

11 remove corresponding item from request list

12 envelope binding data into a acknowledge packe,and send to server

13 remove all items in the request list whose exists for more than 10 minutes

算法2中提到的匹配,也即将绑定请求数据中的电话号码与CallerID对比,电话号码是用户在绑定向导中填入的纯电话号码,不包含区号,而CallerID是电话线路传送的来电显示,如果是跨区拨打则包含区号,所以此处只要CallerID的尾端与电话号码相同就算是匹配成功.第13行将超过10 min的绑定请求从队列中移除,是考虑到用户放弃拨打客服电话的情况下,避免队列有无用的数据堆积.

3 模拟实验

3.1 实验环境和实验参数

本文通过模拟实验来验证所提出的绑定流程产生绑定数据的正确性.实验分4个程序:终端模拟软件、服务器模拟软件、绑定客服机模拟软件、电话机模拟软件,均是用c++开发,在linux上执行.

服务器程序需要用到数据库,本实验选用mysql,建三张表.第1张是运营商表,字段由“国家名称”、“国家代码”、“运营商名称”、“IDD出入局号”、“DDD出入局号”组成.第2张是绑定数据表,字段由“ID”、“国家代码+区号+电话号码”、“国家代码”、“IDD出入局号”、“区号”、“DDD出入局号”、“电话号码”组成.第3张是软交换表,及其内存镜像表,由“ID”、“密码”、“外网ip”、“外网port”、“内网ip”、“内网port”、“防火墙特性”、“国家代码+区号+电话号码”字段组成.

在运营商表中手动添加如表1所示的数据来代表全球各国的运营商,绑定数据表初始化为空表,在软交换表手动添加如表2所示的数据来代表终端的认证信息,其中ID为“01:02:03:04:00:01”的信息代表绑定客服机,软交换表的内存镜像表在服务器程序运行时创建并从软交换表中复制数据,终端发送登录UDP包及心跳包时,镜像表更新它的ip和port.假设终端用MAC地址作为ID.

表1 PSTN运营商表

表2 软交换表

绑定客服机由两路数据输入,一个是服务器发来的绑定请求,一个是语音卡收到PSTN来电获得CallerID.本文的实验省略了电话机和语音卡两部分,电话机模拟软件与绑定客服机程序之间的CallerID传送用UDP来完成.“打电话”时运行电话机模拟软件,命令行参数为拨出的电话号码.

3.2 绑定固话的实验

考虑到该模型涉及到软交换,并且服务器与终端的通讯是大容量和高并发的,所以用UDP来实现.在进行图1所示绑定流程前,终端和绑定客服机都登录到服务器,用ID和密码来验证合法性,登录之后每隔30s发送一次心跳包(也即终端定时向服务器发送一个心跳包,服务器收到后也向终端返回一个心跳包).服务器收到终端的登录包或者心跳包时,就会获得终端的外网ip和外网port,然后记录到软交换表.软交换表是用来查找发送网络数据的目的地址.

终端程序启动两个实例,一个是ID为1A:2B:3C:09:08:01的终端(下称终端A),一个是ID为1A:2B:3C:09:08:02的终端(下称终端B).

本实验假设绑定客服机都是在深圳,那么对应的国家代码为“86”,IDD出入局号为“00”,DDD出入局号为“0”,区号为“755”.

假终端A在武汉(81234567),终端B是香港和记电讯的用户(91234567).对于终端A,客服机收到的CallerID是02781234567,对于终端B,客服机收到的CallerID是0085291234567.

按照算法2设计绑定流程,得到绑定数据填入表3,并发回给终端程序.

表3 绑定数据表

3.3 用固定电话号码实现网络呼叫的实验

上述的终端B呼叫终端A时,在UI上输入“0080862781234567”,终端B的程序用根据算法1计算得终端A的ID查找关键字“862781234567”,然后去服务器查找(查找表2的内存镜像表)终端A的ID得到“1A:2B:3C:09:08:01”,根据ID就可以在软交换表中查找到终端A的外网ip和port,进而建立网络会话.

3.4 实验结论

本实验模拟了一个终端用常规固定电话拨号方式来呼叫另一个网络终端从而建立网络会话的过程.绑定过程引入了客服机来验证用户选择的国家、运营商以及填写的电话号码是真实的和唯一的.将ID与固话号码绑定之后,用户像平常拨打固话那样输入被叫电话号码,系统将输入的数字转换成被叫的ID查询关键字,然后用这个关键字去绑定数据表中找到被叫的ID,最后根据被叫的ID,通过服务器的软交换功能来实现网络呼叫,并建立会话.模拟实验表明:本文所提出的方法是切实可行的.

4 结束语

通讯类网络应用程序通常都需要一个ID,用以标识使用者或者设备的身份.但是,这些ID通常难以记忆.本文提出了绑定固定电话号码与网络应用程序或者设备ID的方法,以及使用固定电话号码来替代ID进行呼叫和建立网络会话的方法,具有较强的适用性,很容易应用到网络音视频会话类的产品中.最后,通过模拟实验验证了本文所提出方法的可行性.此外,输入电话号码建立网络寻址呼叫和会话后,软件可以保留会话历史记录和好友列表,通过会话历史记录和好友列表也能直接发起呼叫.

[1] 王晓东,陈 晓,闵 捷,等. 基于交互测量和时延预测的无线传感网络呼叫接入控制机制[J]. 吉林大学学报:工学版,2012,42(S1):280-284.

[2] 刘足江,刘 云. 环形无线网络呼叫接入控制模型研究[J]. 郑州轻工业学院学报:自然科学版, 2012(06):97-100.

[3] 孟宪明,孔 锋. 一种基于GLR的3G网络呼叫建立机制[J].计算机工程,2011(15):58-59,60.

[4] 张姣姣,林 东. IP软交换呼叫中心的设计与实现[J]. 中国交通信息化, 2011(01):96-98.

[5] 谢建兵,万晓榆,樊志甫. 移动网络交换中号码分析策略研究与优化[J].数字通信,2010(03):86-88.

[6] 余雪勇,朱洪波. 一种新型的异构无线网络呼叫接纳控制算法研究[J].计算机应用研究, 2012(06):2321-2324,2328.

[7] 李 军,贾振红. WDM光网络呼叫阻塞性能分析[J]. 新疆大学学报:自然科学版, 2010(01):113-116 .

[8] Daniel Jurafsky,James H Martin. Carrier Grade Voice over IP[M]. 北京:人民邮电出版社,2001.

猜你喜欢
关键字电话号码客服
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
欢欢家的电话号码
语音推销
成功避开“关键字”
不能忘记的电话号码
建议
出大事了等
销售能手
智能垃圾箱
放慢你的脚步