新闻动态   News
联系我们   Contact
你的位置:首页 > 新闻动态 > 行业新闻

浅谈电话语音查询系统

2017/6/26 11:32:52      点击:


电话语音查询系统已广泛应用于电话银行、话费查询、证券委托、自动缴费(水、电、气等费用)、语音信箱、自动声讯服务、民航、铁路等部门的信息查询以及各种公共场所自动回答顾客提问等领域。

电话语音查询系统的工作流程是用户拨通电话语音查询系统的热线电话,并根据电话中的语音提示,通过按电话键来查询电脑中存储的各种信息; 电脑自动对用户的操作进行应答,并以语音形式将信息反馈给用户。

系统构成

电话语音查询系统是现代电信技术与计算机技术高度结合的产物,一般由硬件和软件两部分组成。

1. 硬件

电话语音查询系统的硬件部分主要包括:电脑、电话语音卡、外线(普通市话线路)或内线。

硬件部分的安装过程极为简单。只要将电话语音卡插入电脑的扩展槽中,再将电话线接至电话语音卡提供的电话插座上,即可构成电话语音查询系统的硬件部分。

在电话语音卡的选择方面,首先应选择符合国家电信标准和国际电信标准,达到原邮电部入网规范,同时动态范围大、信噪比高、音质好的电话语音卡产品。其次应选择采用电话接口模块与语音处理板分离结构的产品,以便可以根据实际需要灵活配置电话线数和内外线比例。电话接口模块分用户模块(也称内线模块)和中继模块(也称外线模块)两种。其中用户模块可以直接驱动电话,所连电话一摘机即可开始工作,常用来调试程序或放到营业大厅供用户使用。中继模块连接市话网的电话线或小型程控交换机的用户线,本身相当于一部电话机。

2. 软件

软件一般由操作系统、电话语音卡底层驱动软件和二次开发接口软件、电话语音查询系统应用软件三部分构成。由于目前电话语音卡的国际标准尚未制订,因此不同生产厂家仍需随卡提供支持各种电话语音功能(如录音、放音、接收和发送双音频码等)的底层驱动软件。驱动软件与应用软件的接口一般采用软件中断调用方式(如INT 9FH),可以直接在汇编语言或C语言等高级语言编写的程序中调用。此外,很多生产厂家还提供了方便用户进行二次开发的各种编程语言接口。

电话语音查询系统应用软件由电话语音处理和数据库处理两大程序模块组成。

电话语音处理程序模块的主要任务是负责完成(通过调用底层驱动软件)每条线路的摘挂机控制、放音、录音、接收由用户按键产生的双音频信号以及发送双音频信号等功能,并能够检测各种信号音,如占线忙音等。

DTMF(Dual Tone Multi Frequency)双音多频(简称双音频)信号由CCITT制订并推荐作为按键式电话的标准,目前广泛用于电话拨号。双音频信号由两种频率组合而成,每个DTMF信号由一个低频信号和一个高频信号组成,一共可以产生16种信号,分别代表0~9、*、#等。

电话语音处理程序模块中信号音检测部分用于确定电话线路的状态,如拨号音、占线忙音(即被叫用户忙音)、振铃音(外线振铃或内线摘挂机)、挂机忙音(检测对方是否挂机)等。

由于绝大多数电话语音查询系统允许一边进行电话语音查询作业,一边进行数据库的增、删、改及系统维护管理,因此,电话语音处理程序模块一般均在后台运行。

电话语音查询最终都要对数据库进行操作。数据库处理程序模块是电话语音查询系统最重要的组成部分之一。

由于数据库处理程序模块除了允许电脑操作员实时进行数据库的增、删、改操作外,还必须同时对用户通过电话提出的各种数据处理要求(可能包括写数据库操作)进行实时响应,因此,保证数据库的完整性是数据库处理程序模块的一项重要任务。

系统的开发设计

根据电话语音查询系统的电话操作与电脑操作能否并行运作,可以将电话语音查询系统分为单任务系统和多任务系统两大类。

1. 单任务系统

若电话语音查询系统在进行电话语音查询作业时,操作员不能同时再用电脑对其进行操作(除非暂停电话语音查询作业),则所有的查询与任务均可以在前台完成。这类系统属于典型的单任务系统,程序设计较为简单,应用面较窄。

这类系统的电话处理程序模块较为简单,一般采用循环方式依次对各条电话线路的请求进行处理。

// 无限循环,直至满足结束条件(如按ESC键)为止

while ( ! FINISHED )

{

for (ChannelNo=0; ChannelNo<MAXCHANNELS; ++ChannelNo)

{// 循环处理每条线路

processing(ChannelNo); // 电话语音查询处理函数

} /* for */

} /* while */

其中电话语音查询处理函数(processing)的功能如下:

● 若检测到某条电话线路的振铃信号(外线)或摘机信号(内线),则转入相应的子程序进行放音、录音、接收用户按键码或自动拨号等处理;

● 大多数电话语音卡上每条线路的实际录放音以及收发双音频码工作均由底层驱动软件来控制完成,且可以同时进行,互不影响。这样,应用程序只需发出录放音或收发双音频码命令即可继续往下执行程序(如继续处理其他线路的请求等),无需等待。当然,有时可能希望某个线路在录放音或收发双音频码工作尚未完成之前,不能对该线路进行其他操作。在这种情况下,应用程序可以调用底层驱动软件对该线路进行检测。若前面工作尚未完成,则循环至下一条线路继续进行处理。若前面工作已完成,则视程序的具体要求进行相应处理,例如根据用户的按键码进行相关的数据库处理,并将处理结果通过电话反馈给用户。

● 自动拨号后,应根据检测到的信号音做出相应的处理。例如:若检测到被叫用户占线忙音,则可以重新拨号或者隔一段时间之后再重新拨号;若检测到对方无人接听,则放弃拨号操作或隔一段时间之后再重新拨号。

● 当处理完某条电话线路的请求或检测到用户挂机信号(通过检测挂机忙音进行判别),则执行该线路的挂机动作,并重新对该线路进行初始化,以便处理来自该线路的下一个请求任务。

● 当需要读出一系列数字(如123,1996等)时,可以采用组合放音法,即依次播放每个数字对应的语音文件。由于每读一个数字均需打开和关闭该数字对应的语音文件,因此势必造成时间上的一些延迟,进而影响到语音的连贯性。建议将每个数字的语音文件事先读入内存中,这样就避免了因读写磁盘而影响语音的连贯性。

2. 多任务系统

若电话语音查询系统允许电话操作与电脑操作并行运作,亦即所谓的多任务系统,则相应的程序设计工作略为复杂。由于此类系统功能强,且具有较大的灵活性,因此,大多数电话语音查询系统均属此类。

与第一类电话语音查询系统相比,为了实现并行操作,此类系统的电话处理程序模块一般由时钟中断处理程序按照设定的时间间隔(如每秒18次)自动调用。由于间隔时间相对较短,因此可以用来模拟实时多任务系统,而数据库处理程序模块要求既能被电话处理程序模块调用,又能被系统主程序(前台)调用。

● 对各条电话线路的处理采用循环方式,即每次产生时钟中断时,依次对各条线路进行循环处理。时钟中断处理程序与电话处理程序模块的相互关系大致如下:

// 时钟中断处理程序

timer_interrupt ()

{

for (ChannelNo=0; ChannelNo<MAXCHANNELS; ++ChannelNo)

{// 循环处理每条线路

processing(ChannelNo); // 电话语音查询处理函数

} /* for */

} /* timer_interrupt */

为避免前面指令尚未处理完又产生新的定时器事件,应在时钟中断处理程序前面设置一个进出标记(应为static静态变量)。若此标记置0,则可以进入循环进行处理;若此标记置1,则说明上一次处理尚未完成,中断程序无条件返回。

对于像DOS这样的单任务操作系统来说,由于上述程序中对所有电话线路的处理均集中在一次中断调用过程中(视任务繁忙情况可能跨越几个时钟周期)完成,因此,若前台任务量大,则可能因前台分配到的时间片过少而影响前台任务的执行效率。这时可采用每次中断仅处理一条线路的方法轮流进行处理:

//全局变量,表示正在处理的电话线路号

int CurrentChannel=0;

timer_interrupt ()//时钟中断处理程序

{

// 若一轮循环结束,则开始新一轮循环

if (CurrentChannel==MAXCHANNELS)

CurrentChannel=0;

// 电话语音查询处理函数

processing(ChannelNo);

// 准备处理下一条电话线路

++CurrentChannel;

} /* timer_interrupt */

注意:此类电话语音查询系统的电话处理程序模块中不允许出现无限等待的现象,如等待用户按键盘某个键等。

● 若电话语音查询系统不需要对数据库进行写操作,则情况要简单得多。只要以共享方式,而不是以独占方式打开数据库即可,当然还可以进一步指定以只读方式打开数据库。当两个或两上以上的进程同时对数据库中的同一个数据进行读写操作时,将导致数据库数据的不一致。为确保数据的正确性,必须采取数据保护措施。首先,只能以共享方式,而不允许以独占方式打开数据库。其次,必须以读写方式打开数据库。最后,还要确保通过电话提交的数据库操作请求与电脑操作员正在进行的数据库操作不发生冲突,即两个进程不能同时读写同一数据。为防止这种情况,可以采用自动文件加锁与解锁方式,如某些数据库操作命令(如append命令)在执行时自动给数据库文件加锁,并且在执行完后自动解锁;或者使用lock file和unlock file等命令显式地进行数据库文件的加锁与解锁,还可以使用lock record或unlock record等命令显式地进行数据库记录的加锁与解锁。

● 对于采用支持多任务的操作系统作为开发和运行平台的电话语音查询系统来说,电话操作(作为定时器中断事件处理程序的一部分)与电脑操作,作为同一程序的两个进程并发地运行没有任何问题,程序设计也较为简单,故不再赘述。

相比之下,对于把DOS这样的单任务操作系统作为开发和运行平台的电话语音查询系统来说,程序设计要困难得多。为了实现电话语音查询系统的电话操作与电脑操作并发运行,必须将其模拟成一个实时多任务系统。

实时多任务系统的特点是事件驱动和多任务处理。任务是多任务系统中独立运行的基本单元,也是系统分配和调度的基本单元。每个任务均由程序段、数据段、堆栈段和一个任务控制块(包括当前任务的优先级标识、堆栈指针和运行状态等)组成。系统通过任务控制块PCB确定任务的运行状态,并按照任务的优先级调度多任务并发运行,即允许就绪任务中具有较高优先级的任务抢占CPU运行,并暂时中断较低优先级任务的执行。