VoiceXML开发指南Word下载.docx
《VoiceXML开发指南Word下载.docx》由会员分享,可在线阅读,更多相关《VoiceXML开发指南Word下载.docx(28页珍藏版)》请在冰点文库上搜索。
1.3.2.应用程序的输出
文本语音转换技术(TTS)能够将输出的文本转换成“语音”(实际上是一种数字音频格式)。
这使得应用程序能够拥有灵活的输出方式,将开发人员没有预料到的事情告诉用户。
TTS的功能与ASR基本上相反,它将文字转变为音素,这些音素具有相对应的数字声音。
另一种语音输出是用某种标准格式存储的录制的声音文件。
这些声音文件格式包括WAVE和脉冲编码调制(PCM)。
这些声音文件在应用程序启动以前已经被编写和录制好了。
所有录制的语音输出都必须事先确定。
因此,TTS是一种更灵活的输出方式。
尽管TTS技术在过去的几年里有了显著的改进,但是商用TTS语音输出的声音往往仍然比较死板。
VoiceXML还为电话网络本身提供了转移功能。
它使得程序能够将用户从当前运行的VoiceXML应用程序转到另一个电话号码。
2.VoiceXML基本编程
2.1.程序结构
2.1.1.Welcome示例程序
<
?
xmlversion=”1.0”>
!
--Welcome示例程序-->
vxmlversion=”1.0”>
<
formid=”welcome”>
block>
欢迎访问声软科技<
/block>
/form>
和介绍所有的编程语言一样,Welcome示例程序给出了一个最简单的示例。
当该程序被执行时,VoiceServer将通过TTS引擎来说出“欢迎访问声软科技”。
下面详细说明该程序代码涉及到的元素。
2.1.2.基本元素
元素
说明
xml>
代码行向XML解析器或编辑器说明该文档是XML1.0语法编写的。
所有VoiceXML1.0文档都是采用XML1.0语法编写的。
虽然元素xml对应VoiceXML解释程序来说并不是必不可少的元素,但是最好使用该元素,这样就可以检查VoiceXML文档的格式是否正确,是否符合文档类型定义(DTD)。
注释
是注释行,VoiceXML程序的注释使用标准的XML语法编写。
所有VoiceXML注释一律采用<
--commonttext-->
格式。
vxml>
所有的VoiceXML命令必须封装在<
…<
/vxml>
元素中。
其中属性version告诉解释程序在执行程序文件时,使用哪个版本的VoiceXML文档类型定义(DTD)。
目前,VoiceServer支持VoiceXML1.0,具体文档类型定义参见.org/voicexml1-0.dtd。
本示例程序中没有使用vxml元素的另一个属性applicaiton,该属性指明VoiceXML文档的根文档的URL。
当你上载一个VoiceXML文档时,它的根文档也同时上载;
一般地,根文档中可以定义全局使用的变量、过程等等。
form>
是VoiceXML的对话框,用于描述VoiceXML应用程序对用户所说的各种提示,定义和收集用户作出的响应,并且描述程序控制的流程。
对话框分为两种:
一种是菜单,一种是窗体。
元素负责执行对话框定义中描述的所有操作,封装与用户输入输出相关的命令,在文档中导航或导航到其他文档中,也可以给变量赋值,进行录音和呼叫转移。
元素是窗体的项目,用于封装一组语句。
这些语句可以用于对变量的值进行输出、浏览、声明和赋值。
2.2.程序输出
在VoiceXML中,有两种方法可以用来将信息输出给用户。
第一种方法是通过文本语音转换(TTS)工具进行输出,另一种方法是通过播放预先录制的声音文件。
2.2.1.TTS输出
TTS输出比较简单,如2.1.1的例子
prompt元素是封装TTS输出和audio元素使用的另一种元素。
如上例,TTS信息不用<
prompt>
封装时,相当于使用了<
元素的默认值。
在以下两种情况下,必须使用prompt元素:
首先,如果输出包含TTS语音标记元素,就必须使用prompt元素;
语音标记元素是用于控制向用户说出TTS信息时的各项特性,如速度、音量和发音等。
其次,当输出信息需要bargein、cond、count或timeout等属性时,则必须使用prompt元素。
/prompt>
需要说明的是,VoiceServer系统对TTS的转换结果作了缓存处理,同样的内容直接从缓存中获取语音文件,而不是通过TTS引擎实时转换,大大提高了TTS的效率。
2.2.2.声音文件输出
audio>
元素用于设定向用户播放事先录制好的声音文件。
不同的VoiceXML语音平台支持不同的声音文件格式,一般支持的文件格式为.wav文件。
VoiceServer系统支持的文件格式参见其配置说明文档。
声音文件输出的示例如下:
audiosrc="
welcome.wav"
>
/audio>
audio元素的属性包括:
src
Src属性是向用户播放声音文件的url,注意可以是http:
//hostname/path/voicefile的形式,从指定的服务器远程得到语音文件。
caching
Caching为true的话,则如果有一个声音文件的高速缓存拷贝且没有过期,则使用该拷贝。
目前,VoiceServer系统尚不支持该属性。
fetchtimeout
该属性用于设定提供声音文件的超时,如果平台在指定的超时时间内没有取得声音文件,则平台将发出一个出错事件。
fetchtint
该属性用于确定平台是否应该在实际需要前提前提取声音文件。
2.2.3.声音文件和TTS混合输出
VoiceServer系统支持声音文件和TTS输出的混合使用。
混合输出的示例如下:
<
>
<
王国强先生<
。
值得注意的是,声音文件的格式和TTS输出的格式必须一致;
可以参考系统配置手册的说明,配置声音文件和TTS输出的格式。
另一种混合输出的方式是,如果在声音文件没有找到或者超时的情况下,则播放TTS的输出。
示例如下:
欢迎访问声软科技
如上例所示,在平台无法得到welcome.wav声音文件时,就将通过TTS引擎将”欢迎访问声软科技”实时转换成声音文件向用户播放。
该功能特别适合在系统升级时,由于某种原因语音文件不全的情况下,用户也能得到正确的提示信息。
由于VoiceServer系统对TTS结果的缓存处理,TTS可以获得与预先录制语音文件几乎相同的性能。
2.3.程序输入
输入信息可以用两种方法来接收,一种是语音,一种是双音多频(DTMF)。
输入信息既可以直接识别,也可以录音。
直接识别的输入信息是通过语法来表述的,该语法设定了一组声音,用户可以发出这一组声音,也可以由用户按下DTMF按钮,以便要求进行某项操作,或将信息提供给应用程序。
2.3.1.菜单输入
menu>
元素和<
元素一样,是VoiceXML中的两种对话框之一。
根据定义,VoiceXML对话框用于描述应用程序向用户说出的提示信息,也用于定义和接收用户的应答,并且用于描述程序控制的流程。
菜单包含的prompt元素用于将应用程序的输出信息传递给用户,它也包含用于建立语法的choice元素,以便定义和接收用户的输入信息,此外它还包含描述程序控制的choice元素和事件。
菜单的示例如下:
menuid="
QueryMenu"
QueryMenu.wav"
查询产品信息请按1,了解公司信息请按2,转话务员请按0
choicedtmf="
1"
next="
#Product"
/>
2"
#Company"
0"
#Transfer"
/menu>
如上所示,平台在运行到该菜单时,向用户提示“查询产品信息请按1,了解公司信息请按2,转话务员请按0”;
QueryMenu.wav的声音文件应事先录制好该语句,如果该文件不存在,则使用TTS输出(参见2.2.3混合输出)。
dtmf="
、dtmf="
和dtmf="
定义了用户可以按的键值,next定义了用户按了该键后,执行的下一个<
或<
,其中#Product、#Company和#Transfer表示<
的名称,即<
的id值。
Menu元素的属性包括:
id
Id用于标识菜单。
当使用goto、submit、next等元素从另一个对话框导航到该菜单时,可以使用该id值。
scope
scope指在菜单中定义的choice元素语法的作用域。
如果scope的值是它的默认值dialog,则菜单的语法只在对话框中有效。
如果scope的值是document,则菜单的语法将在整个VoiceXML文档中有效。
dtmf
Dtmf值可以是true或false。
如果是true,则封装在menu元素中的choice元素如果没有定义dtmf属性,那么将字段赋予一个dtmf值。
Choice元素用于菜单语法。
如果一个选项的语法被识别,那么该choice元素的next、event或expr等属性将用于确定下一步将执行什么程序。
只有next、expr和event之一能够拥有用于每个choice元素的值。
Choice元素的常用属性包括:
Dtmf指定与该选项相关的DTMF按键值。
next
Next用于指定执行的下一个对话框。
如果被访问的对话框位于另一个文件中,对话框的名字必须使用以下格式:
下一个文档的URL>
#<
对话框名称>
如果访问的对话框位于同一个文档,则可以简化为#<
event
Event用于设定choice元素语法被识别后产生的事件。
expr
Expr的作用与next相同,区别在于expr是一个表达式,它的计算结果将作为下一个对话框的名字。
下面再给出一个使用<
choice>
元素的event属性的示例:
event="
evtCompany"
catchevent="
evtCompany"
Company.wav"
gotonext="
#QueryMenu"
/catch>
和前面的示例一样,平台在运行到该菜单时,向用户提示“查询产品信息请按1,了解公司信息请按2,转话务员请按0”,如何用户按了“2”,平台将接收到一个名为evtCompany的事件,<
catchevent=”evtCompany”>
元素中定义了该事件处理程序,即播放一段公司介绍Company.wav,播放完毕后再转到菜单QueryMenu。
关于<
catch>
元素的具体参见3.1的说明。
2.3.2.字段输入
字段输入采用field元素,该元素用于接收用户的自动语音识别信息或DTMF信息。
field>
元素是接收用户输入信息最常用的元素。
元素的示例如下:
formid="
QueryProductCode"
fieldname="
productCode"
type="
digits"
<
InputProductCode.wav"
请输入产品代码
/field>
……
如上所示,平台在执行到QueryProductCode对话框时,会向用户提示“请输入产品代码”,之后用户就可以键入产品代码。
Field元素的属性包括:
name
Name用于存放来自用户输入信息的变量。
Expr声明变量的初始值。
如果expr没有指定,则该变量的初始值就是undefined。
如果该变量的值是undefined之外的值,则封装在field元素中的指令将不予执行。
cond
Cond是一个表达式,它的计算结果可以是true或false。
如果cond的计算值是true,则封装在field中的指令将被执行,如果cond的计算值是false,则封装在field中的指令将不被执行。
type
Type指明了期望的用户输入类型。
系统内置的类型包括:
-Boolean:
缺省”1”为true,“2”为false
-Date:
年月日组成的有效日期,格式为yyyymmdd。
-Digits:
一串由0-9组成的串。
-Currency:
货币数量,格式为dddddd*dd,*表示小数点。
-Number:
:
数字,输入格式同currency。
-Phone:
有数字构成的电话号码,*表示分机。
例如:
4*123表示电话号码4转分机123。
-Time:
时间,格式是hhmm。
Field元素还有以下影子(shadow)变量:
-Name$.confidence:
0.0-1.0间的数字,表示返回结果的可信度,0.0最低,1.0最高。
该变量主要用于ASR识别结果;
-Name$.utterance:
是被识别时的确切词组,同样是用于ASR识别结果的;
-Name$.imputmode:
表明输入方式是ASR还是DTMF,用于当ASR和DTMF同时可用时,说明该次输入是用什么方式进行的。
当用户输入后,一般地执行<
filled>
元素。
Filled元素表示在某些字段项赋值后,执行封装在filled元素中的指令。
以下示例使用filled元素完善前面的示例:
submitexpr=http:
//server/get.aspx'
namelist="
productCode"
/filled>
如上所示,如果用户输入了产品号码,则将输入的产品号码post到后台服务器,取得信息后向用户播放产品信息。
关于submit元素的说明,参见3.5节。
Filled元素的属性包括:
namelist
该属性包含filled元素等待被赋予一个值的所有字段变量。
它的默认值是父窗体中的所有字段变量。
mode
该属性可以是all或any。
如果是any,则当filled元素的namelist属性中的任何变量被赋值时,filled元素中的指令均被执行;
如果是all,则当filled元素的namelist属性中的所有变量被赋值后,filled元素中的指令才被执行。
下面的示例说明了mode为all的应用示例:
Login"
name"
InputLoginName.wav"
请输入用户代码
password"
InputPassword.wav"
请输入用户密码
fillednamelist=”namepassword”mode=”all”>
//server/login.aspx'
namepassword"
如上所示,只有在用户输入了用户名和密码后,进入后台的验证程序。
2.4.条件语句
VoiceXML的条件语句采用<
if>
、<
elseif>
和<
else>
元素,其中<
元素总是封装在一个<
If元素可以包含多个elseif元素,但只能包含一个else元素。
元素的示例程序如下,该程序示意了产品折扣处理:
formid=“UnitPrice”>
Qty"
InputQuantity.wav"
请输入购买数量
ifcond=”Qty&
gt;
100”>
assignname=”unitPrice”value=”60”/>
elseifcond=“Qty&
10”/>
assignname=”unitPrice”value=”80”/>
else/>
assignname=”unitPrice”value=”100”/>
/if>
如上所示,用户输入购买的产品数量后,在<
元素中判断,如果数量超过100则单价为60,如果数量大于10小于100则单价为80,如果数量小于10,则单价为100。
这里需要注意的是,由于<
、>
是XML的保留字符,所以大于、小于符号都需要使用转义符。
转义符表如下:
保留字符
转义符
转移符
小于符号
&
lt;
‘单引号
apos;
大于符号
与符号
amp;
“引号
quot;
2.5.goto语句
goto元素用于从一个对话框浏览到另一个对话框,也可以从一个窗体项转到另一个窗体项。
Goto元素的示例如下:
欢迎访问声软科技
gotonext=“#QueryMenu”>
/pr