Interactive Voice Response-IVR 项目需要,目前正在学习尝试使用并开发相关功能.
功能支持
http://www.voxeo.com/
Voxeo Prophecy Voice Platform. - Free Download
http://www.voxeo.com/prophecy/
VoiceXML基础教程针对VoiceXML初学者编写,其由浅入深地介绍VoiceXML的主要内容,包括VoiceXML的历史背景与现状、VoiceXML的脚本设计基础等。
第一章 VoiceXML2.0简介
VoiceXML(语音可扩展标记语言)是用来描述语音对话过程的标记语言。其定义了如何使用语音识别、语音合成、互联网访问、数据库访问、语音文件播放、DTMF输入等功能开发一个完整的语音应用系统。用VoiceXML开发的语音应用系统,不仅可以完全代替传统CTI(计算机电话集成) 系统所能提供的功能,而且还可以使应用系统开发过程极其简单快捷、系统有极高的可扩展性、可维护性、可移植性、可重用性和开放性。
1.1 VoiceXML的历史与背景
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年推出。
1.2 为什么要用VoiceXML?
VoiceXML的推出给电话语音系统带来全新的应用和开发概念,使传统的CTI技术从繁琐、封闭的模式中走了出来,使广大的语音系统开发人员可以用极其简单的方法实现复杂系统的开发。
完全替代传统CTI:传统的电话语音系统典型的工作方式是接受用户的按键输入和语音文件播放、跟据用户的需求为用户提供相应服务。基于VoiceXML开发的电话语音系统完全可以替代传统CTI系统所能提供的功能。
语音识别功能:基于VoiceXML开发的电话语音系统除了接受用户的按键输入之外,还可以接受用户的语音输入。系统通过语音识别功能实现对用户输入语音到文本的转换。这对于许多仅用按键输入方式而无法解决或解决起来很繁琐的应用领域很有实用意义。
语音合成功能:基于VoiceXML开发的电话语音系统除了能够播放预先录制的语音文件之外,还可以将系统中的文本转换成语音的方式播放给用户。这对于那些需要播报即时消息和可变信息等的应用领域很有实用价值。
与互联网联结:长期以来,公用电话网和互联网是分离的。随着互联网技术的迅速发展,互联网信息与日俱增,以及互联网相关服务的日新月异,将互联网与公用电话网整合为一体,使广大的电话用户也能享受到互联网提供的信息和服务显得越来越有吸引力。VoiceXML使公用电话网与互联网有机地结合,使两网的信息能够相互流动。例如,电话语音流言可以通过互联网以电子邮件的方式传送到目的地;互联网上的新闻可以通过电话播放给用户等。
灵活的数据库接口:许多电话语音应用系统离不开数据库访问。VoiceXM通过脚本方式提供灵活的数据库接口,使得应用系统可以方便地访问各种数据库,如:Microsoft SQL Server 2000、Oracle、Sybase、Microsoft Access、MySQL等。
简化开发过程:用VoiceXML将电话语音应用系统开发人员从繁琐的编码细节中解脱了出来。开发人员不需要了解相关软件(如语音识别和语音合成)和硬件(如语音卡)API的编程接口,只需要把精力放在应用领域的业务流程上。开发过程轻松快捷、开发周期大大缩短(7-10倍)。VoiceXML使开发人员得以用简单的方法实现复杂的工作。
除此之外,基于VoiceXML开发的语音应用系统具有很高的系统可扩展性、可维护性、可移植性、可重用性和开放性。
1.3 VoiceXML现状
自2000年VoiceXML1.0推出以后经过不断的修改,于2003年1月推出最新的VoiceXML2.0最终推荐版本。根据W3C称,该版本将会比较稳定,鼓励各VoiceXML浏览器生产厂家可以根据此版本进行开发。预计不久VoiceXML2.0将会正式推出。
中国目前也有一些相关行业的公司在着手开发有关VoiceXML的产品。深圳市华琛科技有限公司是国内领先的VoiceXML语音平台生产厂家。在华琛公司的VoPromote平台上,开发人员可以用VoiceXML2.0脚本语言开发应用于各行业的电话语音系统。
1.4 小结
VoiceXML标准的出现给电话语音应用系统的开发带来了全新的概念,同时还大大扩展了语音应用系统的应用范围。可以预计,VoiceXML标准的推广将会极大地推动电话语音应用系统的开发和应用,将给广大的电话用户带来深远的影响。
第二章 VoiceXML2.0基础
本章将简单介绍VoiceXML2.0脚本文件的结构,使初学者对VoiceXML有一个大概的了解。
2.1 VoiceXML2.0脚本结构
现在让我们来看一个简单的例子(行号是为了本文引用方便,其不应该出现在VoiceXML脚本文件中):
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 欢迎使用华琛公司语音系统!
6
7
8
当电话接通,用户将会听到由语音合成的“欢迎使用华琛公司语音系统!”。第1,2和8行是每个VoiceXML脚本文件都应该包含的;第3到第7行是一个对话表,用…标志;在该对话表中有一个块…,其包含了要输出的内容。
如果不用语音合成功能,上面的例子还可以写成:
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5
6
7
8
当电话一接通,用户将会听到预先录制好的语音文件welcome.wav的内容。
用VoiceXML编写语音应用程序,不仅可以方便地实现语音文件以及文本的播放(通过语音合成的功能),而且还可以方便地实现按键输入以及语音输入(通过语音识别的功能)。VoiceXML定义两种基本输入方式:菜单
11
当电话接通,用户将会听到提示“用户您好。请选择华琛为您提供的服务:1 天气预报 2 股票市场”,并等待用户输入;当用户说“天气预报”或按键输入“1”后,系统将转向另一个VoiceXML脚本文件(定义天气预报的对话流)。第3行到第10行定义了整个菜单;第4到第7行是提示
除了菜单方式之外,用输入域也可以接受用户输入:
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5
6 用户您好。请选择华琛为您提供的服务:
7 1 天气预报 2 股票市场
8
9
10
11
12 天气预报
13 股票市场
14
15
16
17
18
19
20 1
21 2
22
23
24
15
16
17
28
29
30
31
32
33
34
该例中定义的输入流程与前面例子中
2.2 VoiceXML2.0元素集 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2.3 语音识别与语音合成
10
11
12
13
14
2.4.5 通过URI访问互联网中的数据库
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 http://vopromote/vxmls/book_examples/internet_database.asp"/>
6
7
8
internet_database.asp:
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4 5 Set conn = Server.CreateObject("ADODB.Connection")
6 conn.open "driver={SQL Server};server=your_database_server;
uid=your_uid;pwd=your_pwd;database=your_database_name"
7 command = "your_command"
8 Set rs = conn.Execute(your_command)
9 %>
10 '"/>
11 '"/>
12 '"/>
13
14
2.5 VoiceXML与数据库的接口
VoiceXML通过其所支持的脚本语言,如ASP、PHP、CGI等访问多种数据库。
在windows操作系统中可以为各种windows支持的数据库连接设置数据源。如果已经为数据库连接设置了相应的数据源,可以这样访问数据库:
Set conn = Server.CreateObject("ADODB.Connection")
Conn.open "dsn=odbc_name;uid=your_uid;pwd=your_pwd"
另外也可以如2.4.5那样直接指定数据库驱动来访问需要的数据库。
总之,ASP、PHP、CGI等所支持的各种访问数据库的接口,VoiceXML都支持,因为VoiceXML支持这些脚本语言。
2.6 小结
用VoiceXML给电话语音应用系统的开发带来全新的概念。开发人员不需要了解语音板卡、语音识别、以及语音合成的API接口,可以任意选择接入不同的数据库,可以不用把时间放在繁琐的编程细节,从而只需把精力放在应用流程的定义。VoiceXML简单易学,尤其是对于有WEB开发经验的开发人员更是轻松。
第三章 VoiceXML2.0脚本设计基础
本章将对VoiceXML2.0元素逐一地进行简单介绍。当VoiceXML脚本文件中需要用到语音识别和语音合成功能时,了解SRGS(Speech Recognition Grammar Specification)语音识别语法标准和SSML(Speech Synthesis Markup Language)语音合成标识语言将有助于语音应用系统的开发。因而,本章除了介绍VoiceXML2.0元素之外,还将简单介绍SRGS1.0和SSML1.0。
3.1 VoiceXML2.0脚本
3.1.1
给一个声明过的变量赋值。在下面的例子中,将“学习VoiceXML”赋值给变量verb。由于的属性expr的值是一个Javascript表达式,用单引号将学习VoiceXML括起来以表示其为字符串而不是变量。下面的例子将输出“我学习VoiceXML”。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5
6
7 我。
8
9
10
3.1.2
播放一个语音文件。下面的例子输出的属性src所指定的语音文件名welcome.wav。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5
6
7
8
3.1.3
该元素包含一个没有用户交互发生的代码区域。下面的例子中,包含一个提示元素以输出提示信息。下面的例子输出“欢迎使用华琛公司语音系统。”。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 欢迎使用华琛公司语音系统。
6
7
8
3.1.4
捕捉被抛出的事件。它既可以捕捉系统预定义的事件(noinput、nomatch、error、help等),也可以捕捉由抛出的用户自定义的事件。下面的例子中,当输入没有匹配“number”语法时,捕捉到“nomatch”事件,并输出提示“对不起我没有听懂,请您再说一遍。”,重新回到“phonenumber”输入域。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 对不起我没有听懂,请您再说一遍。
6
7
8 请告诉我您的电话号码。
9
10
11 您的电话号码是
12
13
14
15
16
3.1.5
定义一个菜单项。下面的例子中,两个组成两个菜单项“天气预报”和“股票市场”,当输入其中一个菜单项,控制转向由的属性next所指向的文件。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
11
3.1.6
清除一个或多个框架项。下面的例子中,当输入不等于5时,清除“result”这个框架项,使控制重新回到“result”这个输入域。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 3加2等于多少?
6
7
8 算错了,重来一遍。
9
10
11 算对了,祝贺你!
12
13
14
15
16
3.1.7
结束一次通话。在下面的例子中,输出提示“谢谢使用华琛公司语音系统。再见!”后,马上结束这次的通话。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 谢谢使用华琛公司语音系统。再见!
6
7
8
9
3.1.8
用于中的流程控制元素。在下面的例子中,当输入等于5时,输出提示“算对了,祝贺你!”。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 3加2等于多少?
6
7
8 算错了,重来一遍。
9
10
11 算对了,祝贺你!
12
13
14
15
16
3.1.9
用于中的流程控制元素,作用相当于编程语言中的if嵌套。在下面的例子中,当输入不等于字符串“天气预报”且输入等于字符串“股票市场”时,控制转向由的属性next所指向的文件。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5
6
7 欢迎使用华琛公司语音服务系统。今天我能为您做什么?
8 了解今天的天气情况请说"天气预报";了解股市情况请说"股票市场"。
9
10
11
12
13
14
15
16 谢谢您使用华琛公司语音系统。再见!
17
18
19
20
21
3.1.10
列举菜单选项。它指定了一个模板,顺序地应用于所有的菜单选项来自动产生一段提示。一般用到的变量有两个,“_prompt”和“_dtmf”,前者表示菜单选项的提示,后者表示赋给菜单选项的dtmf序列。在下面额例子中,自动产生了这样一个提示“需要天气预报服务,请说天气预报;需要股票行情服务,请说股票行情;”,并输出这个提示。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
12
3.1.11
捕获一个error事件,它实际上是的缩写,、、也是类似的情况。在下面的例子中,当输入不等于字符串“1234567”时,error事件被捕获,并输出提示“对不起您输入了错误密码。”。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 对不起您输入了错误密码。
6
7
8
9 请输入密码
10
11
12
13
14 密码正确。
15
16
17
18
19
3.1.12
退出一次通话,并把控制交给解释器。与不同的是,把控制交给解释器后,解释器仍然可以做一些事情,例如,播放最高一级的菜单给用户,或者挂机,或者把用户转接到人工服务,而则是产生一个挂机事件,并清空所有的进程。在下面的例子中,当输入不等于字符串“1234567”时,输出提示“密码错误。”,把控制交给解释器。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 请输入密码
6
7
8 密码错误。
9
10
11 密码正确。
12
13
14
15
16
3.1.13
在框架中声明一个输入域,它的属性name用来存储用户的输入。在下面的例子中,当输入匹配“number”语法时(例如输入“23”),用户的输入被存储在变量age中,并输出提示“你刚才说你有23岁。”。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 请告诉我你的年龄?
6
7 你刚才说你有岁。
8
9
10
11
3.1.14
指定当输入域被填充以后的操作。在下面的例子中,指定了当输入与被填充后(例如输入“23”),系统应该输出提示“你刚才说你有23岁。”。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 请告诉我你的年龄?
6
7 你刚才说你有岁。
8
9
10
11
3.1.15
提示信息和接受数据的对话框架,是构成VoiceXML文档的主要元素。在下面的例子中,系统输出提示信息“欢迎使用华琛公司语音系统。”。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 欢迎使用华琛公司语音系统。
6
7
8
3.1.16
把控制转向在同一个或不同文档中的对话。主要用于三种情况,一、把控制转向同一框架的另外一个框架项,;二、把控制转向同一文档的另外一个框架,,下面的例子就是属于这种情况,控制由form1转向form2;三、把控制转向另一个文档,。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 你在form1中。
6
7
8
9
10
11 你在form2中。
12
13
14
3.1.17
指定语音识别或DTMF语法,它可以是内部语法,也可以是外部语法。在下面的例子中,指定了外部语法文件是services.grxml,当输入匹配这个语法时(例如“天气预报”),系统输出“你要了解的是:天气预报”。
1 <?xml version="1.0"?>
2 http://www.w3.org/2001/vxml">
3
4
5 你要了解天气预报,还是股票市场?
6
7
8
9
10 你要了解的是:
11
12
13
14
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12476590/viewspace-217056/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/12476590/viewspace-217056/