Software Project Management StandardsSUNTEK R&D SPMS (流程管理)流程编写规范IVR流程编写规范IVRCodingStandard编制单位:新太科技技术开发中心编制时间:2004/2/20文档编号:SPMS-SEP-12版本号:内部试用版变更记录A-ADDED M-MODIFIED D-DELETED目录1.目的42.说明43.流程规范43.1组织结构43.2排版43.3注释63.4命名113.5变量123.6状态133.7函数143.8流程动作基本约定181.目的本部分编写规范适用于新太IPS流程编写。
2.说明本规范作为壹个标准的IPS流程编写规范,其中对于规则是必须遵守的,建议是提醒您需要注意的地方,或者是于该情况下壹个较好的选择。
3.流程规范3.1组织结构规则1-1:于流程文件存放的根目录下,只能有.sc、.cod、.ini文件。
其他的文件,按所属业务不同存放于不同的目录下,保持流程的根目录清洁。
建议1-1:不同类型文件按类型分目录存放,原则是要类型分明,便于管理,便于过期删除,目录下文件如果有无限增长的趋势,请按壹定规则(例如日期)分目录存放。
建议1-2:放音动作所需的语音文件.vox/.v41文件,于./vox/目录存放;流程图等文档说明于./doc/目录下存放。
3.2排版规则2-1:流程中各状态块间保留1行空行。
规则2-2:函数之间保留3行空行。
规则2-3:流程头部配置参数、宏、函数、全局变量定义区域按先后顺序分开且注释含义,便于查找。
例1://*************************************************************//流程配置参数定义//*************************************************************#iniparamstring@sAgentStartTime//座席开始服务时间#iniparamstring@sAgentStopTime//座席结束服务时间#iniparamstring@sCurrencyFaxFile//货币代码传真文件#iniparamint@nMaxTalkRecs//系统最大的可说资源数//************************Endof配置文件***********************//*************************************************************//流程宏定义//*************************************************************#defineINPUTERRLIMIT3//输入错误次数限制#defineACCOUTLENGTH23//账号长度(最长)#defineMAINPATH".\\sysvox\\"//主函数语音文件根目录#defineMAINVOX1"NQQWel.vox"//您好,QQ现已开通千里音缘服务#defineMAINVOX2"NQQCity.vox"//千里音缘目前已开放四川、海南俩地//************************Endof宏定义***********************//*************************************************************//流程函数定义//*************************************************************#functionmain//主函数#functionOnClear_QQCallOut//异常处理函数//************************Endof函数定义***********************//*************************************************************//流程全局变量定义//*************************************************************#declareSRg_sAstring="Thisisastring"//壹个全局使用的数据串#declareFRg_fMyMoney=10.5//壹个全局使用浮点数,表示金额#declareIRg_nCount//整型全局变量表示数目//************************Endof全局变量***********************规则2-4:使用不同编辑工具时,要求定义Tab键为4个空格位(不要用空格填充)。
规则2-5:函数体里状态左缩进壹个Tab键,保持左对齐,该状态下的动作、事件语句左缩进壹个Tab键,保持左对齐。
规则2-6:流程动作语句中,“[”符号右边保留壹个空格;“]”符号左边保留壹个空格;流程动作中参数分隔符“,”右边保留壹个空格。
规则2-7:流程动作语句中,状态跳转符号“->”之前至少要保留壹个TAB 键(最好同壹个状态下的所有->符号均对齐),“->”之后要保留壹个空格。
例2::stNationalQQCallIn//外省用户呼入[Strsub$CallerID,1,2][EqualSR0,"13"]Passed->stLocalQQNormal//本地用户Failed->stNationalQQCall//外地用户规则2-8:iniparam,define,declare等定义时,第二个参数和第三个参数之间用壹个或者多个Tab键间隔开,以对齐美观为准。
示例参见上面例1。
3.3注释规则3-1:壹般情况下,源程序有效注释量必须于20%之上。
说明:注释的原则是有助于对程序的阅读理解,于该加的地方均加了,注释不宜太多也不能太少,注释语言必须准确、易懂、简洁。
规则3-2:流程头部配置参数、宏、函数、全局变量定义区域按先后顺序分开且注释含义。
示例参见上面例1。
规则3-3:流程头部必须注明各种配置参数使用约定。
规则3-4:于流程头部定义全局变量的同时须明确列出该全局变量的含义及使用方案。
例3://***********************全局变量****************************#declareIRg_nLeaveWordType=0//留言类型0发送留言,1转发留言,2回复留言#declareIRg_nCanChoose=1//收听用户资料时是否能够按键选择#declareSRg_sYWBegintime=""//当前业务开始时间字符串yyyy-mm-ddhh:mm:ss//**********************Endof全局变量***********************规则3-5:流程头部必须有自定义函数功能介绍。
规则3-6:函数体开始之前必须有传入、传出参数解释,函数返回值解释。
返回值的壹般0表示正常,1表示有错,9表示异常退出,4表示转座席、8回主流程、7回上级菜单。
例4://*********************************************************//Functionname:FormatTxtFile//Functionusage:用于将文本文件转换成传真文件////传入参数://g_sTxtFileName:需要转换的文本文件;//传出参数://g_sFaxFileName:转换后的传真文件名;//Returned:0转换成功;9异常错误;////厦门建行客服中心//编写日期:03/22/2001//*********************************************************规则3-7:子函数必须有编写/修改日期。
示例参见例4。
规则3-8:如果有和网关交易部分必须明确收发包格式。
例5://**********************************************************//functionname:funcTrans282600//functionusage:对公业务-修改电话银行密码////传入参数://传出参数://Returned:0修改成功;9连接数据库失败////上传报文:|282600|9999||帐号|密码|^//下传报文:|282600|返回码|^//**********************************************************规则3-9:注释应和其描述的代码相近,对子函数代码的注释应放于其上方,需和其上面的代码用空行隔开;对函数中代码的注释应置于右方相邻位置,不可放于下面。
规则3-10:流程文件中尽量使代码右方注释处于同壹列,方便阅读理解。
规则3-11:流程中重要部分壹定要注释。
例如菜单选择后状态跳转。
规则3-12:涉及数据库操作必须注明实际SQL。
说明:明确数据库操作目的,方便后期调试、测试核对流程。
例6://************查询不得注册用户黑名单(如电话卡用户)*************//functionname:funcQueryRegBlacklist//functionusage:查询主叫号码是否于不得注册用户黑名单(如电话卡用户)//传入参数:主叫号码$CallerID//传出参数:无//Returned:0表示非黑名单用户1为黑名单用户2为数据库超时//****************************************************************funcQueryRegBlackList{#declareIRm_nReturn=0//返回值:stWait[Assigng_sSQL,"select*fromqq_RegBlacklistwhereF_callerlike'"] [StrCatg_sSQL,$CallerID][StrCatg_sSQL,"%'"][ExecSQLg_sSQL]//select*fromqq_RegBlacklist//whereF_callerlike‘%%’Passed->stIsBlacklistFailed->stNotBlackListTimeOut->stTimeout:stIsBlacklist[Assignm_nReturn,1]//1表示是黑名单用户[ClearDTMF][SetDTMF"?"][AssignSR0,MAINPATH][StrcatSR0,MAINVOX29][PlayFileSR0]//“本用户不能进行注册”StopPlayBack->stExitDialTerminate->stExitFailed->stExit:stNotBlackList[Assignm_nReturn,0]//0表示非黑名单用户->stExit:stTimeout[Assignm_nReturn,2]//2表示数据库超时->stExit:stExit[Returnm_nReturn]}//************Endof查询不得注册用户黑名单***************规则3-13:播放语音必须注释放音实际文字。