VXML开发接口说明V1.0rmd_第1页
VXML开发接口说明V1.0rmd_第2页
VXML开发接口说明V1.0rmd_第3页
VXML开发接口说明V1.0rmd_第4页
VXML开发接口说明V1.0rmd_第5页
已阅读5页,还剩113页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./目录TOC\o"1-3"第1章VoiceXML标准概述1-11.1简介1-21.2概念说明1-2VoiceXML与XML的关系1-2执行的原则1-2DialogandSubdialog 1-3Session 1-3Application 1-3语法1-4事件1-4Link 1-41.3VoiceXML基本元素列表1-51.4Document的结构和执行1-7第2章VoiceXML标准基本元素功能及使用介绍2-12.1Subdialog 2-22.2Form 2-2Form的解释2-2FormItem 2-3FormItem的变量和条件2-4引导型Form 2-5混合引导型Form 2-7Form的解释规则2-72.3MENU 2-102.4LINK 2-152.5变量和表达式2-17变量的声明2-17变量的范围2-18引用变量2-19标准的session变量2-202.6语法2-21语音语法2-21DTMF语法2-22语法的范围2-23语法的激活2-242.7事件处理2-25Throw 2-25Catch 2-25快捷元素2-26catch元素的选择2-27默认属性的catch元素2-27事件类型2-282.8资源的获取2-30获取2-30缓存2-312.9<prompt>元素2-33基本的提示音格式2-33语音标记2-33音频提示2-35<value>元素2-36打断功能2-37选择放音功能2-37Timeout属性2-392.10FORMITEM 2-402.11<filled>元素2-422.12<meta>元素2-442.13<property>元素2-462.14PARAM 2-512.15可执行内容2-54<var>元素2-54<assign>元素2-54<clear>元素2-55<if>元素2-55<prompt>元素2-56<reprompt>元素2-56<goto>元素2-58<submit>元素2-59<exit>元素2-60<return>元素2-61<disconnect>元素2-62<script>元素2-622.16时间的指定2-66第3章语法3-13.1语音语法3-23.1.1引言3-2定义语法3-7语法编译3-14自然语言理解3-213.2DTMF语法3-30第4章VoiceIE系统与ICP业务接口说明4-14.1VoiceIE语音浏览系统结构4-24.2VoiceIE系统对VoiceXML标准支持的说明4-4VoiceIE系统对VoiceXML标准的支持4-4VoiceIE系统扩展VoiceXML标准OBJECT使用说明4-84.3计费接口说明4-20按点击次数计费4-20按流量计费4-21按内容计费4-23计费接口补充说明4-244.4鉴权接口说明4-264.5其他说明4-27语音文件格式要求4-27版本说明4-27附录缩略语及专用术语表A-1.VoiceXML标准概述本章目标介绍VoiceXML及相关的一些概念。介绍VoiceXML的一些基本元素。描述VoiceXMLDocument的执行规则。简介VoiceXML〔VoiceeXtensibleMarkupLanguage,语音扩展标识语言为合成语音,数字音频,语音识别和DTMF〔DualToneMulti-frequency,双音多频收号器键输入,语音纪录、电话、多方会议等提供音频交互手段。它的主要目标是将基于WEB的开发内容移植到IVR〔InteractiveVoiceResponse,交互式声音应答应用中。概念说明VoiceXML与XML的关系XML〔eXtensibleMarkupLanguage,可扩展标记语言和HTML〔HypertextMarkupLanguage,超文本链接标识语言都是由SGML〔StandardGeneralizedMarkupLanguage,标准通用标记语言派生而来的。HTML是SGML的一个实例,而XML则是SGML的一个子集;VoiceXML是XML的一个实例。XML是一个可无限扩展的标记语言,是用来设计各种各样的标记语言的准则,即通常所说的"元语言"—Meta-Language〔即可产生其它语言的语言。VoiceXML是XML在语音方面的一个实例。VoiceXML标准必须先遵循XML规范〔有关XML规范请参看相关资料,本手册不予说明。执行的原则一个VoiceXMLdocument〔文档或同一个application〔应用中的一系列document形成一个交互式的有限状态自动机。用户任何时刻只能处于一个会话状态,即处于某一个dialog。每个dialog决定下一个跃迁到的dialog,跃迁时指定将使用到的URI〔UniformResourceIndicator,统一资源指示,即指出了下面使用那个document和dialog;如果该URI没有指定下一个document,则假定为当前document;如果没有指定下一个dialog,则假定为document中的第一个dialog。如果当前运行完的dialog没有指定下一个跳转的目标,或者其中出现明确要求退出的元素,则终止当前的交互。DialogandSubdialogdialogdialog〔对话有以下两类:form表示信息的收集输入。定义了一个交互接口,通过收集输入信息为一系列fielditem域项变量赋值。其中每个field可以指定一个语法,用以定义该field允许的输入信息。如果存在form级别的语法,则它可以对会话内的field起作用。menu提出下一步作什么样的选择。向用户提交一系列可选项,并且下一步的跃迁将基于用户的选择。Subdialogsubdialog〔子对话,类似函数调用,它提供了调用一个新的交互的机制,并返回到原来的form。返回时保存内部数据、所用语法以及状态信息,以供在调用该subdialog的document中使用。例如可在下列场合使用subdialog:创建一个要求访问数据库的验证片断。创建一个在一个应用中被多个文档共用的元件。创建一个在多个应用中可重用的对话库〔libraryofdialogs。Session一个session的活动周期为:开始于:当用户开始和一个VoiceXML解释器上下文〔interpretercontext交互时。继续于:当获取和处理document时。结束于:当用户、document、或者解释器上下文要求结束时。Application一个application由一系列共享同一个rootdocument〔根文档的document构成。在一个application内,不管用户是通过某一个document进行交互,还是从一个document转换到另一个document,rootdocument总是处于加载状态,此时rootdocument的变量作为application的变量,可以被同一application内的document所使用,并且它的语法在整个application内都是保持激活状态。只有在用户切换到本application之外的document时,rootdocument才会被卸载。语法每一个dialog联系着一个或多个语音语法、DTMF语法,在机器引导〔machinedirected的application中,每个dialog的语法只有在用户使用该dialog时,才处于激活状态;在混合引导〔mixedinitiative的application中,用户和机器交互控制下一步做什么;某些dialog会保持其语法为激活状态〔例如监听,即使用户转换到同一document中的另一个dialog或同一application的另一个已加载的document,在这种情况下,如果输入的用户语言匹配了另一个dialog的激活语法,执行将转移到该dialog,用户的语言将被当作对此dialog的操作。混合引导的application增加了语音应用的灵活性与处理能力。事件对于各种的情况,由平台抛出事件〔event,如:用户没用响应,请求帮助。当VoiceXML文档有语义错误时,解释器也会抛出事件。事件由catch元素或由它的快捷形式捕捉;一个事件能产生的每个元素都可指定catch元素。此外catch元素还可以附加元素"asifbycopy"来继承。这样,在任何层次都可以指定共有事件的处理方式,并且这适用于所有较低层。Linklink支持混合引导。如果用户进入link的范围,link指定的语法就处于激活状态,一旦用户输入匹配了link的语法,控制就转移到link的目标URI。link可以被用来抛出事件以跳转到指定的URI目的地。VoiceXML基本元素列表元素功能<assign>给一个变量赋值<audio>在一个提示中放音频片段<block>可执行代码的容器〔container,这些代码不是交互代码<break>在输出中增加暂停的JSML元素<catch>捕捉一个事件<clear>清除一个或多个form变量<choice>定义一个菜单项目<disconnect>退出一个session<div>把一些text定义为特殊类的JSML元素<dtmf>定义一个按键文法<enumerate>在一个菜单中枚举选择的缩写<error>抓获一个错误事件<exit>退出一个document或者application<else><if>元素中使用<elseif><if>元素中使用<emp>改变语音输出重音的JSML元素<form>提交信息和收集数据的dialog<field>定义一个form中的field<filled>field被填充完毕后要执行的动作<goto>到同一个或另外一个文件的其它dialog<grammar>定义一个语音识别的语法<help>捕捉一个help事件<if>简单的条件逻辑<initial>在form的入口定义初始化逻辑<link>为link中的所有dialog定义一个转移<menu>定义一个选择菜单<nomatch>捕捉一个nomatch事件<noinput>捕捉一个noinput事件<option>为<field>域指定一个option<object>在一个特定的范围内作用〔例如、讲话对象<param><subdialog>和<object>中的参数<prompt>向用户输出音频文件语音和TTS〔Text-To-Speech,文本到语音的转化语音<property>控制实现平台参数的设置<pros>改变语音输出的重音和语调模式的JSML元素<record>记录一个音频采样<reprompt>当再次访问一个field,请求播放提示音<return>从subdialog中返回<sayas>修改怎样拼写一个词或短语的JSML元素<script>指定一块ECMAscript客户端的脚本逻辑<subdialog>调用另一个dialog,作为当前dialog的subdialog<submit>将值提交给文档服务器<throw>抛出一个事件<transfer>把呼叫转移到另外一个目的地<value>在提示中插入变量值<var>声明变量<vxml>每个VoiceXML文件的最高层元素Document的结构和执行一个VoiceXMLdocument由高层的元素dialog组成。有两种类型的dialog:form和menu。一个document也可以有<meta>、<var>、<script>、<property>、<catch>、<link>等元素。单个document内的执行缺省是从第一个dialog开始执行。当前执行的dialog决定下一个要执行的dialog。当所执行的dialog没有指定下一个dialog时,就结束运行。含多个document的application的执行通常application是在独立的document内进行的。当需要在一个application里使用多个document时,应选一个document作为rootdocument,并且在其他document的<vxml>元素里引用它。如图1-1所示。图1-1含多个document的application的执行application中的rootdocument一直驻留在内存中。通常,可以见到下面的两种情况:application中的rootdocument〔或者一个独立的document已加载,用户在执行它。application中的rootdocument和其他的document被加载,用户在执行非rootdocument。在含多个document的application中,rootdocument的变量和语法可以共享,这样在整个application中用户都可以与共同的〔即rootdocument中的form、link,还有menu进行交互。值得注意的是在含多个document的application中,最多只能有两个document可以同时被加载,一个是正在执行的document,另一个是rootdocument。如果一个document引用了不存在的rootdocument,或者某个application的rootdocument引用了另外一个application的rootdocument,就会引发语义错误事件。.VoiceXML标准基本元素功能及使用介绍本章目标简单翻译介绍VoiceXML1.00标准中一些基本元素的功能及应用。Subdialog使用subdialog可以减小dialog的复杂序列,改善程序的结构,或者用于生成一个可重用的组件。调用subdialog时增加了新的上下文。被调用的可以是当前document中一个dialog,也可以是另外的document中的dialog。一个subdialog的调用与其语法的有效范围相关。Form它是VoiceXMLdocument的关键元件。可以包含:<1>一组formitem。formitem又分为fielditem和controlitem。其中:fielditem定义fielditem的变量,FIA〔FormInterpretationAlgorithm,form的解释算法主循环里要访问的元素。controlitem帮助控制field的收集信息。<2>声明non-fielditem变量。<3>事件处理器〔eventhandlers。<4>过程逻辑块。form的属性:Id标识form的名称。Scopeform语法的默认范围。如果默认范围是dialog,则form语法的默认范围仅在form内激活;如果默认范围是document,form语法的默认范围在同一document内的任一dialog内激活;如果默认范围是document,并且该document是rootdocument,则form语法在该application的任一document的内的任一dialog内激活;如果一个form的语法标明了scope为dialog,则它仅在该form内激活。Form的解释form由内含的FIA解释。FIA循环重复地选择一个formitem,然后访问它,这个被选的formitem是第一个警戒条件不满足的formitem。例如,formitem的默认警戒条件检验该formitem的变量是否被赋值,这样对于仅有fielditem的简单form,用户将被提示依次处理各fielditem。解释一个formitem通常包括以下步骤:选择并播放一段或多段提示音。收集用户输入,或者填充一个或多个field,或者抛出各种事件〔如帮助事件。解释field中最近填充的<filled>动作。在遇到控制状态转移时,如转换到其他dialog或者document的<goto>,或向服务器提交数据的<submit>,FIA将结束。当遇到暗含的<EXIT>结束标志,如没有合法的formitem,FIA也将结束。FormItem一个form的formitem是指可以被FIA的主循环访问到的元素〔element,formitem指引FIA收集特定的field,FIA选择到的一个控制item,可能包含一段需要运行的程序代码,或者它将告诉FIA为一个混合引导型form提供初始化了的提示放音集。FieldItem一个fielditem指定了一个fielditem变量,它的值从用户那里收集。fielditem带有提示音,以告诉用户说什么或者按什么键,以及定义允许输入内容的语法和处理任何结果事件的处理器。fielditem也可能带有一个<filled>元素,它定义fielditem变量赋值后应该做的动作。fielditem可以细分为:<field>通过ASR〔AutomaticSpeechRecognition,自动语音识别或者DTMF语法来赋值的fielditem。<record>内容为一段音频剪辑的fielditem,例如一个<record>元素可以收集语音邮件。<transfer>该fielditem将用户的电话转接到另一个电话上。<transfer>有两种类型,一种将用户转过去以后,流程就结束;另一种<transfer>,将用户转过去以后,等待其结束,然后返回控制,这时field变量的值将被设置成结束的状态,如:busynoanswer;network_busy;Near_end_disconnect;far_end_disconnect;network_disconnect。<object>该fielditem调用一个带有各种变量的平台指定的对象〔其返回值是带有一个或多个属性的ECMAScript对象。平台指定的对象可以是一个用来收集信用卡信息的内嵌的对话,也可以是使用某些专用的DTMF文本输入法收集的文本信息。说明:<1><object>元素支持调用一个带有各种变量的平台指定的对象,但并不要求应用必需提供平台指定的对象。<2>ECMAScript,AstandardversionofJavaScriptbackedbytheEuropeanComputerManufacturer'sAssociation,欧洲计算机制造商协会所支持的一个JavaScript的标准版本。<3>JavaScript,Java描述语言。<subdialog><subdialog>大体上就象函数调用,它调用在当前页的对话,或者调用另一个VoiceXML文档,结束时返回一个ECMAScript对象。ControlItem有两种类型的controlitem:<block>一系列的程序化的声明,用来提示和计算,但是不收集输入。block通常有一个隐含的formitem,它在被解释前设为true。<initial>它用在混合引导型form里控制初始的交互。它提示用户,使输入可以匹配form级的语法。当识别的结果使至少一个fielditem的变量被赋值时,<initial>的formitem变量变为true,然后将它作为一个可选项移交给FIA。FormItem的变量和条件每个formitem都对应一个formitem变量,当开始解释一个form时,其中的formitem变量都默认为未定义的。formitem变量将保存解释formitem的结果。每个fielditem也都对应一个fielditem变量,它将保存从用户那里收集来的变量值。formitem变量可以用name属性起名字。也可以不用名字,这时会产生一个内部的名字。每个formitem都有一个警戒条件,它决定该formitem在执行FIA算法时是否被访问。默认的警戒条件只是判断该formitem变量是否有值,如果已经有值了,在对该dialog执行FIA算法时,该formitem就不会被访问〔执行。典型情况是,fielditem有名字而controlitem没有。通常formitem变量没有初始值,也不指定附加的警戒条件。在form中可以先将某个formitem初始化赋值,将它隐藏起来,以后再清空它的值,使它被选中执行。另外,field可以在其他field被赋值而它本身没有被赋值时,将警戒条件激活。block内容只有在其条件为true时才会执行,这样就可以控制FIA选择和执行了,从而实现良好的控制。不过实际上,大多数的dialog并没有采用这样复杂的控制。简单的说,所有的formitem都有下列的属性:Name对话范围内的formitem变量的名字。Exprformitem变量的初始值,默认值是ECMAScript标准中的undefined。如果有了初始值,该formitem将不会被FIA选中执行,除非它的值被清空。Cond一个表达式,用在检测formitem变量时进行评价。如果没有此项,缺省认为是true,或者在<initial>中,用来检查是否有formitem变量被赋值。引导型Form最简单也是最常见的form类型是在应用中formitem被按照次序一次执行的计算机引导型的交互〔acomputer-directedinteraction。<formid="weather-info"><block>Welcometotheweatherinformationservice.</block><fieldname="state"><prompt>Whatstate?</prompt><grammersrc="state.gram"type="application/x-jsgf"/><catchevent="help">Pleasespeakthestateforwhichyouwanttheweather.</catch></field><fieldname="city"><prompt>Whatcity?</prompt><grammersrc="city.gram"type="application/x-jsgf"/><catchevent="help">Pleasespeakthestateforwhichyouwanttheweather.</catch></field><block><submitnext="/servlet/weather"namelist="citystate"/></block></form>对话将如下进行:C<computer>:Welcometotheweathereinformationservice.Whatstate?H<human>:helpC:Pleasespeakthestateforwhichyouwanttheweather?H:GeorgiaC:whatcity?H:TblisiC:didnotunderstandwhatyousaid。whatcity?H:MaconC:TheconditioninMacongeorgiaaresunnyand...field构成form的主要成分,一个field声明了一个变量,指定了提示音、识别的语法、DTMF声明、帮助信息以及其他的事件处理器。每个field在form的对话范围内〔intheform'sdialogscope声明了一个VoiceXMLfielditem变量。一旦在form中有用户的输入,这些变量被提交,或是拷贝到其它的变量中。每个field都有自己的语音语法或DTMF语法,或者两者都有,这是由<grammar>和<dtmf>元素明确指定的,或者用type属性暗含的。type属性是用来指定内嵌的标准语法,如数字,布尔量等。type属性也指明了语音合成器怎样来读field的值。每个field可以拥有一个或多个提示音。如果只有一个,它将在用户没有输入时不断重复的提示。如果有几个,则必须给出count属性,它将决定每次播放哪个提示音。<catchevent="help">元素定义了用户请求帮助时应该如何处理。帮助信息也可以是渐变内容,即每次播放的内容可以不同。<catchevent="help">可以使用略写形式,下面的两个元素是相等的:<catchevent="help">Pleasesayvisa,mastercard,oramex.</catch><help>Pleasesayvisa,mastercard,oramex.</help><filled>元素定义了前面field被执行赋值后做什么事情,它的一种用处是再次完整地检查语法或其他内容。混合引导型Form混合引导型form是指由计算机和用户共同来决定谈话,它必须有一个或多个<initial>formitem,且必须有一个或多个form级语法〔form-levelgrammar。如果有了form级语法就会出现:field可以以任意次序执行〔不一定按前后排列次序。用户的一次谈话可能会引起多于一个的field被执行。并且,可以激活不是当前dialog的form语法。如果document中有两个form,比如说一个是carrentalform,另一个是hotelreservationform,并且两个form的语法在整个文档内都激活,则用户在被提示输入关于hotelreservationform内的信息时,输入关于carrentalform内的信息,这样将引导计算机进行关于carrentalform内的对话。用户可以输入任何被激活语法可以识别的内容,并且相关field的赋值流程也会相应执行。可以有若干种办法〔个性化定制FIA。一种办法是给formitem变量赋值,这样该formitem就不会被FIA选中执行,同样,可以清空formitem变量的值,这样就引导FIA重新访问该formitem。另一种办法是用<gotonextitem>明确的指定下一个将要访问的fielditem,这将立即转换到该fielditem,如果在<filled>中出现<gotonextitem>,剩余的<filled>动作以及未决的<filled>动作将被忽略。Form的解释规则下面将讨论FIA的实现细节。初始化阶段当进入一个form时,它将被初始化。内部提示计数器变量〔在form的对话范围内被设置为1,每个变量〔form级的<var>元素和formitem变量被初始化:按照document内的次序,被置为未定义undefined,或是相对应的表达式属性。主循环FIA的主循环有三个阶段:选择阶段选择下一个访问的formitem。收集阶段访问下一个需要用户输入的formitem。此item提示用户输入,激活相应的语法并且等待和收集用户的输入〔语音输入或是DTMF输入或是事件〔例如帮助请求或是输入超时事件。处理阶段处理输入的内容,执行formitem并运行<filled>元素,完成诸如输入合法性检查等。由适当的事件处理器处理抛出的事件。注意:如果控制流程是从别的form的FIA转换过来的,FIA已经有了收集到的输入,这种情况下,FIA主循环的的第一次执行将跳过选择和收集阶段,直接用提供的输入进入处理阶段。<1>选择阶段其目标是选择下一个访问的formitem。它的执行规则如下:如果上一个主循环的处理阶段指定了一个<gotonextitem>,则所指定的formitem被选中,否则,第一个警戒条件为false的formitem被选中。如果没有警戒条件为false的formitem,则FIA将执行隐含的<exit>操作。<2>收集阶段其目的是收集输入或事件。被选中的formitem被访问,所执行的动作由formitem的类型决定:如果访问的是fielditem,FIA将被访问fielditem的所有提示音,按其标明的次数以及放音条件进行排队和选择。然后监听field级的语法和所有激活的高级语法,并等待语法匹配或者某些事件。如果访问的是<initial>,FIA将被访问<initial>的所有提示音,按其标明的次数以及放音条件进行排队和选择。然后监听form级的语法和所有激活的高级语法,并等待语法匹配或者某些事件。如果访问的是<block>,通过设置它的formitem变量为true,评估它的内容,然后跳过处理阶段。不收集任何输入,并且执行完以后进入下一次的FIA主循环。<3>处理阶段其目标是处理在收集阶段收集的输入或事件。如下所述:如果事件〔如没有输入或用户挂机发生,对应的catch元素将进行识别和处理,这可能造成FIA结束〔如跳转到另外的dialog或者document,或者执行<exit>,或者FIA进入下一轮的主循环〔如执行默认的帮助事件处理器。如果输入内容匹配了<link>的语法,则将执行<link>的跳转,或产生相关事件。如果<link>产生一个事件,该事件将由当前上下文中的formitem处理。如果输入内容匹配了别的form的语法,则FIA将结束,别的form将初始化,它的FIA将用该输入内容从执行处理阶段开始执行。如果输入内容匹配了本form的语法,则:输入内容的语法匹配值将被赋给相应的fielditem变量;<filled>中的动作将被一些指定的任务触发;每个<filled>中确定的动作将按文档中的次序执行。如果遇到<goto>或<throw>,剩余的<filled>中的动作将不再执行,并且FIA结束,或者FIA进入下一轮的主循环。完成处理阶段后,FIA又回到选择阶段。MENUmenu是一种便捷的语法快捷形式,它用于在form中提供一个单独的匿名field,以提示用户进行选择并根据选择转换到不同的地方。类似于正常的form,它有自己的语法范围,即用户执行别的dialog而依然保持激活的范围。下面的menu向用户提供了三种选择:<menu><prompt>Welcomehome.Sayoneof:<enumerate/></prompt><choicenext="http://www.sports.example/vxml/start.vxml">Sports</choice><choicenext="http://www.weather.example/intro.vxml">Weather</choice><choicenext="http://www.stargazer.example/voice/astronews.vxml">Stargazerastrophysicsnews</choice><noinput>Pleasesayoneof<enumerate/></noinput></menu>对话将如下进行:C:Welcomehome.sayoneof:sports;weather;Stargazerastrophysicsnews.H:Astrology.C:Ididnotunderstandwhatyousaid.<aplatform-specificdefaultmessage.>C:Welcomehome.sayoneof:sports;weather;Stargazerastrophysicsnews.H:sports.<menu>元素它用于标识menu,并决定语法的范围。menu的属性如下:Id用于标识menu,它可以使menu成为<goto>或<submit>的目标。Scopemenu的语法范围。如果它是dialog〔默认的,则menu的语法仅在用户进入到该menu后才激活。如果范围是document,则menu的语法在整个document中都是激活的,如果该menu是在application的rootdocument中,则其语法范围是整个application。Dtmf如果其设置为true,任何没有明确指定DTMF元素的选项被缺省的依次指定为暗含的"1","2"等。<choice>元素<choice>元素用于以下几种目的:用于指定一个语音语法片断,或一个DTMF语法片断,或其组合,以用于决定用户的选择。用于构成一列<enumerate>提示串。它指定选项被选中后将要跳转的目标URI。choice的属性如下所示:Dtmf用于选择的DTMF次序。Next下一个dialog或document的URI。Event指定抛出一个事件而不是指定一个next。Expr指定一个expression用于评估,而不是指定一个next。Caching参见节。Fetchaudio参见节。Fetchhint参见节。Fetchtimeout参见节。menu中的DTMFmenu可以只使用语音,或DTMF,也可以通过<menu>包含<property>元素来使用两者的结合。下面是一个仅用DTMF的例子,它用每个选项的dtmf属性明确指定了各自的DTMF次序:<menu><propertyname="inputmodes"value="dtmf"/><prompt>Forsportspress1,Forweatherpress2,ForStargazerastrophysicspress3.</prompt><choicedtmf="1"next="http://www.sports.example/vxml/start.vxml"/><choicedtmf="2"next="http://www.weather.example/intro.vxml"/><choicedtmf="3"next="http://www.stargazer.example/voice/astronews.vxml"/></menu>也可以设置menu的dtmf属性为true,以对前9个选项依次指定DTMF数字,第一个选项被指定为"1",其余类推。<menudtmf="true"><propertyname="inputmodes"value="dtmf"/><prompt>Forsportspress1,Forweatherpress2,ForStargazerastrophysicspress3.</prompt><choicenext="http://www.sports.example/vxml/start.vxml"/><choicenext="http://www.weather.example/intro.vxml"/><choicenext="http://www.stargazer.example/voice/astronews.vxml"/></menu>这样menu的提示将为:C:Welcomehome.Forsports,press1.Forweather,press2.ForStargazerastrophysicsnews,press3.在<field>的提示中可以类似的运用<enumerate>元素,以自制一系列可选项。语法的产生任何一个选择短语都指定了一系列被监听的词和短语。用户可以任意讲所被监听的词和短语中的子集,它们要按先前出现的次序排列。选择短语是从直接或间接包含在<choice>中的元素中的PCDATA构造的。例如,根据提示:"stargazerastrophysicsnews",用户可以说"stargazer","astrophysics","stargazernews","astrophysicsnews"等,对应的JSGF〔JavaSpeechGrammarFormat,Java语音语法格式语法将是:"[Stargazer][astrophysics][news]"〔[…]表示可选项。说明:PCDATA与CDATA的区别:PCDATA是真正意义上的字符串:例如"你好";CDATA是一个结构,例如"<![CDATA[你好]]>",他代表了PCDATA的"你好"。下面是使用<choice>元素子集的PCDATA的例子。<choicenext="http://www.stargazer.example/voice/astronews.vxml"><prompt><audiosrc="http://www.stargazer.example/space.wav">Stargazer<emp>astrophysics</emp>news</audio></prompt></choice>可选项将从音频文件读出。如果音频文件没有播放,将会提示"stargazerastrophysicsnews"。对应的语法应为"[stargazer][astrophysics][news]",从<choice>元素的子集的PCDATA中收集。解释模式menu的行为就像一个完成所有任务的单独field的form,menu的提示音和field的提示音相似,menu的事件处理与field的事件处理相似,menu的语法与form的语法相似。进入menu后,其语法加载激活,播放提示。当用户的选择匹配了可选项时,控制将依照next,expr,或<choice>的事件属性值转向其中之一,只有其中之一被指定。LINK<link>元素有一个或多个语法,其范围是包含它的元素的范围。<link>包含的语法并没有指定范围,当其中一个语法匹配时,link激活,并且:转换到新的document或dialog〔类似于<goto>。抛出一个事件〔类似于<throw>。下面的例子中,当你说"books"或按"2"时,link激活。<linknext="/books/main.vxml"><grammar>books|VoiceXMLbooks</grammar><dtmf>2</dtmf></link>下面的link给你一个当前document内的动态决定的dialog:<linkexpr="‘#’+document.helpstate"><grammar>help</grammar></link><link>可以是<vxml>,<form>的子成员,或者是一个formitem的子成员。<vxml>级的link的语法在整个文档内是激活的。form级的link的语法在用户进入该form时激活,如果一个application的rootdocument有document级link,则其语法在应用的任意地方都是激活的。如果执行到了一个modalformitem,form或document级的link语法将不激活。可以在link语法匹配时抛出一个事件而不是进入另一个document,这个事件在当前位置上被抛出,而不是指定link的地方。例如下面的例子,当用户的输入匹配了link语法,帮助事件将在用户访问到的地方引发:<linkevent="help"><grammar>arrgh|alasallislost|fieyefrowardmachine|Idon'tgetit</grammar></link><link>的属性如下:Next指定下面将去的URI,该URI是document〔有可能指定将要执行的dialog,或者是当前document中的一个dialog。Expr类似Next,只是其URI是由ECMAScript表达式的计算来动态地决定。Event当用户的输入匹配link语法时抛出的事件。Caching参见节。Fetchaudio参见节。Fetchhint参见节。Fetchtimeout参见节。要注意的是,next、expr、event中只能指定一个。变量和表达式VoiceXML变量等同于ECMAScript的变量。变量命名规则也同于ECMAScript中的规定,但下划线开头的词汇内部保留使用。变量的声明变量由<var>声明:<varname="home_phone"/><varname="pi"expr=3.14159/><varname="city"expr="'Sacramento'"/>另外也可以由formitem声明:<fieldname="num_tickets"type="number"><prompt>Howmanyticketsdoyouwishtopurchase?</prompt></field>没有明确指定初始值的变量在初始化时将被赋为未定义〔ECMAScriptundefined。变量必须在使用前声明。在form中,用<var>声明的与用formitem声明的变量将在进入form时初始化。初始化是按照文档中出现的顺序进行的。所以,下面的例子是合法的:<formid="test"><varname="one"expr="1"/><fieldname="two"expr="one+1"type="number"></field><varname="three"expr="two+1"/><fieldname="go_on"type="boolean"><prompt>Sayyesornotocontinue</prompt></field><filled><gotonext="#tally"/></filled></form>当用户访问该form时,form初始化第一个变量one,并将它的值设为1。然后声明fielditem变量two,并给它赋值为2。然后初始化逻辑声明变量three,并给它赋值3。最后FIA进入主循环,并开始进入go_onfield。变量的范围变量可以在下列范围内声明:<1>session适合于在整个用户交谈期间起作用的只读变量。它们由解释程序的上下文来声明和赋值。VoiceXMLdocument不能声明新的session变量。<2>application他们由应用的根文档〔application’srootdocument的<vxml>元素的子成员<var>来声明。当应用的根文档开始加载时对他们进行初始化。在根文档被加载期间,它们一直存在,并且不仅对于根文档而且对其他加载的叶文档都是可见的〔即可被访问。<3>document它们由document的<vxml>元素的子成员<var>来声明,它们在document开始加载时初始化,document加载期间一直存在并仅对于该document可访问。<4>dialog每个dialog〔form或menu都有一个在用户访问该dialog期间内存在的范围〔dialogscope,而且它对于该dialog的元素都是可见的。dialog变量用form的子成员<var>来声明,或由内部可执行内容的<var>来声明〔如<block>内容或catch元素内容,还可以由formitem元素声明。<form>的子<var>元素在form第一次被访问时初始化,内部可执行内容内置的<var>变量在内部可执行内容被执行时初始化。formitem变量在formitem被收集时初始化。<5>annoymous〔匿名的<block>、<filled>,以及catch元素定义了一个新的匿名的范围,以容纳这些元素声明的变量。下面的图显示了范围的继承关系:图2-1范围的层次图2-1中曲线箭头标明每个范围容纳的与范围同名的变量,这样就可以,比如说在匿名的dialog和document范围内这样引用变量x:在document范围内使用document.X。引用变量变量在cond和expr属性里被引用。如:<ifcond="city=='LA'"><assignname="city"expr="'LosAngeles'"/><elseifcond="city=='Philly'"/><assignname="city"expr="'Philadelphia'"/><elseifcond="city=='Constantinople'"/><assignname="city"expr="'Istanbul'"/></if><assignname="var1"expr="var1+1"/><ifcond="i>1"><assignname="i"expr="i-1"/></if>cond和expr所用的表达式语言就是ECMAScript的语言。变量引用匹配最里层的范围〔在如上所示的范围链中。为了明确,你可以在变量前加上前缀。例如,将formfielditem变量的值赋给最近使用的document:<assignname="document.ssn"expr="dialog.ssn"/>如果应用的根文档有一个变量x,它可以在非根文档里用application.x的方式引用,在根文档里可以用application.x或document.x的形式引用。标准的session变量Session.telephone.ani自动号码识别〔主叫号码识别,该变量提供自动号码识别服务的结果,自动号码识别服务用电话号码的形式向电话呼叫的接收者提供来电号码。该信息仅在有此项服务的情况下提供,否则,将是Undefined。Session.telephone.dnis被叫号码识别,该变量提供被叫号码识别服务的结果,被叫号码识别服务为接收者识别呼叫者所拨的号码。该信息仅在有此项服务的情况下提供,否则,将是Undefined。信息指示数字。该变量提供一些有关主叫方的信息。该信息仅在有此项服务的情况下提供。Session.telephone.uui用户到用户的信息。该变量提供一个ISDN呼叫建立时主叫方的补充信息。该信息仅在有此项服务的情况下提供。语法语音语法<grammar>元素通常提供语音语法,用以:指定一系列用户想提供信息或完成一项动作时的说话方式。提供相应的字符串〔对于field语法,或一系列属性——值对〔对于form语法,以描述信息或行为。<grammar>元素可以被设计成兼容上述两个条件的任意语法格式。现在VoiceXML没有指定一种语法格式,也没有要求支持特别的语法格式。这一点和VoiceXML的音频记录格式类似,也类于HTML的通用媒体格式。语音语法的引用<grammar>元素通常可以指定内嵌语法或外部语法。<1>内嵌语法由<grammar>元素的内容指定。<2>外部语法由form的元素指定。语音语法的属性<grammar>包含的属性:Src如果语法是外部的,其URI指定了语法的位置。Scope其范围或者是document,以使语法在当前document〔包括相关的application的页级document的所有dialog里被激活;或者是dialog,语法在整个form内激活。该项如果省略,语法范围由其父元素决定。Type语法的MIME类型。说明:华为VoiceIE仅支持Nuance格式的语音语法,建议不使用type="mime-type",type="application/x-jsgf"。Caching参见节。Fetchhint参见节。Fetchtimeout参见节。DTMF语法<dtmf>元素通常定义DTMF语法,用以:定义一系列按键,使用户可以执行一定的行动或提供信息。定义描述行动或信息的对应的字符串。<dtmf>元素可以被设计成兼容上述两个条件的任意语法格式。现在VoiceXML没有指定一种语法格式,也没有要求支持特别的语法格式。这一点和<grammar>类似。DTMF语法的引用<dtmf>的特性和<grammar>类似。<dtmf>元素同样可以指定内嵌语法或外部语法。<1>外部语法<dtmf>元素可以引用外部语法:<dtmfsrc="URI"type="mime-type"/><2>内嵌语法<dtmf>元素可以引用外部语法:<dtmftype="mime-type"><!--inlinedtmfgrammar--></dtmf>DTMF语法的属性Src如果语法是外部的,其URI指定了语法的位置。Scope其范围或者是document,以使语法在当前document〔包括相关的application的页级document的所有dialog里被激活;或者是dialog,语法在整个form内激活。该项如果省略,语法范围由其父元素决定。Type语法的MIME类型。Caching参见节。Fetchhint。参见节。Fetchtimeout参见节。语法的范围<1>field语法的范围field语法的范围总是其自身的范围,即仅在解释器访问该field时,其语法才激活。field的语法不能指定一个范围。<2>link的语法范围link的语法范围是包含link元素的范围,所以如果在应用的根文档里定义了link,它的语法范围将是整个应用。link里包含的语法不能指定一个范围。<3>form语法范围form语法默认是dialog的范围。所以,仅当用户访问该form时才激活。如果该语法给定的范围是document,则在整个document内语法都是激活的。如果它是给定了范围是document的语法,并且该document是根文档,则在整个应用内语法都是激活的。要指定form语法范围为文档,或者在form元素的scope属性里指定,或者在grammar元素里指定scope属性。如果两处都指定了,以grammar元素里指定的为准。<4>menu语法范围menu语法同样默认是dialog的范围,仅当用户访问该menu时才激活。如果该语法给定的范围是document,则在整个document内语法都是激活的,并且,若该document是应用的根文档〔applicationrootdocument,则在整个应用内语法都是激活的。menu内选项〔choice的语法不可以指定范围。有时form需要某些语法在整个document内激活,而另外的语法仅在自身form范围内激活,这样做的目的是将语法重叠的问题减少到最小。要实现这点,当每个独立的<grammar>和<dtmf>元素的使用范围与form元素自身的不同时,都指定自己的使用范围。<formscope="document"><grammar>?</grammar><grammarscope="dialog">?</grammar></form>语法的激活当解释器在等待用户的输入以作为被访问field的值时,下列语法将激活:该field的语法,包括field中的link包含的语法。其所在的form的语法,包括form内包含的link语法。document中包含的link语法,以及document中具有整个document范围的menu的语法和其他的form语法。应用根文档〔applictionrootdocument中包含的Link的语法,以及根文档中给与了整个document范围的menu和form的语法。当输入匹配了多个激活语法时,上面的列表定义了优先级。如果输入匹配了多个同一优先级的激活语法时,按照〔document文档次序决定优先级。menu对待语法的方式与form相同。如果form是模式的〔modal,如它的模式属性设为true,除了它自身的语法以外,在等待输入时都将关闭。如果输入匹配的是别的form或menu的语法而不是当前的form,控制将离开当前的form,转移到匹配的form,所有当前form的数据都会丢失。事件处理当在用户没有反应、输入没法理解、请求帮助等情况时,平台将抛出事件。当解释器在VoiceXML中发现语义错误时,或遇到<throw>元素时会抛出事件。用特征字符来标识事件。每个可以引发事件的元素都有一系列catch元素,包括:<catch><error><help><noinput><nomatch>如果有必要,元素可以从它的祖先元素那里继承catch元素。例如,某个field不包含处理的nomatch的catch元素,但是它的form有,则就会使用该form的catch元素。通用的事件处理器可以指定为任意一级,并且它可以对所有其子孙元素有效。Throw<throw>元素抛出一个事件,它可以是预定义的事件:<throwevent="nomatch"/><throwevent="telephone.disconnect.hangup"/>或者是由应用定义的事件:al.machine"/><throw>的属性为:Event,它就是被抛出的事件。Catchcatch元素将捕捉事件和某个document,dialog或formitem关联。它包含了可执行的内容。<formid="launch_missiles"><fieldname="password"><prompt>Whatisthecodeword?</prompt><grammar>rutabaga</grammar><help>Itisthenameofanobscurevegetable.</help><catchevent="nomatchnoinput"count="3"><prompt>Securityviolation!</prompt><submitnext="apprehend_felon"namelist="user_id"/></catch></field><block><gotonext="#get_city"/></block></form>catch元素的属性有:Event捕捉的事件。Count事件发生的次数,使用该count,可以针对不同次出现的同一事件采取不同的处理。当各formitem和menu被访问时,它们各自维护一个计数器以记录每次事件的发生。当Formitem和menu重新进入时,它们的计数器将重新复位。Cond它是一个可选项,用于测试事件是否要被捕获处理,默认是true。快捷元素<error>,<help>,<noinput>,以及<nomatch>是非常通用的<catch>元素的快捷形式。<error>是<catchevent="error">的快捷形式,将捕捉所有类型的错误:<error>Anerrorhasoccurred--pleasecallagainlater.<exit/></error><help>是<catchevent="help">的快捷形式:<help>Nohelpisavailable.</help><noinput>是<catchevent="noinput">的快捷形式:<noinput>Ididn'thearanything,pleasetryagain.</noinput><nomatch>是<catchevent="nomatch">的快捷形式:<nomatch>Iheardsomething,butitwasn'taknowncity.</nomatch>这些元素的属性有:Count事件发生的次数〔同catch元素。Cond它是一个可选项,用于测试事件是否要被捕获处理。默认是true〔同catch元素。catch元素的选择如果有必要,元素可以从它的祖先元素那里继承catch元素。当一个事件抛出后,发生事件的范围和包含它的范围都会被检查,以选择最佳的catch元素。检查按如下的逻辑:<1>构造一个按序排列的catch元素列表,它包含由在所有发生事件的范围和包含它的范围〔formitem,form,document,applicationrootdocument,interpretercontext内的catch元素。按范围排序,从当前范围开始,然后是按文档次序逐层向外。<2>去掉排列表中事件名称和该事件不匹配的catch元素,包括那些cond评估不通过的。<3>找到"正确的事件次数":在队列中所有catch元素的次数属性低于或等于当前事件次数,次数属性最高的那个catch元素。<4>选择队列中的第一个带有"正确的事件次数"的catch。被抛出的事件的名称要求和catch元素的处理事件名称匹配,或者是精确匹配,或者是前缀匹配。当catch元素事件属性有一个有共有前缀的事件。例如:<catchevent="telephone.disconnect">将和事件Telephone.disconnect.transfer前缀匹配。默认属性的catch元素在没有明确地指定关于noinput,help,nomatch,cancel,exit,及error事件的处理器,将由解释器提供默认的处理器,如表2-1所示。设计系统默认的处理各种事件与错误的处理器,概括来说有以下两点:指定是否提供有语音反馈。怎样影响执行情况。注意:提供语音反馈时,具体的内容由平台决定。表2-1部分事件的默认处理EventTypeAudioProvidedActionCancelnoDon’trepromptErroryesExitinterpreterExitnoExitinterpreterHelpyesRepromptNoinputnoRepromptNomatchyesRepromptTelephone.disconncetnoExitinterpreterAllothersYesExitinterpreter特定的平台和场所对默认的事件处理可能有所不同。事件类型事件可以分为预定义的事件和应用中定义的事件。事件同样也可分为普通事件〔正常情况下发生和错误事件〔异常情况下产生。预定义事件有:Cancel用户请求取消当前播放的提示音用户挂机用户被转移到其他的电话上并且不再返回〔原流程Exit用户请求退出Help用户请求帮助Noinput用户在timeout时间内,没有输入反应Nomatch用户的输入无法识别预定义的错误有:Error.badfetch失败的获取。比如遇到:缺少文档、错误的URI、获取过程中的通信故障、超时、侵犯安全,或者是错误格式的文档。Error.semantic语义错误,在解释VoiceXML时发生的运行错误,例如,除零、截短字符串边界错,或引用没定义的变量。Error.noauthorization用户没有执行其操作请求的权限〔如拨打错误的电话号码或用户尝试做被禁止操作。Error.unsupported.format不支持的格式。平台不支持所请求的资源的格式。如不支持的语法文件格式、音频文件格式对象格式或MIME格式。不支持的元素。平台不支持所给的元素的格式。如有的平台不支持<record>,则遇到它时就会引起,这就可以使用事件处理器以实现对不同平台的兼容。应用指定的错误格式应遵循下面的格式::不允许获取私人的简介信息: 文档试图获取受限的资源catch元素可以捕捉到指定的事件〔cancel,或者它们都可以用前缀匹配捕捉到。资源的获取获取在对VoiceXML流程的解释过程中,发生的从URL〔UniformResourceLocator,统一资源位置中获取的内容用于:获取VoiceXML文档。获取其他文档类型,如:音频文档、对象、语法、脚本等。所有在VoiceXML解释过程中发生的获取内容过程由下面的三个属性控制:<1>Caching可以在安全获取方式下,直接获取最新版本的内容;或者在快速获取方式下获取没有过期的缓存内容。如果没有指定,则内部产生的值将使用缓存。<2>Fetchtimeout等待获取内容的事件期限,超出此期限则抛出错误获取事件error.badfetchevent,如果不指定,则使用内部产生的fetchtimeout特性。<3>Fetchhint定义什么时候解释器需要继续从服务器上获取内容。一种情况是预获取指示,指示当服务器上有新文件加载时何时预获取,而不是在需要时才获取。另一种情况是获取非常大的文件〔意味着很长的时间,或下载音频文件流时,作流指示,指示解释器在什么时候开始处理,而不必等到全部到达后才处理。如果不指定,则使用内部产生的fetchhint特性。当从URI上获取内容时,caching属性决定它是否在缓存中,fetchtimeout属性决定花多长时间来等待下载内容〔从需要资源开始,fetchhint属性决定什么时候获取内容。在下一个section将会做更详细的解释。通过指示什么时候可以获取内容,fetchhint特性通常可以帮助解释器提高性能。尽管并不一定要求解释器在获取文档时遵循安全获取设定,但不管怎么说,任何一个在预获取和流设置中有管理能力的解释器,必须同样能在遵循安全获取设定的情况下运行。当通过<subdialog>,<goto>,<submit>,<link>或<choice>元素,从一个文档转到另一个文档时,有一些其它的规则来约束解释器的行为。如果引用的URI是一个文档〔例如"doc#dialog"或请求提供数据〔通过POST或GET,则将要获取一个新的文档〔或者在缓存里或者在服务器上。当获取到文档后,就开始它的初始化阶段〔如有必要的话,获取并初始化一个新应用的根文档,初始化文档变量,执行文档脚本。所请求的dialog〔如果没有指定,将是文档的第一个dialog将会随后初始化并从dialog的开始处执行。如果引用的URI仅是一个片断〔如"#dialog",则不用获取文档,也不用执行初始化。被请求的dialog将象前面的一样处理。获取VoiceXMLdocuments也支持Fetchaudio特性:Fetchaudio,在获取音频剪辑时可以同时播放。如果没有指定,缺省将使用该特性。如果不用该特性,则在获取时不会播放。Fetchaudio特性在获取下一个文档有显著延时的情况下,对于改善用户长时等待很有帮助。它可以用于播放背景音乐,或一系列公告。在文档重新获得时,如果音频文件正在播放,则它将被打断。缓存在获取文档和其他资源的时候,VoiceXML解释器就象HTML浏览器一样可以运用缓存caching技术来提高性能。VoiceXML解释器处理音频记录〔可能很庞大就象HTML浏览器处理图片一样。对于可视的浏览器,当缓存中内容陈旧的时候,通常可以通过终端用户来控制更新,但这种方法对于VoiceXML解释器来说却不可以,因为它缺少终端用户的控制。不过VoiceXML解释器可以运用适当的使用缓存策略,来判断并强制缓存刷新。缺省使用的VoiceXML解释器的缓存策略和通常在HTML浏览器中运用的一样:如果缓存中通过URI引用的文档没有过期,那就使用缓存中的拷贝。如果缓存中的通过URI引用的文档已经过期或不存在,那就从服务器上获取。注意:对缓存中过期的文档采取"只获取改变了的"〔"getifmodified"的办法是最优的。这种缓存策略是速度最快的。但

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论