VXML问题总结
https://blog.csdn.net/scropio0zry/article/details/81362535
VXML源地址:
http://www.cppblog.com/microli/category/2625.html
概述
VoiceXML是用来创建音频对话的,主要包括语音合成、数字化音频、语音识别、DTMF按键输入识别、录音、通话、混合主动式会话。它的主要作用是把基于网络的开发和信息这两者的优势引入语音应答系统。
例子:
<?xml version="1.0" ?>
<vxml version="2.0">
<form>
<block>Hello World!</block>
</form>
</vxml>
最上层的元素是<vxml>,它主要是作为dialog的容器。在VoiceXML里有两种dialog:form和menu 。form用来输出提示信息和收集输入信息,menu提供一些choice,以决定下一步要做什么。这个例子里有一个form,它包含了一个block,这个block把“Hello World!”合成语音,并输出给用户。由于这个form没有指定下一个dialog,因此,这次会话结束。
概念
一个VoiceXML文档(或一系列相关的文档叫做一个应用(application))构成了一个有限的会话状态。用户一次只能在一个会话状态或dialog中。每个dialog都会确定要跳转的下一个dialog。跳转通过URI指定,URI规定了下一个要用到的文档和dialog。如果URI没有指向一个文档,则认为它指向当前文档。如果URI没有指向一个dialog,则认为它指向那个文档的第一个dialog。如果一个dialog没有指定它的下一个dialog,或者它有一个明确地退出会话的元素,则执行中断。
一、Dialogs and Subdialogs
VoiceXML有两种dialog:form和menu。Form 定义了一个收集用户输入,并给相应的field变量赋值的交互。每个field可以指定一个语法,这个语法规定了field允许的输入。如果有form级的语法存在,一个utterance可以填充几个field。Menu给用户提供了一些可选的选项,并根据用户的选择跳转到另外一个dialog。
Subdialog就像函数调用一样,它提供了一种机制来调用一个新的交互,并返回到调用它的form。变量实例、语法和状态信息都被保存起来,在返回到调用的文档后仍然可用。例如,subdialog可以用在创建一个由数据库查询得到的确定序列;或者创建在单个应用的文档中共享的组件;或者在多个应用中可重用的dialog库。
Subdialog的上下文跳转(1)
Subdialog的上下文跳转(2)
二、会话
会话始于用户开始和VoiceXML解释器环境交互的时候,随着用户或文档或解释器环境请求结束而结束,包括了加载和执行文档的过程。
三、应用
应用(application)是由共享同一应用根文档(application rootdocument)的一系列文档组成的。无论如何,只要用户在跟应用里的文档交互,它的根文档都会被加载。当用户在同一应用的其他文档中跳转时,应用根文档一直都被加载,直到用户跳转到一个不在这个应用里的文档。当应用根文档被加载的时候,它的变量就像这个应用的变量一样,对这个应用里所有的文档都是可用的,它的语法在这个应用的生命期内都是激活的。
四、语法
每个dialog都有一个或多个语音和(或)DTMF语法。在机器主导的应用中,每个dialog的语法只有当用户在那个dialog中的时候才激活。而在混合主动式(mixed initiative)的应用中,相关的几个dialog的语法同时都是激活的(也就是正在监听),即使用户在同一个文档的另外一个dialog,或者在同一个应用的另一个加载的文档。混合主动式是指,用户和机器交替地决定下一步要做的。在这种情况下,如果用户说的话匹配了另一个dialog中激活的语法,执行平台会跳转到那个dialog,用户刚才所说的话就像是它在那个dialog中说的一样。混合主动式增强了语音应用程序的灵活性和性能。
五、事件
VoiceXML提供了填充form的机制来处理“正常”的用户输入。另外,VoiceXML定义了一种机制来处理那些form机制没有包含进去的事件。
平台能在多种环境下抛出事件,例如当用户没有响应的时候,或者没有清楚地响应的时候,或者要求帮助的时候等。如果发现VoiceXML文档有语义错误的时候,也会抛出事件。事件由catch元素或他们的简写元素捕捉。可能出现事件的元素都可以指定catch元素。catch也可以在封装的元素里像拷贝一样地继承。这样,可在某一级别指定对相同事件的处理,这些处理对更低级别的元素同样有效。
六、链接
link支持混合主动式。它可以指定一个语法,无论何时,只要用户在这个link的作用域内,这个语法都是激活的。如果用户的输入匹配了这个link的语法,控制就跳转到该link指定的URI。
VXML元素
元素 | 功能 | 支持描述 |
<assign> | 给一个变量赋值 |
|
<audio> | 在一个提示中放音频片段 |
|
<block> | 可执行代码,不是交互代码 |
|
<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 | TYPE属性仅支持iAVP定义的Built-in语法 |
<filled> | field被填充完毕后要执行的动作 |
|
<goto> | 到同一个或另外一个文档的其它dialog |
|
<grammar> | 定义一个语音识别的语法 |
|
<help> | 捕捉一个help事件 |
|
<if> | 简单的条件逻辑 |
|
<initial> | 在form的入口定义初始化逻辑 | 不支持 |
<link> | 为link中的所有dialog定义一个转移 | 不支持 |
<menu> | 定义一个选择菜单 | 不支持 |
<nomatch> | 捕捉一个no match事件 |
|
<noinput> | 捕捉一个no input事件 |
|
<option> | 为<field>域指定一个option | 不支持 |
<object> | 在一个特定的范围内作用(例如、讲话对象) | 不支持 |
<param> | <subdialog>和<object>中的参数 |
|
<prompt> | 向用户输出音频文件语音和TTS语音 |
|
<property> | 控制实现平台参数的设置 |
|
<pros> | 改变语音输出重音和语调模式的JSML元素 | 不支持 |
<record> | 记录一个音频采样 | 不支持属性modal |
<reprompt> | 当再次访问一个field,请求播放提示音 |
|
<return> | 从subdialog中返回 |
|
<sayas> | 修改怎样拼写一个词或短语的JSML元素 | 不支持,TTS中的CSSXML支持 |
<script> | 指定一块ECMAscript客户端的脚本逻辑 |
|
<subdialog> | 调用另一个dialog,作为当前dialog的subdialog |
|
<submit> | 将值提交给文档服务器 |
|
<throw> | 抛出一个事件 |
|
<transfer> | 把呼叫转移到另外一个目的地或视频分享 |
|
<value> | 在提示中插入变量值 |
|
<var> | 声明变量 |
|
<vxml> | 每个VXML文件的最高层元素 |
|
<sendfax> | 发送传真 | iAVP扩展元素 |
<receivefax> | 接收传真 | iAVP扩展元素 |
<log> | 记录节目编码和系统日志 | iAVP扩展元素 |
<media> | 向用户输出多媒体 | iAVP扩展元素(VXML3.1支持) |
<par> | 同步播放媒体序列 | iAVP扩展元素(VXML3.1支持) |
<seq> | 顺序播放媒体序列 | iAVP扩展元素(VXML3.1支持) |