1、VoiceXML 开发指南Ver 1.0VoiceXML 开发指南i目 录1. VoiceXML 概述 11.1. VoiceXML 语言 .11.2. 系统结构 11.3. 工作原理 21.3.1. 应用程序的输入 21.3.2. 应用程序的输出 22. VoiceXML 基本编程 22.1. 程序结构 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. 条件语
2、句 82.5. goto 语句 .93. VoiceXML 高级编程 103.1. 事件 103.2. 录音 113.3. 呼叫转移 123.4. object 元素 .133.5. submit 元素 .143.6. ECMAScript143.7. 收发传真 164. 参考文献 17VoiceXML 开发指南11. VoiceXML 概述1.1. VoiceXML 语言VoiceXML(语音扩展标记语言 )是一种基于 XML 的因特网标记语言,用于开发语音用户界面。它是音“语音 Web”使用的语言,它使得用户可以使用电话来访问因特网的内容,可以将其视为用于电话的 HTML。使用语音界面,用
3、户可以用他们的声音而不是通过计算机键盘和显示器与应用程序进行交互操作。在银行、学校或证券交易所,你可能已经通过语音邮件或者交互式语音应答(IVR)系统接触过语音界面。这些系统提示用户输入相应的信息,用户再根据要求输入相应的数据作为应答,然后系统就可以为用户执行有关的在线操作,例如,在不同帐户之间进行资金转帐。在语音界面中,有一个 VoiceXML 对话框(相当于一个 HTML 页)用于描述应用程序对用户说出的提示信息,定义和接收来自用户的应答,并且描述程序控制的流程。用户通过拨打应用程序的电话号码来访问 VoiceXML 应用程序。从用户的角度看,这个电话号码相当于一个 Web 网页的 URL
4、。用户可以通过任何类型的电话拨打。1.2. 系统结构声软公司 VoiceServer 系统的结构如下图所示。语音浏览器通过解析 VoiceXML ,采用提示音、按键等方式进行人机交互完成业务流程。特别地,VoiceServer 系统采用可插拔结构支持语音识别(Automatic Speech Recognition)和语音合成(Text To Speech)技术,从而实现完全通过语音进行人机交互的梦想。电 话 机 DIALOGIC硬 件适 配 层 VoiceXML语 音浏 览 器 Web服 务 器 Servcipt业 务访 问层 后 台数 据VoiceSrve系 统图 1 VoiceServe
5、r 系统概图采用 VoiceServer 系统实现的新业务可以采用任何 Web 技术方便地和原有数据系统结合。用户可以根据业务需求编写静态 voiceXML 脚本,或采用 ASP/JSP/PHP 等动态生成 voiceXML 脚本;与后台数据系统间可以采用数据库访问,或采用 XML HTTP 或其他协议访问。VoiceXML 开发指南21.3. 工作原理一般来说,VoiceXML 和语音浏览器通过为语音技术和内容传递提供标准界面,从而可以帮助变成人员开发因特网上运行的语音界面。尤其值得注意的是 VoiceXML 提供了一个连接自动语音识别(ASR ) 、文本语音转换(TTS ) 、双音多频(D
6、TMF ) 、呼叫处理以及其他技术和标准界面。虽然 VoiceXML 在一定程度上降低了这些技术的复杂性,但是要编写高质量的语音应用程序,就必须了解它们的复杂性。在下面两个小节中,将对 VoiceXML 程序的输入和输出所使用的一些关键技术做一个概述。1.3.1. 应用程序的输入自动语音识别是一种使口语输入能够被程序所理解的技术。为此需要将口语中的单次分解成为离散的声音小段,这种声音小段称为音素(phonemues) 。然后将这些音素与应用程序开发人员或语音识别工具提供的词汇相比较。这不是可调整的或自然语言的识别方式。每给一个提示信息,VoiceXML 应用程序定义一组有限的有效输入,其他用户
7、的应答将不能被应用程序理解。语音识别可以通过专门的硬件或软件来实现。双音多频(DTMF)系统通过电话网络中的硬件和软件对按键式电话的键盘输入进行翻译,实现音频播放。每个按键都能够产生一个可识别的独一无二的音频。该系统使得用户可以使用电话键盘将数字信息输入 VoiceXML 应用程序,并且游程序负责接收和理解这些数字信息。1.3.2. 应用程序的输出文本语音转换技术(TTS)能够将输出的文本转换成 “语音” (实际上是一种数字音频格式) 。这使得应用程序能够拥有灵活的输出方式,将开发人员没有预料到的事情告诉用户。TTS 的功能与 ASR 基本上相反,它将文字转变为音素,这些音素具有相对应的数字声
8、音。另一种语音输出是用某种标准格式存储的录制的声音文件。这些声音文件格式包括 WAVE 和脉冲编码调制(PCM) 。这些声音文件在应用程序启动以前已经被编写和录制好了。所有录制的语音输出都必须事先确定。因此,TTS 是一种更灵活的输出方式。尽管 TTS 技术在过去的几年里有了显著的改进,但是商用 TTS 语音输出的声音往往仍然比较死板。VoiceXML 还为电话网络本身提供了转移功能。它使得程序能够将用户从当前运行的VoiceXML 应用程序转到另一个电话号码。2. VoiceXML 基本编程2.1. 程序结构2.1.1. Welcome 示例程序欢迎访问声软科技VoiceXML 开发指南3和
9、介绍所有的编程语言一样,Welcome 示例程序给出了一个最简单的示例。当该程序被执行时,VoiceServer 将通过 TTS 引擎来说出“欢迎访问声软科技” 。下面详细说明该程序代码涉及到的元素。2.1.2. 基本元素元素 说明代码行向 XML 解析器或编辑器说明该文档是 XML 1.0语法编写的。所有 VoiceXML 1.0 文档都是采用 XML 1.0 语法编写的。虽然元素 xml 对应 VoiceXML 解释程序来说并不是必不可少的元素,但是最好使用该元素,这样就可以检查 VoiceXML 文档的格式是否正确,是否符合文档类型定义(DTD ) 。注释 是注释行,VoiceXML 程
10、序的注释使用标准的XML 语法编写。所有 VoiceXML 注释一律采用格式。所有的 VoiceXML 命令必须封装在 元素中。其中属性version 告诉解释程序在执行程序文件时,使用哪个版本的 VoiceXML 文档类型定义(DTD ) 。目前,VoiceServer 支持 VoiceXML 1 .0,具体文档类型定义参见 http:/www.voice.xml.org/voicexml1-0.dtd。本示例程序中没有使用 vxml元素的另一个属性 applicaiton,该属性指明 VoiceXML 文档的根文档的URL。当你上载一个 VoiceXML 文档时,它的根文档也同时上载;一般
11、地,根文档中可以定义全局使用的变量、过程等等。是 VoiceXML 的对话框,用于描述 VoiceXML 应用程序对用户所说的各种提示,定义和收集用户作出的响应,并且描述程序控制的流程。对话框分为两种:一种是菜单,一种是窗体。元素负责执行对话框定义中描述的所有操作,封装与用户输入输出相关的命令,在文档中导航或导航到其他文档中,也可以给变量赋值,进行录音和呼叫转移。元素是窗体的项目,用于封装一组语句。这些语句可以用于对变量的值进行输出、浏览、声明和赋值。2.2. 程序输出在 VoiceXML 中,有两种方法可以用来将信息输出给用户。第一种方法是通过文本语音转换(TTS)工具进行输出,另一种方法是
12、通过播放预先录制的声音文件。2.2.1. TTS 输出TTS 输出比较简单,如 2.1.1 的例子欢迎访问声软科技prompt 元素是封装 TTS 输出和 audio 元素使用的另一种元素。如上例,TTS 信息不用 封装时,相当于使用了元素的默认值。在以下两种情况下,必须使用 prompt 元素:首先,如果输出包含 TTS 语音标记元素,就必须使用 prompt 元素;语音标记元素是用于控制向用户说出TTS 信息时的各项特性,如速度、音量和发音等。其次,当输出信息需要 bargein、cond、count 或VoiceXML 开发指南4timeout 等属性时,则必须使用 prompt 元素。
13、欢迎访问声软科技需要说明的是,VoiceServer 系统对 TTS 的转换结果作了缓存处理,同样的内容直接从缓存中获取语音文件,而不是通过 TTS 引擎实时转换,大大提高了 TTS 的效率。2.2.2. 声音文件输出元素用于设定向用户播放事先录制好的声音文件。不同的 VoiceXML 语音平台支持不同的声音文件格式,一般支持的文件格式为.wav 文件。VoiceServer 系统支持的文件格式参见其配置说明文档。声音文件输出的示例如下:audio 元素的属性包括:元素 说明src Src 属性是向用户播放声音文件的 url,注意可以是http:/hostname/path/voicefile
14、 的形式,从指定的服务器远程得到语音文件。caching Caching 为 true 的话,则如果有一个声音文件的高速缓存拷贝且没有过期,则使用该拷贝。目前,VoiceServer 系统尚不支持该属性。fetchtimeout 该属性用于设定提供声音文件的超时,如果平台在指定的超时时间内没有取得声音文件,则平台将发出一个出错事件。fetchtint 该属性用于确定平台是否应该在实际需要前提前提取声音文件。目前,VoiceServer 系统尚不支持该属性。2.2.3. 声音文件和 TTS 混合输出VoiceServer 系统支持声音文件和 TTS 输出的混合使用。混合输出的示例如下:王国强先生
15、 。值得注意的是,声音文件的格式和 TTS 输出的格式必须一致;可以参考系统配置手册的说明,配置声音文件和 TTS 输出的格式。另一种混合输出的方式是,如果在声音文件没有找到或者超时的情况下,则播放 TTS 的输出。示例如下:欢迎访问声软科技VoiceXML 开发指南5如上例所示,在平台无法得到 welcome.wav 声音文件时,就将通过 TTS 引擎将” 欢迎访问声软科技”实时转换成声音文件向用户播放。该功能特别适合在系统升级时,由于某种原因语音文件不全的情况下,用户也能得到正确的提示信息。由于 VoiceServer 系统对 TTS 结果的缓存处理,TTS 可以获得与预先录制语音文件几乎
16、相同的性能。2.3. 程序输入输入信息可以用两种方法来接收,一种是语音,一种是双音多频(DTMF) 。输入信息既可以直接识别,也可以录音。直接识别的输入信息是通过语法来表述的,该语法设定了一组声音,用户可以发出这一组声音,也可以由用户按下 DTMF 按钮,以便要求进行某项操作,或将信息提供给应用程序。2.3.1. 菜单输入元素和 元素一样,是 VoiceXML 中的两种对话框之一。根据定义, VoiceXML对话框用于描述应用程序向用户说出的提示信息,也用于定义和接收用户的应答,并且用于描述程序控制的流程。菜单包含的 prompt 元素用于将应用程序的输出信息传递给用户,它也包含用于建立语法的
17、 choice 元素,以便定义和接收用户的输入信息,此外它还包含描述程序控制的 choice元素和事件。菜单的示例如下:查询产品信息请按 1,了解公司信息请按 2,转话务员请按 0如上所示,平台在运行到该菜单时,向用户提示“查询产品信息请按 1,了解公司信息请按2,转话务员请按 0”;QueryMenu.wav 的声音文件应事先录制好该语句,如果该文件不存在,则使用 TTS 输出(参见 2.2.3 混合输出) 。dtmf = “1“、dtmf = “2“ 和 dtmf = “0“定义了用户可以按的键值,next 定义了用户按了该键后,执行的下一个或,其中#Product、#Company 和#
18、Transfer 表示 或 的名称,即 或的 id 值。Menu 元素的属性包括:元素 说明id Id 用于标识菜单。当使用 goto、submit、next 等元素从另一个对话框导航到该菜单时,可以使用该 id 值。scope scope 指在菜单中定义的 choice 元素语法的作用域。如果 scope 的值是它的默认值 dialog,则菜单的语法只在对话框中有效。如果 scope 的值是 document,则菜单的语法将在整个 VoiceXML 文档中有效。VoiceXML 开发指南6dtmf Dtmf 值可以是 true 或 false。如果是 true,则封装在 menu 元素中的
19、choice 元素如果没有定义 dtmf 属性,那么将字段赋予一个 dtmf 值。Choice 元素用于菜单语法。如果一个选项的语法被识别,那么该 choice 元素的 next、event 或expr 等属性将用于确定下一步将执行什么程序。只有 next、expr 和 event 之一能够拥有用于每个choice 元素的值。Choice 元素的常用属性包括:元素 说明dtmf Dtmf 指定与该选项相关的 DTMF 按键值。next Next 用于指定执行的下一个对话框。如果被访问的对话框位于另一个文件中,对话框的名字必须使用以下格式:#如果访问的对话框位于同一个文档,则可以简化为 #。ev
20、ent Event 用于设定 choice 元素语法被识别后产生的事件。expr Expr 的作用与 next 相同,区别在于 expr 是一个表达式,它的计算结果将作为下一个对话框的名字。下面再给出一个使用元素的 event 属性的示例:查询产品信息请按 1,了解公司信息请按 2,转话务员请按 0和前面的示例一样,平台在运行到该菜单时,向用户提示“查询产品信息请按 1,了解公司信息请按 2,转话务员请按 0”,如何用户按了“2” ,平台将接收到一个名为 evtCompany 的事件,元素中定义了该事件处理程序,即播放一段公司介绍 Company.wav,播放完毕后再转到菜单 QueryMen
21、u。关于元素的具体参见 3.1 的说明。2.3.2. 字段输入字段输入采用 field 元素,该元素用于接收用户的自动语音识别信息或 DTMF 信息。元素是接收用户输入信息最常用的元素。元素的示例如下:VoiceXML 开发指南7请输入产品代码 如上所示,平台在执行到 QueryProductCode 对话框时,会向用户提示 “请输入产品代码” ,之后用户就可以键入产品代码。Field 元素的属性包括:元素 说明name Name 用于存放来自用户输入信息的变量。expr Expr 声明变量的初始值。如果 expr 没有指定,则该变量的初始值就是undefined。如果该变量的值是 undef
22、ined 之外的值,则封装在 field 元素中的指令将不予执行。cond Cond 是一个表达式,它的计算结果可以是 true 或 false。如果 cond 的计算值是 true,则封装在 field 中的指令将被执行,如果 cond 的计算值是 false,则封装在 field 中的指令将不被执行。type Type 指明了期望的用户输入类型。系统内置的类型包括:- Boolean:缺省”1”为 true, “2”为 false- Date:年月日组成的有效日期,格式为 yyyymmdd。- Digits:一串由 09 组成的串。- Currency:货币数量,格式为 dddddd*dd
23、,*表示小数点。- Number::数字,输入格式同 currency。- Phone:有数字构成的电话号码,*表示分机。例如:800861234*123 表示电话号码 800861234 转分机 123。- Time:时间,格式是 hhmm。Field 元素还有以下影子(shadow)变量:- Name$.confidence:0.0-1.0 间的数字,表示返回结果的可信度,0.0 最低,1.0 最高。该变量主要用于 ASR 识别结果;- Name$.utterance:是被识别时的确切词组,同样是用于 ASR 识别结果的;- Name$.imputmode:表明输入方式是 ASR 还是 D
24、TMF,用于当 ASR 和 DTMF 同时可用时,说明该次输入是用什么方式进行的。当用户输入后,一般地执行元素。Filled 元素表示在某些字段项赋值后,执行封装在filled 元素中的指令。以下示例使用 filled 元素完善前面的示例:VoiceXML 开发指南8请输入产品代码如上所示,如果用户输入了产品号码,则将输入的产品号码 post 到后台服务器,取得信息后向用户播放产品信息。关于 submit 元素的说明,参见 3.5 节。Filled 元素的属性包括:元素 说明namelist 该属性包含 filled 元素等待被赋予一个值的所有字段变量。它的默认值是父窗体中的所有字段变量。mo
25、de 该属性可以是 all 或 any。如果是 any,则当 filled 元素的 namelist 属性中的任何变量被赋值时,filled 元素中的指令均被执行;如果是 all,则当 filled 元素的 namelist 属性中的所有变量被赋值后,filled 元素中的指令才被执行。下面的示例说明了 mode 为 all 的应用示例:请输入用户代码请输入用户密码如上所示,只有在用户输入了用户名和密码后,进入后台的验证程序。2.4. 条件语句VoiceXML 的条件语句采用、和元素,其中和元素总是封装在一个元素中。If 元素可以包含多个 elseif 元素,但只能包含一个 else 元素。V
26、oiceXML 开发指南9元素的示例程序如下,该程序示意了产品折扣处理:请输入购买数量如上所示,用户输入购买的产品数量后,在元素中判断,如果数量超过 100 则单价为60,如果数量大于 10 小于 100 则单价为 80,如果数量小于 10,则单价为 100。这里需要注意的是,由于是 XML 的保留字符,所以大于、小于符号都需要使用转义符。转义符表如下:保留字符 转义符 保留字符 转移符大于符号 “ 引号 2.5. goto 语句goto 元素用于从一个对话框浏览到另一个对话框,也可以从一个窗体项转到另一个窗体项。Goto 元素的示例如下:欢迎访问声软科技查询产品信息请按 1,了解公司信息请按
27、 2,转话务员请按 0VoiceXML 开发指南10如上所示,平台在播放了欢迎词后,转到查询菜单,提示用户输入菜单选择。Goto 元素的常用属性包括:元素 说明Next Next 属性用于从一个对话框转移到另一个对话框。它用于设定要访问的下一个对话框。如果访问的对话框在另一个文件中,则必须采用#。如果没有提供对话框名称,则执行 VoiceXML 文件的第一个对话框。Expr Expr 属性的作用与 next 相似,差别在与 expr 是一个表达式,其计算结果是一个 URL。nextitem 当 goto 元素从窗体的一个项目导航到另一个项目,必须使用nextitem。Nextitem 语法上与
28、 next 相似,差别在于 nextitem 的名字不带前缀符号。Expritem Expritem 属性的作用与 nextitem 相似,差别在与 expritem 是一个表达式,其计算结果是一个 URL。注意,对于每个 goto 元素来说, next、expr、nextitem、expritem 属性中只能有一个属性具有相应的值。3. VoiceXML 高级编程3.1. 事件在 menu 元素中已经接触过事件。事件即可以是预先定义的,也可以是由应用程序定义。事件可以是正常的,如用户请求帮助,也可以是出错事件,如用户没有输入等。在 VoiceXML 的事件模式中,事件即可以由平台产生,也可以
29、由应用程序产生。这些事件可以由应用程序获取和处理,也可以由平台获取和处理。平台预定义的事件如下表所示:事件 说明Cancel 用户要求取消当前输出Telephone.disconnect.hangup用户已经结束呼叫Exit 用户要求退出Help 用户要求帮助Noinput 平台希望用户输入,但用户在超时发生前一直没有输入Nomatch 平台检测到用户输入,但和任何有效的语法均不符Error.badfetch 请求访问资源失败Error.sematic 执行文档遇到运行时错误Error.noauthorization 用户要求对平台执行一项他没有被授权运行的操作Error.unsupporte
30、d.format 用户要求访问的资源所用的格式平台不支持VoiceXML 开发指南11Error.unsupported.element 平台遇到一个它不支持的有效元素。应用程序获取和处理事件采用元素,该元素包含处理平台发出的和应用程序发出的事件的处理方法。Catch 元素的示例如下:您一直没有输入,请重新输入!如上所示,一旦在平台期望用户输入而用户在超时前一直没有输入时,平台向用户提示“您一直没有输入,请重新输入!” 。Catch 元素的属性包括:元素 说明Event Event 属性指明获取的一个或多个事件名称。Event 可以是一个特定的事件,也可以是一个事件类别,如 event=”er
31、ror”Count Count 指发生事件的次数。Count 的默认值是 1。Cond 如果 cond 为 true,则对事件进行处理,如果 cond 为 false 则不处理。以下是 count 属性的应用示例:对不起,您的输入错误,请重新输入!对不起,您的输入再次错误,请按 1 查询产品信息,按 2 了解公司信息应用程序可以利用 count 属性,在用户反复错误的情况下,给出进一步具体的提示信息,以提供更友好的用户界面。另外,对应最常用的 error、noinput、nomatch 和 help 事件, VoiceXML 语言提供的、 和元素,其效果等价于 。3.2. 录音record 元
32、素用于录制用户的语音输入。录制的声音文件可以通过 record 元素的 name 属性中声明的变量来加以引用。Record 元素的应用示例如下所示:VoiceXML 开发指南12请在听得滴声后留言您的留言是如上所示,平台在执行到这段程序时向用户提示“请在听得滴声后留言” ,并播放提示音,用户开始留言。用户留言完毕后,平台向用户确认“您的留言是” ,并播放用户的留言内容。Record的一些属性指明在录制用户留言前播放提示音,最长留言时间是 60 秒,如果用户 2 秒没有声音或者用户按了任何按键则认为留言结束。Record 元素的属性包括:元素 说明Name Name 是引用用户录制声音文件时使用
33、的变量名称。如果访问 record 时,name属性的变量值不是 undefined,则 record 元素将不执行。Expr Name 变量的初始值。Cond 确定访问 record 元素时是否执行,如果是 true 执行,false 则不执行。缺省值是 true。Beep 如果 beep 为 true,则平台在准备接收用户录音前播放提示音,beep 的缺省值是 false。Maxtime 该值指定平台允许用户录音的最长时间。Finalsilence 该值指定平台允许的静默时间。Dmfterm 如果 dtmfterm 为 true,则用户按下任何 dtmf 键结束录音。按键产生的声音将不是录
34、音的部分。Type 录制的声音文件的格式。该格式必须是平台支持的格式,如果不指定,则采用平台的默认格式。Record 元素具有以下影子变量:- name$.duration:以毫秒为单位的录音长度;- name$.size:以字节为单位的文件大小;- name$.termchar:为结束录音而输入的 DTMF 键值,可以是 null。3.3. 呼叫转移呼叫转移采用 transfer 元素,使得应用程序可以在用户和另一方之间启动一次电话呼叫。Transfer 元素的示例如下:您的电话正在被转接到话务员,请稍候对不起,话务员无法接听您的电话,请稍后再试。谢谢,再见!VoiceXML 开发指南13如
35、上所示,平台执行到该程序时,向用户提示“您的电话正在被转接到话务员,请稍候” ,然后向 123456 转移电话,如果 123456 无法接听,则向用户提示“对不起,话务员无法接听您的电话,请稍后再试。谢谢,再见!” ,之后挂机退出。Transfer 元素的属性包括:元素 说明Name Transfer 的变量名称。如果该变量是 undefined,则 transfer 元素被执行,否则不执行 transfer 元素。当 transfer 失败后,该变量为以下值之一:- busy:接收到忙音- noanser:在规定的 timeout 内没有收到回答- network_busy:电话网忙,无法接
36、通电话- near_end_disconnect:用户已挂断电话- far_end_disconnect:呼叫方已挂断电话- network_disconnet:呼叫被电话网切断Expr Name 属性变量的初始值Cond Cond 为 true 则执行 transfer 元素,为 false 则不执行Dest 转接的电话号码Destexpr 是一个表达式,其计算值作为转接的电话号码Bridge 用于确定当电话转接后,转接呼叫结束后是否返回应用程序。Transfer 元素有一个影子变量 name$.duration,表示以毫秒为单位的成功电话呼叫的时间长度。3.4. object 元素使用 o
37、bject 元素,VoiceXML 开发人员可以访问不是 VoiceXML 提供的特定平台的功能。由于有些对象是平台所特有的,因此使用一个对象会导致某个应用程序与特定的平台相关联。如果平台不知道被引用的对象,则产生一个 error.unsupported.object 事件。Object 元素的示例如下:如上所示,xml.windows.text2tiff 就是 VoiceServer 平台特有的提供将文本保存为传真文件的object 元素。Object 元素的主要属性包括:元素 说明Name Name 是引用返回的对象时使用的变量名称。当访问一个 object 元素时,如果name 的值不是
38、 undefined,则不执行 object 元素Expr Expr 是 name 属性中声明对象的初始值Cond Cond 是布尔值,用于确定 object 元素是否被执行Classid Classid 是对象所在设备的 url,用于唯一标识一个对象类别VoiceXML 开发指南14Codebase Classbase 是确定 classid 等属性中所有相对 url 时使用的基本 urlCodetype 是对象的内容类型一般的,需要向 object 传递参数,传递参数使用 param 元素。Param 元素的属性包括:元素 说明Name Name 是参数的名称Expr Expr 是参数值的
39、表达式Value 参数值Valuetype 可以是 data 或 ref,默认值是 data。说明传递的值是值类型还是引用类型Type 如果 valuetype 是 ref,则 type 说明其具体的 mime 类型3.5. submit 元素submit 元素用于从一个 VoiceXML 文档转到服务器端的脚本文件,如 Perl、ASP 或 ASP.net 等。Submit 的示例如下所示:请输入产品代码如上所示,如果用户输入产品号码“1234” ,submit 将发出http:/server/get.aspx?productCode=1234 的请求。get.aspx 中对此 produc
40、tID 作处理,并返回下一页vxml 文档。submit 元素的主要属性包括:元素 说明Next Next 是下一个要执行的脚本文件 url。url 可以是当前文档的绝对地址,也可以是以当前文档的相对地址。如果 next 设置了一个值,则 expr 就不能设置其他值Expr Expr 的作用同 next,差别在于 expr 是一个表达式,其计算结果是一个 url。如果设置了 expr 就不能设置 next 属性Method 指明 http 请求的方法是 get 还是 post,默认是 getNamelist Namelist 是要提交到脚本文件的变量列表,如果 namelist 省略了,则作用
41、域内的所有字段项均被提交Enctype Enctype 是提交文档的 mime 类型,默认值是 application/x-www-form-urlencoded 类型VoiceXML 开发指南153.6. ECMAScript使用 scipt 元素,ECMAScript 代码既可以嵌入 VoiceXML 文档,也可以从外部文件调用。Script 元素的示例如下:该语句表示包括 common.js 中的所有 javascript 变量定义和函数定义,在 common.js 中定义过的变量和函数可以在任何 expr 属性中使用。如果在 common.js 中有如下定义:function getV
42、oiceFile(index)if (index = 0 & index 该 prompt 元素播放 5.vox 的声音文件。VoiceXML 中可以声明变量, VoiceXML 变量相当于 ECMAScript 变量,两者间只有很小的差别。VoiceXML 的变量不允许以下划线开头。 VoiceXML 定义和使用变量的示例如下:总价格是 元VoiceXML 开发指南16该 VoiceXML 程序声明两个变量,数量为 2,单价为 24.95。然后将单价乘数量赋值给总价格,最后用 TTS 将价格向用户提示。3.7. 收发传真收发传真是 VoiceServer 对 VoiceXML 的扩充功能,而
43、且传真功能是在 VoiceXML 解释器引擎的基础上实现的,所以并没有使用 object 元素实现,而是借用了 audio 和 record 元素,只是将相关属性指定为特定的值。平台接收传真的示例如下:听到滴声后按开始键发送传真 接收传真采用 record 元素,只是 record 元素的 type 属性必须设置为”fax/tif”,表明是接收传真而不是普通的录制语音。接收到的传真内容通过 aFax 变量引用。平台发送传真的示例如下:平台发送传真采用 audio 元素,只是 audio 元素的 src 属性必须设置为 tif 为后缀名,表明是发VoiceXML 开发指南17送传真而不是普通的播放语音文件。另外,由于收发传真后一般不能进行语音提示并继续其他操作,所以通常平台均主动挂机并退出 VoiceXML 程序。如示例中, 表示应用程序主动挂机, 表示退出该VoiceXML 应用程序。4. 参考文献1 http:/www.w3.org/TR/2000/NOTE-voicexml-20000505/,VoiceXML 规范 1.0,www.w3.org2 VoiceServer 应用开发指南,声软科技3 VoiceXML 语音应用程序开发,机械工业出版社