语音杂志平台流程开发培训指南SUNEK第2页SUNEK第3页服务IVRCCSICSSP/HPProxyDBAAAA呼叫控制媒体传输平面维护管理平面OAMServerCCSOAMOAMTERMSoftSwitchMediaGWSignalGW平台模块SUNEK第4页介绍提纲1.编译器的安装及使用2.完成一个业务流程3.动作4.变量5.例解流程开发6.常见问题处理7.讨论8.考试SUNEK第5页编译器的安装及使用1.1绿色安装1.2菜单使用SUNEK第6页1.2菜单的使用VIVR界面示例图SaveNewFunctionOpenProjectNewProjectCutCopyPasteDeleteAlignleftAligntopPrintHideStateMachineTreeViewResetAllLinesCompileSUNEK第7页1.2菜的使用File命令的使用NewProject新建项目NewStateMachine新建状态机Newtext新建文本文件OpenProject打开项目Open打开文件Save保存文件Saveas另存为CloseProject关闭项目Print打印PrintSetup打印设置Exit退出Edit命令的使用Alignleft(只在图形编程界面)图标左右对齐Aligntop(只在图形编程界面)图标上下对齐Undo(只在文字编程界面)撤消Cut剪切Copy复制Paste粘贴Delete删除SUNEK第8页1.2菜单的使用File命令的使用NewProject新建项目NewProject:选择SourceFile格式新建一个业务流程。这个project是一个将以后缀为FRM格式保存的文件。按下newproject这菜单时,程序就为你建了一个新开始的业务流程。SUNEK第9页介绍提纲1.编译器的安装及使用2.完成一个业务流程3.动作4.变量5.例解流程开发6.常见问题处理7.习题SUNEK第10页2.1流程文件介绍配置文件:.sc文件――流程源文件.cod文件――编译生成的可执行流程文件,输出文件,编译、构造通过后,产生的二进制文件..lbj文件――编译过程中产生的连接编联文件,由编译器管理.fdp文件――项目文件,用于流程管理的项目,由编译器管理在上述的几个文件当中,只有.sc文件是我们用来编辑业务逻辑使用的,其他文件都是由编译器产生的,下面,我们再来详细研究一下.sc文件的内部结构。SUNEK第11页#functionmain//主函数main{:stWaitConnect(0)-stExit//Adduser'scode:stExit[RETURN0]}SUNEK第12页2.2流程源文件.sc的结构文件头说明//filename:xxx.scversion://变量规划#declare自定义变量#iniparam配置参数常量说明#define宏的定义主程序体SUNEK第13页2.2流程源文件.sc的结构文件头说明#define宏名宏值——宏定义说明例:文件头中说明#definePromptThanks2000主程序体中[PROMPTPrompThanks]等价于[PROMPT2000]#iniparam类型@参数常量名——配置参数常量说明例:#iniparamint@DBA_ID文件头中说明#iniparamSTRING@UserData主程序体中[ASSIGNSR9,@UserData]配置文件(后缀为.ini)中[Parameters]DBA_ID=25UserData=12345则,主程序体中该语句等价于[ASSIGNSR9,”12345”]SUNEK第14页IVR流程ini文件里的注释,只能使用#和;不能使用//,变量内容128个字节编写ini文件时,下面内容定义String类型的常量,其中V41File1和V41File2的注释正确,V41File3注释错误,V41File3读入IVR时值为“Conf.v41//Conference”。[Parameters]V41File1=Conf.v41;ConferenceV41File2=Conf.v41#ConferenceV41File3=Conf.v41//ConferenceSUNEK第15页2.2流程源文件.sc的结构文件头说明#declareIR自定义变量名——整型自定义变量说明#declareSR自定义变量名——字符型自定义变量说明#declareFR自定义变量名——浮点型自定义变量说明#functionmain定义函数名全局变量(所有函数中可使用):例:文件头中说明#declareSRsTelNo#declareIRiMax=1(初始化)局部变量(某个函数中可使用):例:主程序中的某个函数main{#declareIRiMax=0:stWait…}SUNEK第16页2.2流程源文件.sc的结构主程序体它通常是一组函数定义的系列,每一函数定义可描述如下:函数名{:状态1[动作a1参数···][动作an参数···]事件e1状态s1事件e2状态s2N事件en状态sn[动作a1‘参数···]M[动作am'参数···]:状态2同上:状态m}函数定义系列中的第一个函数必须是主函数(main)SUNEK第17页流程主函数体SUNEK第18页2.3流程的启动与结束流程的启动与结束开始状态:stWait在stWait状态下以Connect事件启动流程结束状态:stExitConnect(0)-正常Connect(2)-外呼在stExit状态下以[Return0]动作结束流程SUNEK第19页2.4注释注释//单行注释/*…*/多行注释SUNEK第20页2.5完成一个业务流程-注意事项注意事项•为了设计图形业务流程的思路清晰,建议在作设计前画出流程图。•为了便于检查,在设计图形业务流程的时候要画线清晰分明。•要作好寄存器数据的规划,避免数据的冲突。有的参数要栏填写指定的数据。•有的动作有事件发生,需要确定每发生一个事件的前因后果。•主函数只能名为main,在开始一个业务流程的时候自动生成。•在一个业务流程程序里面只能有一个主函数。•子函数名不能为main,可根据子函数的意义定为其它文件名。•在一个业务流程程序里面可以有多个子函数。SUNEK第21页介绍提纲1.编译器的安装及使用2.完成一个业务流程3.动作4.变量5.例解流程开发6.常见问题处理7.习题SUNEK第22页3.1数值类数字运算动作divI1,I2//把I1整除I2的值赋给变量I1modI1,I2//把I1整除I2的余值赋给变量I1IntRandI1//产生一个0~I1的随机整数,结果存于IR0中FloatRandI1I2//产生一个0~I1之间的随机浮点数,精确到小数点后I2位。结果存于FR0中SUNEK第23页3.1数值类Assign赋值AssignI1,I2功能:整数I2的赋值给变量I1例子:[AssignIR1,93]将93赋值给IR1,运算结果是IR1等于93。Add加AddI1,I2功能:把整数I2的值加入到变量I1例子:[AddIR1,65]把整数65的值加入到变量IR1,若IR1原值为35,运算结果得:IR1=100。数字运算动作incISUNEK第24页3.1数值类Mul乘MulI1,I2功能:乘法运算,把(I1*I2)的值赋给变量I1例子:[MulIR1,3]若IR1等于8,把(8*3)的值赋给变量I1,即运算结果为:IR1=24。Sub减SubI1,I2功能:把(I1-I2)的值赋给变量I1例子:[SubIR1,20]若IR1为30,即运算结果为IR1=10。数字运算动作SUNEK第25页接收按键DigitI1接收一位话机按键,I1为最大时间(秒),接收到的字符值返回SR0,数字值返回IR0(“*”=11,“#”=12)。结束时产生事件:StopDigits(‘值’)——正常收号结束TimeOut——超时没有收到按键InputI1,I2接收多位话机按键,I1为按键位数,I2为最大时长(秒),接收到的字符返回SR0。按键位数最多31位。结束时产生事件:StopDigits(‘值’)——正常收号结束,或收到一个终止按键。TimeOut——超时没有收到规定长度的按键SUNEK第26页3.2字符类字串运算动作ParseParamS1,I1,S2例如:S1=”param1$param2$param3$param4”S2=”$”[ParseParamS1,2,”$”]取出第二个参数param2。StrLTrimS1例如:[AssignSR1,____abcd][StrLTrim,SR1]去掉SR1中字符串“___abcd”左边的空格,即得字符串:“abcd”。SUNEK第27页3.2字符类字串运算动作StrSubS1,I1,I2(取子串)例如:[StrSubabcdefghijk,3,6]取字串abcdefghijk在第3个字符开始到第6个字符,即取得字符串cdef存入SR0中。StrCatS1,S2(连接字符串)例如:[ASSIGNSR1abc][StrCatSR1,def]先赋值给SR1,SR1=abc,相联“abc”和“def”,得到字符“abcdef”存于SR1中。SUNEK第28页:stPlayPrompt[ClearDTMF][SETDTMF?][ASSIGNSR1,..\vox\fee\][STRCATSR1,$caller][STRCATSR1,vox][PLAYFILESR1]StopPlayBack-stEnableAccountDialTerminate-stEnableAccountFailed-stEnableAccountstPlayPrompt[ClearDTMF][SETDTMF?][ASSIGNSR1,..\vox\fee\][STRCATSR1,SR0][STRCATSR1,vox][PLAYFILESR1]StopPlayBack-stEnableAccountDialTerminate-stEnableAccountFailed-stEnableAccountSUNEK第29页:stGetNowTime//取系统当前时间[AssignIR1,1][NowTime][AssignIR2,IR0][TimeToStrIR0,hms]//把当前时间转换成“YYYYMMDD123456”形式[AssignSR2,SR0][StrSubSR2,9,12]//去掉“YYYYMMDD”[AssignSR2,SR0]//SR2:hhmmss[TimePartIR2,7]//按I2指定的类型,取I2表示的时间的相应部分,返回值为星期(0-6)[EqualIR0,0]//判断星期几Passed-stSetIR0Failed-stGetNowTime1SUNEK第30页3.2字符类字串运算动作StrLenS1(取字串长度)例如:[StrLenabc]取得字符串abc的长度为3,将长度3存于IR0中。StrRightS1,I2(取字符串右侧子串)例如:[StrRightabc,2]取得字符串abc右边2个字串,将字串bc存于SR0中。SUNEK第31页:stInput1[SETDTMF#]//输入取消号码[input7,15]StopDigits('#')-stCheckStopDigits-stCheckTimeOut-stCheckFailed-stCheck:stCheck[ParseParamSR0,1,#][Assignid,SR0]//取消的ID号码[StrLenSR0][CASEIR0]//ID为6位CASE(6)-stunregCASE-stqxSUNEK第32页邮箱管理动作邮箱管理动作例子SUNEK第33页MakeCall200S1,S2,S3产生一个类似200业务的呼叫。S1为被叫号,S2为主叫号,