首頁>>>技術(shù)>>>交互語音應(yīng)答  IVR 產(chǎn)品

 

淺談電話語音查詢系統(tǒng)

2001/10/22

電話語音查詢系統(tǒng)已廣泛應(yīng)用于電話銀行、話費(fèi)查詢、證券委托、自動繳費(fèi)(水、電、氣等費(fèi)用)、語音信箱、自動聲訊服務(wù)、民航、鐵路等部門的信息查詢以及各種公共場所自動回答顧客提問等領(lǐng)域。

電話語音查詢系統(tǒng)的工作流程是用戶撥通電話語音查詢系統(tǒng)的熱線電話,并根據(jù)電話中的語音提示,通過按電話鍵來查詢電腦中存儲的各種信息; 電腦自動對用戶的操作進(jìn)行應(yīng)答,并以語音形式將信息反饋給用戶。

系統(tǒng)構(gòu)成

電話語音查詢系統(tǒng)是現(xiàn)代電信技術(shù)與計算機(jī)技術(shù)高度結(jié)合的產(chǎn)物,一般由硬件和軟件兩部分組成。

1. 硬件

電話語音查詢系統(tǒng)的硬件部分主要包括:電腦、電話語音卡、外線(普通市話線路)或內(nèi)線。

硬件部分的安裝過程極為簡單。只要將電話語音卡插入電腦的擴(kuò)展槽中,再將電話線接至電話語音卡提供的電話插座上,即可構(gòu)成電話語音查詢系統(tǒng)的硬件部分。

在電話語音卡的選擇方面,首先應(yīng)選擇符合國家電信標(biāo)準(zhǔn)和國際電信標(biāo)準(zhǔn),達(dá)到原郵電部入網(wǎng)規(guī)范,同時動態(tài)范圍大、信噪比高、音質(zhì)好的電話語音卡產(chǎn)品。其次應(yīng)選擇采用電話接口模塊與語音處理板分離結(jié)構(gòu)的產(chǎn)品,以便可以根據(jù)實(shí)際需要靈活配置電話線數(shù)和內(nèi)外線比例。電話接口模塊分用戶模塊(也稱內(nèi)線模塊)和中繼模塊(也稱外線模塊)兩種。其中用戶模塊可以直接驅(qū)動電話,所連電話一摘機(jī)即可開始工作,常用來調(diào)試程序或放到營業(yè)大廳供用戶使用。中繼模塊連接市話網(wǎng)的電話線或小型程控交換機(jī)的用戶線,本身相當(dāng)于一部電話機(jī)。

2. 軟件

軟件一般由操作系統(tǒng)、電話語音卡底層驅(qū)動軟件和二次開發(fā)接口軟件、電話語音查詢系統(tǒng)應(yīng)用軟件三部分構(gòu)成。由于目前電話語音卡的國際標(biāo)準(zhǔn)尚未制訂,因此不同生產(chǎn)廠家仍需隨卡提供支持各種電話語音功能(如錄音、放音、接收和發(fā)送雙音頻碼等)的底層驅(qū)動軟件。驅(qū)動軟件與應(yīng)用軟件的接口一般采用軟件中斷調(diào)用方式(如INT 9FH),可以直接在匯編語言或C語言等高級語言編寫的程序中調(diào)用。此外,很多生產(chǎn)廠家還提供了方便用戶進(jìn)行二次開發(fā)的各種編程語言接口。

電話語音查詢系統(tǒng)應(yīng)用軟件由電話語音處理和數(shù)據(jù)庫處理兩大程序模塊組成。

電話語音處理程序模塊的主要任務(wù)是負(fù)責(zé)完成(通過調(diào)用底層驅(qū)動軟件)每條線路的摘掛機(jī)控制、放音、錄音、接收由用戶按鍵產(chǎn)生的雙音頻信號以及發(fā)送雙音頻信號等功能,并能夠檢測各種信號音,如占線忙音等。

DTMF(Dual Tone Multi Frequency)雙音多頻(簡稱雙音頻)信號由CCITT制訂并推薦作為按鍵式電話的標(biāo)準(zhǔn),目前廣泛用于電話撥號。雙音頻信號由兩種頻率組合而成,每個DTMF信號由一個低頻信號和一個高頻信號組成,一共可以產(chǎn)生16種信號,分別代表0~9、*、#等。

電話語音處理程序模塊中信號音檢測部分用于確定電話線路的狀態(tài),如撥號音、占線忙音(即被叫用戶忙音)、振鈴音(外線振鈴或內(nèi)線摘掛機(jī))、掛機(jī)忙音(檢測對方是否掛機(jī))等。

由于絕大多數(shù)電話語音查詢系統(tǒng)允許一邊進(jìn)行電話語音查詢作業(yè),一邊進(jìn)行數(shù)據(jù)庫的增、刪、改及系統(tǒng)維護(hù)管理,因此,電話語音處理程序模塊一般均在后臺運(yùn)行。

電話語音查詢最終都要對數(shù)據(jù)庫進(jìn)行操作。數(shù)據(jù)庫處理程序模塊是電話語音查詢系統(tǒng)最重要的組成部分之一。

由于數(shù)據(jù)庫處理程序模塊除了允許電腦操作員實(shí)時進(jìn)行數(shù)據(jù)庫的增、刪、改操作外,還必須同時對用戶通過電話提出的各種數(shù)據(jù)處理要求(可能包括寫數(shù)據(jù)庫操作)進(jìn)行實(shí)時響應(yīng),因此,保證數(shù)據(jù)庫的完整性是數(shù)據(jù)庫處理程序模塊的一項(xiàng)重要任務(wù)。

系統(tǒng)的開發(fā)設(shè)計

根據(jù)電話語音查詢系統(tǒng)的電話操作與電腦操作能否并行運(yùn)作,可以將電話語音查詢系統(tǒng)分為單任務(wù)系統(tǒng)和多任務(wù)系統(tǒng)兩大類。

1. 單任務(wù)系統(tǒng)

若電話語音查詢系統(tǒng)在進(jìn)行電話語音查詢作業(yè)時,操作員不能同時再用電腦對其進(jìn)行操作(除非暫停電話語音查詢作業(yè)),則所有的查詢與任務(wù)均可以在前臺完成。這類系統(tǒng)屬于典型的單任務(wù)系統(tǒng),程序設(shè)計較為簡單,應(yīng)用面較窄。

這類系統(tǒng)的電話處理程序模塊較為簡單,一般采用循環(huán)方式依次對各條電話線路的請求進(jìn)行處理。

// 無限循環(huán),直至滿足結(jié)束條件(如按ESC鍵)為止

while ( ! FINISHED )

{

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

{// 循環(huán)處理每條線路

processing(ChannelNo); // 電話語音查詢處理函數(shù)

} /* for */

} /* while */

其中電話語音查詢處理函數(shù)(processing)的功能如下:

● 若檢測到某條電話線路的振鈴信號(外線)或摘機(jī)信號(內(nèi)線),則轉(zhuǎn)入相應(yīng)的子程序進(jìn)行放音、錄音、接收用戶按鍵碼或自動撥號等處理;

● 大多數(shù)電話語音卡上每條線路的實(shí)際錄放音以及收發(fā)雙音頻碼工作均由底層驅(qū)動軟件來控制完成,且可以同時進(jìn)行,互不影響。這樣,應(yīng)用程序只需發(fā)出錄放音或收發(fā)雙音頻碼命令即可繼續(xù)往下執(zhí)行程序(如繼續(xù)處理其他線路的請求等),無需等待。當(dāng)然,有時可能希望某個線路在錄放音或收發(fā)雙音頻碼工作尚未完成之前,不能對該線路進(jìn)行其他操作。在這種情況下,應(yīng)用程序可以調(diào)用底層驅(qū)動軟件對該線路進(jìn)行檢測。若前面工作尚未完成,則循環(huán)至下一條線路繼續(xù)進(jìn)行處理。若前面工作已完成,則視程序的具體要求進(jìn)行相應(yīng)處理,例如根據(jù)用戶的按鍵碼進(jìn)行相關(guān)的數(shù)據(jù)庫處理,并將處理結(jié)果通過電話反饋給用戶。

● 自動撥號后,應(yīng)根據(jù)檢測到的信號音做出相應(yīng)的處理。例如:若檢測到被叫用戶占線忙音,則可以重新?lián)芴柣蛘吒粢欢螘r間之后再重新?lián)芴;若檢測到對方無人接聽,則放棄撥號操作或隔一段時間之后再重新?lián)芴枴?

● 當(dāng)處理完某條電話線路的請求或檢測到用戶掛機(jī)信號(通過檢測掛機(jī)忙音進(jìn)行判別),則執(zhí)行該線路的掛機(jī)動作,并重新對該線路進(jìn)行初始化,以便處理來自該線路的下一個請求任務(wù)。

● 當(dāng)需要讀出一系列數(shù)字(如123,1996等)時,可以采用組合放音法,即依次播放每個數(shù)字對應(yīng)的語音文件。由于每讀一個數(shù)字均需打開和關(guān)閉該數(shù)字對應(yīng)的語音文件,因此勢必造成時間上的一些延遲,進(jìn)而影響到語音的連貫性。建議將每個數(shù)字的語音文件事先讀入內(nèi)存中,這樣就避免了因讀寫磁盤而影響語音的連貫性。

2. 多任務(wù)系統(tǒng)

若電話語音查詢系統(tǒng)允許電話操作與電腦操作并行運(yùn)作,亦即所謂的多任務(wù)系統(tǒng),則相應(yīng)的程序設(shè)計工作略為復(fù)雜。由于此類系統(tǒng)功能強(qiáng),且具有較大的靈活性,因此,大多數(shù)電話語音查詢系統(tǒng)均屬此類。

與第一類電話語音查詢系統(tǒng)相比,為了實(shí)現(xiàn)并行操作,此類系統(tǒng)的電話處理程序模塊一般由時鐘中斷處理程序按照設(shè)定的時間間隔(如每秒18次)自動調(diào)用。由于間隔時間相對較短,因此可以用來模擬實(shí)時多任務(wù)系統(tǒng),而數(shù)據(jù)庫處理程序模塊要求既能被電話處理程序模塊調(diào)用,又能被系統(tǒng)主程序(前臺)調(diào)用。

● 對各條電話線路的處理采用循環(huán)方式,即每次產(chǎn)生時鐘中斷時,依次對各條線路進(jìn)行循環(huán)處理。時鐘中斷處理程序與電話處理程序模塊的相互關(guān)系大致如下:

// 時鐘中斷處理程序

timer_interrupt ()

{

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

{// 循環(huán)處理每條線路

processing(ChannelNo); // 電話語音查詢處理函數(shù)

} /* for */

} /* timer_interrupt */

為避免前面指令尚未處理完又產(chǎn)生新的定時器事件,應(yīng)在時鐘中斷處理程序前面設(shè)置一個進(jìn)出標(biāo)記(應(yīng)為static靜態(tài)變量)。若此標(biāo)記置0,則可以進(jìn)入循環(huán)進(jìn)行處理;若此標(biāo)記置1,則說明上一次處理尚未完成,中斷程序無條件返回。

對于像DOS這樣的單任務(wù)操作系統(tǒng)來說,由于上述程序中對所有電話線路的處理均集中在一次中斷調(diào)用過程中(視任務(wù)繁忙情況可能跨越幾個時鐘周期)完成,因此,若前臺任務(wù)量大,則可能因前臺分配到的時間片過少而影響前臺任務(wù)的執(zhí)行效率。這時可采用每次中斷僅處理一條線路的方法輪流進(jìn)行處理:

//全局變量,表示正在處理的電話線路號

int CurrentChannel=0;

timer_interrupt ()//時鐘中斷處理程序

{

// 若一輪循環(huán)結(jié)束,則開始新一輪循環(huán)

if (CurrentChannel==MAXCHANNELS)

CurrentChannel=0;

// 電話語音查詢處理函數(shù)

processing(ChannelNo);

// 準(zhǔn)備處理下一條電話線路

++CurrentChannel;

} /* timer_interrupt */

注意:此類電話語音查詢系統(tǒng)的電話處理程序模塊中不允許出現(xiàn)無限等待的現(xiàn)象,如等待用戶按鍵盤某個鍵等。

● 若電話語音查詢系統(tǒng)不需要對數(shù)據(jù)庫進(jìn)行寫操作,則情況要簡單得多。只要以共享方式,而不是以獨(dú)占方式打開數(shù)據(jù)庫即可,當(dāng)然還可以進(jìn)一步指定以只讀方式打開數(shù)據(jù)庫。當(dāng)兩個或兩上以上的進(jìn)程同時對數(shù)據(jù)庫中的同一個數(shù)據(jù)進(jìn)行讀寫操作時,將導(dǎo)致數(shù)據(jù)庫數(shù)據(jù)的不一致。為確保數(shù)據(jù)的正確性,必須采取數(shù)據(jù)保護(hù)措施。首先,只能以共享方式,而不允許以獨(dú)占方式打開數(shù)據(jù)庫。其次,必須以讀寫方式打開數(shù)據(jù)庫。最后,還要確保通過電話提交的數(shù)據(jù)庫操作請求與電腦操作員正在進(jìn)行的數(shù)據(jù)庫操作不發(fā)生沖突,即兩個進(jìn)程不能同時讀寫同一數(shù)據(jù)。為防止這種情況,可以采用自動文件加鎖與解鎖方式,如某些數(shù)據(jù)庫操作命令(如append命令)在執(zhí)行時自動給數(shù)據(jù)庫文件加鎖,并且在執(zhí)行完后自動解鎖;或者使用lock file和unlock file等命令顯式地進(jìn)行數(shù)據(jù)庫文件的加鎖與解鎖,還可以使用lock record或unlock record等命令顯式地進(jìn)行數(shù)據(jù)庫記錄的加鎖與解鎖。

● 對于采用支持多任務(wù)的操作系統(tǒng)作為開發(fā)和運(yùn)行平臺的電話語音查詢系統(tǒng)來說,電話操作(作為定時器中斷事件處理程序的一部分)與電腦操作,作為同一程序的兩個進(jìn)程并發(fā)地運(yùn)行沒有任何問題,程序設(shè)計也較為簡單,故不再贅述。

相比之下,對于把DOS這樣的單任務(wù)操作系統(tǒng)作為開發(fā)和運(yùn)行平臺的電話語音查詢系統(tǒng)來說,程序設(shè)計要困難得多。為了實(shí)現(xiàn)電話語音查詢系統(tǒng)的電話操作與電腦操作并發(fā)運(yùn)行,必須將其模擬成一個實(shí)時多任務(wù)系統(tǒng)。

實(shí)時多任務(wù)系統(tǒng)的特點(diǎn)是事件驅(qū)動和多任務(wù)處理。任務(wù)是多任務(wù)系統(tǒng)中獨(dú)立運(yùn)行的基本單元,也是系統(tǒng)分配和調(diào)度的基本單元。每個任務(wù)均由程序段、數(shù)據(jù)段、堆棧段和一個任務(wù)控制塊(包括當(dāng)前任務(wù)的優(yōu)先級標(biāo)識、堆棧指針和運(yùn)行狀態(tài)等)組成。系統(tǒng)通過任務(wù)控制塊PCB確定任務(wù)的運(yùn)行狀態(tài),并按照任務(wù)的優(yōu)先級調(diào)度多任務(wù)并發(fā)運(yùn)行,即允許就緒任務(wù)中具有較高優(yōu)先級的任務(wù)搶占CPU運(yùn)行,并暫時中斷較低優(yōu)先級任務(wù)的執(zhí)行。

計算機(jī)世界網(wǎng) 2001/10/22



相關(guān)鏈接:
東進(jìn)技術(shù)總裁賀建楠談3G應(yīng)用落地:進(jìn)展超出預(yù)期 2009-09-25
你的IVR物盡其用了嗎? 2009-09-18
細(xì)節(jié)處理決定3G-IVVR系統(tǒng)成敗關(guān)鍵 2009-08-28
對呼叫中心視頻IVR設(shè)計的改進(jìn)建議 2009-07-29
我的菜單我做主——呼叫熱線自助語音服務(wù)個性化之路 2009-07-08