首页>>厂商>>CTI系统平台厂商>>易谷网络

基于VoiceXML技术可视化IVR设计和实现(二)

上海易谷网络科技有限公司 查玮 2009/12/29

基于VoiceXML技术的可视化IVR系统设计和实现(一)

  交互式语音应答(IVR)系统是电话银行呼叫中心系统的最前端,它的质量直接影响整个系统的稳定性和可扩展性。本文设计的IVR系统主要分为两个模块:可视化过程定义工具(用户交互接口)、流程执行引擎。由于过程定义工具主要是面向用户,它的设计规范首先要符合流程的定义规则,反应到本文中即流程工具涉及到的节点类型均符合IVR的操作动作和相关的业务动作,同时还要生成符合流程执行引擎能处理的文件格式。在流程执行引擎方面,符合VoiceXML的设计框架,将Web应用和语音应用相结合。

3.1 IVR系统结构的总体分析与设计

  IVR系统流程工具是通过使用图形化的编辑界面,将工作流程以图形的方式展现给用户,使用者也可以通过次编辑器根据具体的业务需求将特定的IVR流程反应在图形当中,因此,对于使用者来说,根本不需要知道底层的工作模式就可以很轻松的完整定制工作流程的制作。在这部分中,主要通过使用自定义的节点,以及在节点的属性窗体中进行相应属性的设置来完成工作流程的制作。

  随着IVR技术的发展,与企业级后台数据系统联系越来越紧密。传统的IVR系统已经不能适应Web技术的发展了,本文设计的IVR系统,将用户通过电话操作的过程类比成用户登陆网页的过程,整个业务流程相当于用户所登陆的网站,构成网站的每一个网页可以看成是业务流程中的每一个节点。业务流程交给Web Service来驱动,只要增加对语音操作的解释就可以完成整个语音系统的驱动。而定义的语音操作,本文是通过使用标准的VoiceXML语言来定义,所以流程定义工具所交给执勤引擎驱动的中间文件就是标准的Web页面与VoiceXML标签的集合。

  而IVR系统执行引擎是根据IVR系统的特点,基于VoiceXML技术的设计所实现的流程解释器,主要针对解释执行通过IVR系统流程定义工具所设计的中间文件,并控制硬件交换机及板卡按照工作流程的内容完成相应的功能。
图3.1给出了IVR系统详细的总体结构图。IVR系统总共分为两大部分:软件平台和硬件平台。其中硬件平台主要是硬件厂商提供,本文所设计的系统主要是软件平台的设计和实现。从图中可以看出,整个系统分为三个部分:IVR系统可视化流程定义工具、含有VoiceXML标签的Web页面和执行引擎。

图3.1 IVR系统整体结构图

3.2可视化过程化定义工具的分析

  可视化建模语言的模型必须具备足够丰富的描述能力来表达所需的流程的实体及相互关系,它必须易于实现且有着良好的用户的交互性。一种模型描述方式是使用类过程语言的逻辑和实体描述语言,将IVR工作流程写为一段语言程序,活动、数据和逻辑关系等在内部加以界定;另外一种方式是将活动或逻辑从过程逻辑中抽象出来,形成独立的对象(逻辑关系可以作为活动对象的内部属性,也可以作为独立的对象)。

  传统的实现IVR系统的方法[20],经历了一个由复杂到简单的发展历程。

  它已经由基本代码编写发展到现在的高度抽象的计算机模型的实现方法。在这个过程中主要出现了以下几种方法:

  代码生成:此种方法主要是根据工作流程的要求,由技术人员手工编写代码实现。这增加了开发的难度和系统的复杂度,可扩展性较差,不利于系统的复用,从图2.1所示的可视化建模工具总体框架可以看出,这种方法将过程建模和业务流程以及相关数据和工作流程处理集成在一起,通过代码生成的方式实现工作流过程。

  表格方式:此种方法在过程建模部分由表格方式实现,通过手动添加业务流程执行过程状态;同时将工作流过程中的每一个状态封装成函数或类。在工作流引擎执行过程中,通过读取表格内容,调用相应的函数实现功能。这种方法虽然在一定程度上降低了业务流程引擎部分的复杂,但增加了过程建模的复杂度,导致用户接口人性化程度降低,应用程序交互的接口定义的灵活度受到的限制。

  图和链表方式:这种方法在过程建模部分相对于表格方式做了改进,取消了表格,代之以图和链表,使用户接口部分体现了图形化和人性化的特点。但由于图的结构复杂,用户在使用容易出错,同时业务流程引擎在执行过程中图的结构增加了流程解释执行的复杂度。

  树型方式:树型方式是目前常用的方法,采用的是父-子关系模式。这一模式的指树中的任何节点(状态)的下一个状态节点都以此节点的子节点方式出现。虽然这种方法使用户界面更加清晰,但树的深度加大会给实现业务流程引擎和过程建模工具增加了难度。

  根据上述对传统的IVR系统的分析和实现方法的比较,本文提出VoiceXML应用于可视化建模工具中,在用户接口部分沿用的树型方式,但根据VoiceXML的规范性和灵活性,相邻节点之间的关系由原来的父子关系变为兄弟关系。这样无论过程建模还是在工作流程引擎的实现难度都被极大降低。

  过程定义模型向用户提供的用于抽象描述业务过程的设计元素会通过工作流过程定义工具表达出来,用户使用过程定义工具提供的输入界面,通过将各中设计控件加以组合来完成对实际业务流程的抽象描述[21]。在设计过程定义工具时,本文采用了图形化的用户界面,从而简化了建模操作的复杂行,提高了易用性,有效降低了使用难度。

3.2.1 过程定义建模语言的描述

  根据可视化建模语言描述的方法,语言和编辑器配置项体现了系统的可配置性。它包括三个部分:图元库、编辑器定义文件、界面描述文件。

  图元库是对可视化建模语言语素的定义。编辑器定义文件中包含了可视化语言语法(抽象语法和具体语法)、图元操作定义、静态语义元类与图元的静态关系,采用RGVL的方式来描述。界面描述文件定义可视化语言编辑器的主界面,包括对菜单、各种工具条、各种视图、状态条。

3.2.2 基于可视化技术的过程定义工具的功能

  IVR系统的过程定义工具是一个可视化的软件工具,它主要用于定义工作流模型中各个活动之间的关系[22]。工作流程过程定义向用户提供对实际业务处理过程分析、建模的手段。其输入输出可以用图3.2表达:

图3.2 IVR系统流程开发工具的输入和输出

其功能可以细分为:

  1. 向用户提供定义工作流的操作界面;


  2. 根据用户的输入自动生成以文本形式表达的IVR系统流程抽象描述;


  3. 将以文本形式表达的工作流抽象描述发送给格式化工具组件。

  本文设计的IVR系统的流程定义工具遵循以上规则,它被流程定义者使用,其所有的动作都是由流程设计人员发起的,通过对定义工具进行了统一建模分析,其使用用例图如图3.3所示。

图3.3 IVR系统流程定义工具用例图

  1. 新建流程:用户通过选择“新建工作流模型”菜单或单击工具栏上相应按钮新建一个空的模型文件。


  2. 绘制流程:用户使用定义工具提供的各种建模组件绘制模型。主要包括:IVR系统流程中涉及到各个节点绘制、各个连接点的连线的绘制。


  3. 编辑流程:用户可以用直接操作节点元素,包括选择、删除、平移等功能。


  4. 设置节点属性:用户通过设置节点属性对话框来设置节点的属性。


  5. 保存流程:用户将所建流程以文件的形式保存起来。


  6. 打开模型:用户通过给出的文件列表打开流程文件。

3.2.3 IVR系统流程工具的用户交互方式

  在IVR系统过程定义工具过程中,同用户的交互方式的选择是主要考虑的一个方面。而一般的工作流过程定义工具可以通过两种方式同用户进行交互,一种是基于文本的方式,一种是基于图形的方式。基于文本的方式易于实现,在目前的办公工作流系统中应用比较广泛。但对用户来说,这种定义方法使用比较复杂,不直观,难于创建复杂的流程。而图形化的定义方式具有直观、易于使用的特点,能够方便的定义复杂的流程。由于IVR系统菜单的调整、播放音频文件的更换、业务处理过程的变化等原因,用户的工作流程可能会经常发生变化,直观的图形化定义界面可以使得流程的定义变成一种简单而高效的工作。用户可以相当方便的根据实际变化情况对流程作出修改,而无须修改程序的源代码,从而大大提高工作效率和系统的应变能力,将系统的控制权真正交给用户,而不是掌握在开发者手中。因此,在设计中选择采用图形化的工作流方式来定义IVR系统的流程。

3.2.4 IVR系统流程的节点抽象和定义

  在用户界面采用了图形化的过程方式来定义IVR系统的流程,那么流程定义工具就需要向用户提供一组抽象描述流程的基本设计控件,用户通过使用这些基本控件来可视化的搭建IVR系统的流程。而基本设计控件的选择就同整个系统所选择的过程定义模型密切相关,过程定义模型的一个重要的功能就是为建模用户提供抽象描述实际业务处理过程所必须的设计元素。在设计本文所描述的IVR系统流程定义工具是,采用的是基于流程节点的过程定义模型,流程节点是整个IVR系统流程定义工具定义的唯一设计元素。因此,在用户界面中,向用户提供的是流程中所涉及到的各种流程节点控件,用户通过在设计界面中添加以图形表示的各种流程节点控件,填写相应的流程节点相关属性信息,之后通过使用带箭头的连线来连接不同的流程节点来可视化的定义流转顺序。

  根据IVR系统的流程和本文系统应用的具体项目需求,定义出在大多数IVR系统常用的流程9种节点类型。


表3.1 流程定义工具中的相关图元


3.3 可视化过程定义工具的设计

  作为流程工具,它的设计原则就是,使用最简单易懂的方式,适合各层次的开发人员最快速的开发业务流程。本工具采用的是图形开发的方法,但是最终配置的视图数据是要转化IVR系统执行引擎可解析的模型数据(含有VoiceXML的Web页面)。

  在设计上,首先是定义主框架类,这些类的作用是提供一个通用的可视化流程定义类包,为后面的设计带来便利,以便对界面组件的实现提供便利。

3.3.1主框架类包的定义

  主框架类包CDiagramEditor是整个流程定义工具的骨架。它是由一个从CWnd类(MFC基础类)继承而来editor类、一个data类、一个画图对象类和一些帮助类所组成的。在设计的时候,考虑到程序的可复用性和可扩展性,将editor和data类分开,使其既可以在dialog应用程序中使用,也可以在doc/view应用程序中使用,如图3.4所示。


3.3.2 主框架类描述

下面给出各个类的详细描述:

CDiagramEditor类

  CDiagramEditor类继承于CWnd类,它是处理窗口详细的相关操作,所封装的是一个基础的矢量编辑器,它所生成的是图(diagrams)而不是图片(graphics)。所以它支持小于和大于正常窗口的虚拟屏幕(virtual screen)、网格抓取(snap to grid)、拷贝/复制、“无限制”(所谓无限制,只是在设置撤销栈的大小时取值较大,让使用者感觉上是无限制,其实是有限的)的撤销、放大等等,由于它使用了与之“隔离”的数据容器,所以它既可以被加入对话框(dialog)和文档/视图(doc/view)程序里面去。通常,这个类仅仅在绘图函数不足以满足需要的时候来继承使用的。

CDiagramEntityContainer类

  CDiagramEntityContainer类包含了CDiagramEditor类里的数据。它管理了如拷贝、粘贴、和撤销这类的操作集合。同样为了能在文档/视图使用,它与CDiagramEditor类分成两个类来实现。这也是一些函数功能在这两个类里面同时存在的原因。

  CDiagramEntityContainer类包含了一个CObArray对象,它是由一组继承CDiagramEntity类的实例,用来为编辑器存放实时的数据。同时,也包含了一个CDiagramClipboardhandler指针(作为一个或者多个编辑器间的剪切板)。它还包含了一组CUndoItem用来实现撤销栈。

  通常,CDiagramEntityContainer类是不用继承的,一个CDiagramEditor需要一个CDiagramEntityContainer的实例来保存住对象的数据。在文档/视图应用程序中它作为外部实例,而在对话框应用程序中是作为内部的实例来管理所有的数据。对于前者,需要在document类中申明CDiagramEntityContainer成员,并且需要调用 CDiagramEditor::SetCDiagramEntityContainer来创建;对于后者,则任何特别的操作都不需要去操作,因为在CDiagramEditor::Create被调用的时候CDiagramEntityContainer将会被自动创建。

CDiagramClipboardHandler类

  CDiagramClipboardHandler类为一个或者多个编辑器管理剪切板。它保持着所有CDiagramEntity类实例的拷贝。

CUndoItem类

  CUndoItem类表示CDiagramEntityContainer类中撤销栈的单点入口。

CDiagramEntity类

  CDiagramEntity类所有绘图对象的基类,并由CDiagramEditor类控制和管理。它是继承CObject类,同时允许其实例的集合以CObArrays方式存储。通常,在实现所有绘图类的时候,只要继承CDiagramEntity类,覆盖(overridden)Clone和Draw方法,返回该类指针的拷贝即可。

  为了满足IVR系统执行引擎所需要的文件,CDiagramEntity类支持基本的存储功能,可以存储成.txt文件。在生成符合具体业务流程所产生的文件格式的时候可以通过覆盖FromString和GetString来实现。针对第三章对流程节点抽象,9种流程节点的属性各不相同,因此,每一个流程节点类都应该拥有自己的属性对话框,这些对话框类继承了CDiagramPropertyDlg类。实现的时候只要这些流程节点类拥有一个继承CDiagramPropertyDlg类的实例作为成员变量就可以完成。

CDiagramLine类

  CDiagramLine类主要是完成IVR系统流程中各个节点的连接。在连接线的设计过程中,首先,使用者不需要强制的设置线的大小,应该由其成员函数来设置(SetRect)完成;其次,相应点击事件的区域应该不是矩形,它是一条线;这些都需要在这个类中实现,这样才能有很好的继承性。

CDiagramMenu类

  CDiagramMenu类是一个很简单的类,它的作用是可以方便的定义出弹出(popup)菜单,所完成的功能是在右键单击各个流程节点的时候弹出菜单。

CDiagramPropertyDlg类

  CDiagramPropertyDlg类所展现的是CDiagramEntity对象的属性对话框。在IVR系统流程中反应出来的是对应各个流程节点的属性设置对话框。

CTokenizer类

  CTokenizer类的作用也很简单,它是用来对CString和CStringArray的做string token的。

CGroupFactory类

  CGroupFactory类为CDiagramEntity组产生唯一的标识符。它采用了 MFC中定义“组机制”[23]技术,即可以在屏幕上类似于移动单个实体那样移动整个组的实体集合。

3.3.3 Link类的设计

  在业务流程编辑过程中,流程控制非常重要。流程的走向表现为节点图元之间的关联关系。根据公式2-3,它的抽象语法规则可以描述为

式(3-1)

  表示节点图元可以连接多个关联关系,每个关联关系必须连接到一个节点图元。

  每一个节点保存自己的唯一的节点名称,由CArrowLine类来保存其关联关系,因为两个节点之间的关联关系只有二向性,所以只需要保存一个 节点名称和一个 节点名称。类图如图3.5所示,CLinkFactory类的作用是一个获取当前节点名称,CNodeMenu类是菜单(Menu) 节点类,继承CDiagramEntity类。图中只是以CNodeMenu类未代表来表示所有的节点类。


3.4 目标文件的描述与分析

3.4.1 文件基本框架描述

  本文设计的IVR系统的流程文件是含有VoiceXML标签的Web文件,因此,首先,文件的基本框架必须符合HTML文件框架。而对语音节点的具体描述是通过某个VoiceXML标签或者某些具体标签的集合,其语法符合VoiceXML语音规范。与此同时,有编程经验的用户可以添加自定义代码来定制一些具体Web数据操作,譬如,jsp或者asp的代码。如图3.6所示。

图3.6 目标文件基本框架图

例如,放音节点的完整文件描述如下:


3.4.2 目标文件的生成

  目标文件的基本框架已经确定,所有的流程节点文件都应该满足这个基本框架。不同点就在于语音节点的描述有所不同,而语音节点的描述就是标准的VoiceXML语言。可以看到,事实上 VoiceXML 文件和普通的 html 文件并没有实质的不同,可以完全使用相同的思维方式去理解,唯一不同的是针对特殊的语音 VoiceXML 应用了相应特别的标签,具体可以参考 w3 上有关 VoiceXML 的规范(详见参考资源)。所以,在VoiceXML生成上完全可以调用标准的XML文件生成类来生成。目标文件生成的类图如图3.7所示。

图3.7 目标文件生成类图

MainFramwork
  文件的主框架,主要是标准html标签的生成;

CreateVXMLTree
  调用标准的XML类生成VoiceXML树;

UserAddContent
  插入用户输入的自定义代码;

OutPutFile
  输出目标文件。

3.5 IVR系统执行引擎的分析

  IVR系统执行引擎作为IVR系统的核心,是整个系统的控制中枢。它所完成的功能是对IVR系统业务流程的解释和驱动。

3.5.1基于VoiceXML的执行引擎

  随着Internet和Web技术的迅速发展,越来的企业开始建立自己的门户网站,同时又拥有自己的IVR系统(如图3.8所示),但是两套系统完全独立,语音系统和数据系统没有任何交互或者只有很少的交互。而建立IVR系统的目标就是给客户更好的体验,使客户能方便的通过电话完成更多以前需要登陆企业门户网站,或者亲自去企业或其网点去办理的业务,这就需要IVR系统能跟后台数据系统有更多更好的交互。“语音门户”的概念出现也愈发的证明这一点。


  通过3.1节的分析,可以看出传统的IVR系统的执行引擎虽然完成了对流程的解释和驱动,但是为了获得更多的客户的资料和配合企业的业务逻辑,就得需要再去和后台的企业数据系统去交互,这势必增加了整个系统的负担,相应的运营风险也就随之加大。

  从另外一个方面,到目前为止,人们从Internet获取各种资源时,还只能是借助计算机来实现[24]。而实际上,电话具有比计算机更高的普及率,如果允许人们通过电话来访问Internet的资源,那么这对于Internet的应用发展必将是一次质的飞跃。在这类应用前景的驱动下,VoiceXML使得用户可以通过电话按键或语音来访问Internet上的各种资源,它是语音浏览技术以及语音互联网的核心。图3.9描述了一个基于VoiceXML的现代企业语音门户的系统结构。


  人们在Internet上浏览的网站是程序员们使用HTML(Hypertext Markup Language)开发的Web应用程序,在这些网站上可以浏览到人们所需要的文字、图片、视频等信息。与这种方式类似,程序员可以开发基于VoiceXML的语音应用程序,从而把用户需要的信息以语音的方式提供给用户。用户可以通过手机或者电话等呼叫终端来访问这类应用程序得到他们想获得信息。图3.10显示[25]了基于VoiceXML的语音应用和基于HTML的Web应用的相似和不同。


3.5.2基于VoiceXML执行引擎的结构分析

  执行引擎的目的是为了解释和驱动业务流程,本文设计的IVR系统的流程系统中,语音节点的类型都符合VoiceXML的基本标签。按照本文2.2.2中描述的VoiceXML基本体系结构,基本的执行引擎应该要包含3个部分:文档服务器、VoiceXML解析器和电话平台。因此执行引擎的基本架构如下图(图3.11)描述。

  Web Server模块:用来执行和发送Web相关的请求和文档;

  VoiceXML parser模块:解析VoiceXML页面,同时协调与Web Server和Telephony API之间的联系;

  Telephony Service模块:调用放音、收键等统一的接口。


3.6 IVR系统执行引擎的设计

  IVR系统执行引擎驱动着整个IVR系统的业务流程,本文设计的IVR系统是基于VoiceXML技术,如节3.2里描述的系统架构,执行引擎主要分为两大块:

  1. VoiceXML Parser:负责提供VoiceXML的解析、同Web Server的交互和Telephony Service的交互。

  2. Telephony Service:驱动语音卡语音动作进行相关的操作。

3.6.1执行引擎的总体架构设计

  系统的架构符合VoiceXML标准技术,与传统的IVR执行引擎相比较,除了支持相关的语音业务,对于数据业务的操作则完全交给Doucument Server(Web server)来处理。语音平台完全不用关心怎样去操作数据业务,大大降低了开发的风险和难度。譬如,银行用户在使用电话在访问IVR系统的时候,需要查询自己账户的余额,语音平台只要处理播报余额的工作,在向Web Server提交文档(Web页面)请求后,Web Server便会处理相关的数据操作,查询数据库获得余额,只要将结果返回给VoiceXML解析器,再由VoiceXML解析器通知语音平台完成播报余额的操作。

  系统交互序列图[26]如图3.12所示。当一通呼叫呼入的时候,语音平台会自动检测到有呼叫到达。随后,语音平台(Telephone Service)会将呼叫进入的事件发送给VoiceXML解析器,VoiceXML解析器通过分析URL的内容去装载初始的文档。随后,VoiceXML解析器就会发送一个请求给Document Server(Web Server),获取初始的文档,相当于用户刚刚登陆到一个网站的主页。Web Server在解析完相关的数据业务(例如:查询数据库判断来电是否为黑名单)后,就会向VoiceXML解释器回复一个文档,同时告诉VoiceXML解析器需要解析执行的语音操作,而VoiceXML解释器在解析完所收到返回的文档后会引导语音平台来实现语音系统的相关操作。在这个过程之后VoiceXML解释器会收到语音平台发送过来的结果,根据结构VoiceXML解释器收到的结果不同,触发其向Web Server发送的请求的不同,直到整个一通呼叫结束。这就如同用户在登陆网站的时候,根据自己的喜好选择了不同的页面浏览,直到退出浏览器,完成浏览。

图3.12 IVR系统执行引擎系统交互序列图

3.6.2 VoiceXML解析器的设计

  作为VoiceXML语言的解释工具,文档解析是VoiceXML解析器主要任务,也是执行引擎的重要组成部分,文档解析的内容决定了执行平台的下一步操作,也是整个系统运行的核心。因为VoiceXML文档首先是一个XML文档,所以主要包含对象树生成模块和语义解释模块两个部分。其中对象树生成模块是对VoiceXML文档进行XML方式的解析,解释模块使用FIA算法对生成的对象进行解析。图3.13描述了VoiceXML解析器文档解析的模型。

图3.13 VoiceXML解析器文档解析模型图

1.对象树生成模块

  计算机无法直接对VoiceXML文档操作来实现解释功能,必须把VoiceXML文档转换成易识别、易操作的数据结构。所以,在进行VoiceXML语义分析之前,首先要按照对XML文件的处理方式,用接口程序对文档进行分析,生成一棵VoiceXML对象树。该树包含了从文档中获取的数据和处理数据的方法,并完成部分的初始化,构建索引等辅助工作。这棵树是后面解释模块的核心基础。对象树生成模块负责读取从文档获取模块传来的VoiceXML文档,调用接口程序对文档分析,生成对象树,并把此对象树的指针传给解释器。

  目前最通用的接口为DOM(Document Object Model)和SAX(Simple API for XML)。

  DOM[27]即文档对象模型,是W3C开发的一组独立于语言和平台的结构化文档编程接口,它定义了文档的逻辑结构以及访问和操纵文档的方法。使用DOM模型,程序所面对的XML文档不是一个文本流,而是一棵对象树。程序员可以方便的创建文档、导航其结构,或增加、修改、删除、移动文档的任何部分。

  SAX[28]的诞生是在XML-DEV讨论组上,提出他的原因是有一些情况不适用DOM接口,而且DOM实现太大而且比较慢。SAX接口规范是XML分析器和XML处理器提供的较XML更底层的接口。它能提供应用以较大的灵活性。SAX是一种事件驱动的接口,它的基本原理是,由接口的用户提供符合定义的处理器,XML分析时遇到特定的事件,就去调用处理器中特定事件的处理函数。SAX 的主要限制是它无法向后浏览文档。实际上,激发一个事件后,语法分析器就将其忘记。

  在本文设计的系统中,采用了DOM接口和SAX相结合的方式:使用SAX构建DOM树,主要是因为对VoiceXML语言解释的过程中,需要反复浏览不同的接点元素,采用DOM 树结构会方便许多。结合DOM和SAX的优点,用SAX建立一棵仿DOM的树,树的数据结构的定义更加符合自身的要求,不仅简练,而且在定义节点的同时实现了操作。图3.14显示了用SAX解析方法模拟DOM树的过程。

图3.14用SAX解析方法模拟DOM树的过程

2.语义解释模块

  语义解释模块的主要功能是实现流程文档的解释工作,控制整个的会话过程和与输入输出功能模块实现交互操作。该模块处理的数据结构是对象树生成模块提供的对象树。模块功能的实现依赖于对象树提供的结构及树节点上相应的操作,对象树表述了文档的全部信息以及处理方法,语义解释模块依照这棵树上的信息完成所有控制操作。

VoiceXML文档结构和执行过程

  每个VoiceXML文档都构成一个有限状态自动机,主要是由Dialog组成,主要分为单文档和多文档地执行过程。

  (1)单个文档的执行过程。文档默认的从第一个Dialog开始执行,Dialog没有指定后继的Dialog时,文档解释结束。

  (2)多文档的应用的执行。如果在会话过程中希望使用多个文档来共同完成一个工作,这时就需要采用多文档方式。多文档方式的优点是:应用根文档的变量可以为其他子文档所共享,信息可以被共享和获取,可以从一个文档跳到另一个;应用根文档的语法可以一直保持激活的状态,可以保证用户总是和通用的Form 或Menu 的交互,例如提示给用户的一些具有普遍性的帮助信息等。

Form解释算法[29](FIA:Form Interpretation Algorithm)

  Form 解释算法对VoiceXML文档进行了语义分析和解释,驱动Form、Menu 和用户的交互。FIA 算法主要分为两个阶段:初始化阶段和主循环阶段。

  (1)初始化阶段:完成Form内各种变量的初始化操作,包括计数器置为1,初始化一般变量和Item变量等操作。

  (2)主循环阶段又被分为三个子阶段:选择阶段、收集阶段和处理阶段。这三个子阶段循环运行,直到解释完成为止。

  选择阶段:选择要执行的Item,一般情况是顺序选择没有执行的Item。 当没有发现要执行的Item时,解释操作完成。

  收集阶段: 完成对用户输入信息和事件的收集。首先访问选定的Item 来播放提示音,可以根据提示次数选择提示音,激活语音或DTMF 的Grammar,然后等待收集用户输入或事件。

  处理阶段:对收集到的用户输入信息和事件进行处理。如果用户输入后,对用户输入信息进行语法匹配,执行相应的Filled元素来执行输入处理。如果用户输入匹配的是另一个不同Dialog中的Grammar,则完成当前Dialog的解释,跳转到新的Dialog;如果事件被抛出,选择正确的Catch元素来处理,并执行相应的事件处理过程。在处理完成后,重新进入选择阶段。

  解释器完成文档的语义功能。它获得对象生成模块生成的VoiceXML对象树。按照算法FIA(表单解释算法)搜索VoiceXML对象树、读取树节点的节点属性、调用资源代理模块,通过输入输出模块接口与客户进行语音交互,完成整个交互流程。

3.6.2 Telephoney Service的设计

  当VoiceXML解析器做完解析工作之后,遇到需要语音操作时,就得依靠调用Telephoney API来完成,同时Telephony Service需要向VoiceXML解析器去返回相应的语音操作结果事件。图3.15描述了这一过程。

图3.15 VoiceXML解析器与Telephony Service交互图

  调用的过程相对简单,只需按照标签的定义调用相应的API即可,如当解析到

标签的时候直接调用播放语音文件接口。需要向Telephoney Service调用API所涉及到的VoiceXML标签如表3.2所示。

表3.2 涉及到IVR系统语音操作的VoiceXML标签表

  当Telephony Service处理完相应的语音操作的时候,需要向VoiceXML解析器返回操作结果事件,由VoiceXML解析器重的接收线程来获取,返回事件分为两类:正常事件和挂断事件。正常事件指的是语音卡执行完动作后返回的结果,分为执行成功和失败事件;挂断事件表示语音卡在收到用户挂机事件后发送给解析器的事件。同时,在VoiceXML解析器向语音平台调用Telephoney API的同时,会启动一个计时器来进行超时判断,来处理如果语音平台没有回消息的情况。

3.7本章小结

  本章首先分析了传统IVR系统的优缺点,并基于可视化建模语言设计了IVR系统的总体结构。其次在对过程化定义工具的使用上才采用图形化的方式来实现和用户交互,满足简单易用的特点。最后,分析了传统的IVR系统执行引擎的特性,引入了VoiceXML技术,设计出基于VoiceXML的IVR系统执行引擎的基本框架。

基于VoiceXML技术的可视化IVR系统设计和实现(三)

基于VoiceXML技术可视化IVR设计和实现(四)

作者独家提供CTI论坛稿件,其它媒体谢绝转载

CTI论坛报道



相关阅读:
基于VoiceXML技术可视化IVR设计和实现(三) 2009-12-29
基于VoiceXML的可视化IVR系统设计和实现(一) 2009-09-22
上海易谷与Genesys达成大中华区长期合作伙伴关系 2009-04-17
联络中心与3G应用 2009-04-09

热点专题:  呼叫中心  
分类信息:  IVR技术_与_VoiceXML技术