动态语音树概要设计1XX银行客服中心IVR动态语音树概要设计YY科技(中国)有限公司二零零三年十月动态语音树概要设计2文档信息基本信息项目XX银行客服中心用户XX银行编号HXBCC-20032016-PM-00001版本1.0原著建立日期2003-10-16修订状态○等待修订●正在修订○已修订审核状态●等待审核○正在审核○已审核修订记录日期修订说明修订者审核记录日期审核意见审核者动态语音树概要设计3一、动态语音树要求:在XX银行西安分行的呼叫中心的项目建设中,通过与XX银行总行科技处、软件中心和网上银行业务部的交流,并听取了XX银行已建设呼叫中心的地市分行在客户服务中心使用中的一些经验和建议,针对客户服务中心IVR系统在运行中语音响应慢,交易经常延时的问题特提出本解决方案。XX银行西安分行对IVR语音系统的功能、性能要求罗列如下:(1)提供统一管理和定制、维护ivr流程和功能的界面(2)语音菜单可灵活配置(3)语音应用的启动与关闭容易操作,有良好的界面(4)在工作系统可实现流程变更,对生产系统影响小(5)IVR播音迅速,延迟小二、设计思想:(1)我们将整棵语音树划分为若干个过程和功能,过程是只播放语音或播放语音并取得用户输入,不直接返回结果给用户,不执行交易的语音流程段,相当于语音树的开始和中间节点;功能是指返回结果给用户,执行交易的最末端的语音流程段,相当于语音树的叶子节点。(2)将每个过程进行编号,将他们的定义和相关信息以及彼此的关系在数据库中(Access)给与定义和存储,并在前端提供界面让用户管理和定制、维护和修改。每个过程自身所需的参数和过程与过程之间,以及过程与功能之间彼此联系的接口参数,存储在数据库中。(3)将每个功能也进行编号,将他们的定义和相关信息以及彼此的关系在数据库中(Access)给与定义和存储,并在前端提供界面让用户管理和定制、维护和修改。(4)edify流程设计、开发时利用数据库中的定义和相关信息来进行模块的开发和连接。(5)设计动态语音树前端通过程序将数据库中的数据和前端展现联系起来,用户对语音树的定制、维护修改与数据存储对应。(6)用户每次定制、修改语音树完毕后,执行一遍我们开发的语音树修改提交程序,将edify流程运行前先将所需的参数值预先取到edify服务器本地,解决ivr播音慢,延迟大的问题。(7)Unihub为XX银行西安分行提供的IVR系统建立在EdifyEWF8.0语音平台之上。通过简洁明了的系统管理界面就可以集成EdifyEWF8.0强大的语音应用编辑与管理功能。动态语音树概要设计4系统架构如下图所示:流程管理语音树结构管理语音文件管理语音菜单树数据信息(AccessDataBase)流程管理应用管理EdifyEWF8.0AppObjectSubAppObject应用管理NMS语音传真卡ODBCODBCE1PSTN动态语音树概要设计5三、数据库模型设计和说明:(1)表Procedure1说明:1、我们将一个过程中的语音分为两类:一类是只播放录音,不需要与用户交互,不取得用户输入的,或是取得用户输入(如让用户输入用户名、口令),但不影响语音流程走向的的语音,在表中存放这类语音文件名字的字段我们以Pro_Vox开头,其描述以Pro_Desc开头,如:Pro_Vox1,Pro_Desc1。从1开始,我们在表中最多可定义30个这类语音。edify程序调用并播放语音时我们可以按照需求指定播放哪些编号的语音,也可以从前往后依次播放,如:Pro_Vox1、Pro_Vox2……….Pro_Vox10。我们初步设计预留10个位置给这些需要连续播放的语音文件,用户可以随意增删改,只是需要注意我们是按照1-10这样的顺序播放的,而且注意业务逻辑和需要。剩下的20个位置我们预留给过程中其他的需要取得用户输入,但不确定语音流程走向的语音,如输入客户号,密码,输入股票代码等等,这些语音就需要根据需求和应用需要,在开发前就指定位置,可以根据应用需要变更语音内容(但注意其业务意义),但这个位置语音所代表的意义就不能随便变更了。因为,我们是根据位置来确定这段语音的意义的,如:Pro_Vox11是提示输入客户号的,Pro_Vox12是提示输入客户号密码的,这样我们写应用时,当需要调出提示用户输入客户号的语音时,我们就会去指定位置找这个语音。因此,用户维护时其提示语音内容可以修改,但修改后这个位置的语音的功能还必须保持不变。另一类是既播放录音,而且提示用户输入其选择,一般是(0,1,2,3,4,5,6,7,8,9,#)等单键值,最终结果影响过程走向的语音,在表中我们以Key开头存放可以的按键,存放这类提示选择按键的语音文件名字的字段我们以Voxfile开头,其描述以Voxdesc开头,如:Key0,Voxfile0,Voxdesc0。从0开始,我们在表中最多可定义12个这类语音。edify程序调用并播放语音时我们可以按照需求指定播放哪些编号的语音,也可以从前往后依次播放,如:Key0,Voxfile0,……….Key11,Voxfile11。我们是按照从0到11的依次顺序播放这些提示选择按键语音的,用户调整了他们的存放位置,就调整了播放顺序。不想播放哪段录音也很方便,只需要将这个语音文件名从表中相应的位置删除掉。2、我们将一些程序调用中可能用到的定义信息也放在了表中,如此过程中总共有几个按键走向(也就是有几个二类语音文件)Total_key,有几个一类语音文件Vox_No,最多按几个键,最少按几个键,确认键,返回退出键等。3、我们每个功能块在需要使用,即处于没有关闭的状态时,都必须对应有一个或多个上级父节点(过程)。其实就是在过程表中,能找到它被使用的定义。我们可以定制一个功能,如:FuncClose内容为提示播音:对不起,此功能尚未开通(或已经关闭)。这样当我们需要关闭某一功能的时候,就维护过程表,将相应的按键对应的CallName字段的值置为FuncClose。需要开放时再将相应的按键对应的CallName字段的值置为所对应的功能名称。一般,我们会在某一功能执行完后,将语音流程返回上级菜单。另外,动态语音树概要设计6我们在程序中进行了适当的出错控制,如:在数据库中找不到按键对应的功能名称,或找到的名称与现有所有的功能或过程的名称不能对应,我们提示:系统错误,然后返回让用户重新选择按键。最多返回次数,可以由系统变量MaxError来在表lstVar中定制。字段名字段类型说明Pro_nameTextString(ALL)过程名称(用英文或数字代码)PK用来唯一标识此过程,不可重复,不可让用户修改。Pro_desc过程中文描述Total_key共有几个按键走向Vox_No共有几个一类语音文件Max_key最多按几个键Min_key做少按几个键Valid_ke有效键Complete_key完成确认键Abort_key返回退出键Key0电话上可以输入的按键:0,1,2,3,4,5,6,7,8,9,#,*Voxfile0与按键相关的语音文件名(二类),带后缀,如:1000.voxVoxdesc0语音文件描述Flag0按键后执行过程还是功能的标志:1、过程2、功能CallName0按键后执行的过程或功能的名称或代码。。。。。。。Key11Voxfile11Voxdesc11Flag11CallName11Pro_Vox1一类语音文件名,带后缀Pro_Desc1语音文件描述。。。。。。。。。Pro_Vox30Pro_Desc30动态语音树概要设计7(2)表Function功能表中是语音树中叶子节点的相关信息,我们主要在这里保存语音信息,现在我们暂定每个功能最多可以使用11条语音,从Voxfile1到Voxfile11。针对不同的功能每个文件的意义不同,因此需要注意是维护人员要对业务非常清楚,定义好每个编号的文件的意义后,语音内容可变动,但此编号代表的意义不能随意变动。字段名字段类型说明Fun_nameTextString(ALL)功能名称(用英文或数字代码)PK用来唯一标识此过程,不可重复,不可让用户修改。注意与过程表(Procedure1)中过程所对应的功能保持一致性。Fun_desc功能中文描述TotalVox共有语音文件Voxfile1语音文件名称,带后缀,如:1000.voxVoxdesc1语音文件描述。。。。。。。Voxfile11Voxdesc11(3)表SystemVar这里面的内容需要根据需求,在需求分析之后,详细设计阶段进行确定,目前能想到的有:容许用户出错次数(MaxError)、执行到功能后的返回键(RetKey)(在过程中返回键,可以自己定义)、放置语音文件的目录(VoxDir),如:c:\vox\,注意路径之后带上”\”。字段名字段类型说明NameTextStringEdify流程设计时可能用到的系统变量的代码ValueTextString值(4)表AppVar这里面的内容需要根据应用,在开发过程中间逐步充实,目前能想到的有Icm需要的信息和各种交易过程中需要用到的信息。程序在使用的过程中可以增、删、改。字段名字段类型说明NameTextStringEdify流程设计时可能用到的系统变量的代码ValueTextString值详细表结构和模拟数据参见数据库dongtai.mdb四、基于动态语音树的Edify设计、开发思想动态语音树概要设计8(1)基本思想说明我们基本的思想是根据数据库中各个过程、功能和系统变量、应用变量的定义来动态的去实现根据客户选择的语音树。首先将四个表读到EWF本地,将所有数据取出放在四个相应的List变量中,然后我们从中取得第一个需要执行的过程的相应信息,如:Start,这第一个过程相对来说比较特殊,因为它是程序的开始,相对比较固定,我们可以直接Call(Start)。当我们取得了Start中的相应参数后,播放语音并取得用户输入按键后,我们根据这个按键值去List中取得相应的下一个需要执行的过程或功能的名称,假如是Query。然后,需要我们注意了:1、我们首先约定所有过程和功能在定义和被调用时都是统一的7个参数:lstApp(应用变量),lstVar(系统变量),lstProc(过程定义),lstFunc(功能定义),Phone(电话),Icm(Icm变量),strError(返回错误变量)。2、然后我们根据事先的设计将所有需要的子过程和功能开发出来。3、我们定义一个变量如:strProOrFunName来接收我们取得的下一个需要调用的过程或功能的名称。然后,我们Call(strProOrFunName),如果strProOrFunName的值是Query,我们就调用了Query这个过程,如果是其他的如:Balance,我们就调用了Balance这个过程。这样我们就能通过修改数据库中下一个节点的名称,来实现动态的配置语音树。(2)公用函数说明1、GetProcVoice功能:取得过程中那些不需要用户输入的连续播放的语音文件:Pro_Vox1、Pro_Vox2……….Pro_Vox10。有则播放,没有则不播放。输入:lstProc,strProcName,lstVar输出:strError,sentence说明:返回的strError如果是“Good”,说明取得播放语音的文件,则PlaySentence,否则没有可以播放的语音文件,不播放,程序往下走。2、GetProcVoxS功能:取得过程中那些提示用户输入的,但不是决定走向的,需要播放的语音文件:Pro_Vox11、Pro_Vox12……….Pro_Vox30。根据应用规则,一次只能取一条。输入:lstProc,strProcName,lstVar,intVoxNo输出:strError,sentence说明:intVoxNo是指定取第几条语音,11则是Pro_Vox11,12是Pro_Vox12,以此类推。返回的strError如果是“Good”,说明取得播放语音的文件,则PlaySentenc,否则没有可以播放的