性格决定命运 气度左右格局 拼搏方能取胜 谦虚才会进步

IVR-1 [ Voice XML基础教程上]

上一篇 / 下一篇  2008-03-24 19:26:08 / 个人分类:做着

Interactive Voice Response-IVR 项目需要,目前正在学习尝试使用并开发相关功能.

功能支持ITPUB个人空间1~B~6Zrg%@$e
http://www.voxeo.com/ITPUB个人空间q+O0r#^ uz"B

G7Fx HQ @4b8b0Voxeo Prophecy Voice Platform. - Free DownloadITPUB个人空间YnF5e.SRGR
http://www.voxeo.com/prophecy/

VoiceXML基础教程针对VoiceXML初学者编写,其由浅入深地介绍VoiceXML的主要内容,包括VoiceXML的历史背景与现状、VoiceXML的脚本设计基础等。

第一章  VoiceXML2.0简介
,v1H;Qcb|0 ITPUB个人空间!V2y#J2EH bc
    VoiceXML(语音可扩展标记语言)是用来描述语音对话过程的标记语言。其定义了如何使用语音识别、语音合成、互联网访问、数据库访问、语音文件播放、DTMF输入等功能开发一个完整的语音应用系统。用VoiceXML开发的语音应用系统,不仅可以完全代替传统CTI(计算机电话集成) 系统所能提供的功能,而且还可以使应用系统开发过程极其简单快捷、系统有极高的可扩展性、可维护性、可移植性、可重用性和开放性。ITPUB个人空间 G5Qo&CO
 ITPUB个人空间Lq4]-fn)K|$b |
    1.1 VoiceXML的历史与背景
-C+y;~)I/aI0 
2Y"r hh)wz5d9c[ T!ix0    VoiceXML的出现最早可以追溯到1995在AT&T公司开发的基于XML的电话标记语言(PML)。随后,AT&T、Lucent Technologies以及Motorola公司分别各自着手开发自己的类似于PML的语音标记语言。到了1998年,W3C组织的“语音浏览器”会议上,AT&T和Lucent Technologies分别展现了他们各自的类同PML的标记语言、Motorola和IBM公司分别推出VoxML和SpeechML、HP和PipeBeach公司也分别推出TalkML和VoiceHTML。AT&T、IBM、Lucent Technoglies、以及Motorola随后成立了VoiceXML论坛,其目的是为了建立一个语音对话应用系统的国际标准。到了2000年,AT&T、IBM、Lucent Technologies、以及Motorola通过W3C协会联合推出语音可扩展标记语言VoiceXML1.0。该标准一经推出,便得到相关行业众多公司的响应。经过两年多的论证和实际系统验证,VoiceXML2.0最终草案在2003年推出。
i|'W2u*U0 ITPUB个人空间 j^1]#OB2_V
    1.2 为什么要用VoiceXML?ITPUB个人空间(?})^,aD^DTH%s#d
 ITPUB个人空间|:k*LUpd9Ec;b;Bo
    VoiceXML的推出给电话语音系统带来全新的应用和开发概念,使传统的CTI技术从繁琐、封闭的模式中走了出来,使广大的语音系统开发人员可以用极其简单的方法实现复杂系统的开发。ITPUB个人空间w o:U*GK/]
 
/H7Yi9O7Pa0    完全替代传统CTI:传统的电话语音系统典型的工作方式是接受用户的按键输入和语音文件播放、跟据用户的需求为用户提供相应服务。基于VoiceXML开发的电话语音系统完全可以替代传统CTI系统所能提供的功能。ITPUB个人空间R Uq_ @Dk
 
M gY'`*K}u0    语音识别功能:基于VoiceXML开发的电话语音系统除了接受用户的按键输入之外,还可以接受用户的语音输入。系统通过语音识别功能实现对用户输入语音到文本的转换。这对于许多仅用按键输入方式而无法解决或解决起来很繁琐的应用领域很有实用意义。ITPUB个人空间W:|*HiN7^
 
a-jJC0\2e9xw0    语音合成功能:基于VoiceXML开发的电话语音系统除了能够播放预先录制的语音文件之外,还可以将系统中的文本转换成语音的方式播放给用户。这对于那些需要播报即时消息和可变信息等的应用领域很有实用价值。ITPUB个人空间)h(g z!Sr"u1?/wr
 
M|'B*WY'~6`0    与互联网联结:长期以来,公用电话网和互联网是分离的。随着互联网技术的迅速发展,互联网信息与日俱增,以及互联网相关服务的日新月异,将互联网与公用电话网整合为一体,使广大的电话用户也能享受到互联网提供的信息和服务显得越来越有吸引力。VoiceXML使公用电话网与互联网有机地结合,使两网的信息能够相互流动。例如,电话语音流言可以通过互联网以电子邮件的方式传送到目的地;互联网上的新闻可以通过电话播放给用户等。ITPUB个人空间UD2V4P,R1JH
 ITPUB个人空间B;\v8u@,UHI
    灵活的数据库接口:许多电话语音应用系统离不开数据库访问。VoiceXM通过脚本方式提供灵活的数据库接口,使得应用系统可以方便地访问各种数据库,如:Microsoft SQL Server 2000、Oracle、Sybase、Microsoft Access、MySQL等。
/aV1Rm,[-[0 ITPUB个人空间.U/efB&f'TyF
    简化开发过程:用VoiceXML将电话语音应用系统开发人员从繁琐的编码细节中解脱了出来。开发人员不需要了解相关软件(如语音识别和语音合成)和硬件(如语音卡)API的编程接口,只需要把精力放在应用领域的业务流程上。开发过程轻松快捷、开发周期大大缩短(7-10倍)。VoiceXML使开发人员得以用简单的方法实现复杂的工作。
5Ym.i"A-z h0 ITPUB个人空间%ZQW X6@
    除此之外,基于VoiceXML开发的语音应用系统具有很高的系统可扩展性、可维护性、可移植性、可重用性和开放性。ITPUB个人空间_-le(oe|e
 ITPUB个人空间(j!T3n:Gal
    1.3 VoiceXML现状ITPUB个人空间)z ^ [+^[.w8i
 
/c.ps!kY9K0    自2000年VoiceXML1.0推出以后经过不断的修改,于2003年1月推出最新的VoiceXML2.0最终推荐版本。根据W3C称,该版本将会比较稳定,鼓励各VoiceXML浏览器生产厂家可以根据此版本进行开发。预计不久VoiceXML2.0将会正式推出。ITPUB个人空间`1u&C)s!Fs
 ITPUB个人空间+]7X _8ki RV8|
    中国目前也有一些相关行业的公司在着手开发有关VoiceXML的产品。深圳市华琛科技有限公司是国内领先的VoiceXML语音平台生产厂家。在华琛公司的VoPromote平台上,开发人员可以用VoiceXML2.0脚本语言开发应用于各行业的电话语音系统。
f&a+_{;D%G [0 ITPUB个人空间;`1TBam]z)}
    1.4 小结
:HH+h!R[/k%[!w0 
YIY;P8u&c*c0    VoiceXML标准的出现给电话语音应用系统的开发带来了全新的概念,同时还大大扩展了语音应用系统的应用范围。可以预计,VoiceXML标准的推广将会极大地推动电话语音应用系统的开发和应用,将给广大的电话用户带来深远的影响。

ITPUB个人空间$]v7b(X9q:RuI5H \
第二章  VoiceXML2.0基础ITPUB个人空间$D;k@%_3J;X1z
 
u-A%N%BxI-a0    本章将简单介绍VoiceXML2.0脚本文件的结构,使初学者对VoiceXML有一个大概的了解。ITPUB个人空间)C z `$U~ [+J;@pL
 ITPUB个人空间,}uxCO t[a
    2.1 VoiceXML2.0脚本结构ITPUB个人空间a1m/{ tNv
 ITPUB个人空间"pg-_"U3x(hZ.?%W
    现在让我们来看一个简单的例子(行号是为了本文引用方便,其不应该出现在VoiceXML脚本文件中):
'U5Vr*K$j4KU b0 ITPUB个人空间|~$v%c7y/z&SX8M&L
     1   <?xml version="1.0"?>ITPUB个人空间?o:fT8o,B
     2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间+O}W8F7HU'Q*F
     3      <form>
B$lazMe\JB0     4         <block>ITPUB个人空间!iGBu/w)]
     5           欢迎使用华琛公司语音系统!
u%i.k WB m$^0     6         </block>
$|o-w]$G'm|0     7      </form>ITPUB个人空间3BE [G ?-t
     8   </vxml>ITPUB个人空间{[`J e%?e8o3`
 ITPUB个人空间UP,}&k5]u(^
 
5Hyj.K-kQAO"{0    当电话接通,用户将会听到由语音合成的“欢迎使用华琛公司语音系统!”。第1,2和8行是每个VoiceXML脚本文件都应该包含的;第3到第7行是一个对话表,用<from>…</form>标志;在该对话表中有一个块<block>…</block>,其包含了要输出的内容。
\;y|(Pj;Jy]V0 
1r;d4XRE(oE0    如果不用语音合成功能,上面的例子还可以写成:ITPUB个人空间3RvMi+O!s8zC'Xcn
     1   <?xml version="1.0"?>ITPUB个人空间k"oby3q"oR$W
     2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
C}5|s8f%]pWoP|0     3      <form>
5p,H E!?/L9b~7z.Q0A-i0     4         <block>ITPUB个人空间 X P a:r9wL*w*S:]
     5           <audio src="welcome.wav"/>ITPUB个人空间r;o;v`;qOMm np [
     6         </block>
2W*|vS%I U(n/G{0     7      </form>
6C'JU_!q5ac_0     8   </vxml>ITPUB个人空间)RZ i.FTj-hl{S
 ITPUB个人空间qM:Ge2p'yY4J*H nhw
 ITPUB个人空间(NZ2Mt:zNJnm&{:r
    当电话一接通,用户将会听到预先录制好的语音文件welcome.wav的内容。
*UaI7aa:`N)nb@"`x1l0 
%?bD-X\h5z0    用VoiceXML编写语音应用程序,不仅可以方便地实现语音文件以及文本的播放(通过语音合成的功能),而且还可以方便地实现按键输入以及语音输入(通过语音识别的功能)。VoiceXML定义两种基本输入方式:菜单<menu>和输入域<field>。菜单将输入的内容列举出来,并根据需要允许用户用按键或/和语音的方式进行输入。以下是一个用菜单接受用户输入的例子:
Z+h3WS$KGk z0 
G;w;G;Z9D0     1   <?xml version="1.0"?>ITPUB个人空间cTt `u,i3J,hl
     2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间-Fh1hQ$~ Y5Y
     3      <menu dtmf="true">ITPUB个人空间Jx&L)JU
     4         <prompt>
1|O)z y.B-{E,vB0     5           用户您好。请选择华琛为您提供的服务:
Ve\z*[!k.K/Mh0     6           1 天气预报 2 股票市场ITPUB个人空间n {W3C;Y`D$M-B
     7           <choice next="weather.vxml">天气预报</choice>
P2Q i*lk2\$?0     8           <choice next="stocks.vxml">股票市场</choice>
]j way4u6z0     9         </prompt>
yf`_5p G%th0Do0     10      </menu>
(Hj2k9b.[Y0     11   </vxml>
(|0q}!@.Q3q7d8~0 
q,Yp-WQ ~0 
L2\Ic4? jEW0    当电话接通,用户将会听到提示“用户您好。请选择华琛为您提供的服务:1 天气预报 2 股票市场”,并等待用户输入;当用户说“天气预报”或按键输入“1”后,系统将转向另一个VoiceXML脚本文件(定义天气预报的对话流)。第3行到第10行定义了整个菜单;第4到第7行是提示<prompt<的定义;第8和第9行列举出菜单项。
1Heu5N8O7?sRL0 ITPUB个人空间8_E0LB#tr
    除了菜单方式之外,用输入域<field>也可以接受用户输入:
"X D1MQ@CC8y Y{ Ms0 ITPUB个人空间Pq\:Ul1{9Oh
     1   <?xml version="1.0"?>
?;o'i G]|%^0     2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
U,T,Hz:}oU0     3      <form>
MPUaA7Y? We.b0     4         <field name="inputitem">
Nj5Z]{#X!@0     5           <prompt>
'RsK EW dA ~Q.V0     6              用户您好。请选择华琛为您提供的服务:ITPUB个人空间#v]'pa\K'^4G+J
     7              1 天气预报 2 股票市场ITPUB个人空间%I)N$\q`}Dk
     8           </prompt>
j!P8r knr0     9           <grammar mode="voice" root="item1">ITPUB个人空间 }LH8?;O$S!}
     10             <rule id="item1">ITPUB个人空间`$e_7\5Xi/b(U
     11               <one-of>ITPUB个人空间#{'CC'x7C:H9C
     12                  <item>天气预报</item>ITPUB个人空间']%M2X5j3FB2s{:`?
     13                  <item>股票市场</item>ITPUB个人空间 H x%lwprsi%[2D1X
     14               </one-of>
I0{\;z)l.W5k3X+z:S0     15             </rule>
cIL!m&z6H/R4\0     16          </grammar>ITPUB个人空间&z`6`'YgXz!jt
     17           <grammar mode="dtmf" root="item2">ITPUB个人空间"yl#o`:I
     18             <rule id="item2">
.Q8]NQ.wN0     19               <one-of>
([g{*zT]0     20                  <item>1</item>
#D y#F%_:U1^|(o ESJ0     21                  <item>2</item>
4R^"T.Ubd KT,`0     22               </one-of>
&z3t.p%Gm*Sq5l-s Z0     23             </rule>
%K,L/H"@FHDo0     24          </grammar>ITPUB个人空间&zA1I2iV2gj;RX
     15           <filled>
;C[ I*B d0     16             <if cond=" inputitem == '天气预报'">ITPUB个人空间haxsN0bp]C
     17               <goto next="weather.vxml"/>ITPUB个人空间/v]%LPW'@,Q$br:uP^
     28             <else/>
2pz8gAeu0     29               <goto next="stocks.vxml"/>ITPUB个人空间U4QYJD
     30             </if>ITPUB个人空间4t+m8S4Y Tn,Gbo}f
     31           </filled>
d&u*P(fP0     32         </field>
Q,~JY5Y1T'h5B0     33      </form>
,a2[$cl] d~\!t0     34   </vxml>
j*J;D C ~R9Y r0 
gF|OY-W G0 
lk&T#jS4ga1_0    该例中<field>定义的输入流程与前面例子中<menu>定义的流程相同,即当电话接通,用户将会听到提示“用户您好。请选择华琛为您提供的服务:1 天气预报 2 股票市场”,并等待用户输入;当用户说 "天气预报" 或按键输入“1”后,系统将转向另一个VoiceXML脚本文件(定义天气预报的对话流)。第9行到第16行和第17行到第24行分别定义了语音输入和按键输入的语法。该例中的语法本身出现在VoiceXML脚本文件中,这类语法称为在线语法。语法也可以不是在线语法,它们可以被放在一个独立的语法文件中。例如,如果将上面的语法分别放在services_voice.grxml和services_dtmf.grxml中,该例子可以改写为:
f$X-|k L!S.K.W9n)q0 ITPUB个人空间.M9[p3dQ b@
    电话录音功能是实际应用系统中常常会遇到的。下面的例子给出如何用VoiceXML提供的录音元素实现电话录音功能:
"Lyty&b1A-G0 
"h B Maf8ij~0     1   <?xml version="1.0"?>ITPUB个人空间Q gN8O2Z
     2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间'z2fD.v(A
     3     <form>
a5zs\ Xl(`9u0     4        <record name="msg" beep="true" maxtime="10s" finalsilence="4000ms"
dk_IaS9_#D0                 type="audio/x-wav">ITPUB个人空间 m[\q q
     5          <prompt timeout="5s">
4x+Ie Y:ui!cw0     6             请在'嘟'声后留言。
4qNZGX0K#L0     7          </prompt>
&r)`;Zu"K;f^0     8        </record>ITPUB个人空间2Zf)^W.K*D
     9        <block>ITPUB个人空间I |v1wdBM
     10          <prompt>ITPUB个人空间g1c?9d7_2G
     11             您的留言是<value expr="msg"/>。ITPUB个人空间W[4Ieh'`c
     12          </prompt>ITPUB个人空间|A)J ~;ja*X:h
     13       </block>ITPUB个人空间S8c j(I/SQI5w
     14     </form>ITPUB个人空间IU l;F}_@N
     15   </vxml>ITPUB个人空间*m#\ZGf X;e/[
 
_,Mj,eeK I0 
#jd!O.q?r0    当电话接通,用户将会听到“请在‘嘟’声后留言”的提示,随后系统提示“嘟”声并等待用户留言;最长录音时间为10秒(maxtime="10s"),当用户停止说话4秒(finalsilence="4000ms")后系统停止录音,录音将被放在变量msg中;录音停止后用户将听到系统提示"您的留言是" 和录音内容。第4行到第9行是录音功能的定义;第10行到第14行播放提示和录音内容。ITPUB个人空间3af|.Ilz X7f
 
W%e%C/[3C*@ CV0    VoiceXML不仅提供上述基本的输入输出功能,还提供了其它功能,如电话转接、强大的数据库接口、互联网接口、Javascript操作、对话流自由转向、模块化结构等功能。除此之外,VoiceXML还提供了扩展接口<object>,使得其功能得到更为广泛的延伸。
F#j.O4k!R6F7`)B2Q.E,f0 
Sr4DMeD6J3{ qn0    显而易见,用VoiceXML编写一个电话语音应用系统,摆脱了传统的CTI技术的开发方法和模式。开发人员不需要了解语音板卡、交换机、语音合成、语音识别等的编程细节,只需要把精力放在业务流程上。用VoiceXML不仅完全可以代替传统CTI技术所能完成的功能,而且还能完成用传统CTI技术难以实现的功能。用VoiceXML开发语音应用系统周期短、对技术人员要求相对较低。基于VoiceXML开发出来的应用系统有很好的可扩展性、可维护性、可移植性、可重用性和开放性。ITPUB个人空间#Twk G2B)\

2.2 VoiceXML2.0元素集
<assign>给变量赋值。
<audio>播放语音文件。
<block>无用户交互的可执行代码块。
<catch>捕获一个事件。
<choice>定义一个菜单项。
<clear>清除一个或多个框架项。
<disconnect>结束一次通话。
<else>用于<if>元素中的else。
<elseif>用于<if>元素中的elseif。
<enumerate>列举菜单选项。
<error>捕获一个<error>事件。
<exit>退出一次通话。
<field>在框架中申明一个输入域。
<filled>指定当输入域被填充以后需要作的操作。
<form>提示信息和接受数据的对话框架。
<goto>把控制转向在同一个或不同文档中的对话。
<grammar>指定语音识别或DTMF语法。
<help>捕获一个<help>事件。
<if>条件逻辑。
<initial>在进入一个双向交互式对话框架时申明初始对话逻辑。
<link>在所有对话公共链接区域指定控制转向。
<log>生成调试信息。
<menu>定义菜单对话。
<meta>定义一个元数据项。
<metadata>定义元数据信息。
<noinput>捕获一个<noinput>事件。
<nomatch>捕获一个<nomatch>事件。
<object>系统扩展的对象。
<option>在一个输入域中选择一个选项。
<param><object>或<subdialog>的参数。
<prompt>指定语音合成提示和声音文件输出。
<property>指定特性值以控制平台设置。
<record>录音。
<reprompt>指定重新提示。
<return>从子对话中返回。
<script>定义ECMAScript模块。
<subdialog>调用一个子对话。
<submit>向文件服务器上传数据。
<throw>产生一个事件。
<transfer>电话转接。
<value>在提示中插入一个值。
<var>声明一个变量。
<vxml>VoiceXML文档标识。

 

 

2.3 语音识别与语音合成ITPUB个人空间q@Yw-q&m}
 
A2tJa M7m0    <menu>和<field>可以用来接受用户的语音输入(参见2.1)。当用户通过说话的方式与系统进行交谈时,系统将根据脚本中提供的语法对用户的语音输入进行识别。系统根据识别得到的结果和脚本文件的定义决定下一步的操作。ITPUB个人空间T&{7Cy,OO9?SuF
 
}} i)z b.J[ny2q0    在某些VoiceXML元素中允许出现要输出的文本,如<prompt>(参见2.1)。有文件输出时会自动启动语音合成功能以将文本转换成语音并播放给用户。ITPUB个人空间R"aK6k2}
 
-z$@E4xUO` g0    2.4 VoiceXML与互联网的接口ITPUB个人空间%r)wo7Ma#CC| k a
 ITPUB个人空间g ~~ U7sQ1p:P
    VoiceXML中每个文件是通过URI访问的。因而,VoiceXML脚本文件、语音文件、语法文件、ASP、PHP文件和数据库等都可以置放在互联网中。ITPUB个人空间`gT,F6x5iDBu
 
*Ou7`&o.\Le0      2.4.1 通过URI访问互联网中的VoiceXML脚本文件ITPUB个人空间&i&m&v'a'W-D4SR
 ITPUB个人空间)dCg!S`5C
       1   <?xml version="1.0"?>
/Z [%SgX*[ in1T#T3N8F0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间T2@)N ihC\
       3      <form>
O-q(`L)T0       4         <block>ITPUB个人空间9VK^ {/hW
       5           <goto next="http://vopromote/vxmls/book_examples/welcome.vxml"/>
?/R Eo6m:vB0       6         </block>ITPUB个人空间5C L{mT-^4u_ ^)s
       7      </form>ITPUB个人空间7d8L;x0mL xC
       8   </vxml>
n&Myr~ ]R(PU0 ITPUB个人空间(OPU g Cfb
 ITPUB个人空间ZOeb-fgJ
      welcome.vxml:
mTV c ]^1v0       1   <?xml version="1.0"?>ITPUB个人空间gx0M5J7TMO
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
LL2]`L ou6D0       3      <form>
yn ubY]t}?~0       4         <block>ITPUB个人空间4O6^kZq,Y.OlS
       5            欢迎使用华琛公司语音系统!
N d ^8oF$|4l@b0       6         </block>ITPUB个人空间nQlx7B8O.ri
       7      </form>ITPUB个人空间*G&_tfvB
       8   </vxml>ITPUB个人空间oN1p}%t
 
b&`G!of"J"aC0 ITPUB个人空间(MLz.V G_OA
      2.4.2 通过URI访问互联网中的语音文件
pA/f x LPn0 ITPUB个人空间9c b8xS$pR
       1   <?xml version="1.0"?>
g8A'L!l.H2[0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间 rije%DY
       3      <form>
4E5Q\0iWb I0       4         <block>
[C|"lMw0       5           <audio src="http://vopromote/vxmls/book_examples/fetchaudio.wav"/>ITPUB个人空间4O o.y7[o9r+R4Umi8d
       6         </block>
+b.z6h1R V_0W0       7      </form>
7USh#NpNc&~7e%u&a(y0       8   </vxml>ITPUB个人空间1h0b6~5@#p
 ITPUB个人空间} C Wu7ZG
 
W{hp(]0      2.4.3 通过URI访问互联网中的语法文件
*@b(Hj8A&l0 ITPUB个人空间XdXqsH3cd)W
       1   <?xml version="1.0"?>
"?"j{8jR@s&P m(zU0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间.j~x,Pi*_O
       3    <form>ITPUB个人空间']| }3g9v'V!I8k%U
       4      <field name="drink">
!X-hwp(y#? zj0       5       <prompt>你要咖啡,牛奶,茶,还是什么都不要?</prompt>
-KL4I\%? \|~0       6       <grammar src="http://vopromote/vxmls/book_examples/example_drinks.grxml"
b o2hk&L.a?/}0                 type="application/srgs+xml"/>
B%m i@+s?Y1@ G0       7        <filled>ITPUB个人空间UF)gT(_:_&WD
       8        <prompt>
O#`1Q\#}sO0       9          你要喝<value expr="drink"/>
,kF.?gv9C$K Iw0       10       </prompt>ITPUB个人空间UE}sF
       11       </filled>
tDX oa+T0       12      </field>
(M#r{W8^2S x}0       13    </form>ITPUB个人空间 Q o&[9b)js
       14   </vxml>ITPUB个人空间+qU p+tG-tv
 
bf6ADB Diq0 
"k$H9hX3UNSe F|"e0      example_drinks.grxml:ITPUB个人空间 eBY3VO$w9B
       1   <?xml version="1.0"?>ITPUB个人空间1v["s+y'\gBu
       2   <grammar version="1.0" xmlns="http://www.w3.org/2001/06/grammar"ITPUB个人空间_Z7@'M`OK _
             xml:lang="zh" root="DRINK" mode="voice">
8w v/l,a w*Y&`5]0       3        <rule id="DRINK" scope="public">
)vW/n4xU$L }/E0       4           <one-of>ITPUB个人空间*HJ-JA7Q
       5             <item>咖啡<tag>咖啡</tag></item>ITPUB个人空间ju*@,Z#E`6zD'Q
       6             <item>茶<tag>茶</tag></item>ITPUB个人空间#@q2G:n C M+c$~
       7             <item>牛奶<tag>牛奶</tag></item>ITPUB个人空间x%P2i#~2l/N-G
       8             <item>什么都不要<tag>什么都不要</tag></item>ITPUB个人空间 `!A3^/Mb+k]UfL6e
       9           </one-of>
d$]!_,t#J.k0       10      </rule>ITPUB个人空间`p Rf^,|dK
       11   </grammar>ITPUB个人空间;z,U"tf1B&XrZ#t;Y*k
 
Om |9p Q+Mx:s&L8m'^0 
6@PYR/{G*}i0      2.4.4 通过URI访问互联网中的ASP文件
5SE\&c9?s0 
FR7p#X)v5h[0J0       1   <?xml version="1.0"?>
{SZ;F1S/[l0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间 BLT+G)M'K YI
       3     <form>
O*Why!b[0       4        <block>ITPUB个人空间UC i)\;I0uE$lnXEz
       5         <goto next="http://vopromote/vxmls/book_examples/internet_asp.asp"/>
F]8[,Oz{0       6        </block>ITPUB个人空间9g }0Tv#U
       7     </form>ITPUB个人空间IA I Op$P
       8   </vxml>
2U^ W9Y n CgD0 ITPUB个人空间F r LUE
 ITPUB个人空间{WmDP%L
      通过URI访问互联网中的PHP文件与访问ASP文件类似。
uv2o(O&NC9p*q0 
4n,iG0t*`x v0      internet_asp.asp:
3imG r/YNU{0       1   <?xml version="1.0"?>
Z1ju%BA7F6D1t)@0       2   <!DOCTYPE vxml SYSTEM "file:///VoPromote/deploy/config/vxml2.0.dtd">ITPUB个人空间&n'` Jd6w0b
       3   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间P)z&sC8}%}
       4      <form>ITPUB个人空间S${}k5W @
       5        <%
9\9V!ax6k5FC0       6          dim greetingITPUB个人空间5R)Q7b)pVUh8Q
       7          greeting = "我在学习VOICEXML"
M;W/`6?*I.@O0       8         %>
mQ_\pL6T]0       9         <var name="greeting" expr="'<%=greeting%>'"/>ITPUB个人空间} b9\'fzQ I)ZE
       10         <block>
/u,Nv ti L0       11         <value expr="greeting"/>
El-F ip-P2n5E,QT0       12        </block>
{)h%|'Ti8G^/naC0       13      </form>
[&t q J$\1h2hE0       14   </vxml>
#id3y+PIuEbc0 ITPUB个人空间$I|p@ u"A6j0~;G d
 ITPUB个人空间 F{#rF mx7g;[f)q*l
      2.4.5 通过URI访问互联网中的数据库ITPUB个人空间ZP"J f V)FcS
 ITPUB个人空间4z ^W8E\/Sf
       1   <?xml version="1.0"?>
Ov beB%u\2ZP0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
C&d/M(Dnih"N2}0       3    <form>
!rpi C8g Cd H0       4     <block>ITPUB个人空间| @'a Y^ Vr:~E8{
       5      <goto next="http://vopromote/vxmls/book_examples/internet_database.asp"/>ITPUB个人空间 Ee&p.X:B
       6     </block>ITPUB个人空间Ts9fya
       7    </form>ITPUB个人空间2lm%q\6}
       8   </vxml>ITPUB个人空间 q3oZSa![0C
 ITPUB个人空间 g4a)}D+F`.y3\!py ^
 
7{.L.x(q r1^0      internet_database.asp:ITPUB个人空间9Ji7iG g2J0qSN
       1   <?xml version="1.0"?>ITPUB个人空间1y.bL JRY*eO
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间:D/e,V9U{
       3     <form>
`%c3hs)R2C.N0       4       <%ITPUB个人空间d@`0Bp$Y*];M?
       5         Set conn = Server.CreateObject("ADODB.Connection")ITPUB个人空间yK.?jRy
       6         conn.open "driver={SQL Server};server=your_database_server;
:g k(`2CKrC!C+m0                   uid=your_uid;pwd=your_pwd;database=your_database_name"
8}K,t:E XB0       7         command = "your_command"ITPUB个人空间n:I MI x
       8         Set rs = conn.Execute(your_command)ITPUB个人空间nJg+AOR-s
       9        %>
r3r/rPJq.k0       10        <var name="username_one" expr="'<%=rs("xxxxx")%>'"/>ITPUB个人空间+]Jhe$\9mi{q;x O
       11        <var name="accounts_one" expr="'<%=rs("xxxxxxxx")%>'"/>
'EU!\? a*U0       12        <var name="password_one" expr="'<%=rs("xxx")%>'"/>
;MRZ,v4|0       13     </form>
1WR"srgd7v![~&R[*h0       14   </vxml>
4r'a I:Mh9k/X#]0 
&M-P5l+C*K?0 ITPUB个人空间~-\ h/X9@
    2.5 VoiceXML与数据库的接口
&u;L mC"@)`?0 
heao!qZ0    VoiceXML通过其所支持的脚本语言,如ASP、PHP、CGI等访问多种数据库。
3^p?"So;KJ5S&h0 ITPUB个人空间)~Q+`A"h
    在windows操作系统中可以为各种windows支持的数据库连接设置数据源。如果已经为数据库连接设置了相应的数据源,可以这样访问数据库:ITPUB个人空间BK#X \G,A
 ITPUB个人空间Q O a#Il M;Pr.{4r ]
      Set conn = Server.CreateObject("ADODB.Connection")ITPUB个人空间7X{,G^7Irf{%E.F
 ITPUB个人空间RjF X \4@ P$U
      Conn.open "dsn=odbc_name;uid=your_uid;pwd=your_pwd"
L)^+}7{P8@0 
&[TjYcg ~^0    另外也可以如2.4.5那样直接指定数据库驱动来访问需要的数据库。
JL3`1c8w'A0 
7@ETW8\%\kA.T#V#J0    总之,ASP、PHP、CGI等所支持的各种访问数据库的接口,VoiceXML都支持,因为VoiceXML支持这些脚本语言。ITPUB个人空间(rj5@7Mx@
 ITPUB个人空间'xQt]m#fD3rL+d
    2.6 小结ITPUB个人空间^ k.iM[.cl
 ITPUB个人空间i.c.?0c&\v{E
    用VoiceXML给电话语音应用系统的开发带来全新的概念。开发人员不需要了解语音板卡、语音识别、以及语音合成的API接口,可以任意选择接入不同的数据库,可以不用把时间放在繁琐的编程细节,从而只需把精力放在应用流程的定义。VoiceXML简单易学,尤其是对于有WEB开发经验的开发人员更是轻松。ITPUB个人空间$Cd}m(P"D^

第三章  VoiceXML2.0脚本设计基础ITPUB个人空间-f#x8fB H/m
 ITPUB个人空间9HbVyIIF2u6W2a5X
    本章将对VoiceXML2.0元素逐一地进行简单介绍。当VoiceXML脚本文件中需要用到语音识别和语音合成功能时,了解SRGS(Speech Recognition Grammar Specification)语音识别语法标准和SSML(Speech Synthesis Markup Language)语音合成标识语言将有助于语音应用系统的开发。因而,本章除了介绍VoiceXML2.0元素之外,还将简单介绍SRGS1.0和SSML1.0。
3?f}"n9S2W0 ITPUB个人空间)~f$F|*s.d0Z'_'G"^
    3.1 VoiceXML2.0脚本
R.u$uksq0 
Kx8Z I{"q0      3.1.1 <assign>ITPUB个人空间^:V6VVy4Q
 
PV K|5qGlw0      给一个声明过的变量赋值。在下面的例子中,<assign>将“学习VoiceXML”赋值给变量verb。由于<assign>的属性expr的值是一个Javascript表达式,用单引号将学习VoiceXML括起来以表示其为字符串而不是变量。下面的例子将输出“我学习VoiceXML”。ITPUB个人空间NY }m jBTk!QQ
 
a,fOEp&r/|0       1   <?xml version="1.0"?>ITPUB个人空间I8WZ&M8?4tU
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
q't ]Ldl(x0       3      <form>
7]Pkk4{h8y:z)E0       4        <var name="verb"/>
[6D:^WP U~B*k'@0       5         <block>
1q/`!o B7B e!C0       6            <assign name="verb" expr="'学习VoiceXML'"/>ITPUB个人空间5YrEkbQ7y#g~K gU
       7             我<value expr="verb"/>。
Y't.f/~@ e}vJy0       8         </block>
)a` Wc8^cN$C0       9      </form>ITPUB个人空间$NN j%HW|&U
       10  </vxml>
%Z9O%@S"@"H0 ITPUB个人空间T[:b%jD"e t&k#k
 
:B5yQ:F@*LO^9ph0      3.1.2 <audio>
cY9R/ql2K0 ITPUB个人空间 T1C&VJw/_hSI
      播放一个语音文件。下面的例子输出<audio>的属性src所指定的语音文件名welcome.wav。ITPUB个人空间&E iG!d*r])G
 ITPUB个人空间} ~!G%l)LB'xr%XE
       1   <?xml version="1.0"?>
mPI*I xP(Z,W0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
.r o6HW9Nx)Bj0       3      <form>ITPUB个人空间 B?,`!LF%@
       4         <block>
Wg/pW+pIM5L"~0       5            <audio src="fetchaudio.wav"/>ITPUB个人空间4J9Y(K |c,LV
       6         </block>
(RHkHO J&{9~0       7      </form>ITPUB个人空间.H.H Xdn"]8fS}
       8  </vxml>
[&HX UH l,zB-K"P0 ITPUB个人空间o7I xg7ow5sW
 
/g@1RnI:J5Q;i-U"Y0      3.1.3 <block>
j$y3K{,hq R0 
@A+vY;G)`k&`0      该元素包含一个没有用户交互发生的代码区域。下面的例子中,<block>包含一个提示元素<prompt>以输出提示信息。下面的例子输出“欢迎使用华琛公司语音系统。”。
/Lg.r,S1U0 
Z!]m^H&_0       1   <?xml version="1.0"?>
&V0?@K MJ Lb^0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
Z!|9qOWQ0       3      <form>ITPUB个人空间E#BO2w/s3w m
       4         <block>
~ tYCLh'm0       5            <prompt>欢迎使用华琛公司语音系统。</prompt>ITPUB个人空间t:U"m^+|[
       6         </block>
'D,y6e&] q3O lJ)d0       7      </form>
u B?,Tl.D:TB0       8  </vxml>ITPUB个人空间o Vb"t+mz
 
7pu't tNBV0 
KEECt0      3.1.4 <catch>
Ph odpoe&p0 
,c1I8qP"I0      捕捉被抛出的事件。它既可以捕捉系统预定义的事件(noinput、nomatch、error、help等),也可以捕捉由抛出的用户自定义的事件。下面的例子中,当输入没有匹配“number”语法时,<catch>捕捉到“nomatch”事件,并输出提示“对不起我没有听懂,请您再说一遍。”,重新回到“phonenumber”输入域。ITPUB个人空间"q8c4Q$|7PO:r~
 
x'nM]&`ew i7yH0       1   <?xml version="1.0"?>
8K&h*l5y%m}1t'\9T0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
:E4Eb4T~QHk0       3     <form>
7m%t i3HD-x6U t1c wY0       4         <catch event="nomatch">
*q:{Apw \F,Ew0       5            <prompt>对不起我没有听懂,请您再说一遍。</prompt>ITPUB个人空间xNWMe-];s5x
       6         </catch>
.L W.g!J5H k4i0       7         <field name="phonenumber" type="number">ITPUB个人空间cq%XB9Ka"B
       8             <prompt>请告诉我您的电话号码。</prompt>ITPUB个人空间r&l2t)Y*l n;LYO,B
       9           <filled>ITPUB个人空间 ^"p\6Atc(U
       10           <prompt>
N8WS6c;r0       11              您的电话号码是<value expr="phonenumber"/>
(g+u8Ka7C I0       12           </prompt>ITPUB个人空间(l6oPV*t Em L w*K
       13          </filled>
xLCzf EA0       14        </field>ITPUB个人空间ozz2`.?:}
       15     </form>ITPUB个人空间 m&b6iLB$[
       16  </vxml>
\(O~6?3_X?q%j1F+h0 ITPUB个人空间r(x_ ^%_cJ uk
 ITPUB个人空间'_F YHO\4WaH#Hv v
      3.1.5 <choice>
cYK1s i*A0 ITPUB个人空间8~/] G `oR-r{}Wc
      定义一个菜单项。下面的例子中,两个<choice>组成两个菜单项“天气预报”和“股票市场”,当输入其中一个菜单项,控制转向由<choice>的属性next所指向的文件。ITPUB个人空间 w5?r8iu%kU r
 
7DL b2My*w0       1   <?xml version="1.0"?>ITPUB个人空间~YJK do+M
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间%t2NQ^.q7@H/Q
       3     <menu>
~/ek`8u,z-vd!Ve0       4        <prompt>
9F s%c#V eo4\5bb:O0       5          欢迎使用华琛公司语音服务系统。今天我能为您做什么?
j i QUog0       6          了解今天的天气情况请说"天气预报";了解股市情况请说"股票市场"。
b0[`-r%I\5Y qz0       7        </prompt>
%Bv&?:b l[gq1t B0       8          <choice next="weather.vxml">天气预报</choice>
M4VLEC ||;|oX0       9          <choice next="stocks.vxml">股票市场</choice>
-@[uJ%}'G{a0       10    </menu>
c4vcr0b(E0       11  </vxml>ITPUB个人空间9Z\qo'D |o
 ITPUB个人空间yO c0Mt;_g&I)I
 ITPUB个人空间 NN d/~Mh
      3.1.6 <clear>
i*S/A1I u.Mp8@0 ITPUB个人空间E"f7}6E#v7u-I9i:a
      清除一个或多个框架项。下面的例子中,当输入不等于5时,清除“result”这个框架项,使控制重新回到“result”这个输入域。ITPUB个人空间ad(uWmgs7r
 ITPUB个人空间U/j]7`.`8U j9|(p
       1   <?xml version="1.0"?>
!O5c/p(dc+E6K(TR0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间 }1?y0@T
       3     <form>ITPUB个人空间bO2|r,u0E#Kz X-L$m
       4        <field name="result" type="number">
B S4ei4_-l t4TQ1o${1@0       5           <prompt>3加2等于多少?</prompt>ITPUB个人空间&q k3x?0atp;P
       6          <filled>ITPUB个人空间'x)bI*l+t0Djl5ku5Y
       7           <if cond="result != 5">
dHqewJ2}q0       8             算错了,重来一遍。ITPUB个人空间%}o9mW d
       9           <clear namelist="result"/>ITPUB个人空间ic#`K3G L&{
       10          <else/>ITPUB个人空间C@*uX`
       11            算对了,祝贺你!
V:]|)_(Q-t-zB0       12          </if>
;m_%_}[@W$U/B[3x0       13        </filled>ITPUB个人空间F"EG+X's-@7rm7\0kX
       14      </field>ITPUB个人空间| ?3A!QpD
       15    </form>ITPUB个人空间K_dV&y Q#kWY P
       16  </vxml>
.p3}H i3k,A0 
1^@.h(PQ%Te0 ITPUB个人空间7}laN.A~
      3.1.7 <disconnect>ITPUB个人空间9R(o#UE"L+}1H A
 ITPUB个人空间%G m5Av/G!y hD"K5X
      结束一次通话。在下面的例子中,输出提示“谢谢使用华琛公司语音系统。再见!”后,<disconnect>马上结束这次的通话。ITPUB个人空间%wIR}?W
 
*M9vIaX h0       1   <?xml version="1.0"?>
~g(\.p\!E{0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
ZF-WP5s3{3HL0       3      <form>ITPUB个人空间O4o O3Ko'O@
       4         <block>ITPUB个人空间%u9Tr SQ4_r8@*O_
       5            <prompt>谢谢使用华琛公司语音系统。再见!</prompt>ITPUB个人空间-p*pVY#Ypg5F H
       6            <disconnect/>ITPUB个人空间]+jC!B r9i;ZZ[
       7         </block>
I$cL"]~%o-f0       8      </form>
Zq eIx5o\v0       9  </vxml>
6lr&y0Zj i)tZ0 ITPUB个人空间S2Yb1QQ(rP(E
 
'imk'}i:z m'kS(z0      3.1.8 <else>ITPUB个人空间:b&V Tg4~Bk[
 ITPUB个人空间0s3E[&hO\!m
      用于<if>中的流程控制元素。在下面的例子中,当输入等于5时,输出提示“算对了,祝贺你!”。
&M-[qa`z/p1}#OM0 
fZfK!@ jz%P0       1   <?xml version="1.0"?>
4d/L([pm;T2xD0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
(q9o7FZ|H!Ht"J(]3W0       3     <form>ITPUB个人空间"O Srp6qy
       4        <field name="result" type="number">ITPUB个人空间!C)r;UUi+S1O"HH
       5           <prompt>3加2等于多少?</prompt>
,TF U6Ik9p7h0       6          <filled>
!PT^2r8z+n A0       7           <if cond="result != 5">
o)}6wcI0       8             算错了,重来一遍。
wR_6P+X4J(@0       9           <clear namelist="result"/>
O1S"Vq|Y3j0       10          <else/>
O;o@Um8o7f@0       11            算对了,祝贺你!
(^mW#e7]7E|0       12          </if>ITPUB个人空间U i}8a$b |,Hv
       13        </filled>ITPUB个人空间;m? [8uDA R T:kh
       14       </field>
[USee0       15     </form>ITPUB个人空间&d@"@'P1dU&@j
       16   </vxml>
w2@1UF.I@-Kq0 ITPUB个人空间)f2y@4hk-L m!p0V
 
PP"~I&q0      3.1.9 <elseif>
1w9k6GI(K0 ITPUB个人空间'omHM }E!B-LD
      用于<if>中的流程控制元素,作用相当于编程语言中的if嵌套。在下面的例子中,当输入不等于字符串“天气预报”且输入等于字符串“股票市场”时,控制转向由<goto>的属性next所指向的文件。ITPUB个人空间Bh l;Y @7V]
 ITPUB个人空间]b8V KS
       1   <?xml version="1.0"?>
` y]oo \;kSx0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间;c)Z*N!]'G
       3     <form>ITPUB个人空间5oME `:hZ
       4        <field name="service">
"@AuWyvX&i0       5         <grammar src="services.grxml" type="application/srgs+xml"/>ITPUB个人空间#rpH"R7d
       6           <prompt>ITPUB个人空间,I3\8N~f+G
       7            欢迎使用华琛公司语音服务系统。今天我能为您做什么?ITPUB个人空间|6j NlMnN
       8            了解今天的天气情况请说"天气预报";了解股市情况请说"股票市场"。
oMYJ5Bo R0       9           </prompt>
#Z0G.~5xZk]Jw0       10          <filled>ITPUB个人空间@`7CKke^q
       11           <if cond="service == '天气预报'">
&]7U.W8qJ0       12            <goto next="weather.vxml"/>
,YqS0]~2]3`&Ph0       13           <elseif cond="service == '股票市场'"/>ITPUB个人空间8N$MW0So-Tm
       14            <goto next="stocks.vxml"/>
kb0yD#L)x0       15           <else/>ITPUB个人空间%|)r%gC L#Z
       16            <prompt>谢谢您使用华琛公司语音系统。再见!</prompt>ITPUB个人空间-Km-A-~1L
       17           </if>ITPUB个人空间)GKO:c:rPk DG0T
       18         </filled>ITPUB个人空间'{ Ow"@"d5ZU+p
       19       </field>ITPUB个人空间9@!T$e$NQu0I
       20     </form>ITPUB个人空间!o?Z Q/Bnm7d]y
       21   </vxml>
P2w,L3uha"qn9M&B0 ITPUB个人空间)Ty!jz*rO C
 ITPUB个人空间L9U [q&`4@;~
      3.1.10 <enumerate>
!Y#mImk(ptC0 
/Q}Ox"F9xB? V0      列举菜单选项。它指定了一个模板,顺序地应用于所有的菜单选项来自动产生一段提示。一般用到的变量有两个,“_prompt”和“_dtmf”,前者表示菜单选项<choice>的提示,后者表示赋给菜单选项<choice>的dtmf序列。在下面额例子中,<enumerate>自动产生了这样一个提示“需要天气预报服务,请说天气预报;需要股票行情服务,请说股票行情;”,并输出这个提示。ITPUB个人空间)]Z-k:wVTk
 
4G1cV8~ | t+UE0       1   <?xml version="1.0"?>ITPUB个人空间wp"HvO G
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间 Pm\$M;D
       3     <menu>
yH6|/mW4eg0       4        <prompt>
9Uqc(B2s0       5          <enumerate>
I#N Cwe@)]0       6            需要<value expr="_prompt"/>服务,请说<value expr="_prompt"/>;ITPUB个人空间3N}-O'X!e1d-d)U4[j
       7          </enumerate>
,g'V;K~8z0       8        </prompt>
9RN4^HB0t0       9          <choice next="weather.vxml">天气预报</choice>
u,g9E7CIJ?0       10         <choice next="stocks.vxml">股票市场</choice>
3GS&w9gf4xv%af0       11    </menu>ITPUB个人空间@ G2Xc Il"di
       12  </vxml>ITPUB个人空间~Ec J*N X
 ITPUB个人空间3m$?*sv`|
 
$D6r(rH p m.G,d f0      3.1.11 <error>ITPUB个人空间#Hi%Q P!c-q5i.{3~L
 
gw sN*_6dUX0?0      捕获一个error事件,它实际上是<catch event="error">的缩写,<help>、<noinput>、<nomatch>也是类似的情况。在下面的例子中,当输入不等于字符串“1234567”时,error事件被捕获,并输出提示“对不起您输入了错误密码。”。ITPUB个人空间}ZM*C+Mq K
 ITPUB个人空间0G7}/C"@o jR} `
       1   <?xml version="1.0"?>
p1s*@.~ Ix&GC0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间zG^&M\&N~6G
       3     <form>ITPUB个人空间%{5et)W1P%w
       4       <error>ITPUB个人空间(m2}F6k:YK2M{y
       5        <prompt>对不起您输入了错误密码。</prompt>ITPUB个人空间op {;h)g|
       6        <disconnect/>ITPUB个人空间Y~5a;kP&@
       7       </error>ITPUB个人空间%q,cF Kj$L;K N
       8       <field name="password " type="digits">ITPUB个人空间^"|B#T3_*o$nZ
       9         <prompt>请输入密码</prompt>ITPUB个人空间DX!T5V}e w
       10      <filled>ITPUB个人空间}d/S1W0]!{B"j
       11       <if cond="password != '1234567'">
T M Wd9`x0       12        <throw event="error"/>ITPUB个人空间Q7@kN(R{ t
       13       <else/>ITPUB个人空间!P Xd ZpWA9m
       14          密码正确。
+nd,~P}4t v0       15        </if>ITPUB个人空间w!X$~'s8{H{
       16       </filled>ITPUB个人空间w#i5ZW!nA |a
       17      </field>ITPUB个人空间0tSji&d0o)P%k8i
       18     </form>
e.wT"M8]-]0z0       19   </vxml>ITPUB个人空间#EE(X(Oo7e"t E c
 ITPUB个人空间)f(PSQ O ?-xw
 ITPUB个人空间}O6Hdk
      3.1.12 <exit>
3VO#j Re.g^f(\0 ITPUB个人空间/]"e `y([+Ti)CO@
      退出一次通话,并把控制交给解释器。与<disconnect>不同的是,<exit>把控制交给解释器后,解释器仍然可以做一些事情,例如,播放最高一级的菜单给用户,或者挂机,或者把用户转接到人工服务,而<disconnect>则是产生一个挂机事件,并清空所有的进程。在下面的例子中,当输入不等于字符串“1234567”时,输出提示“密码错误。”,把控制交给解释器。ITPUB个人空间2W1i_4oA
 ITPUB个人空间'o(Pk2k4E1H!M
       1   <?xml version="1.0"?>
D])ZmY~g0       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间A;\M:hc]*x
       3     <form>ITPUB个人空间"z$IxE&UrDZ H:Zb:B
       4        <field name="password " type="digits">ITPUB个人空间T K\+Og+}l0{ c
       5           <prompt>请输入密码</prompt>
%f{:R2dbOa0       6          <filled>ITPUB个人空间M w)Bd&U9w/w']
       7           <if cond="password != '1234567'">ITPUB个人空间 i&r``%[ PVw
       8             密码错误。ITPUB个人空间'S&K9s A}FP(M
       9           <exit/>ITPUB个人空间)s,GVf/{q6Aj
       10          <else/>ITPUB个人空间9wap X.Zt9Z4b s
       11            密码正确。
o _/C ka^R!G2u c0       12          </if>
,J%Q Fsr;_O0       13         </filled>
~B:[*V,i@6EXD0`0       14       </field>
2G,zy!VG:R7Z0       15     </form>ITPUB个人空间I n2Ij Y izj
       16   </vxml>
's%U*? }(H0 ITPUB个人空间f!^9DT@_ ^6Y
 
!b#_?%DB+e0      3.1.13 <field>ITPUB个人空间tnM0DB2V fd
 
%[c4@t'` JK0      在框架中声明一个输入域,它的属性name用来存储用户的输入。在下面的例子中,当输入匹配“number”语法时(例如输入“23”),用户的输入被存储在变量age中,并输出提示“你刚才说你有23岁。”。ITPUB个人空间8|'aS5LJ
 ITPUB个人空间!bb8R P2Dp0?](f
       1   <?xml version="1.0"?>ITPUB个人空间QZLB'O
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间Q~0Cc4qW{ qc4f
       3     <form>ITPUB个人空间C2uP e7bD0``q
       4        <field name="age" type="number">ITPUB个人空间5N1AFm'~{[(l
       5           <prompt>请告诉我你的年龄?</prompt>
9u"U/c0K5Y0       6          <filled>ITPUB个人空间u S#yYF
       7           <prompt>你刚才说你有<value expr="age"/>岁。</prompt>ITPUB个人空间L'|!c!f)t OBJ
       8          </filled>ITPUB个人空间*ND-_C,i"\
       9        </field>ITPUB个人空间[2UkIIN
       10    </form>
)J^@"U7UT0       11   </vxml>
U0?a%^UX.sA^0 
5VJ U:nJls5|0 
%X4{I)kt8Q:ME2g0      3.1.14 <filled>ITPUB个人空间Ys8NW*N1yDw
 
;]jU I%M uR]0      指定当输入域被填充以后的操作。在下面的例子中,<filled>指定了当输入与被填充后(例如输入“23”),系统应该输出提示“你刚才说你有23岁。”。
:VA(s%C'W b0 
I M-z0OO {%]{@0       1   <?xml version="1.0"?>ITPUB个人空间 K+Cp1ld!{
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间l Dfr9fO
       3     <form>ITPUB个人空间1hf cbZ8N5J G
       4        <field name="age" type="number">ITPUB个人空间${ h Y/@ v(Z!dr~q
       5           <prompt>请告诉我你的年龄?</prompt>ITPUB个人空间x"Zl)|&C:u
       6          <filled>ITPUB个人空间5Qn/~ p.Z x}*l\8Z x#a
       7           <prompt>你刚才说你有<value expr="age"/>岁。</prompt>
;Wydg)a*e:Av0       8          </filled>ITPUB个人空间nFK6zo*@
       9        </field>
;u NFBx2_mj)Z0       10    </form>ITPUB个人空间~]nDp"W.]
       11   </vxml>ITPUB个人空间v&p:WUH8`h;? \
 
^"w-A6@Ec1G2g0 ITPUB个人空间K K}[8xI s2p0ZQl
      3.1.15 <form>
D%j-\5Vo$qp0 ITPUB个人空间*`L dG3sT
      提示信息和接受数据的对话框架,是构成VoiceXML文档的主要元素。在下面的例子中,系统输出提示信息“欢迎使用华琛公司语音系统。”。ITPUB个人空间$l'`)X;K @~_eV7{ x
 
%`Q_#i3M3a5i0       1   <?xml version="1.0"?>ITPUB个人空间 ~ X2IC%hJ aNB)lp
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间P#d/di!~K
       3      <form>ITPUB个人空间mp%EiOmO v
       4         <block>ITPUB个人空间 HN.Q&t j
       5            <prompt>欢迎使用华琛公司语音系统。</prompt>ITPUB个人空间%q'KU,tF I6Ei
       6         </block>
3L*xy%MI,_0       7      </form>ITPUB个人空间-Isuq?
       8  </vxml>
!n:q/n"uD8?)A|\0 ITPUB个人空间[P"yr'h`
 
)`By J~.Fp0      3.1.16 <goto>ITPUB个人空间p'B(L xh3e)E
 
z4] u$[:I1m)g_0      把控制转向在同一个或不同文档中的对话。主要用于三种情况,一、把控制转向同一框架的另外一个框架项,<goto nextitem="block1"/>;二、把控制转向同一文档的另外一个框架,<goto next="#form2"/>,下面的例子就是属于这种情况,控制由form1转向form2;三、把控制转向另一个文档,<goto next="documengt2.vxml"/>。ITPUB个人空间*ev/l+}v/_
 ITPUB个人空间7X3Ls)f;d7Jqqv
       1   <?xml version="1.0"?>ITPUB个人空间ch;` a)]
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">
oG4|-F/^k Ye0       3       <form. id="form1">ITPUB个人空间(V[ h/gie8]
       4         <block>ITPUB个人空间;Th0Sq}9JJ
       5            <prompt>你在form1中。</prompt>
c!bBPN I0       6            <goto next="#form2"/>ITPUB个人空间!g#g{@w}W#O%NX
       7         </block>
aP:{i4\(E0       8       </form>
T2NG,}R]}*MI0       9       <form. id="form2">ITPUB个人空间A vK&NI6`9dX
       10         <block>ITPUB个人空间!Ev:c*fx"dfTN
       11           <prompt>你在form2中。</prompt>
h1NwnU!h0       12         </block>ITPUB个人空间J"e@ g'm
       13      </form>ITPUB个人空间X [ nj*M F
       14  </vxml>ITPUB个人空间4|l'u5z5dp
 
LYh wAE2Hx4w0 
*O VdAv:f@0      3.1.17 <grammar>ITPUB个人空间IZ[_i]!zF.e
 ITPUB个人空间mr-yl o vT MDm `{:e
      指定语音识别或DTMF语法,它可以是内部语法,也可以是外部语法。在下面的例子中,指定了外部语法文件是services.grxml,当输入匹配这个语法时(例如“天气预报”),系统输出“你要了解的是:天气预报”。
6v/bE6u:D`0 ITPUB个人空间p+o/Z j%p NxB C;u
       1   <?xml version="1.0"?>ITPUB个人空间x%\ TJp Z*X
       2   <vxml version="2.0" xmlns="http://www.w3.org/2001/vxml">ITPUB个人空间8i"W0b od9VH\%A%i
       3      <form>ITPUB个人空间^a*v!EUZS#p+Tu\ {
       4         <field name="drink">
rF-I5|I!r#nN0       5            <prompt>你要了解天气预报,还是股票市场?</prompt>ITPUB个人空间.hS"oW(F%O,s
       6            <grammar src="services.grxml" type="application/srgs+xml"/>
D/b DYF ms[0       7         </field>ITPUB个人空间eMhM.{N}(Xj6e6g
       8       <filled>ITPUB个人空间ho-V Pex,Ye'[
       9         <prompt>ITPUB个人空间*z%q,R?)Q.v:Fs4[um
       10          你要了解的是:<value expr="drink"/>ITPUB个人空间N&Xu`q m)|S
       11        </prompt>
$l,od!Y;[H2O8[0f0       12      </filled>
3|6qW Jz0       13     </form>
el_KO W0       14  </vxml>
Z/R&Yy9P'a0 
8yA ^ [iTDTC%Kv0 ITPUB个人空间)MC!f0]*e"fl"t m


TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

Open Toolbar