首頁(yè)>>廠(chǎng)商>>CTI系統平臺廠(chǎng)商>>易谷網(wǎng)絡(luò )

基于VoiceXML技術(shù)的可視化IVR系統設計和實(shí)現(三)

上海易谷網(wǎng)絡(luò )科技有限公司 查瑋 2009/12/29

基于VoiceXML技術(shù)的可視化IVR系統設計和實(shí)現(一)

基于VoiceXML技術(shù)的可視化IVR系統設計和實(shí)現(二)

  在系統分析和系統總體設計之后,就進(jìn)入了系統實(shí)現階段。該階段主要是對IVR系統業(yè)務(wù)編輯工具和執行引擎部分進(jìn)行實(shí)現。

4.1可視化流程定義工具實(shí)現

  Windows操作系統具有友好的圖形界面,越來(lái)越被國內外眾多的用戶(hù)所喜歡[30],因而開(kāi)發(fā)Windows應用程序將具有廣泛的市場(chǎng)。可用于開(kāi)發(fā)Windows應用程序的語(yǔ)言較多,其中Visual C++是眾多軟件開(kāi)發(fā)人員所喜歡的語(yǔ)言之一,它是一種可視化的面向對象程序語(yǔ)言,其MFC基類(lèi)封裝了Windows API函數,提供了許多功能模塊,使得開(kāi)發(fā)人員可以利用MFC快速、高效地開(kāi)發(fā)Windows應用程序,減少了許多重復勞動(dòng),提高了代碼利用率和程序開(kāi)發(fā)效率,縮短了軟件開(kāi)發(fā)周期,使開(kāi)發(fā)人員有更多的時(shí)間去研究新的問(wèn)題。

  完成了基礎類(lèi)的設計之后,整個(gè)IVR系統的流程工具都是基于這個(gè)基礎類(lèi)包來(lái)完成的。作為流程編輯工具,流程編輯器的設計應當遵循如下原則:方便簡(jiǎn)便,便于開(kāi)發(fā)人員掌握,適合與不同的業(yè)務(wù)不同行業(yè)IVR系統的工作流程。所以在設計中,以樹(shù)形結構反映工作流程的概念,如圖4.1所示。


  從圖4.4所示結構中,通過(guò)主窗體可以訪(fǎng)問(wèn)其它窗體操作,同時(shí)控制窗體與類(lèi)模塊的信息交互。系統中的各個(gè)窗口的實(shí)現均是基于基礎類(lèi)包的。下面詳細介紹IVR系統流程工具各個(gè)部分的實(shí)現。其實(shí)現工具的內容詳見(jiàn)文獻[31]。

  主程序是IVR系統流程定義工具的主體,它包括各個(gè)窗口的定義、流程類(lèi)的定義、節點(diǎn)類(lèi)定義等。主程序通過(guò)主窗體類(lèi)定義將其它各個(gè)類(lèi)窗體組織在一起,同時(shí)負責各子窗體之間的信息交互。主窗體類(lèi)則定義了流程間的組織結構,它通過(guò)用戶(hù)界面操作協(xié)助用戶(hù)完成流程制作,同時(shí)生成含有VoiceXML標簽的Web頁(yè)面交給執行引擎進(jìn)行解釋執行。

  主窗體主要負責各個(gè)窗體和類(lèi)模塊之間的信息交互和訪(fǎng)問(wèn)控制。圖4.2描述IVR系統業(yè)務(wù)流程定義工具的主窗體界面。分為工具箱窗體、菜單窗體、流程編輯(畫(huà)布)窗體、屬性窗體,同時(shí)包括流程節點(diǎn)的訪(fǎng)問(wèn)控制。

圖4.2 IVR系統流程定義工具主窗體

  工具箱窗體:工具箱窗體提供系統支持節點(diǎn)類(lèi)型控件的選擇,用戶(hù)通過(guò)拖拽方式添加節點(diǎn)以制作流程。工具箱窗體類(lèi)主要包括工具箱窗體的事件響應和主窗體交互部分,提供每種實(shí)現方法。

  菜單窗體:菜單窗體是提供關(guān)于整個(gè)系統流程的打開(kāi)、編輯等操作。

  屬性設置窗體:屬性窗體為每一類(lèi)節點(diǎn)提供屬性設置功能,其中包括屬性窗體操作、與主窗體信息交互兩大類(lèi),提供各個(gè)節點(diǎn)所涉及到的每種屬性窗體的實(shí)現方法。

  流程編輯(畫(huà)布)窗體:此窗體類(lèi)提供了制作流程的畫(huà)布操作。在此窗口定義了一個(gè)畫(huà)布控件;流程編輯窗體接收畫(huà)布對象的事件,提交給主窗體,同時(shí)通過(guò)與主窗體的信息交互控制在畫(huà)布上確保正確制作流程。

  主程序除了上述4種主要的模塊定義之外,還有一些窗體類(lèi)和類(lèi)模塊定義,主要負責各種屬性的設置和操作:同時(shí)為使流程制作更加人性化,主程序增加了一些通用編輯功能。

  以上為主程序的設計及其部分實(shí)現。在實(shí)現中通過(guò)引用窗體控件和畫(huà)布窗體類(lèi)定義,集成了對畫(huà)布控件和節點(diǎn)控件的訪(fǎng)問(wèn)操作。

4.2 IVR系統執行引擎的實(shí)現

  IVR系統執行引擎是整個(gè)IVR系統的核心系統,它負責對之前由IVR系統流程定義工具生成的中間文件(含有VoiceXML標簽的Web頁(yè)面)解釋和驅動(dòng)。本文設計的IVR系統是基于VoiceXML技術(shù),以開(kāi)源OpenVXI項目為基礎,設計并實(shí)現的IVR系統執行引擎部分。

  OpenVXI[32] 是一種簡(jiǎn)便的開(kāi)源庫,用來(lái)解釋VoiceXML對話(huà)標記語(yǔ)言(dialog markup language)。為了避免其它私有的標準,它嚴格支持VoiceXML 2.0 草案(現在已經(jīng)支持部分3.0的標準),同時(shí)OpenVXI是一個(gè)跨平臺的開(kāi)發(fā)系統。

  OpenVXI本身只是VoiceXML平臺的一個(gè)組件[32],它只是提供了簡(jiǎn)單的語(yǔ)音識別、語(yǔ)音提示和TTS(text-to-speech)功能。而對于電話(huà)功能,由于語(yǔ)音卡的種類(lèi)繁多,同時(shí)VoIP(Voice over IP)技術(shù)的快速發(fā)展,就需要使用者自己提供實(shí)際的組件和函數進(jìn)行整合。既便如此,OpenVXI還是提供一個(gè)強大的基本框架讓使用者構建自己的語(yǔ)音平臺。

4.4.1 OpenVXI的系統架構

  根據圖2.3描述的VoiceXML平臺的基本體系結構分析,OpenVXI符合基本架構,具體的系統架構圖如圖4.3所示。整個(gè)平臺執行VoiceXML頁(yè)面,并提供與電話(huà)網(wǎng)絡(luò )連接的服務(wù),平臺總共分4個(gè)部分:

  1.主進(jìn)程、操作管理和維護系統:一個(gè)收集系統管理和錯誤報告的工具。這個(gè)核心組件通過(guò)創(chuàng )建線(xiàn)程的方式來(lái)喚醒VoiceXML瀏覽器。

  2.OpenVXI:負責解釋VoiceXML標記語(yǔ)言和語(yǔ)音平臺返回的呼叫標志信息(通過(guò)返回相應的事件信息)。

  3.OpenSpeech Browser PIK:提供了為系統運行所必要的高層次(high-level)服務(wù),包括識別引擎、語(yǔ)音引導引擎、Internet fetch庫(提供通過(guò)URL對web服務(wù)器訪(fǎng)問(wèn)的庫)、ECMA Script[32]引擎。OpenVXI通過(guò)系統提供的函數接口來(lái)訪(fǎng)問(wèn)這些組件,這些接口不需要定義和實(shí)現各種機制來(lái)滿(mǎn)足與底層電話(huà)系統軟件系統之間的通訊,而是通過(guò)使用支持Client/Server模式的TCP/IP協(xié)議來(lái)實(shí)現。

  4.Telephony and base services:需要能接收到電話(huà)的基本操作系統服務(wù)和電話(huà)服務(wù)。


圖4.3 OpenVXI系統架構圖

4.4.2 OpenSpeech Browser PIK組件結構

  圖4.4描述了OpenSpeech Browser PIK 的架構和組件構成,包括為完成語(yǔ)音識別和TTS功能整合的產(chǎn)品SpeechWorks。 所有的組件都被設計成很容易的去訪(fǎng)問(wèn)。這個(gè)語(yǔ)音瀏覽器(Speech Browser)包括:

  1.VXI:解析所有的VoiceXML標記,并且擔當程序中的主控作用。VXI實(shí)現了VoiceXML 1.0中所有必需(mandatory)的部分和大部分的可選功能。

  2.XML Parser Interface:提供對XML DOM解析器的訪(fǎng)問(wèn),現在的實(shí)現方式是通過(guò)直接調用開(kāi)源的Apache Xerces SAX and DOM parse解析接口。

  3.Internet Interface:通過(guò)http://和file://的方式訪(fǎng)問(wèn)應用文檔(即URL的方式訪(fǎng)問(wèn)Web頁(yè)面),同時(shí)也支持POST的方式給應用服務(wù)器返回數據。這方面的實(shí)現是整合了開(kāi)源W3C Libwww開(kāi)發(fā)庫。

  4.ECMAScript(JavaScript) Interface :提供了對ECMAScript執行服務(wù)的訪(fǎng)問(wèn)。相關(guān)的實(shí)現整合了Mozilla SpiderMonkey開(kāi)源引擎。

  5.Logging Interface:用來(lái)報告系統級別的錯誤、事件和診斷信息。它是將日志存儲成日志文件,并且可以選擇進(jìn)行標準的輸出。

核心瀏覽器中與語(yǔ)音平臺相關(guān)的API主要包括:

  1.Recognizer Interface:提供語(yǔ)法管理和由VoiceXML指定的識別服務(wù)(例如:收取DTMF碼),包括動(dòng)態(tài)語(yǔ)法創(chuàng )建和語(yǔ)法構建。它通過(guò)Telephony Service來(lái)獲取呼叫信息,并且已經(jīng)在OpenSpeech Browser中整合。

  2.Prompting Interface:提供完整的放音服務(wù),包括播放可變語(yǔ)音。它必須處理語(yǔ)音文件并且提供語(yǔ)音服務(wù)。OpenSpeech Browser PIK已經(jīng)整合了支持幾種語(yǔ)言的TTS。

  3.Telephony Interface:提供呼叫控制服務(wù),包括發(fā)送語(yǔ)音平臺的時(shí)間、轉接和掛斷電話(huà)。OpenSpeech Browser PIK已經(jīng)實(shí)現了與底層的語(yǔ)音平臺交互,并抽象了API來(lái)提供呼叫控制服務(wù)。

  4.Object Interface:提供了對對象的訪(fǎng)問(wèn)。通過(guò)對象元素,平臺可以訪(fǎng)問(wèn)定義的那些對VoiceXML語(yǔ)音的擴展。對象可以很容易的被定義成適合語(yǔ)音平臺需要的呼叫控制擴展、CTI系統的彈屏顯示或者其它一些需求。

圖4.4 OpenSpeech Browser PIK 組件構成圖

  通過(guò)對OpenVXI的描述,可以看出:模塊化和分層次的設計使得在平臺里的各個(gè)組件之間即相對獨立,又相互聯(lián)系、互相協(xié)作來(lái)完成整個(gè)平臺的功能。使用者可以通過(guò)實(shí)現平臺提供的各種接口來(lái)實(shí)現對基于各種硬件或者軟件的語(yǔ)音系統的整合。本文設計的IVR系統所涉及到的是模擬語(yǔ)音卡,所以對與錄音、放音、取鍵都由語(yǔ)音卡所提供的API來(lái)完成即可。

4.4.3 接口實(shí)現(取鍵、錄音、放音、轉接)

  OpenSpeech Browser PIK自身就是支持標準的VoiceXML 2.0的標準,同時(shí)對VoiceXML的解析能力比較強大,又同時(shí)整合了Apache的XML解析器、W3C的LIBWWW進(jìn)行Web訪(fǎng)問(wèn)和Mozilla Spider Monkey作為ECMA Script的執行器,本文主要是通過(guò)實(shí)現相應的語(yǔ)音平臺接口來(lái)實(shí)現IVR系統的執行引擎。沒(méi)有對VoiceXML解析功能做過(guò)多的修改。

Recognizer Interface(識別接口)的實(shí)現

  對應Recognizer的接口,OpenVXI分別針對收取用戶(hù)按鍵(DTMF碼)和語(yǔ)音識別(speech recognize)的接口,但是由于現在語(yǔ)音識別的技術(shù)并不是很成熟,特別是對中文的識別率不是很高,本文設計的IVR系統就沒(méi)有涉及到該功能,只是留下接口等待以后實(shí)現。需要實(shí)現的具體接口函數有收取用戶(hù)按鍵和錄音。

收鍵接口,函數體描述如下:

VXIpromptResult Recognize (struct VXIrecInterface* pThis,
const VXIMap* properties,
VXIrecRecognitionResult** recogResult)

圖4.5描述了實(shí)現該接口的流程圖。


圖4.5 使用Recognize接口實(shí)現收DTMF碼流程圖

  1)獲取連接實(shí)例,其數據是從語(yǔ)音卡檢測到的信令,發(fā)送給語(yǔ)音平臺。通過(guò)GetImplementaionName來(lái)獲得實(shí)例名稱(chēng),進(jìn)入下一步;

  2)使用BeginSession來(lái)創(chuàng )建session,并且通過(guò)LoadGrammarURI來(lái)裝載語(yǔ)法。這時(shí)候開(kāi)始啟動(dòng)收鍵,進(jìn)入下一步;

  3)啟動(dòng)計時(shí)器,等待事件觸發(fā);

  4)如果接收到SC_EVENT_DISCCONET事件,表示用戶(hù)主動(dòng)放棄,返回REC_FAILURE,調用EndSession,流程結束;如果接收到SC_EVENT_TIMEOUT事件,表示用戶(hù)在計時(shí)器的時(shí)間內沒(méi)有輸入,返回REC_NOINPUT,調用EndSession,流程結束;如果接收到SC_EVENT_DTMF_RECEIVED事件,表示用戶(hù)輸入完畢,進(jìn)入下一步;

  5)檢查語(yǔ)法的符合性,通過(guò)檢查是否滿(mǎn)足在.gram文件里設置的正則表達式來(lái)判斷,如果符合轉6,不符合轉7;

  6)符合語(yǔ)法,返回REC_SUCESS,調用EndSession,流程結束;

  7)不符合語(yǔ)法,返回REC_NOMATCH,調用EndSession,流程結束。

錄音接口,接口函數體描述如下:

VXIrecResult Record (struct VXIrecInterface* pThis,
const VXIMap* propertites,
VXIrecRecordResult** recordResult)

圖4.6描述了實(shí)現該接口的流程圖。


圖4.6使用Record接口實(shí)現錄音流程圖


  1)獲取連接實(shí)例,其數據是從語(yǔ)音卡檢測到的信令,發(fā)送給語(yǔ)音平臺。通過(guò)GetImplementaionName來(lái)獲得實(shí)例名稱(chēng),進(jìn)入下一步;

  2)創(chuàng )建錄音文件名,進(jìn)入下一步;

  3) 使用BeginSession來(lái)創(chuàng )建session,并且通過(guò)LoadGrammarURI來(lái)裝載語(yǔ)法。這時(shí)候開(kāi)始啟動(dòng)錄音功能,進(jìn)入下一步;

  4)啟動(dòng)計時(shí)器,等待事件觸發(fā);

  5)如果接收到SC_EVENT_DISCCONET事件,表示用戶(hù)主動(dòng)放棄,轉到步驟7;如果接收到SC_EVENT_TIMEOUT事件,表示用戶(hù)在計時(shí)器的時(shí)間內沒(méi)有輸入,返回REC_NOINPUT,調用EndSession,流程結束;如果接收到SC_EVENT_RECORD_RECEIVED事件,表示用戶(hù)錄音完畢,進(jìn)入下一步;

  6)返回REC_SUCCESS,進(jìn)入下一步;

  7)檢查錄音文件是否有數據。如果錄音文件沒(méi)有數據不存在數據,表示錄音不成功,返回REC_FAILURE,調用EndSession,流程結束;如果錄音文件有數據,表示錄音成功,返回成功,調用EndSession,流程結束。

Prompting Interface(放音接口)的實(shí)現

  對于放音接口,所需要關(guān)注的是3個(gè)函數的實(shí)現:Queue()接口、Play()接口和Wait()接口。

  Queue接口僅僅是將所要播放或者重復播放的語(yǔ)音文件放入隊列中,并不擔當放音的功能, Play()接口才是啟動(dòng)播放動(dòng)作的。這個(gè)調用會(huì )一直阻塞直到放音數據返回以便于調用者可以確認是否需要重播。接口函數體描述如下:

VXIpromptResult Queue (struct VXIproptInterface* pThis,
const VXIchar* type,
const VXIchar* content,
const VXIchar* text,
const VXIMap* properties)


  在實(shí)現過(guò)程中,本文設計的IVR系統只是涉及到語(yǔ)音文件的播放,所以只是需要通過(guò)調用語(yǔ)音卡API將語(yǔ)音文件放入播放隊列即可,而需要重復播放的語(yǔ)音文件,只要重復放入到語(yǔ)音隊列當中便可實(shí)現。

  Play接口是完成放音動(dòng)作的接口。實(shí)現非常簡(jiǎn)單,只需要調用語(yǔ)音卡放音API去播放存在播放隊列里的語(yǔ)音文件。接口函數體描述如下:

VXIpromptResult Queue (struct VXIproptInterface* pThis)

  Wait接口是等待所有的放音文件都結束,去捕獲放音時(shí)間結束。接口函數體描述如下:

VXIpromptResult Wait (struct VXIproptInterface* pThis
VXIpromptResult* playResutl)


  圖4.7描述了這三個(gè)接口實(shí)現流程圖。

圖4.7 Queue、Play、Wait接口實(shí)現流程圖


Queue接口實(shí)現如下:

  1)獲取連接實(shí)例,其數據是從語(yǔ)音卡檢測到的信令,發(fā)送給語(yǔ)音平臺,進(jìn)入下一步;

  2)判斷語(yǔ)音文件是否合法,如果合法轉3,不合法返回PROMPT_FAILURE,流程結束;

  3)將要播放的文件名放入播放隊列中等待播放,返回PROMPT_SUCCESS,流程結束。

Play接口實(shí)現如下:

  1)獲取連接實(shí)例,其數據是從語(yǔ)音卡檢測到的信令,發(fā)送給語(yǔ)音平臺,進(jìn)入下一步;

  2)判斷播放隊列是否為空,如果為空返回PROMPT_SUCCESS,流程結束;如果不為空,轉3;

  3)調用語(yǔ)音卡放音API實(shí)現放音功能,轉2。

Wait接口實(shí)現如下:

  1)獲取連接實(shí)例,其數據是從語(yǔ)音卡檢測到的信令,發(fā)送給語(yǔ)音平臺,進(jìn)入下一步;

  2)啟動(dòng)計時(shí)器,等待事件觸發(fā);

  3)如果收到SC_EVENT_DISCONNECT事件,表示話(huà)路斷開(kāi),返回PROMPT_FAILURE,流程結束;如果收到SC_EVENT_PROMPT_END,返回PROMPT_SUCCESS,流程結束。

Telephony Interface(轉接接口)的實(shí)現

  對于電話(huà)接口,需要實(shí)現的方法有GetStatus、Disconnect、TransferBlind,而TransferBridge指的是通過(guò)橋接的方式去轉接。首先,他需要平臺的支持,其次還要進(jìn)行大量的配置,同時(shí)占有很多的資源,非常的不實(shí)用。對于IVR系統來(lái)說(shuō),不需要這么復雜的操作。對于大型的呼叫中心,IVR系統只是前置于整個(gè)呼叫平臺,更多的話(huà)路操作還需要交給CTI系統去完成。

  下面給出每個(gè)接口實(shí)現的流程圖,如圖4.8所示。


圖4.8 GetStatus、Disconnect、TransferBlind接口流程圖

GetStatus函數體描述如下:

VXItelResult GetStatus(struct VXItelInterface* pThis,
VXItelStatus* status)

接口實(shí)現如下:

  1)獲取連接實(shí)例,其數據是從語(yǔ)音卡檢測到的信令,發(fā)送給語(yǔ)音平臺,進(jìn)入下一步;

  2)調用語(yǔ)音卡API去查看通道狀態(tài),進(jìn)入下一步;

  3)將獲得狀態(tài)返回,如果通道中有電話(huà)返回VXI_STATUS_ACTIVE;如果通道是空閑狀態(tài)則返回VXI_STATUS_INACTIVE流程結束。

Disconnect函數體描述如下

VXItelResult Disconnect(struct VXItelInterface* pThis)

接口實(shí)現如下:

  1)獲取連接實(shí)例,其數據是從語(yǔ)音卡檢測到的信令,發(fā)送給語(yǔ)音平臺,進(jìn)入下一步;

  2)調用語(yǔ)音卡API去檢查語(yǔ)音連接是否存在,如果存在,則進(jìn)入下一步;如果不存在,轉4;

  3)調用語(yǔ)音卡API去掛斷電話(huà),進(jìn)入下一步;

  4) 調用語(yǔ)音卡API釋放所有資源,流程結束。

TransferBlind函數體描述如下

VXItelResult TransferBlind (struct VXItelInterface* pThis,
const VXIMap* properties,
const VXIChar* transferDestination,
VXIMap** resp)


接口實(shí)現如下:

  1)獲取連接實(shí)例,其數據是從語(yǔ)音卡檢測到的信令,發(fā)送給語(yǔ)音平臺,進(jìn)入下一步;

  2)調用語(yǔ)音卡API去檢查語(yǔ)音連接是否存在,如果存在,則進(jìn)入下一步;如果不存在,轉4;

  3)調用語(yǔ)音卡API去轉接電話(huà)(因為是采用的是“盲轉”方式轉接,IVR系統只要將電話(huà)轉移到話(huà)機上即可,不需要管理轉接后的狀態(tài)),返回成功,流程結束;

  4)返回失敗,流程結束。

4.3本章小結

  本章在基于整個(gè)IVR系統的詳細設計基礎上,基于MFC技術(shù)和OpenVXI的開(kāi)源項目,實(shí)現了IVR系統可視化的過(guò)程定義工具和IVR系統的執行引擎。

基于VoiceXML技術(shù)可視化IVR設計和實(shí)現(四)

作者獨家提供CTI論壇稿件,其它媒體謝絕轉載

CTI論壇報道



相關(guān)閱讀:
基于VoiceXML的可視化IVR系統設計和實(shí)現(一) 2009-09-22
上海易谷與Genesys達成大中華區長(cháng)期合作伙伴關(guān)系 2009-04-17
聯(lián)絡(luò )中心與3G應用 2009-04-09

熱點(diǎn)專(zhuān)題:  呼叫中心  
分類(lèi)信息:  CTI文摘_與_IVR技術(shù)  IVR技術(shù)_與_VoiceXML技術(shù)  IVR技術(shù)_與_系統建設技術(shù)
亚洲精品网站在线观看不卡无广告,国产a不卡片精品免费观看,欧美亚洲一区二区三区在线,国产一区二区三区日韩 英吉沙县| 屏山县| 许昌市| 信宜市| 伊通| 二连浩特市| 班戈县| 扎兰屯市| 含山县| 普兰店市| 丽水市| 尖扎县| 康定县| 沈阳市| 娄底市| 廊坊市| 沂源县| 广西| 天长市| 安岳县| 达尔| 大悟县| 勐海县| 肥东县| 华容县| 拉萨市| 卓资县| 英山县| 吉首市| 汶上县| 永仁县| 老河口市| 太康县| 简阳市| 公安县| 庆云县| 邢台县| 隆子县| 兰考县| 彭泽县| 佳木斯市| http://444 http://444 http://444 http://444 http://444 http://444