淺談電話(huà)語(yǔ)音查詢(xún)系統
2001/10/22
電話(huà)語(yǔ)音查詢(xún)系統已廣泛應用于電話(huà)銀行、話(huà)費查詢(xún)、證券委托、自動(dòng)繳費(水、電、氣等費用)、語(yǔ)音信箱、自動(dòng)聲訊服務(wù)、民航、鐵路等部門(mén)的信息查詢(xún)以及各種公共場(chǎng)所自動(dòng)回答顧客提問(wèn)等領(lǐng)域。
電話(huà)語(yǔ)音查詢(xún)系統的工作流程是用戶(hù)撥通電話(huà)語(yǔ)音查詢(xún)系統的熱線(xiàn)電話(huà),并根據電話(huà)中的語(yǔ)音提示,通過(guò)按電話(huà)鍵來(lái)查詢(xún)電腦中存儲的各種信息; 電腦自動(dòng)對用戶(hù)的操作進(jìn)行應答,并以語(yǔ)音形式將信息反饋給用戶(hù)。
系統構成
電話(huà)語(yǔ)音查詢(xún)系統是現代電信技術(shù)與計算機技術(shù)高度結合的產(chǎn)物,一般由硬件和軟件兩部分組成。
1. 硬件
電話(huà)語(yǔ)音查詢(xún)系統的硬件部分主要包括:電腦、電話(huà)語(yǔ)音卡、外線(xiàn)(普通市話(huà)線(xiàn)路)或內線(xiàn)。
硬件部分的安裝過(guò)程極為簡(jiǎn)單。只要將電話(huà)語(yǔ)音卡插入電腦的擴展槽中,再將電話(huà)線(xiàn)接至電話(huà)語(yǔ)音卡提供的電話(huà)插座上,即可構成電話(huà)語(yǔ)音查詢(xún)系統的硬件部分。
在電話(huà)語(yǔ)音卡的選擇方面,首先應選擇符合國家電信標準和國際電信標準,達到原郵電部入網(wǎng)規范,同時(shí)動(dòng)態(tài)范圍大、信噪比高、音質(zhì)好的電話(huà)語(yǔ)音卡產(chǎn)品。其次應選擇采用電話(huà)接口模塊與語(yǔ)音處理板分離結構的產(chǎn)品,以便可以根據實(shí)際需要靈活配置電話(huà)線(xiàn)數和內外線(xiàn)比例。電話(huà)接口模塊分用戶(hù)模塊(也稱(chēng)內線(xiàn)模塊)和中繼模塊(也稱(chēng)外線(xiàn)模塊)兩種。其中用戶(hù)模塊可以直接驅動(dòng)電話(huà),所連電話(huà)一摘機即可開(kāi)始工作,常用來(lái)調試程序或放到營(yíng)業(yè)大廳供用戶(hù)使用。中繼模塊連接市話(huà)網(wǎng)的電話(huà)線(xiàn)或小型程控交換機的用戶(hù)線(xiàn),本身相當于一部電話(huà)機。
2. 軟件
軟件一般由操作系統、電話(huà)語(yǔ)音卡底層驅動(dòng)軟件和二次開(kāi)發(fā)接口軟件、電話(huà)語(yǔ)音查詢(xún)系統應用軟件三部分構成。由于目前電話(huà)語(yǔ)音卡的國際標準尚未制訂,因此不同生產(chǎn)廠(chǎng)家仍需隨卡提供支持各種電話(huà)語(yǔ)音功能(如錄音、放音、接收和發(fā)送雙音頻碼等)的底層驅動(dòng)軟件。驅動(dòng)軟件與應用軟件的接口一般采用軟件中斷調用方式(如INT 9FH),可以直接在匯編語(yǔ)言或C語(yǔ)言等高級語(yǔ)言編寫(xiě)的程序中調用。此外,很多生產(chǎn)廠(chǎng)家還提供了方便用戶(hù)進(jìn)行二次開(kāi)發(fā)的各種編程語(yǔ)言接口。
電話(huà)語(yǔ)音查詢(xún)系統應用軟件由電話(huà)語(yǔ)音處理和數據庫處理兩大程序模塊組成。
電話(huà)語(yǔ)音處理程序模塊的主要任務(wù)是負責完成(通過(guò)調用底層驅動(dòng)軟件)每條線(xiàn)路的摘掛機控制、放音、錄音、接收由用戶(hù)按鍵產(chǎn)生的雙音頻信號以及發(fā)送雙音頻信號等功能,并能夠檢測各種信號音,如占線(xiàn)忙音等。
DTMF(Dual Tone Multi Frequency)雙音多頻(簡(jiǎn)稱(chēng)雙音頻)信號由CCITT制訂并推薦作為按鍵式電話(huà)的標準,目前廣泛用于電話(huà)撥號。雙音頻信號由兩種頻率組合而成,每個(gè)DTMF信號由一個(gè)低頻信號和一個(gè)高頻信號組成,一共可以產(chǎn)生16種信號,分別代表0~9、*、#等。
電話(huà)語(yǔ)音處理程序模塊中信號音檢測部分用于確定電話(huà)線(xiàn)路的狀態(tài),如撥號音、占線(xiàn)忙音(即被叫用戶(hù)忙音)、振鈴音(外線(xiàn)振鈴或內線(xiàn)摘掛機)、掛機忙音(檢測對方是否掛機)等。
由于絕大多數電話(huà)語(yǔ)音查詢(xún)系統允許一邊進(jìn)行電話(huà)語(yǔ)音查詢(xún)作業(yè),一邊進(jìn)行數據庫的增、刪、改及系統維護管理,因此,電話(huà)語(yǔ)音處理程序模塊一般均在后臺運行。
電話(huà)語(yǔ)音查詢(xún)最終都要對數據庫進(jìn)行操作。數據庫處理程序模塊是電話(huà)語(yǔ)音查詢(xún)系統最重要的組成部分之一。
由于數據庫處理程序模塊除了允許電腦操作員實(shí)時(shí)進(jìn)行數據庫的增、刪、改操作外,還必須同時(shí)對用戶(hù)通過(guò)電話(huà)提出的各種數據處理要求(可能包括寫(xiě)數據庫操作)進(jìn)行實(shí)時(shí)響應,因此,保證數據庫的完整性是數據庫處理程序模塊的一項重要任務(wù)。
系統的開(kāi)發(fā)設計
根據電話(huà)語(yǔ)音查詢(xún)系統的電話(huà)操作與電腦操作能否并行運作,可以將電話(huà)語(yǔ)音查詢(xún)系統分為單任務(wù)系統和多任務(wù)系統兩大類(lèi)。
1. 單任務(wù)系統
若電話(huà)語(yǔ)音查詢(xún)系統在進(jìn)行電話(huà)語(yǔ)音查詢(xún)作業(yè)時(shí),操作員不能同時(shí)再用電腦對其進(jìn)行操作(除非暫停電話(huà)語(yǔ)音查詢(xún)作業(yè)),則所有的查詢(xún)與任務(wù)均可以在前臺完成。這類(lèi)系統屬于典型的單任務(wù)系統,程序設計較為簡(jiǎn)單,應用面較窄。
這類(lèi)系統的電話(huà)處理程序模塊較為簡(jiǎn)單,一般采用循環(huán)方式依次對各條電話(huà)線(xiàn)路的請求進(jìn)行處理。
// 無(wú)限循環(huán),直至滿(mǎn)足結束條件(如按ESC鍵)為止
while ( ! FINISHED )
{
for (ChannelNo=0; ChannelNo<MAXCHANNELS; ++ChannelNo)
{// 循環(huán)處理每條線(xiàn)路
processing(ChannelNo); // 電話(huà)語(yǔ)音查詢(xún)處理函數
} /* for */
} /* while */
其中電話(huà)語(yǔ)音查詢(xún)處理函數(processing)的功能如下:
● 若檢測到某條電話(huà)線(xiàn)路的振鈴信號(外線(xiàn))或摘機信號(內線(xiàn)),則轉入相應的子程序進(jìn)行放音、錄音、接收用戶(hù)按鍵碼或自動(dòng)撥號等處理;
● 大多數電話(huà)語(yǔ)音卡上每條線(xiàn)路的實(shí)際錄放音以及收發(fā)雙音頻碼工作均由底層驅動(dòng)軟件來(lái)控制完成,且可以同時(shí)進(jìn)行,互不影響。這樣,應用程序只需發(fā)出錄放音或收發(fā)雙音頻碼命令即可繼續往下執行程序(如繼續處理其他線(xiàn)路的請求等),無(wú)需等待。當然,有時(shí)可能希望某個(gè)線(xiàn)路在錄放音或收發(fā)雙音頻碼工作尚未完成之前,不能對該線(xiàn)路進(jìn)行其他操作。在這種情況下,應用程序可以調用底層驅動(dòng)軟件對該線(xiàn)路進(jìn)行檢測。若前面工作尚未完成,則循環(huán)至下一條線(xiàn)路繼續進(jìn)行處理。若前面工作已完成,則視程序的具體要求進(jìn)行相應處理,例如根據用戶(hù)的按鍵碼進(jìn)行相關(guān)的數據庫處理,并將處理結果通過(guò)電話(huà)反饋給用戶(hù)。
● 自動(dòng)撥號后,應根據檢測到的信號音做出相應的處理。例如:若檢測到被叫用戶(hù)占線(xiàn)忙音,則可以重新?lián)芴柣蛘吒粢欢螘r(shí)間之后再重新?lián)芴枺蝗魴z測到對方無(wú)人接聽(tīng),則放棄撥號操作或隔一段時(shí)間之后再重新?lián)芴枴?
● 當處理完某條電話(huà)線(xiàn)路的請求或檢測到用戶(hù)掛機信號(通過(guò)檢測掛機忙音進(jìn)行判別),則執行該線(xiàn)路的掛機動(dòng)作,并重新對該線(xiàn)路進(jìn)行初始化,以便處理來(lái)自該線(xiàn)路的下一個(gè)請求任務(wù)。
● 當需要讀出一系列數字(如123,1996等)時(shí),可以采用組合放音法,即依次播放每個(gè)數字對應的語(yǔ)音文件。由于每讀一個(gè)數字均需打開(kāi)和關(guān)閉該數字對應的語(yǔ)音文件,因此勢必造成時(shí)間上的一些延遲,進(jìn)而影響到語(yǔ)音的連貫性。建議將每個(gè)數字的語(yǔ)音文件事先讀入內存中,這樣就避免了因讀寫(xiě)磁盤(pán)而影響語(yǔ)音的連貫性。
2. 多任務(wù)系統
若電話(huà)語(yǔ)音查詢(xún)系統允許電話(huà)操作與電腦操作并行運作,亦即所謂的多任務(wù)系統,則相應的程序設計工作略為復雜。由于此類(lèi)系統功能強,且具有較大的靈活性,因此,大多數電話(huà)語(yǔ)音查詢(xún)系統均屬此類(lèi)。
與第一類(lèi)電話(huà)語(yǔ)音查詢(xún)系統相比,為了實(shí)現并行操作,此類(lèi)系統的電話(huà)處理程序模塊一般由時(shí)鐘中斷處理程序按照設定的時(shí)間間隔(如每秒18次)自動(dòng)調用。由于間隔時(shí)間相對較短,因此可以用來(lái)模擬實(shí)時(shí)多任務(wù)系統,而數據庫處理程序模塊要求既能被電話(huà)處理程序模塊調用,又能被系統主程序(前臺)調用。
● 對各條電話(huà)線(xiàn)路的處理采用循環(huán)方式,即每次產(chǎn)生時(shí)鐘中斷時(shí),依次對各條線(xiàn)路進(jìn)行循環(huán)處理。時(shí)鐘中斷處理程序與電話(huà)處理程序模塊的相互關(guān)系大致如下:
// 時(shí)鐘中斷處理程序
timer_interrupt ()
{
for (ChannelNo=0; ChannelNo<MAXCHANNELS; ++ChannelNo)
{// 循環(huán)處理每條線(xiàn)路
processing(ChannelNo); // 電話(huà)語(yǔ)音查詢(xún)處理函數
} /* for */
} /* timer_interrupt */
為避免前面指令尚未處理完又產(chǎn)生新的定時(shí)器事件,應在時(shí)鐘中斷處理程序前面設置一個(gè)進(jìn)出標記(應為static靜態(tài)變量)。若此標記置0,則可以進(jìn)入循環(huán)進(jìn)行處理;若此標記置1,則說(shuō)明上一次處理尚未完成,中斷程序無(wú)條件返回。
對于像DOS這樣的單任務(wù)操作系統來(lái)說(shuō),由于上述程序中對所有電話(huà)線(xiàn)路的處理均集中在一次中斷調用過(guò)程中(視任務(wù)繁忙情況可能跨越幾個(gè)時(shí)鐘周期)完成,因此,若前臺任務(wù)量大,則可能因前臺分配到的時(shí)間片過(guò)少而影響前臺任務(wù)的執行效率。這時(shí)可采用每次中斷僅處理一條線(xiàn)路的方法輪流進(jìn)行處理:
//全局變量,表示正在處理的電話(huà)線(xiàn)路號
int CurrentChannel=0;
timer_interrupt ()//時(shí)鐘中斷處理程序
{
// 若一輪循環(huán)結束,則開(kāi)始新一輪循環(huán)
if (CurrentChannel==MAXCHANNELS)
CurrentChannel=0;
// 電話(huà)語(yǔ)音查詢(xún)處理函數
processing(ChannelNo);
// 準備處理下一條電話(huà)線(xiàn)路
++CurrentChannel;
} /* timer_interrupt */
注意:此類(lèi)電話(huà)語(yǔ)音查詢(xún)系統的電話(huà)處理程序模塊中不允許出現無(wú)限等待的現象,如等待用戶(hù)按鍵盤(pán)某個(gè)鍵等。
● 若電話(huà)語(yǔ)音查詢(xún)系統不需要對數據庫進(jìn)行寫(xiě)操作,則情況要簡(jiǎn)單得多。只要以共享方式,而不是以獨占方式打開(kāi)數據庫即可,當然還可以進(jìn)一步指定以只讀方式打開(kāi)數據庫。當兩個(gè)或兩上以上的進(jìn)程同時(shí)對數據庫中的同一個(gè)數據進(jìn)行讀寫(xiě)操作時(shí),將導致數據庫數據的不一致。為確保數據的正確性,必須采取數據保護措施。首先,只能以共享方式,而不允許以獨占方式打開(kāi)數據庫。其次,必須以讀寫(xiě)方式打開(kāi)數據庫。最后,還要確保通過(guò)電話(huà)提交的數據庫操作請求與電腦操作員正在進(jìn)行的數據庫操作不發(fā)生沖突,即兩個(gè)進(jìn)程不能同時(shí)讀寫(xiě)同一數據。為防止這種情況,可以采用自動(dòng)文件加鎖與解鎖方式,如某些數據庫操作命令(如append命令)在執行時(shí)自動(dòng)給數據庫文件加鎖,并且在執行完后自動(dòng)解鎖;或者使用lock file和unlock file等命令顯式地進(jìn)行數據庫文件的加鎖與解鎖,還可以使用lock record或unlock record等命令顯式地進(jìn)行數據庫記錄的加鎖與解鎖。
● 對于采用支持多任務(wù)的操作系統作為開(kāi)發(fā)和運行平臺的電話(huà)語(yǔ)音查詢(xún)系統來(lái)說(shuō),電話(huà)操作(作為定時(shí)器中斷事件處理程序的一部分)與電腦操作,作為同一程序的兩個(gè)進(jìn)程并發(fā)地運行沒(méi)有任何問(wèn)題,程序設計也較為簡(jiǎn)單,故不再贅述。
相比之下,對于把DOS這樣的單任務(wù)操作系統作為開(kāi)發(fā)和運行平臺的電話(huà)語(yǔ)音查詢(xún)系統來(lái)說(shuō),程序設計要困難得多。為了實(shí)現電話(huà)語(yǔ)音查詢(xún)系統的電話(huà)操作與電腦操作并發(fā)運行,必須將其模擬成一個(gè)實(shí)時(shí)多任務(wù)系統。
實(shí)時(shí)多任務(wù)系統的特點(diǎn)是事件驅動(dòng)和多任務(wù)處理。任務(wù)是多任務(wù)系統中獨立運行的基本單元,也是系統分配和調度的基本單元。每個(gè)任務(wù)均由程序段、數據段、堆棧段和一個(gè)任務(wù)控制塊(包括當前任務(wù)的優(yōu)先級標識、堆棧指針和運行狀態(tài)等)組成。系統通過(guò)任務(wù)控制塊PCB確定任務(wù)的運行狀態(tài),并按照任務(wù)的優(yōu)先級調度多任務(wù)并發(fā)運行,即允許就緒任務(wù)中具有較高優(yōu)先級的任務(wù)搶占CPU運行,并暫時(shí)中斷較低優(yōu)先級任務(wù)的執行。
計算機世界網(wǎng) 2001/10/22
東進(jìn)技術(shù)總裁賀建楠談3G應用落地:進(jìn)展超出預期 2009-09-25 |
你的IVR物盡其用了嗎? 2009-09-18 |
細節處理決定3G-IVVR系統成敗關(guān)鍵 2009-08-28 |
對呼叫中心視頻IVR設計的改進(jìn)建議 2009-07-29 |
我的菜單我做主——呼叫熱線(xiàn)自助語(yǔ)音服務(wù)個(gè)性化之路 2009-07-08 |