VoiceXML開發(fā)指南_第1頁(yè)
VoiceXML開發(fā)指南_第2頁(yè)
VoiceXML開發(fā)指南_第3頁(yè)
VoiceXML開發(fā)指南_第4頁(yè)
VoiceXML開發(fā)指南_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、VoiceXML開發(fā)指南 VoiceXML開發(fā)指南Ver 1.0 17目 錄1.VoiceXML概述11.1.VoiceXML語言11.2.系統(tǒng)結(jié)構(gòu)11.3.工作原理21.3.1.應(yīng)用程序的輸入21.3.2.應(yīng)用程序的輸出22.VoiceXML基本編程22.1.程序結(jié)構(gòu)22.1.1.Welcome示例程序22.1.2.基本元素32.2.程序輸出32.2.1.TTS輸出32.2.2.聲音文件輸出42.2.3.聲音文件和TTS混合輸出42.3.程序輸入52.3.1.菜單輸入52.3.2.字段輸入62.4.條件語句82.5.goto語句93.VoiceXML高級(jí)編程103.1.事件103.2.錄音1

2、13.3.呼叫轉(zhuǎn)移123.4.object元素133.5.submit元素143.6.ECMAScript143.7.收發(fā)傳真164.參考文獻(xiàn)171. VoiceXML概述1.1. VoiceXML語言VoiceXML(語音擴(kuò)展標(biāo)記語言)是一種基于XML的因特網(wǎng)標(biāo)記語言,用于開發(fā)語音用戶界面。它是音“語音Web”使用的語言,它使得用戶可以使用電話來訪問因特網(wǎng)的內(nèi)容,可以將其視為用于電話的HTML。使用語音界面,用戶可以用他們的聲音而不是通過計(jì)算機(jī)鍵盤和顯示器與應(yīng)用程序進(jìn)行交互操作。在銀行、學(xué)校或證券交易所,你可能已經(jīng)通過語音郵件或者交互式語音應(yīng)答(IVR)系統(tǒng)接觸過語音界面。這些系統(tǒng)提示用戶輸

3、入相應(yīng)的信息,用戶再根據(jù)要求輸入相應(yīng)的數(shù)據(jù)作為應(yīng)答,然后系統(tǒng)就可以為用戶執(zhí)行有關(guān)的在線操作,例如,在不同帳戶之間進(jìn)行資金轉(zhuǎn)帳。在語音界面中,有一個(gè)VoiceXML對(duì)話框(相當(dāng)于一個(gè)HTML頁(yè))用于描述應(yīng)用程序?qū)τ脩粽f出的提示信息,定義和接收來自用戶的應(yīng)答,并且描述程序控制的流程。用戶通過撥打應(yīng)用程序的電話號(hào)碼來訪問VoiceXML應(yīng)用程序。從用戶的角度看,這個(gè)電話號(hào)碼相當(dāng)于一個(gè)Web網(wǎng)頁(yè)的URL。用戶可以通過任何類型的電話撥打。1.2. 系統(tǒng)結(jié)構(gòu)聲軟公司VoiceServer系統(tǒng)的結(jié)構(gòu)如下圖所示。語音瀏覽器通過解析VoiceXML ,采用提示音、按鍵等方式進(jìn)行人機(jī)交互完成業(yè)務(wù)流程。特別地,Vo

4、iceServer系統(tǒng)采用可插拔結(jié)構(gòu)支持語音識(shí)別(Automatic Speech Recognition)和語音合成(Text To Speech)技術(shù),從而實(shí)現(xiàn)完全通過語音進(jìn)行人機(jī)交互的夢(mèng)想。圖 1VoiceServer系統(tǒng)概圖采用VoiceServer系統(tǒng)實(shí)現(xiàn)的新業(yè)務(wù)可以采用任何Web技術(shù)方便地和原有數(shù)據(jù)系統(tǒng)結(jié)合。用戶可以根據(jù)業(yè)務(wù)需求編寫靜態(tài)voiceXML腳本,或采用ASP/JSP/PHP等動(dòng)態(tài)生成voiceXML腳本;與后臺(tái)數(shù)據(jù)系統(tǒng)間可以采用數(shù)據(jù)庫(kù)訪問,或采用XMLHTTP或其他協(xié)議訪問。1.3. 工作原理一般來說,VoiceXML和語音瀏覽器通過為語音技術(shù)和內(nèi)容傳遞提供標(biāo)準(zhǔn)界面,從

5、而可以幫助變成人員開發(fā)因特網(wǎng)上運(yùn)行的語音界面。尤其值得注意的是VoiceXML提供了一個(gè)連接自動(dòng)語音識(shí)別(ASR)、文本語音轉(zhuǎn)換(TTS)、雙音多頻(DTMF)、呼叫處理以及其他技術(shù)和標(biāo)準(zhǔn)界面。雖然VoiceXML在一定程度上降低了這些技術(shù)的復(fù)雜性,但是要編寫高質(zhì)量的語音應(yīng)用程序,就必須了解它們的復(fù)雜性。在下面兩個(gè)小節(jié)中,將對(duì)VoiceXML程序的輸入和輸出所使用的一些關(guān)鍵技術(shù)做一個(gè)概述。1.3.1. 應(yīng)用程序的輸入自動(dòng)語音識(shí)別是一種使口語輸入能夠被程序所理解的技術(shù)。為此需要將口語中的單次分解成為離散的聲音小段,這種聲音小段稱為音素(phonemues)。然后將這些音素與應(yīng)用程序開發(fā)人員或語音

6、識(shí)別工具提供的詞匯相比較。這不是可調(diào)整的或自然語言的識(shí)別方式。每給一個(gè)提示信息,VoiceXML應(yīng)用程序定義一組有限的有效輸入,其他用戶的應(yīng)答將不能被應(yīng)用程序理解。語音識(shí)別可以通過專門的硬件或軟件來實(shí)現(xiàn)。雙音多頻(DTMF)系統(tǒng)通過電話網(wǎng)絡(luò)中的硬件和軟件對(duì)按鍵式電話的鍵盤輸入進(jìn)行翻譯,實(shí)現(xiàn)音頻播放。每個(gè)按鍵都能夠產(chǎn)生一個(gè)可識(shí)別的獨(dú)一無二的音頻。該系統(tǒng)使得用戶可以使用電話鍵盤將數(shù)字信息輸入VoiceXML應(yīng)用程序,并且游程序負(fù)責(zé)接收和理解這些數(shù)字信息。1.3.2. 應(yīng)用程序的輸出文本語音轉(zhuǎn)換技術(shù)(TTS)能夠?qū)⑤敵龅奈谋巨D(zhuǎn)換成“語音”(實(shí)際上是一種數(shù)字音頻格式)。這使得應(yīng)用程序能夠擁有靈活的輸出

7、方式,將開發(fā)人員沒有預(yù)料到的事情告訴用戶。TTS的功能與ASR基本上相反,它將文字轉(zhuǎn)變?yōu)橐羲?,這些音素具有相對(duì)應(yīng)的數(shù)字聲音。另一種語音輸出是用某種標(biāo)準(zhǔn)格式存儲(chǔ)的錄制的聲音文件。這些聲音文件格式包括WAVE和脈沖編碼調(diào)制(PCM)。這些聲音文件在應(yīng)用程序啟動(dòng)以前已經(jīng)被編寫和錄制好了。所有錄制的語音輸出都必須事先確定。因此,TTS是一種更靈活的輸出方式。盡管TTS技術(shù)在過去的幾年里有了顯著的改進(jìn),但是商用TTS語音輸出的聲音往往仍然比較死板。VoiceXML還為電話網(wǎng)絡(luò)本身提供了轉(zhuǎn)移功能。它使得程序能夠?qū)⒂脩魪漠?dāng)前運(yùn)行的VoiceXML應(yīng)用程序轉(zhuǎn)到另一個(gè)電話號(hào)碼。2. VoiceXML基本編程2.

8、1. 程序結(jié)構(gòu)2.1.1. Welcome示例程序<?xml version=”1.0”><!- Welcome示例程序 -><vxml version=”1.0”> <form id=”welcome”> <block>歡迎訪問聲軟科技</block> </form>和介紹所有的編程語言一樣,Welcome示例程序給出了一個(gè)最簡(jiǎn)單的示例。當(dāng)該程序被執(zhí)行時(shí),VoiceServer將通過TTS引擎來說出“歡迎訪問聲軟科技”。下面詳細(xì)說明該程序代碼涉及到的元素。2.1.2. 基本元素元素說明<xml>&

9、lt;?xml version=”1.0”>代碼行向XML解析器或編輯器說明該文檔是XML 1.0語法編寫的。所有VoiceXML 1.0文檔都是采用XML 1.0語法編寫的。雖然元素xml對(duì)應(yīng)VoiceXML解釋程序來說并不是必不可少的元素,但是最好使用該元素,這樣就可以檢查VoiceXML文檔的格式是否正確,是否符合文檔類型定義(DTD)。注釋<!- Welcome示例程序 ->是注釋行,VoiceXML程序的注釋使用標(biāo)準(zhǔn)的XML語法編寫。所有VoiceXML注釋一律采用<!-commont text ->格式。<vxml>所有的VoiceXML命

10、令必須封裝在<vxml></vxml>元素中。其中屬性version告訴解釋程序在執(zhí)行程序文件時(shí),使用哪個(gè)版本的VoiceXML文檔類型定義(DTD)。目前,VoiceServer支持VoiceXML 1 .0,具體文檔類型定義參見/voicexml1-0.dtd。本示例程序中沒有使用vxml元素的另一個(gè)屬性applicaiton,該屬性指明VoiceXML文檔的根文檔的URL。當(dāng)你上載一個(gè)VoiceXML文檔時(shí),它的根文檔也同時(shí)上載;一般地,根文檔中可以定義全局使用的變量、過程等等。<form><form

11、>是VoiceXML的對(duì)話框,用于描述VoiceXML應(yīng)用程序?qū)τ脩羲f的各種提示,定義和收集用戶作出的響應(yīng),并且描述程序控制的流程。對(duì)話框分為兩種:一種是菜單,一種是窗體。<form>元素負(fù)責(zé)執(zhí)行對(duì)話框定義中描述的所有操作,封裝與用戶輸入輸出相關(guān)的命令,在文檔中導(dǎo)航或?qū)Ш降狡渌臋n中,也可以給變量賦值,進(jìn)行錄音和呼叫轉(zhuǎn)移。<block><block>元素是窗體的項(xiàng)目,用于封裝一組語句。這些語句可以用于對(duì)變量的值進(jìn)行輸出、瀏覽、聲明和賦值。2.2. 程序輸出在VoiceXML中,有兩種方法可以用來將信息輸出給用戶。第一種方法是通過文本語音轉(zhuǎn)換(TTS)

12、工具進(jìn)行輸出,另一種方法是通過播放預(yù)先錄制的聲音文件。2.2.1. TTS輸出TTS輸出比較簡(jiǎn)單,如2.1.1的例子<form id=”welcome”> <block>歡迎訪問聲軟科技</block></form>prompt元素是封裝TTS輸出和audio元素使用的另一種元素。如上例,TTS信息不用<prompt>封裝時(shí),相當(dāng)于使用了<prompt>元素的默認(rèn)值。在以下兩種情況下,必須使用prompt元素:首先,如果輸出包含TTS語音標(biāo)記元素,就必須使用prompt元素;語音標(biāo)記元素是用于控制向用戶說出TTS信息時(shí)的各

13、項(xiàng)特性,如速度、音量和發(fā)音等。其次,當(dāng)輸出信息需要bargein、cond、count或timeout等屬性時(shí),則必須使用prompt元素。<form id=”welcome”> <prompt>歡迎訪問聲軟科技</prompt></form>需要說明的是,VoiceServer系統(tǒng)對(duì)TTS的轉(zhuǎn)換結(jié)果作了緩存處理,同樣的內(nèi)容直接從緩存中獲取語音文件,而不是通過TTS引擎實(shí)時(shí)轉(zhuǎn)換,大大提高了TTS的效率。2.2.2. 聲音文件輸出<audio>元素用于設(shè)定向用戶播放事先錄制好的聲音文件。不同的VoiceXML語音平臺(tái)支持不同的聲音文件格

14、式,一般支持的文件格式為.wav文件。VoiceServer系統(tǒng)支持的文件格式參見其配置說明文檔。聲音文件輸出的示例如下:<audio src = "welcome.wav"></audio>audio元素的屬性包括:元素說明srcSrc屬性是向用戶播放聲音文件的url,注意可以是http:/hostname/path/voicefile的形式,從指定的服務(wù)器遠(yuǎn)程得到語音文件。cachingCaching為true的話,則如果有一個(gè)聲音文件的高速緩存拷貝且沒有過期,則使用該拷貝。目前,VoiceServer系統(tǒng)尚不支持該屬性。fetchtimeout

15、該屬性用于設(shè)定提供聲音文件的超時(shí),如果平臺(tái)在指定的超時(shí)時(shí)間內(nèi)沒有取得聲音文件,則平臺(tái)將發(fā)出一個(gè)出錯(cuò)事件。fetchtint該屬性用于確定平臺(tái)是否應(yīng)該在實(shí)際需要前提前提取聲音文件。目前,VoiceServer系統(tǒng)尚不支持該屬性。2.2.3. 聲音文件和TTS混合輸出VoiceServer系統(tǒng)支持聲音文件和TTS輸出的混合使用?;旌陷敵龅氖纠缦拢?lt;prompt><audio src = "welcome.wav" ></audio> </prompt><prompt> 王國(guó)強(qiáng)先生</prompt>。值得注

16、意的是,聲音文件的格式和TTS輸出的格式必須一致;可以參考系統(tǒng)配置手冊(cè)的說明,配置聲音文件和TTS輸出的格式。另一種混合輸出的方式是,如果在聲音文件沒有找到或者超時(shí)的情況下,則播放TTS的輸出。示例如下:<prompt> <audio src = "welcome.wav"> 歡迎訪問聲軟科技 </audio></prompt>如上例所示,在平臺(tái)無法得到welcome.wav聲音文件時(shí),就將通過TTS引擎將” 歡迎訪問聲軟科技”實(shí)時(shí)轉(zhuǎn)換成聲音文件向用戶播放。該功能特別適合在系統(tǒng)升級(jí)時(shí),由于某種原因語音文件不全的情況下,用戶也能

17、得到正確的提示信息。由于VoiceServer系統(tǒng)對(duì)TTS結(jié)果的緩存處理,TTS可以獲得與預(yù)先錄制語音文件幾乎相同的性能。2.3. 程序輸入輸入信息可以用兩種方法來接收,一種是語音,一種是雙音多頻(DTMF)。輸入信息既可以直接識(shí)別,也可以錄音。直接識(shí)別的輸入信息是通過語法來表述的,該語法設(shè)定了一組聲音,用戶可以發(fā)出這一組聲音,也可以由用戶按下DTMF按鈕,以便要求進(jìn)行某項(xiàng)操作,或?qū)⑿畔⑻峁┙o應(yīng)用程序。2.3.1. 菜單輸入<menu>元素和<form>元素一樣,是VoiceXML中的兩種對(duì)話框之一。根據(jù)定義,VoiceXML對(duì)話框用于描述應(yīng)用程序向用戶說出的提示信息,

18、也用于定義和接收用戶的應(yīng)答,并且用于描述程序控制的流程。菜單包含的prompt元素用于將應(yīng)用程序的輸出信息傳遞給用戶,它也包含用于建立語法的choice元素,以便定義和接收用戶的輸入信息,此外它還包含描述程序控制的choice元素和事件。菜單的示例如下:<menu id = "QueryMenu"><prompt> <audio src = "QueryMenu.wav"> 查詢產(chǎn)品信息請(qǐng)按1,了解公司信息請(qǐng)按2,轉(zhuǎn)話務(wù)員請(qǐng)按0 </audio></prompt><choice dtmf

19、= "1" next = "#Product" /><choice dtmf = "2" next = "#Company" /><choice dtmf = "0" next = "#Transfer" /></menu>如上所示,平臺(tái)在運(yùn)行到該菜單時(shí),向用戶提示“查詢產(chǎn)品信息請(qǐng)按1,了解公司信息請(qǐng)按2,轉(zhuǎn)話務(wù)員請(qǐng)按0”;QueryMenu.wav的聲音文件應(yīng)事先錄制好該語句,如果該文件不存在,則使用TTS輸出(參見2.2.3混合輸

20、出)。dtmf = "1"、dtmf = "2" 和dtmf = "0"定義了用戶可以按的鍵值,next定義了用戶按了該鍵后,執(zhí)行的下一個(gè)<form>或<menu>,其中#Product、#Company和#Transfer表示<form>或<menu>的名稱,即<form>或<menu>的id值。Menu元素的屬性包括:元素說明idId用于標(biāo)識(shí)菜單。當(dāng)使用goto、submit、next等元素從另一個(gè)對(duì)話框?qū)Ш降皆摬藛螘r(shí),可以使用該id值。scopescope指

21、在菜單中定義的choice元素語法的作用域。如果scope的值是它的默認(rèn)值dialog,則菜單的語法只在對(duì)話框中有效。如果scope的值是document,則菜單的語法將在整個(gè)VoiceXML文檔中有效。dtmfDtmf值可以是true或false。如果是true,則封裝在menu元素中的choice元素如果沒有定義dtmf屬性,那么將字段賦予一個(gè)dtmf值。Choice元素用于菜單語法。如果一個(gè)選項(xiàng)的語法被識(shí)別,那么該choice元素的next、event或expr等屬性將用于確定下一步將執(zhí)行什么程序。只有next、expr和event之一能夠擁有用于每個(gè)choice元素的值。Choice元

22、素的常用屬性包括:元素說明dtmfDtmf指定與該選項(xiàng)相關(guān)的DTMF按鍵值。nextNext用于指定執(zhí)行的下一個(gè)對(duì)話框。如果被訪問的對(duì)話框位于另一個(gè)文件中,對(duì)話框的名字必須使用以下格式:<下一個(gè)文檔的URL>#<對(duì)話框名稱>如果訪問的對(duì)話框位于同一個(gè)文檔,則可以簡(jiǎn)化為 #<對(duì)話框名稱>。eventEvent用于設(shè)定choice元素語法被識(shí)別后產(chǎn)生的事件。exprExpr的作用與next相同,區(qū)別在于expr是一個(gè)表達(dá)式,它的計(jì)算結(jié)果將作為下一個(gè)對(duì)話框的名字。下面再給出一個(gè)使用<choice>元素的event屬性的示例:<menu id =

23、"QueryMenu"><prompt> <audio src = "QueryMenu.wav"> 查詢產(chǎn)品信息請(qǐng)按1,了解公司信息請(qǐng)按2,轉(zhuǎn)話務(wù)員請(qǐng)按0 </audio></prompt><choice dtmf = "1" next = "#Product" /><choice dtmf = "2" event = "evtCompany" /><choice dtmf = "

24、0" next = "#Transfer" /></menu><catch event = " evtCompany "><prompt><audio src = "Company.wav"></audio></prompt><goto next = "# QueryMenu" /></catch>和前面的示例一樣,平臺(tái)在運(yùn)行到該菜單時(shí),向用戶提示“查詢產(chǎn)品信息請(qǐng)按1,了解公司信息請(qǐng)按2,轉(zhuǎn)話務(wù)員請(qǐng)按0”

25、,如何用戶按了“2”,平臺(tái)將接收到一個(gè)名為evtCompany的事件,<catch event=”evtCompany”>元素中定義了該事件處理程序,即播放一段公司介紹Company.wav,播放完畢后再轉(zhuǎn)到菜單QueryMenu。關(guān)于<catch>元素的具體參見3.1的說明。2.3.2. 字段輸入字段輸入采用field元素,該元素用于接收用戶的自動(dòng)語音識(shí)別信息或DTMF信息。<field>元素是接收用戶輸入信息最常用的元素。<field>元素的示例如下:<form id = "QueryProductCode">

26、<field name = "productCode" type = "digits"><prompt><audio src = "InputProductCode.wav" >請(qǐng)輸入產(chǎn)品代碼</audio></prompt></field> </form>如上所示,平臺(tái)在執(zhí)行到QueryProductCode對(duì)話框時(shí),會(huì)向用戶提示“請(qǐng)輸入產(chǎn)品代碼”,之后用戶就可以鍵入產(chǎn)品代碼。Field元素的屬性包括:元素說明nameName用于存放來自用戶輸入信息

27、的變量。exprExpr聲明變量的初始值。如果expr沒有指定,則該變量的初始值就是undefined。如果該變量的值是undefined之外的值,則封裝在field元素中的指令將不予執(zhí)行。condCond是一個(gè)表達(dá)式,它的計(jì)算結(jié)果可以是true或false。如果cond的計(jì)算值是true,則封裝在field中的指令將被執(zhí)行,如果cond的計(jì)算值是false,則封裝在field中的指令將不被執(zhí)行。typeType指明了期望的用戶輸入類型。系統(tǒng)內(nèi)置的類型包括:- Boolean:缺省”1”為true,“2”為false- Date:年月日組成的有效日期,格式為yyyymmdd。- Digits:

28、一串由09組成的串。- Currency:貨幣數(shù)量,格式為dddddd*dd,*表示小數(shù)點(diǎn)。- Number::數(shù)字,輸入格式同currency。- Phone:有數(shù)字構(gòu)成的電話號(hào)碼,*表示分機(jī)。例如:800861234*123表示電話號(hào)碼800861234轉(zhuǎn)分機(jī)123。- Time:時(shí)間,格式是hhmm。Field元素還有以下影子(shadow)變量:- Name$.confidence:0.0-1.0 間的數(shù)字,表示返回結(jié)果的可信度,0.0最低,1.0最高。該變量主要用于ASR識(shí)別結(jié)果;- Name$.utterance:是被識(shí)別時(shí)的確切詞組,同樣是用于ASR識(shí)別結(jié)果的;- Name$.i

29、mputmode:表明輸入方式是ASR還是DTMF,用于當(dāng)ASR和DTMF同時(shí)可用時(shí),說明該次輸入是用什么方式進(jìn)行的。當(dāng)用戶輸入后,一般地執(zhí)行<filled>元素。Filled元素表示在某些字段項(xiàng)賦值后,執(zhí)行封裝在filled元素中的指令。以下示例使用filled元素完善前面的示例:<form id = "QueryProductCode"><field name = "productCode" type = "digits"><prompt><audio src = "

30、InputProductCode.wav" >請(qǐng)輸入產(chǎn)品代碼</audio></prompt></field><filled><submit expr=http:/server/get.aspx' namelist=" productCode" /></filled> </form>如上所示,如果用戶輸入了產(chǎn)品號(hào)碼,則將輸入的產(chǎn)品號(hào)碼post到后臺(tái)服務(wù)器,取得信息后向用戶播放產(chǎn)品信息。關(guān)于submit元素的說明,參見3.5節(jié)。Filled元素的屬性包括:元素說明nam

31、elist該屬性包含filled元素等待被賦予一個(gè)值的所有字段變量。它的默認(rèn)值是父窗體中的所有字段變量。mode該屬性可以是all或any。如果是any,則當(dāng)filled元素的namelist屬性中的任何變量被賦值時(shí),filled元素中的指令均被執(zhí)行;如果是all,則當(dāng)filled元素的namelist屬性中的所有變量被賦值后,filled元素中的指令才被執(zhí)行。下面的示例說明了mode為all的應(yīng)用示例:<form id = "Login"><field name = "name" type = "digits"&g

32、t;<prompt><audio src = "InputLoginName.wav" >請(qǐng)輸入用戶代碼</audio></prompt></field><field name = "password" type = "digits"><prompt><audio src = "InputPassword.wav" >請(qǐng)輸入用戶密碼</audio></prompt></field>&l

33、t;filled namelist=” name password” mode=”all”><submit expr=http:/server/login.aspx' namelist="name password" /></filled> </form>如上所示,只有在用戶輸入了用戶名和密碼后,進(jìn)入后臺(tái)的驗(yàn)證程序。2.4. 條件語句VoiceXML的條件語句采用<if>、<elseif>和<else >元素,其中<elseif>和<else >元素總是封裝在一個(gè)&

34、lt;if>元素中。If元素可以包含多個(gè)elseif元素,但只能包含一個(gè)else元素。<if>元素的示例程序如下,該程序示意了產(chǎn)品折扣處理:<form id = “UnitPrice”><field name = "Qty" type = "digits"><prompt><audio src = "InputQuantity.wav" >請(qǐng)輸入購(gòu)買數(shù)量</audio></prompt></field><filled> &

35、lt;if cond = ”Qty &gt; 100”> <assign name=”unitPrice” value=”60” /> <elseif cond = “Qty &gt; 10”/> <assign name=”unitPrice” value=”80” /> <else/> <assign name=”unitPrice” value=”100” /> </if></filled></form>如上所示,用戶輸入購(gòu)買的產(chǎn)品數(shù)量后,在<filled>元

36、素中判斷,如果數(shù)量超過100則單價(jià)為60,如果數(shù)量大于10小于100則單價(jià)為80,如果數(shù)量小于10,則單價(jià)為100。這里需要注意的是,由于<、>是XML的保留字符,所以大于、小于符號(hào)都需要使用轉(zhuǎn)義符。轉(zhuǎn)義符表如下:保留字符轉(zhuǎn)義符保留字符轉(zhuǎn)移符< 小于符號(hào)&lt; 單引號(hào)&apos;> 大于符號(hào)&gt;& 與符號(hào)&amp;“ 引號(hào)&quot;2.5. goto語句goto元素用于從一個(gè)對(duì)話框?yàn)g覽到另一個(gè)對(duì)話框,也可以從一個(gè)窗體項(xiàng)轉(zhuǎn)到另一個(gè)窗體項(xiàng)。Goto元素的示例如下:<form id=”welcome”> &l

37、t;block>歡迎訪問聲軟科技 <goto next = “#QueryMenu”></block></form><menu id = "QueryMenu"><prompt> <audio src = "QueryMenu.wav"> 查詢產(chǎn)品信息請(qǐng)按1,了解公司信息請(qǐng)按2,轉(zhuǎn)話務(wù)員請(qǐng)按0 </audio></prompt><choice dtmf = "1" next = "#Product" />

38、;<choice dtmf = "2" next = "#Company" /><choice dtmf = "0" next = "#Transfer" /></menu>如上所示,平臺(tái)在播放了歡迎詞后,轉(zhuǎn)到查詢菜單,提示用戶輸入菜單選擇。Goto元素的常用屬性包括:元素說明NextNext屬性用于從一個(gè)對(duì)話框轉(zhuǎn)移到另一個(gè)對(duì)話框。它用于設(shè)定要訪問的下一個(gè)對(duì)話框。如果訪問的對(duì)話框在另一個(gè)文件中,則必須采用<下一個(gè)文檔的URL>#<對(duì)話框名稱>。如果沒有提供

39、對(duì)話框名稱,則執(zhí)行VoiceXML文件的第一個(gè)對(duì)話框。ExprExpr屬性的作用與next相似,差別在與expr是一個(gè)表達(dá)式,其計(jì)算結(jié)果是一個(gè)URL。nextitem當(dāng)goto元素從窗體的一個(gè)項(xiàng)目導(dǎo)航到另一個(gè)項(xiàng)目,必須使用nextitem。Nextitem語法上與next相似,差別在于nextitem的名字不帶前綴符號(hào)。ExpritemExpritem屬性的作用與nextitem相似,差別在與expritem是一個(gè)表達(dá)式,其計(jì)算結(jié)果是一個(gè)URL。注意,對(duì)于每個(gè)goto元素來說,next、expr、nextitem、expritem屬性中只能有一個(gè)屬性具有相應(yīng)的值。3. VoiceXML高級(jí)編程

40、3.1. 事件在menu元素中已經(jīng)接觸過事件。事件即可以是預(yù)先定義的,也可以是由應(yīng)用程序定義。事件可以是正常的,如用戶請(qǐng)求幫助,也可以是出錯(cuò)事件,如用戶沒有輸入等。在VoiceXML的事件模式中,事件即可以由平臺(tái)產(chǎn)生,也可以由應(yīng)用程序產(chǎn)生。這些事件可以由應(yīng)用程序獲取和處理,也可以由平臺(tái)獲取和處理。平臺(tái)預(yù)定義的事件如下表所示:事件說明Cancel用戶要求取消當(dāng)前輸出Telephone.disconnect.hangup用戶已經(jīng)結(jié)束呼叫Exit用戶要求退出Help用戶要求幫助Noinput平臺(tái)希望用戶輸入,但用戶在超時(shí)發(fā)生前一直沒有輸入Nomatch平臺(tái)檢測(cè)到用戶輸入,但和任何有效的語法均不符Er

41、ror.badfetch請(qǐng)求訪問資源失敗Error.sematic執(zhí)行文檔遇到運(yùn)行時(shí)錯(cuò)誤Error.noauthorization用戶要求對(duì)平臺(tái)執(zhí)行一項(xiàng)他沒有被授權(quán)運(yùn)行的操作Error.unsupported.format用戶要求訪問的資源所用的格式平臺(tái)不支持Error.unsupported.element平臺(tái)遇到一個(gè)它不支持的有效元素。應(yīng)用程序獲取和處理事件采用<catch>元素,該元素包含處理平臺(tái)發(fā)出的和應(yīng)用程序發(fā)出的事件的處理方法。Catch元素的示例如下:<catch event=”noinput”><prompt><audio expr =

42、 "PleaseInput.wav">您一直沒有輸入,請(qǐng)重新輸入!</audio></prompt></catch>如上所示,一旦在平臺(tái)期望用戶輸入而用戶在超時(shí)前一直沒有輸入時(shí),平臺(tái)向用戶提示“您一直沒有輸入,請(qǐng)重新輸入!”。Catch元素的屬性包括:元素說明EventEvent屬性指明獲取的一個(gè)或多個(gè)事件名稱。Event可以是一個(gè)特定的事件,也可以是一個(gè)事件類別,如event=”error”CountCount指發(fā)生事件的次數(shù)。Count的默認(rèn)值是1。Cond如果cond為true,則對(duì)事件進(jìn)行處理,如果cond為false則不處

43、理。以下是count屬性的應(yīng)用示例:<catch event=”nomatch” count=”1”><prompt><audio expr = "InputError1.wav">對(duì)不起,您的輸入錯(cuò)誤,請(qǐng)重新輸入!</audio></prompt></catch><catch event=”nomatch” count=”2”><prompt><audio expr = "InputError2.wav">對(duì)不起,您的輸入再次錯(cuò)誤,請(qǐng)按1查詢產(chǎn)品

44、信息,按2了解公司信息</audio></prompt></catch>應(yīng)用程序可以利用count屬性,在用戶反復(fù)錯(cuò)誤的情況下,給出進(jìn)一步具體的提示信息,以提供更友好的用戶界面。另外,對(duì)應(yīng)最常用的error、noinput、nomatch和help事件,VoiceXML語言提供的<eroro>、<noinput>、<nomatch>和<help>元素,其效果等價(jià)于<catch event=”>。3.2. 錄音record元素用于錄制用戶的語音輸入。錄制的聲音文件可以通過record元素的name屬性

45、中聲明的變量來加以引用。Record元素的應(yīng)用示例如下所示:<form id = “LeaveMessage”> <record name = “message” beep = “true” maxtime=”60s” finalsilence =”2s” dtmfterm =”true”> <prompt>請(qǐng)?jiān)诼牭玫温暫罅粞?lt;/prompt> <filled> <prompt>您的留言是<value expr=”message”></prompt></filled> </reco

46、rd></form>如上所示,平臺(tái)在執(zhí)行到這段程序時(shí)向用戶提示“請(qǐng)?jiān)诼牭玫温暫罅粞浴保⒉シ盘崾疽?,用戶開始留言。用戶留言完畢后,平臺(tái)向用戶確認(rèn)“您的留言是”,并播放用戶的留言內(nèi)容。Record的一些屬性指明在錄制用戶留言前播放提示音,最長(zhǎng)留言時(shí)間是60秒,如果用戶2秒沒有聲音或者用戶按了任何按鍵則認(rèn)為留言結(jié)束。Record元素的屬性包括:元素說明NameName是引用用戶錄制聲音文件時(shí)使用的變量名稱。如果訪問record時(shí),name屬性的變量值不是undefined,則record元素將不執(zhí)行。ExprName變量的初始值。Cond確定訪問record元素時(shí)是否執(zhí)行,如果是

47、true執(zhí)行,false則不執(zhí)行。缺省值是true。Beep如果beep為true,則平臺(tái)在準(zhǔn)備接收用戶錄音前播放提示音,beep的缺省值是false。Maxtime該值指定平臺(tái)允許用戶錄音的最長(zhǎng)時(shí)間。Finalsilence該值指定平臺(tái)允許的靜默時(shí)間。Dmfterm如果dtmfterm為true,則用戶按下任何dtmf鍵結(jié)束錄音。按鍵產(chǎn)生的聲音將不是錄音的部分。Type錄制的聲音文件的格式。該格式必須是平臺(tái)支持的格式,如果不指定,則采用平臺(tái)的默認(rèn)格式。Record元素具有以下影子變量:- name$.duration:以毫秒為單位的錄音長(zhǎng)度;- name$.size:以字節(jié)為單位的文件大??;

48、- name$.termchar:為結(jié)束錄音而輸入的DTMF鍵值,可以是null。3.3. 呼叫轉(zhuǎn)移呼叫轉(zhuǎn)移采用transfer元素,使得應(yīng)用程序可以在用戶和另一方之間啟動(dòng)一次電話呼叫。Transfer元素的示例如下:<form id=”transfer”> <transfer name = “call” dest = “123456” bridge = “false”> <prompt>您的電話正在被轉(zhuǎn)接到話務(wù)員,請(qǐng)稍候</prompt><filled> <if cond = “call = noanswer”> <

49、;prompt>對(duì)不起,話務(wù)員無法接聽您的電話,請(qǐng)稍后再試。謝謝,再見!</prompt> <disconnect/> <exit/> </if> </filled> </transfer></form>如上所示,平臺(tái)執(zhí)行到該程序時(shí),向用戶提示“您的電話正在被轉(zhuǎn)接到話務(wù)員,請(qǐng)稍候”,然后向123456轉(zhuǎn)移電話,如果123456無法接聽,則向用戶提示“對(duì)不起,話務(wù)員無法接聽您的電話,請(qǐng)稍后再試。謝謝,再見!”,之后掛機(jī)退出。Transfer元素的屬性包括:元素說明NameTransfer的變量名稱。如果該變

50、量是undefined,則transfer元素被執(zhí)行,否則不執(zhí)行transfer元素。當(dāng)transfer失敗后,該變量為以下值之一:- busy:接收到忙音- noanser:在規(guī)定的timeout內(nèi)沒有收到回答- network_busy:電話網(wǎng)忙,無法接通電話- near_end_disconnect:用戶已掛斷電話- far_end_disconnect:呼叫方已掛斷電話- network_disconnet:呼叫被電話網(wǎng)切斷ExprName屬性變量的初始值CondCond為true則執(zhí)行transfer元素,為false則不執(zhí)行Dest轉(zhuǎn)接的電話號(hào)碼Destexpr是一個(gè)表達(dá)式,其計(jì)算

51、值作為轉(zhuǎn)接的電話號(hào)碼Bridge用于確定當(dāng)電話轉(zhuǎn)接后,轉(zhuǎn)接呼叫結(jié)束后是否返回應(yīng)用程序。Transfer元素有一個(gè)影子變量name$.duration,表示以毫秒為單位的成功電話呼叫的時(shí)間長(zhǎng)度。3.4. object元素使用object元素,VoiceXML開發(fā)人員可以訪問不是VoiceXML提供的特定平臺(tái)的功能。由于有些對(duì)象是平臺(tái)所特有的,因此使用一個(gè)對(duì)象會(huì)導(dǎo)致某個(gè)應(yīng)用程序與特定的平臺(tái)相關(guān)聯(lián)。如果平臺(tái)不知道被引用的對(duì)象,則產(chǎn)生一個(gè)error.unsupported.object事件。Object元素的示例如下:<object classid = "xml.windows.tex

52、t2tiff" name = "TiffObj" ><param name = "text" value = "傳真的內(nèi)容" /><param name = "tiff" value = "fax.tif" /></object>如上所示,xml.windows.text2tiff就是VoiceServer平臺(tái)特有的提供將文本保存為傳真文件的object元素。Object元素的主要屬性包括:元素說明NameName是引用返回的對(duì)象時(shí)使用的變量名

53、稱。當(dāng)訪問一個(gè)object元素時(shí),如果name的值不是undefined,則不執(zhí)行object元素ExprExpr是name屬性中聲明對(duì)象的初始值CondCond是布爾值,用于確定object元素是否被執(zhí)行ClassidClassid是對(duì)象所在設(shè)備的url,用于唯一標(biāo)識(shí)一個(gè)對(duì)象類別CodebaseClassbase是確定classid等屬性中所有相對(duì)url時(shí)使用的基本urlCodetype是對(duì)象的內(nèi)容類型一般的,需要向object傳遞參數(shù),傳遞參數(shù)使用param元素。Param元素的屬性包括:元素說明NameName是參數(shù)的名稱ExprExpr是參數(shù)值的表達(dá)式Value參數(shù)值Valuetype

54、可以是data或ref,默認(rèn)值是data。說明傳遞的值是值類型還是引用類型Type如果valuetype是ref,則type說明其具體的mime類型3.5. submit元素submit元素用于從一個(gè)VoiceXML文檔轉(zhuǎn)到服務(wù)器端的腳本文件,如Perl、ASP或ASP.net等。Submit的示例如下所示:<form id = "QueryProductCode"><field name = "productCode" type = "digits"><prompt><audio src =

55、 "InputProductCode.wav" >請(qǐng)輸入產(chǎn)品代碼</audio></prompt></field><filled><submit next = ”http:/server/get.aspx” namelist=" productCode" /></filled> </form>如上所示,如果用戶輸入產(chǎn)品號(hào)碼“1234”,submit將發(fā)出http:/server/get.aspx?productCode=1234的請(qǐng)求。get.aspx中對(duì)此prod

56、uctID作處理,并返回下一頁(yè)vxml文檔。submit元素的主要屬性包括:元素說明NextNext是下一個(gè)要執(zhí)行的腳本文件url。url可以是當(dāng)前文檔的絕對(duì)地址,也可以是以當(dāng)前文檔的相對(duì)地址。如果next設(shè)置了一個(gè)值,則expr就不能設(shè)置其他值ExprExpr的作用同next,差別在于expr是一個(gè)表達(dá)式,其計(jì)算結(jié)果是一個(gè)url。如果設(shè)置了expr就不能設(shè)置next屬性Method指明http請(qǐng)求的方法是get還是post,默認(rèn)是getNamelistNamelist是要提交到腳本文件的變量列表,如果namelist省略了,則作用域內(nèi)的所有字段項(xiàng)均被提交EnctypeEnctype是提交文檔

57、的mime類型,默認(rèn)值是application/x-www-form-urlencoded類型3.6. ECMAScript使用scipt元素,ECMAScript代碼既可以嵌入VoiceXML文檔,也可以從外部文件調(diào)用。Script元素的示例如下:<script src = "common.js" />該語句表示包括common.js中的所有javascript變量定義和函數(shù)定義,在common.js中定義過的變量和函數(shù)可以在任何expr屬性中使用。如果在common.js中有如下定義:function getVoiceFile(index) if (index >= 0 && index < 10)return _fileNameindex; else return “”;_fileName = new Array(10);_fileName0 = "0.vox"_fileName1 = "1.vox"_fileName2 = "2.vox"_fileName3 = &qu

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論