1、1VoiceXML开发知识 iAvp平台系列培训通信增值事业部 张磊 Monday,December 12,20222对象和目标 课程对象业务流程开发、测试人员VUI设计人员平台开发、测试人员 课程目标了解VoiceXML基本概念和标记使用VoiceXML开发流程3相关课程 iAvp基础知识培训 VUI基础4主要内容 VoiceXML概述 VoiceXML基本概念 VoiceXML中的变量和基本标记 VoiceXML中的输入输出标记 VoiceXML高级标记 VoiceXML与服务器端应用开发 一个完整的VoiceXML应用5概述什么是VoiceXML 全称:Voice eXtensible
2、Markup Language VoiceXML 是一种基于 XML 规范的标准,是XML子集。它允许通过电话和语音访问 Web上的信息和服务。可以用来开发基于语音的电话应用程序。6概述VoiceXML历史AT&T Phone Marked Language(PML)Motorola VoxMLIBM SpeechMLHP TalkMLPIPEBEACH VoiceHTML1998,W3C 1998,W3C 召开召开 Voice browsersVoice browsers会议会议VoiceXML forumVoiceXML forum2000,VoiceXML 1.0 2000,VoiceX
3、ML 1.0 2003 VoiceXML 2.02003 VoiceXML 2.02004 VoiceXML 2.12004 VoiceXML 2.17概述VoiceXML的目标 为应用开发者屏蔽底层的、平台相关的细节 分离交互代码和服务逻辑 提高应用在不同平台的可移植性 既能提供对简单应用快捷开发,也提供对复杂应用语言级的支持 单文档表示多次交互,减少了Client/Server交互负荷8概述 VoiceXML与传统语音开发的区别Platf.Voice MailAppl.Platf.VividRingAppl.VoiceXMLInterface9概述 VoiceXML与传统语音开发的区别Pl
4、atf.Voice MailAppl.Platf.VividRingAppl.VoiceXMLInterface10概述 VoiceXML与传统语音开发的区别Platf.Voice MailAppl.Platf.VividRingAppl.VoiceXMLInterface11概述VoiceXML与HTML开发比较 Enter your Id:Your ID,please.VoiceXML语音应用开发与HTML页面开发具有很高的相似度12概述我们的VoiceXML 基于VoiceXML1.0规范 实现了VoiceXML1.0中的大部分标记和属性 扩展了一些1.0中没有的标记,如传真等 识别支持
5、built-in、just in time和dgdb13概述iAvp支持的标记(1)14概述iAvp支持的标记(2)15概述iAvp支持的标记(3)16概述iAvp支持的标记(4)17概述iAvp支持的标记(5)18主要内容 VoiceXML概述 VoiceXML基本概念 VoiceXML中的变量和基本标记 VoiceXML中的输入输出标记 VoiceXML高级标记 VoiceXML与服务器端应用开发 一个完整的VoiceXML应用19基本概念Dialog 对话(Dialog/Dialog States)VoiceXML 应用程序的用户总是处于一种对话状态或对话中。每个对话都跟着另一个对话,如
6、果没有指定下一个对话,就终止VoiceXML应用程序的执行。有两种对话:表单(Form)和菜单(Menu)。20基本概念Document 文档(Document)一个VoiceXML document由多个dialog组成。单个document的执行缺省是从第一个dialog开始执行。也可以指定从某个对话执行。在一个application中有多个document时,应选一个document作为root document,并且在其他document的标记里引用它,并且它的变量和语法在整个应用中有效。在含多个document的application中,最多只能有两个document可以同时被加载,
7、一个是正在执行的document,另一个是root document。21基本概念Root Document Shall we say?Shall we say?Leaf.vxml将app_root.vxml作为当前文档的根文档 hello,world.hello,world.app-root.vxml22基本概念Application Application(应用)应用(application)是由共享同一应用根文档(application root document)的一系列文档组成的。在一个application内,root document总是处于加载状态,此时root documen
8、t的变量和语法在整个application都是保持激活状态。23基本概念Application(续)24基本概念Session 会话会话(Session)(Session)会话开始:呼入接通会话开始:呼入接通 呼出接通呼出接通会话过程:交互会话过程:交互 文档获取文档获取会话结束:用户挂机会话结束:用户挂机 上下文挂机上下文挂机25基本概念SubDialog 子对话(SubDialog)类似函数调用,它提供了调用一个新的交互的机制,并返回到原来的form。返回时保存内部数据、所用语法以及状态信息,以供在调用该Subdialog的document中使用。26基本概念基本概念文档之间的跳转文档之间
9、的跳转(1)(1)保留根文档上下文的跳转RRRRL1L2234127基本概念文档之间的跳转(2)重新初始化上下文的跳转R1R2R3R1L1234128基本概念文档之间的跳转(3)SubDailog的上下文跳转(1)Main dialog execute contextMain dialog execute contextD1D1D2D2D3D3SubDialog executeSubDialog execute context contextSD1SD1SD2SD2Subdialog src=“SD1.vxml”29SubDialog execute context 2基本概念文档之间的跳转(
10、4)SubDailog的上下文跳转(2)Main dialog execute contextD1D2D3SubDialog execute context 1SD1SD2Subdialog src=“SD1.vxml”Subdialog src=“SD2.vxml”30基本概念Event 事件(Event)事件可以是预先定义的或者是应用程序定义。对于各种的情况,由平台抛出事件,如:用户没用响应,请求帮助。当VoiceXML文档有语义错误时,解释器也会抛出事件()。事件由或由它的快捷形式捕捉;一个事件能产生的每个标记都可指定catch标记。在任何层次都可以指定共有事件的处理方式,并且这适用于所
11、有较低层。在VoiceXML的事件模式中,事件可以由平台或应用产生,这些事件可以由应用程序捕获和处理,也可以由平台捕获和处理。31基本概念FIA FIA(Form Interpretation Algorithm)初始化Form,重新设置状态选择要执行的Form Item并播放提示音收集用户输入,或者填充一个或多个field,或者抛出各种事件查找执行 动作 32基本概念基本概念FIA(FIA(续续)初始化选择Item获取输入处理输入结果没有Item可以继续处理Event处理Link其它Dialog33基本概念Grammar 语法(Grammar)语法指定一份准许的词汇列表,供用户从中选择,以便
12、与 VoiceXML 应用程序交互每一个dialog都有一个或多个语法(识别、按键),在directed dialog的应用中,每个dialog的语法只有在用户使用该dialog时,才处于激活状态语法的作用域34主要内容 VoiceXML概述 VoiceXML基本概念 VoiceXML中的变量和基本标记 VoiceXML中的输入输出标记 VoiceXML高级标记 VoiceXML与服务器端脚本开发 一个完整的VoiceXML应用35从Hello Word!开始 Hello World!VoiceXML是Xml的子集,遵从xml1.0规范指定当前文档使用VXML1.0规范定义一个对话表单定义一个
13、表单项,用于封装对应的语句输出文本,可以被TTS合成并播放36VoiceXML中的变量 变量相当于ECMAScript变量 变量不能以”_”开头 类型共有6种Undefine(未定义变更被赋予一个值之前它的默认值Null(空)只能是”null”Boolean(布尔型)只能是”true”或”false”String(字符串)用单引号封装的字符串Number(数字型)正负数Object(对象型)一组没有排序的属性。每个属性都包含一个名字、一个值和一组属性。37声明变量 变量具有name和Expr属性 通过表单项的Name属性来声明 通过标记来声明38变量的作用域SessionApplication
14、DocumentDialog(Anonymous)它是由解释器上下文来声明它是由解释器上下文来声明和赋值,只读变量。不能声和赋值,只读变量。不能声明新的明新的sessionsession变量。变量。由应用根文档的由应用根文档的标记标记的子成员的子成员声明声明当变量不带作用域并发生命名冲突时,使用限定性最明确的作用域变量高低39Session变量 Session.telephone.ani(主叫号)Session.telephone.dnis(被叫号)Session.telephone.iidigits(信息批示数字)Session.telephone.uui(用户到用户信息)Session.t
15、elephone.callid Session.telephone.stationid Session.telephone.channelid40影子变量 影子变量是与字段项相关的变量。影子变量用于返回字段项执行的结果 语法:field_item_name$.shadow_var_name 例如:recording$.termchar41标记:为变量赋值 VXML中的变量是“弱类型“,声明时不需要显示给出类型在赋值后仍然可以动态改变变量类型(不推荐)42Form标记:最重要的的Dialog Form对应于对话的状态两个属性id:对话标识,例如:scope:指示这个form对应语法的活动范围 F
16、orm ItemsInput items:field、record、transfer、object、subdialogControl items:block、initail43Menu标记另一个Dialog标记 What would you like for lunch?To choose ,press ham and cheese grits ham and shatner 44Dialog的公用属性 field、record、transfer、subdialog、block、object 和initial标记都具有以下三个属性:nameexprcond 通过操作name、expr、cond
17、来确定被封装在这些标记中的内容能否被执行45Dialog的公用属性(续)Name和Expr被定义,被封装的指令要在Clear标记被执行后才能被执行 如果没有定义Expr,Cond值为true则可以执行,false则不被执行,Cond默认为true被以上field封装的指令均不会被执行被以上field封装的指令均不会被执行被以上field封装的指令均会被执行46Block标记 Block是表单项,用于封装其它语句。属性NameExprCond47If/elseif/else标记 If/elseif/else用于条件逻辑判断。如果Cond属性的值计算为true,那么其中封装的语句将被执行,否则将不
18、予执行。This is way too much to spend.注意:,”,&在使用时需要转义和if不同elseif和else是单行标记48Param标记 Param标记用于将参数传递给子对话框或者对象。属性name参数名expr表达式值value字串值49SubDialog标记 类似于函数调用 不丢失当前上下文当subdialog调用完成后,调用者的所有本地数据、语法和状态均被还原 属性src属性是必须的 Return标记用于结束对话框执行并返回,有两个属性event和namelistEvent属性是返回后产生的一个事件Namelist属性包含了返回后给调用对话框的变量列表。50SubD
19、ailog示例 poppa oo mow mow!51Goto标记 跳转到当前form的另一个form item 跳转到当前文档的另一个dialog 跳转到另一个文档 主要属性nextitemnext52Goto标记示例1From内的跳转 preparing to go to the next form item.preparing to go to the next form item variable.this block will be skipped,and will be the last block executed by the FIA.test successful.FIAFI
20、A53Goto标记示例2Form及文档间的跳转 welcome!how many book you want?跳转到另一个Form,本Form内的变量值将丢失跳转到另一个document,本document内的变量值将丢失54Clear标记 Clear标记用于将变量的值设置为undefine 属性namelist 通过将block的expr值设置为undefine来构造出一个55Exit标记 当执行exit标记时,控制返回给执行平台。这时进行什么操作由平台决定,一般情况下将挂断电话。We are finished and will now exit.We have not exited yet
21、!56Disconnect标记 Disconnect标记用于平台切断用户的电话 调用disconnect时会抛出telephone.disconnect.hangup事件 We are finished and will now exit.We have not disconnected yet!57主要内容 VoiceXML概述 VoiceXML基本概念 VoiceXML中的变量和基本标记 VoiceXML中的输入输出标记 VoiceXML高级标记 在VoiceXML中使用客户端脚本 VoiceXML与服务器端脚本开发 一个完整的VoiceXML应用58Prompt标记 用于用于TTSTTS
22、输出输出 封装封装audioaudio标记标记 属性属性bargeinbargeincondcondcountcounttimeouttimeout (gavin mac lee odd)you guessed it.this prompt will not be executed.because the prompt is set to false.here is the very first prompt.try not to say anything.who was the actor who played captain stoobing?correct you are!59Value
23、Value标记标记 ValueValue标记用于输出变量的值和表达式计算结果。标记用于输出变量的值和表达式计算结果。属性属性exprexpr Our favorite movie star is .60Audio标记 audiosaudios标记用于设定向用户播放预先录制的标记用于设定向用户播放预先录制的声音文件。语音文件格式与平台相关,以声音文件。语音文件格式与平台相关,以WAVWAV格式居多。格式居多。属性属性srcsrc向用户播放的声音文件的向用户播放的声音文件的URLURLfetchtimeoutfetchtimeout获取语音文件超时之前的等待时获取语音文件超时之前的等待时间间 he
24、re we use the audio fetch time out attribute with the value of 10 seconds.61Field标记 field标记用来接收来自用户的自动语音识别或DTMF按键信息。属性name、expr、condtypeiavp目前只支持builtin方式收集按键今日笑话请按1,笑话连篇请按2,打榜笑话请按3 digits?length=1;max_time=2000;mask_key=06789#;按键长度为1最大超时为2秒有效按键为12345*,其它为无效按键62Filled标记 标记指定了当一个或多个标记指定了当一个或多个input i
25、teminput item被填充后要执行的操作。被填充后要执行的操作。它可以出现在两个地方:作为它可以出现在两个地方:作为标记的标记的子标记,或者作为子标记,或者作为input iteminput item的子标记。的子标记。属性属性namelistnamelistmodemode What is the starting city?What is the starting city?What is the ending city?What is the ending city?You cant fly from and to the same city.You cant fly from a
26、nd to the same city.FilledFilled标记作为标记作为formform的子项出现的例子的子项出现的例子 What is the city?Note,Novosibirsk service ends next year.Filled标记作为输入项的子项出现的例子63Grammar标记 Grammar标记用于设定可能的语音输入 不同的平台支持不同的语法格式 语法范围 iAvp支持Nuance识别语法(GSL2.0)Just In Time(需要即时编译)DTMFDynamic Grammar64Just in time语法!CDATAName1:public(dtmf-1
27、)(yi1)(dtmf-2)(er2)(dtmf-3)(san1)(dtmf-star)(dtmf-pound)65动态大语法 动态语法定义在应用中可以被动态创建和加载的识别语法 DBKey 每个DBKey相当于一个识别语法 DBItem 每个DBItem相当于一个识别条目 例如一个歌手名相当于一个例如一个歌手名相当于一个DBKeyDBKey,那他的每一首歌相当于一个,那他的每一首歌相当于一个DBItemDBItem66iAvp中的大语法实现 通过动态语法添加接口向数据库中添加DBKey和DBItem 通过动态语法编译接口编译语法 通过标记引用语法67动态大语法示例!CDATAName1:pu
28、blic :s (dtmf-1)(yi1)(dtmf-star).68NBest 应用在一次识别需要返回多个识别结果的语音应用中 使用影子变量实现application.lastresult$.length 可以得到此次识别结果的数量,iavp平台最多为5个。application.lastresult$i.confidence 识别结果的置信度application.lastresult$i.utterance 识别结果的语音数据application.lastresult$i.inputmode speech dtmfapplication.lastresult$i.interpretat
29、ion 识别结果application.lastresult$i.interpretation.Key 多个slot69语法冲突 如果用户语音输入或按键输入结果包括多个有效语法,VoiceXML按下列顺序进行选择:当前字段内的语法包含在当前From或Menu中的语法文档作用域内在当前文档内的非当前Form或Menu的语法及标记内的语法当前根文档内的语法70Throw和Catch标记 ThrowThrow标记用于产生预定义的事件和应用程标记用于产生预定义的事件和应用程序定义的事件。序定义的事件。CatchCatch将文档、对话、将文档、对话、Form ItemForm Item与事件捕获与事件捕
30、获联系起来,它包含了可执行的内容。联系起来,它包含了可执行的内容。we caught the thrown event.getting ready to throw an event to be caught.throwcatch71Error、Help、Noinput、Nomatch标记、和和标标记都是记都是标记特定形式的标记特定形式的快捷快捷标记标记 属性属性condcondcount count (slappy white)say help here.this is the first occurance of the help event.say help again.this is
31、the second occurance of the help event.goodbye.why did you fill the field,you dummy?第一次说help第二次说help72Reprompt标记 当前对话中的提示音当前对话中的提示音(prompt)(prompt)最大最大countcount属性属性小于或等于小于或等于promptprompt计数器值,那么计数器值,那么repromptreprompt标记可用于使该提示得以播放。标记可用于使该提示得以播放。Do you want ice cream for dessert?Do you want ice cream
32、 for dessert?If you want ice cream,say yes.If you want ice cream,say yes.If you do not want ice cream,say no.If you do not want ice cream,say no.I could not hear you.I could not hear you.C:Do you want ice cream for dessert?C:Do you want ice cream for dessert?H:(silence)H:(silence)C:I could not hear
33、you.C:I could not hear you.C:If you want ice cream,say yes.C:If you want ice cream,say yes.If you dont want ice cream,say no.If you dont want ice cream,say no.H:(silence)H:(silence)C:I could not hear you.C:I could not hear you.C:If you want ice cream,say yes.C:If you want ice cream,say yes.If you do
34、nt want ice cream,say no.If you dont want ice cream,say no.H:No.H:No.Do you want ice cream for dessert?If you want ice cream,say yes.If you do not want ice cream,say no.I could not hear you.!-C:Do you want ice cream for dessert?C:Do you want ice cream for dessert?H:(silence)H:(silence)C:I could not
35、hear you.C:I could not hear you.H:(silence)H:(silence)C:I could not hear you.C:I could not hear you.H:No.H:No.73主要内容 VoiceXML概述 VoiceXML基本概念 VoiceXML中的变量和基本标记 VoiceXML中的输入输出标记 VoiceXML高级标记 VoiceXML与服务器端应用开发 一个完整的VoiceXML应用74Record标记 RecordRecord标记用于录制一段语音标记用于录制一段语音75Record示例 嘟声后开始说录音,0号键重录,时间不超过一分钟,
36、星号键返回 使用影子变量来保存录音结果信息保存录音结果必须通过submit标记76Transfer标记 将用户的电话转接到另一个电话上 有两种类型的转接桥转接 解释器一直处于等待状态,直到Transfer从转接通话状态下退出。如果因为挂机或网络的原因而线路中断,会抛出一个Connection.disconnect.hangup事件。如果通话因为其它原因而中断,中断原因会写在标记的属性里。盲转接 解释器在完成转接后,不再监控转接过程,也不再在标记的名字属性中报告挂断结果,而是立即抛出一个connection.disconnect.transfer事件。77Property标记 property标
37、记用于控制语音识别、提示、提取文档和资源、以及输入类型等的运行特性。78Submit标记 标记用于从一个VXML文档转到服务器端的脚本文件,比如用Perl、CGI、JSP、ASP、ASPX编写的文件。标记与很相像,因为它将导致一个新的VXML document被获得。但与不同的是,它能使你利用一个HTTP GET或POST请求,给文档服务器提交一组变量。79Submit属性80Submit示例 The time is hours 尽可能使用Get方法,Post方法相对效率较低81Script脚本 Script标记允许在VoiceXML脚本中使用一段客户端的脚本语言代码,它和HTML的元素类似
38、Script在加载后有效,一般放在根文档中 可以内嵌入VoiceXML脚本,也可以以独立的js文件出现 82iAvp扩展标记扩展标记 SendFax发送传真文件 RecvFax接收传真文件 LogVoiceXML也具有该标记,依赖平台记录信息,iAvp平台扩展其用来向数据库中写入节目日志信息。83主要内容 VoiceXML概述 VoiceXML基本概念 VoiceXML中的变量和基本标记 VoiceXML中的输入输出标记 VoiceXML高级标记 VoiceXML与服务器端应用开发 一个完整的VoiceXML应用84为何引入服务器端应用开发 使VoiceXML应用程序成为动态应用程序 将VUI
39、逻辑与复杂的业务逻辑分离85引入WEB Server带来的变化VoiceXMLInterpretervxml docDataBase?aspx、php scriptWeb Server86Web Session Web会话会话开始:浏览器与WEB连接会话过程:交互 html文档的提交会话结束:用户关闭济览器 WEB服务器切断连接87Web Session与VoiceXML Session比较 相同都可以保存上下文相关信息 不同VoiceXML session是客户端session,而web session是服务端session。使用VoiceXML session开销较小。web sessio
40、n过程中可以将数据写入数据库等第三方系统,VoiceXML session在这方面能力较弱。88服务开发过程可行性/功能分析与调研设计实现和测试数据收集与优化10%20%40%30%开销调研与分析对话设计构建语法,编写脚本,测试功能收集数据,对效果进行优化活动89主要内容 VoiceXML概述 VoiceXML基本概念 VoiceXML中的变量和基本标记 VoiceXML中的输入输出标记 VoiceXML高级标记 VoiceXML与服务器端应用开发 一个完整的VoiceXML应用90应用电话书店一个有十种图书小书店,每本书都有书名和书价。用户可以说出书名来购买图书,在不知道有哪些书的时候可以说“查询”来获取所有书名,可以说“结帐”系统计算出总书款并报读;系统在用户呼入时提示用户输入帐号,没有帐号直接按#键进入。如果帐号为123,口令也为123则是vip用户,对其书价打8折,用subdialog实现计算书价的功能,并在用户帐号不同时分别调用91应用电话书店 用户可以说“留言”时进入录音功能并录制不长于30秒的留言并可以回放确认。使用NBest对用户输入产生一种以上结果时让用户按键确认;用户在寻求帮助时转接人工。使用动态脚本实现用户购书后产生订单号,用户可以查询订单内容和状态。请大家在课后完成这个系统