12IVR流程开发高阳圣思园培训部3题目•概述•IVR的语法•IVR的事件说明•IVR的系统变量•IVR的基本动作•IVR的实例4IVR流程原理有限状态机模型基本原理:状态机+事件驱动+可叠加的原子功能模块。5有限状态机FSM举例家里办公室咖啡厅工作聊天休息闹钟响了约会短信老婆电话6•TRACEON//设定跟踪•FUNCTIONMAIN{•家里:•休息(8小时)•闹钟响了[10]-办公室•办公室:•工作(8小时)•约会短信[1]-咖啡厅•咖啡厅:•聊天(西施,貂婵)•老婆电话[3]-家里•}7IVR流程的一个简单例子•流程图表示欢迎进入本系统1:查询个人资料2:点歌3:听留言0:退出查询个人资料点歌听留言退出开始8IVR流程简单例子的文本描述文本代码描述stConnected:PlayFile(“HN0014.pcm”,“?”)//播放“你好,欢迎进入本系统”。查询个人信息请按1,点歌请按2,……EvtReturn[0]-stCheckPushedButtonEvtReturn[3]-stCheckPushedButtonEvtReturn[-1]-ENDstCheckPushedButton:CheckPushedButton()EvtReturn[1]-stQueryPersonalInfoEvtReturn[2]-stSendSong……EvtReturn[-1]-ENDstQueryPersonalInfo:Fun_QueryPersonalInfo(IR0)EvtReturn[0]-stRestartChoiceEvtReturn[-1]-stSystemBye9编译的一个过程使用图形方式说明:从流程源代码Æ通过编译器编译Æ流程运行中间代码Æ加载到语音平台Æ运行。01010100101语音平台10编译过程的文字描述编译过程1首先用户要用文本书写器或其它任何一种文字书写器编写源代码.2编译器将检测用户源代码是否有词法或基本的语法错误,如有,将提示用户错在何处,若无则提示编译成功,请保存输出文件...3通过语法编译器将用户代码编译成中间代码*.bin.4通过加载到语音平台就可以将*.bin解释执行.11编译器外观12编译器概述•RTCS_COMPILED.exe:编译器可执行文件。(必需与table文件夹放在同一目录下)•table文件夹:内含include,inifile,outputbinfile,sourcefile四个文件夹,其中include,inifile必需存在。13编译器环境目录说明•include文件夹:存放预先编好的各种库函数,必需存在。•inifile文件夹:存放生成系统所需各种.ini文件,必需存在。•sourcefile文件夹:存放用户编写的流程文件。•outputbinfile文件夹:存放编译后的用户中间代码。•compiled.ini:存放生成系统所需各种列表的信息。14代码文件•*.txt:用户编写的流程源代码。•*.bin:编译后的用户中间代码。15流程的组成•一个流程Å状态块s•状态块Å动作列表s、状态转移列表s•状态转移列表Å事件s、结果s、转移的新状态16主题•概述•IVR的语法•IVR的事件说明•IVR的系统变量•IVR的基本动作•IVR的实例17•#include子函数定义文件名//不带扩展名的子函数文件名•#define宏定义名宏定义值•#function子函数预定义名•TRACEON•//指示流程执行时是否可以被跟踪,ON表示可以被跟踪,OFF表示不能被跟踪•//主函数定义•FUNCTIONMAIN{•//状态块1定义•状态1:•动作名字1(…)//动作可以是系统提供的原子函数,也可以是自定义的函数•…•动作名字m(…)•事件1[事件值]•动作列表•Æ状态•…•事件k[事件值]•动作列表•Æ状态•动作列表•//状态块2定义•状态块2•…•状态块n•}18•//子函数定义•FUNCTIONsubfunc1{•子函数状态1:•动作名字1(…)•动作名字2(…)•…•动作名字m(…)•事件1[事件值]•动作列表•Æ状态•事件2[事件值]•动作列表•Æ状态•…•事件k[事件值]•动作列表•Æ状态•动作列表•//状态块2定义•子函数状态块2•…•子函数状态块n•}•…子流程的概念19IVR流程头部信息•#include子函数定义文件名子函数定义文件,用来定义子函数功能块,是子函数功能块的描述文件,这里的文件名称不需要带扩展名。•#define宏定义名宏定义值可以把常量用有意义的名字表示,使流程比较明了。•#function子函数预定义名子函数预定义声明,用来说明流程要用到的自定义函数。20IVR的语法-基本元素•流程用到的基本元素有:1关键字:#include#define#functionFUNCTIONMAINBEGINENDTRACE21IVR的语法-基本元素2标志符:‘{‘用来标志函数体的开始‘}’用来标志函数体的结束‘(’用来标志动作参数的开始‘)’用来标志动作参数的结束‘-’用来标志状态的迁移‘:’用在状态名定义的后面22IVR的语法-基本元素3预定义标识符:宏4事件:5动作:6系统变量:23IVR的语法-基本元素7动作参数类型:寄存器:IR0–IR64、SR0–SR64、FR0–FR64系统变量:整形、字符串型、符点型常量:整形、字符串型、符点型24主题•概述•IVR的语法•IVR的事件说明•IVR的系统变量•IVR的基本动作•IVR的实例25IVR的事件说明(1)EvtReturn基本动作或子函数的返回事件,事件所带的值(EvtReturn[n])表示返回结果。(2)EvtStart启动子函数的事件,一般子函数的格式为:FUNCTIONfunc_name{BEGIN:EvtStart…}26IVR的事件说明(3)EvtTimerExpired定时器超时事件。(4)EvtDelivered呼叫到达事件,用来启动一个流程,表示有用户呼入,请求IVR服务27主题•概述•IVR的语法•IVR的事件说明•IVR的系统变量•IVR的基本动作•IVR的实例28IVR的系统变量整型4个字节字符串最大长度512字节浮点类型等价于double类型29IVR的系统变量通用系统变量IR0、IR1…IR63:整形寄存器变量,流程局部变量,作用范围:一个函数体SR0、SR1…SR63:字符串寄存器变量(最大长度512字节),流程局部变量,作用范围:一个函数体FR0、FR1…FR63:符点形寄存器变量,流程局部变量,作用范围:一个函数体30•事件结果系统变量_result:整型系统变量,表示事件返回结果值.函数返回_EventData:字符串类型系统变量(最大长度512字节),存放事件所携带的数据串GetDigit()31呼叫信息系统变量_CalledNumber:字符串类型系统变量,被叫号码_CallingNumber:字符串类型系统变量,主叫号码32数据访问系统变量参数变量,系统支持64个参数变量,类型为字符串,长度为512。_Field1(STRING)_Field2(STRING)…_Field64(STRING)33数据访问系统变量_SPID(STRING):SP标识_ServiceID(STRING):服务标识_OperateID(STRING):操作标识_FieldNum(INT):有效参数个数34主题•概述•IVR的语法•IVR的事件说明•IVR的系统变量•IVR的基本动作•IVR的实例35IVR的基本动作PlayFile(string,string)参数1:string要播放的语音文件名参数2:string可以打断放音的DTMF串,?代表按任意键打断,表示不打断功能:向用户播放语音文件返回结果:EvtReturn[0]表示播放完成;EvtReturn[3]表示被按键打断;EvtReturn[-1]表示失败,返回值存放在系统变量中_Result中,-1表示除其它任意值。36GetDigits(int,int,string)参数1:int接收用户按键最大个数参数2:int按键之间的时间间隔,时间单位:秒参数3:STR可以打断收号的DTMF串功能:接收用户按键返回结果:EvtReturn[0]表示接收按键完成,所收的用户按键存放在系统变量_EventData中EvtReturn[4]表示接收按键超时,所收的用户按键存放在系统变量_EventData中EvtReturn[-1]表示失败,返回值存放在系统变量中_Result中,-1表示除其它任意值。37CheckPushedButton()参数无功能:检查用户按键返回结果:EvtReturn[0]按键0EvtReturn[1]按键1...EvtReturn[9]按键9EvtReturn[10]按键#EvtReturn[11]按键*38数据访问函数DataAccess(int,int,int)参数1:数据操作模板号参数2:整型参数,数据源索引号参数3:整型参数,超时时长,时间单位:毫秒功能:数据操作,(_FIELD1–FIELD64)是数据存取操作的参数值,_FieldNum存放有效参数个数,_SPID存放SP标识,_ServiceID存放服务标识,_OperateID存放操作标识返回结果:EvtReturn[0]表示数据操作成功,数据结果存放在(_FIELD1–FIELD64)中EvtReturn[-1]表示失败,返回值存放在系统变量中_Result中,-1表示除其它任意值。EvtTimerExpired[-1]超时无应答39Strlen(int,string)参数1:字符串类型,结果参数参数2:字符串类型,输入的字符串功能:计算字符串的长度返回结果事件:无40数据比较函数IEqual(int,int)参数1:整型参数2:整型功能:比较参数1和参数2的值产生结果事件:参数1小于参数2EvtReturn[1]参数1等于参数2EvtReturn[0]参数1大于参数2EvtReturn[2]41SEqual(string,string)参数1:字符串型参数2:字符串型功能:比较参数1和参数2的值产生结果事件:参数1小于参数2EvtReturn[1]参数1等于参数2EvtReturn[0]参数1大于参数2EvtReturn[2]42基本数据操作IAssign(int,int)参数1:整型参数2:整型功能:把参数2的值赋给参数1没有结果事件返回SAssign(string,string)参数1:字符串型参数2:字符串型功能:把参数2的值赋给参数1没有结果事件返回43StoI(int,string)参数1:输出整型数参数2:输入字符串参数功能:把字符串类型的参数2转换成整型数,放在参数1中没有结果事件返回ItoS(string,int)参数1:输出字符串类型数据参数2:输入整型参数功能:把整型参数2转换成字符串,放在参数1中没有结果事件返回44IAdd(int,int)参数1:整型参数2:整型功能:参数1=参数1+参数2没有结果事件返回SAdd(string,string)参数1:字符串型参数2:字符串型功能:字符串连接操作,如果字符串超长,则把超出部分截掉没有结果事件返回45ISub(int,int)参数1:整型参数2:整型功能:参数1=参数1-参数2没有结果事件返回StrCat(string,string)参数1:源字符串参数2:添加子串功能:参数1=参数1+参数2,超出字符串最大长度部分自动截掉没有结果事件返回46Switch(int)参数1:整形功能:判断参数值返回结果:EvtReturn[0]值为0EvtReturn[1]值为1...EvtReturn[n]值为n返回值存放在系统变量中_result中,其它返回事件的表示方法为:EvtReturn[-1];47系统操作函数StartTimer(int)参数1:整形,单位是毫秒功能:启动流程定时器,参数1指示定时时长,单位是毫秒。在IVR系统中,定时器