劉向宇
當(dāng)前社會已經(jīng)從工業(yè)經(jīng)濟(jì)時代進(jìn)入到“電子商務(wù)”時代,全球經(jīng)濟(jì)一體化進(jìn)程不可逆轉(zhuǎn),企業(yè)市場競爭環(huán)境日趨激烈。各個企業(yè)都在尋找新的客戶服務(wù)以及與此相關(guān)的營銷解決方案。如何進(jìn)一步提高客戶服務(wù)水平,維系老客戶,拓展新客戶,不斷提高客戶滿意度和忠誠度,保證業(yè)務(wù)成交量持續(xù)增長和市場份額的擴(kuò)大,已成為所有企業(yè)的一項重要工作。放眼全球,無論世界500強的跨國企業(yè)巨頭,還是國內(nèi)名不見經(jīng)傳的小企業(yè),對客戶以及客戶服務(wù)的重視,都達(dá)到了前所未有的高度。
交互式語音應(yīng)答(IVR, Interactive Voice Respond)[1]系統(tǒng)允許在沒有操作員的情況下,建立和管理完全自動的電話服務(wù), 以計算機數(shù)字語音處理技術(shù)為基礎(chǔ), 將通信、語音處理技術(shù)和數(shù)據(jù)庫服務(wù),集成到一起來實現(xiàn)各種應(yīng)用系統(tǒng)的需求[6]。IVR可以提高呼叫服務(wù)的質(zhì)量、減輕服務(wù)員的工作強度并節(jié)省費用,是呼叫中心實現(xiàn)人機交互的重要門戶。IVR是以普通電話機為用戶界面, 為客戶提供通過語音和電話按鍵進(jìn)行交流的系統(tǒng)。客戶通過電話的按鍵向系統(tǒng)提出問題或要求, IVR 系統(tǒng)則通過錄音或合成語音來回復(fù)客戶的要求。IVR不僅可以減少甚至取代業(yè)務(wù)代表的操作,達(dá)到改善客戶服務(wù)質(zhì)量、提高工作效率、節(jié)約人力、實現(xiàn)24小時服務(wù)的目的,同時也可方便用戶,減少用戶等候時間,增加呼叫數(shù)量,降低電話轉(zhuǎn)接次數(shù)。并且,IVR是實現(xiàn)并發(fā)量大的交互式娛樂互動的最佳方式。同時,IVR也被認(rèn)為是呼叫中心最大限度節(jié)省費用的有效途徑。
本系統(tǒng)將安裝有語音卡的 IVR 服務(wù)器和公用電話網(wǎng)絡(luò)相連,把計算機和電話機的優(yōu)勢有機地結(jié)合,以聲音作為媒介,通過電話機來完成數(shù)據(jù)的傳送和獲取,由計算機來保存和處理這些數(shù)據(jù),達(dá)到系統(tǒng)自動受理的目的[2]。系統(tǒng)的核心是電話語音卡,它是計算機與電話通信的樞紐,實現(xiàn)把電話輸入轉(zhuǎn)換成具體語音信息的功能。
當(dāng)程序?qū)φZ音卡進(jìn)行初始化之后,語音卡的4路通道處于電話待機狀態(tài)。用戶通過公用電話交換網(wǎng)絡(luò)與安裝了語音卡的服務(wù)器自動接通后,自動語音應(yīng)答模塊向用戶提供菜單式語音選擇提示。用戶通過電話按鍵選擇需要使用的功能。系統(tǒng)獲得用戶的電話按鍵之后,通過數(shù)據(jù)存取模塊獲取所需要的數(shù)據(jù),最后將數(shù)據(jù)存取結(jié)果,通過文語轉(zhuǎn)換通過電話播放給用戶,其程序結(jié)構(gòu)流程,如圖1所示:

圖1 交互語音應(yīng)答流程
電話語音菜單采用樹狀結(jié)構(gòu),該樹狀結(jié)構(gòu)有一個根節(jié)點、若干個子結(jié)點和若干個頁結(jié)點。其中這個樹的最大度數(shù)m,樹的高度一般不超過3。因為電話機數(shù)字鍵從0到9,所以定義樹的每個結(jié)點的度數(shù)m≤9。定義根結(jié)點的標(biāo)號=0;如果根結(jié)點有9個子結(jié)點,則第一個子結(jié)點的標(biāo)號=1,九個子結(jié)點的標(biāo)號=9;結(jié)點標(biāo)號=1的子結(jié)點的標(biāo)號=11,結(jié)點標(biāo)號=1的第 n個子結(jié)點的標(biāo)號=1n(其中 n≤9)。樹根結(jié)點為語音菜單的接入結(jié)點,樹的每個內(nèi)部結(jié)點為語音菜單功能分類,葉結(jié)點為語音菜單具體功能選擇。
當(dāng)語音菜單進(jìn)行初始化之后,菜單自動進(jìn)入根結(jié)點,當(dāng)前訪問結(jié)點的標(biāo)號為0。遍歷當(dāng)前結(jié)點的子結(jié)點并播放語音提示,根據(jù)語音卡獲取的電話按鍵訪問子結(jié)點。如果電話按鍵是‘*’鍵則訪問當(dāng)前結(jié)點的父結(jié)點;如果電話按鍵是數(shù)字鍵則訪問當(dāng)前結(jié)點的子結(jié)點,并修改當(dāng)前結(jié)點值為訪問結(jié)點。如果當(dāng)前結(jié)點為葉結(jié)點則調(diào)用功能函數(shù),如果不是葉結(jié)點則繼續(xù)訪問該結(jié)點的子結(jié)點。具體的流程,如圖2所示:

圖2 語音菜單訪問流程
訪問當(dāng)前結(jié)點的子結(jié)點的算法為:如果當(dāng)前結(jié)點不是葉結(jié)點,則訪問結(jié)點標(biāo)號=當(dāng)前結(jié)點標(biāo)號*10+第 n個子結(jié)點(n≤9)。訪問當(dāng)前結(jié)點的父結(jié)點的算法為:訪問結(jié)點標(biāo)號=當(dāng)前結(jié)點標(biāo)號整除以10。
Dialogic D/4PCI 4路語音卡與交互式語音應(yīng)答語音服務(wù)熱線實際需要的功能和業(yè)務(wù)規(guī)模相符,這套系統(tǒng)采用Dialogic D/4PCI 4路語音卡進(jìn)行語音處理。Dialogic D/4PCI 4路語音卡,在一片卡上可接4 條模擬電話線。
語音卡采用信號計算總線(SCbus, Signal Computing Bus),為第三代時分多路(TDM)資源分配總線, 允許在多個數(shù)據(jù)線路上的資源中的信息傳送和接收[3]。為了能夠同時處理多路電話的接入,語音開發(fā)庫提供了異步和同步的編程模式。每個I/O 函數(shù)均能異步或同步運作。
本系統(tǒng)采用一片路語音卡并無擴(kuò)展要求,所以采用“多線程同步編程模式”來控制 4條電話通道。通過函數(shù)AfxBeginThread(ThreadProc,&icnt,THREAD_PRIORITY_NORMAL)實現(xiàn)多線程監(jiān)聽4路通道。
Dialogic封裝了Dialogic SRL(Standard Runtime Library,標(biāo)準(zhǔn)運行時庫)的 API函數(shù)庫[4], 函數(shù)主要是為了對所有的Dialogic設(shè)備提供事件處理和其他功能通用接口。Dialogic D/4PCI 電話語音卡提供4 條語音處理通道,并可直接與模擬電話線路相連。板上獨特的雙處理器結(jié)構(gòu)(Digital signal processor)和通用微處理器(CPU)組成,可幫助主機處理低層任務(wù),極大地減輕主機任務(wù)處理的負(fù)擔(dān)。因此,能實時、高效地控制多條線路上的多個任務(wù)。它能準(zhǔn)確、可靠地收發(fā)雙音頻撥號(DTMF)及其它電話信令如用戶掛機信號。使用 Dialogic 函數(shù) int dx_open(char *device_name, int open_mode)[5]來打開 Dialogic 的設(shè)備。其中,device_name用來標(biāo)識一個Dialogic 資源,資源的名字按照Dialogic 標(biāo)準(zhǔn)命名方法。模擬設(shè)備以 dxxxBxCx 來命名,模擬卡名字以”dxxx”為前綴,B(Board)后面的x 代表模擬卡的序號,C(Channel)后面的 x 代表該序號模擬卡上的通道號。在我們的計算機上,D/4PCI 卡有4 個語音資源和4 個模擬線路接口資源。則4個通道的名字名字分別是:dxxxB1C1、dxxxB1C2、dxxxB1C3、dxxxB1C4。首先,需要知道系統(tǒng)里面有多少塊模擬語音卡存在,使用 Dialogic函數(shù)sr_getboardcnt(DEV_CLASS_VOICE,&BoardCnt)來檢測,參數(shù) DEV_CLASS_VOICE 表示要取回系統(tǒng)內(nèi)的模擬語音卡的數(shù)。使用獲取通道數(shù)函數(shù) ATDV_SUBDEVS(int dev),獲得通道名函數(shù)ATDX_CHNAMES(int dev),參數(shù)dev為合法的 Dialogic設(shè)備句柄, 由 dx_open()函數(shù)得到。使用函數(shù)int dx_wtring(int dev,int rings,int hstate,int timeout)來等待電話的呼叫。該函數(shù)在指定的電話通道上等待由rings 指定次數(shù)的震鈴或等待超時后返回。其中,dev 是打開的設(shè)備的句柄,它表示在哪一個打開的電話通道上等待電話。rings是在函數(shù)返回前需要等待到的震鈴次數(shù),一般設(shè)置為 2 就可以。hstate是表示函數(shù)等待到指定次數(shù)的震鈴后,將通道設(shè)置為什么狀態(tài)。通道有兩種狀態(tài)分別對應(yīng)電話的掛機和摘機,On-Hook 和 Off-Hook。Dialogic 定義了兩個常量DX_ONHOOK 和DX_OFFHOOK 來代表這兩種狀態(tài)。
1) 輸入/輸出轉(zhuǎn)移表DX_IOTT
DX_IOTT 數(shù)據(jù)結(jié)構(gòu)包含輸入/輸出轉(zhuǎn)移表的參數(shù)。DX_IOTT結(jié)構(gòu)確定聲音數(shù)據(jù)的一個來源或者目的地。它被用于dx_play()以及dx_rec()函數(shù)。DX_IOTT 結(jié)構(gòu)描述單個的數(shù)據(jù)的傳輸, 到達(dá)或來自一個文件、內(nèi)存塊或者定制設(shè)備。如果異步運行,DX_IOTT 數(shù)據(jù)必須保持在函數(shù)持續(xù)期間的范圍中。
2) DV_TPT 結(jié)構(gòu)
DV_TPT 終止參數(shù)表用來設(shè)置多種 Dialogic 語音卡產(chǎn)品的輸入/輸出函數(shù)終止條件。輸入/輸出函數(shù)dx_clrtpt ()、dx_getdig()、dx_play ()、dx_rec ()和 dx_playtone ()使用這個結(jié)構(gòu)。當(dāng)設(shè)置在 DV_TPT 內(nèi)的條件之一發(fā)生, 輸入/輸出函數(shù)將結(jié)束。如果你設(shè)置不止一個結(jié)束條件, 發(fā)生的第一個將結(jié)束該輸入/輸出函數(shù)。DV_TPT 結(jié)構(gòu)可以配置為一個鏈表或者陣列, 每 DV_TPT 指定一種終止的條件。例如通過該參數(shù)表可以設(shè)定播放的終止條件:播到文件末端, 接收到一個或多個按鍵, 或接收到一個掛機音頻等。
3) 播放語音的函數(shù)
IVR系統(tǒng)通過播放事先錄制好的語音信息指導(dǎo)用戶通過電話操作。函數(shù)dx_play() 在一個指定的信道上播放已記錄的聲音數(shù)據(jù)或者傳輸模擬展示服務(wù)接口(ADSI, Analog Display Services Interface)的數(shù)據(jù)。聲音數(shù)據(jù)可以來自數(shù)據(jù)文件, 存儲器或者定制設(shè)備的任何結(jié)合。該函數(shù)在 srllib.h、dxxxlib.h 聲明為 int dx_play(int chdev, DX_IOTT *iottp,DV_TPT *tptp, unsigned short mode); 其中有四個參數(shù)。參數(shù)chdev 為合法的 Dialogic 通道設(shè)備句柄, 由 dx_open()函數(shù)得到。參數(shù)iottp 為指向輸入輸出傳輸表結(jié)構(gòu)的指針。參數(shù)tptp 為指向終止參量表結(jié)構(gòu)的指針。參數(shù)mode 為該播放任務(wù)的異步/同步播放模式的位標(biāo)識。使用DV_ TPT 結(jié)構(gòu)確定播放的結(jié)束條件。播放持續(xù)直到全部在 DX_ IOTT 里指定的數(shù)據(jù)已經(jīng)被播放完畢, 或者直到在 DV_TPT 里指定的那些條件之一滿足。
當(dāng) dx_play( )終止時, 當(dāng)前信道的狀態(tài)信息, 包括終止的原因, 可以使用擴(kuò)展的屬性函數(shù)來訪問。異步的播放終止由 TDX_PLAY 事件來指示。dx_play()終止之后, 使用ATDX_TERMMSK()函數(shù)來確定終止的原因。如果握手和輸送是成功的, 函數(shù)正常地結(jié)束, 伴隨用ATDX_TERMMSK ()返回的終止標(biāo)識TM_EOD(錄音重放到達(dá)數(shù)據(jù)末端), 來表明操作已完成。使用標(biāo)準(zhǔn)運行庫(SRL)的事件管理函數(shù)來處理終止事件。
4) 取得按鍵的函數(shù)
用戶通過電話按鍵在服務(wù)系統(tǒng)進(jìn)行菜單選擇。dx_getdig()函數(shù)收集來自一個信道字符緩沖的字符。在函數(shù)的終止時, 收集成的字符以 ASCII 的格式被寫進(jìn)入如DV_DIGIT 結(jié)構(gòu)安排的局部緩沖。該函數(shù)描述為:int dx_getdig(int chdev, DV_TPT *tptp, DV_DIGIT *digitp, unsigned short mode); 其中, chdev 為合法的Dialogic 通道設(shè)備句柄, 該句柄當(dāng)使用dx_open()函數(shù)打開通道時獲得。tptp為指向終止參量表結(jié)構(gòu)的指針。digitp 為指向用戶字符緩沖結(jié)構(gòu)的指針。
基于以上設(shè)計思路建立系統(tǒng)軟件,通過多門電話撥打4路電話,對系統(tǒng)自動應(yīng)答功能和語音菜單功能選擇進(jìn)行測試。
1)系統(tǒng)硬件環(huán)境:一塊Dialogic D/4PCI 4路模擬語音卡和一臺IBM服務(wù)器,雙核2.4GHz,2G內(nèi)存;4條同號碼的電話線路。
2)系統(tǒng)平臺環(huán)境:服務(wù)器操作系統(tǒng) Microsoft Windows 2003 Server和Dialogic System Release 6.0驅(qū)動。
1) 電話訪問自動應(yīng)答測試 多門電話同時撥打4路電話號碼,檢測語音卡接聽響應(yīng)時間以及 4路電話同步實現(xiàn)情況。
2)語音菜單功能選擇測試 測試語音菜單按鍵訪問響應(yīng)時間已經(jīng)語音播放延時和準(zhǔn)確性。
經(jīng)測試證實,4路信號同時接通響應(yīng)時間正常,多線程同步編程模式控制4路語音卡接聽信號正常,沒有出現(xiàn)控制混亂情況。電話按鍵信號接收和語音播放正常,使用情況良好, 通道沒有發(fā)生因為忙音、無人接聽以及關(guān)機, 也沒有出現(xiàn)語音播放時間而出現(xiàn)死循環(huán)。 測試結(jié)果表明:采用多線程同步編程模式控制4路語音卡,通過電話按鍵能準(zhǔn)確與語音卡服務(wù)器進(jìn)行信息交互。
本文設(shè)計的系統(tǒng)能夠提供自動應(yīng)答和語音菜單訪問2個主要功能,系統(tǒng)除具有一般IVR 程序自動語音應(yīng)答功能外,通過語音菜單訪問,能比較方便地實現(xiàn)一些語音服務(wù)的擴(kuò)展功能,如語音點播,根據(jù)用戶按鍵獲取信息實現(xiàn)數(shù)據(jù)檢索等等的服務(wù)項目。語音菜單播放錄音文件進(jìn)行提示,服務(wù)項目和菜單修改復(fù)雜,將菜單語音提示改進(jìn)為通過文語轉(zhuǎn)換播放是今后努力的方向。
[1]肖熙,王俠,王作英. 基于語音卡實時數(shù)據(jù)采集的電話語音識別系統(tǒng). [J]計算機工程與應(yīng)用 ,2003,17
[2]任淑霞,趙政. 基于多通道語音卡的招投標(biāo)專家系統(tǒng).[J]計算機工程 ,2010,3
[3]陳簫楓,潘保昌,鄭勝林,趙全友.用語音卡實現(xiàn)電話與電腦的信息交互. [J]微計算機信息 2007,10-3
[4]譚保華, 吳堅,熊健民. Dialogic語音卡通道清空的分析與實現(xiàn). [J]湖北工業(yè)大學(xué)學(xué)報, 2006, 2
[5]Intel Dialogic Corporation. Voice Software Reference:Standard Runtime Library for Windows. Intel Dialogic System Release 5.1.1 Feature Pack 1 for Windows Release Guide, 2002
[6]曹靜. 開源交互語音應(yīng)答系統(tǒng)的應(yīng)用. [J]計算機與現(xiàn)代化 2010,10