FLOW销售工作流程怎么写系统的编写目的怎么写?

语音呼叫系统IVR流程编写文档整理,SmarTele 脚本 整理
一、系统功能概述
SmarTele语音流程脚本语言是针对“SmartDev语音平台”而设计的,用于实现语音流程定制。SmarTele脚本语言采用开放式结构,以独立文本文件为信息存放基础,文件之间可以相互调用,简便易学,维护方便。
可以使用“TeleEdit.exe脚本编辑器”或写字板等工具编辑修改。
&&&&&&&&通过SmarTele,可以实现以下功能:
1、基本功能
◆2、扩展功能
◆系统提供调用动态连接库接口,对于一些不经常变动的功能模块、复杂的运算、需要保密的信息,可以通过动态连接库实现。
◆在一些大型项目应用中,IVR语音系统需要和其他系统交互信息,访问远程数据库、大型数据库、保密数据库等,这种情况下,需要设立通信网关,作为代理服务器使用。
这种用法经常在“电话银行系统”、“证券委托的交易系统”使用。
3、系统其它特点
二、系统性能指标
1、性能指标
系统支持分布处理,通过IVR网关,实现多主机共享语音资源,具有很强的扩充能力。
2、平台支持的语音产品
1)、美国Dialogic公司的产品(全世界应用最广泛的语音产品,包括模拟卡及PCM数字卡)
&&&Proline/2&&&&&&&&&&&&&&&&&&&&&多功能2线语音卡
&& Dialgic/4、D/41D、&D/41ESC&4线语音卡
&& Vfax/40SC、CP/4SC&&& &&&&&&4线传真卡&
&&&DTI/301、&D/300SC-E1&&&&&&&数字中继卡
&& MSI/80SC&&&&&&&&&&&&&&&&&&&人工座席转接卡
&PCCS6-2E1&&&&&&&&&&&&&&&&&&&七号信令卡
2)、美国NMS公司的产品(开放式电信的领导者,完美电信级CTI解决方案)
QX2000(FAX)&&&&&&&&&& 4线语音卡(传真)
AG2000&&&&&&&&&&&&&&&&& 8线语音卡(传真)
AG/2E1/4E1&&&&&&数字中继卡(1E1、2E2、4E1)
CX1000_R、CX2000_R&&&&&&人工座席转接卡
TX2000、TX3220&&&&&&&&&&七号信令卡
3)、三汇公司的产品(国产卡)
SHT-8B/PCI(FAX)&&&&&&& 8线语音卡(传真)
SHT-8B/PCI(FAX)&&&&&&& 16线语音卡(传真)
SHT-120A-CT/PCI&&&&&&&&&&数字中继卡(1E1、2E2、4E1)
QX10000_4LV/8LV&&&&&&&&&&&&4线/8线语音卡
&Talks 4R/8R&&&&&&&&&&&&&&&&4线/8线录音卡
&深圳东进语音产品
三、系统功能模块
3.1、系统提供四种类型变量
&&&系统提供四种类型变量,每种变量数量为99个,变量在每次建立呼叫时清空,一次呼叫过程中保持不变。变量名称约定如下:
1.整数型&& D1,D2,D3,… D99
&& 2.浮点型&& F1,F2,F3,…F99
&& 3.字符串型&S1,S2,S3,… S99
&& 4.内置变量
CALLER:主叫号码,字符串型,按通道存放。
CALLED:被叫号码,字符串型,按通道存放。
CHBUF:通道变量,一般用于存放接收的DTMF码,字符串型,按通道存放。
如果是智能总机业务请在流程中将做
LET&LASTKEY=A
LASTKEY&是系统内部变量,在整个语音流程中不要再改变这个参数的内容
R168:用来保留小号用户代码
&&&&&&&&&&LET&F1=S89&&& #S89是用户输入的小号代码
LET&R168=F1&& #保存在R168中由系统统一处理
REP:失败后返回的结果
&&&& REP&& 1&被叫占线
&&&&&& 2&无人接听
&&&&&&&其他&
LANG:存放ACD转接的路由号码
&&&&&&&&&&&LET&LANG=1&& #第一次路由
LET&LANG=2&& #第二次路由
LET&LANG=3&& #第三次路由
CH:执行本流程的通道号,整数型。
GBUF:存放本站点的长途区号(如北京-010,广州-020,西安029)
3.2、系统流程节点
一个完整的语音流程,可以由一个、或多个语音流程文件组成,一个流程文件是由若干个语音节点组成的。
一个流程文件不能超过10000行,每个节点不能超过100&行。
一个语音节点的模式为:
节点命令&[参数1、参数2 ….. ]&NEXT= [下一个节点号]&或
节点命令&[参数1、参数2 …..&]&NEXT= [Sx:下一个节点号]&或
节点命令&[参数1、参数2 …..&]&LINK= [系统流程号]
节点命令&[参数1、参数2 ….. ]&NEXT= [下一个节点号]
1、语音节点
节点格式1:NODE=x
使用时注意以下几点:
A、起始节点必须为:NODE=1
B、节点NODE=0&作为系统保留节点,通道挂机之前调用。只允许执行LET、CALL、WHILE、DB_类命令。
2、节点命令:
完成语音的一个基本操作,如:录音、放音、拨号等。
&&&&&&&&&&&&&&&&&&&系统定义了20多个节点命令,如:PLAY_VOX、PLAY_ONE_DTMF等,具体用法详见第四章、系统节点命令描述。
3、参数1、参数2…..:不同的节点命令,需要不同的参数。
&&&&& NEXT= [下一个节点号]&:流程下一步要执行的操作。
NEXT= [Sx:下一个节点号]:Sx:必须为S1-S99,存放流程文件名
&&&&&&&&& &&&&&&&&&&&&&&&&&下一个节点号:为数字或D1-D99。
&&&&& LINK= [系统流程号]&:将流程下一步连接到应用程序中。
&&&&&&&&&&&&&&&&&&&&&平台常用的系统流程号码:
●&&& 4、例如:
&&&&&&&&&&#---Receive 3 digits-----&&&&&&#号后为注释内容&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&NODE=4&&&&&&&&&&&&&&&&& #本节点编号
&&&&&&&&&&PLAY_MULT_DTMF&C:/V3000/Greeting.voc 3 S1 NEXT=5&&#接收3个DTMF码
&&& &&&&&&NODE=5&&& #接收1个DTMF码,转到流程文件USER2.DAT的节点1。
&&&&&&&&& S1=”C:/V3000/USER2.DAT”&&
&&&&PLAY_ONE_DTMF Greeting.voc S1 NEXT=S1:1
*5、特别说明:
&&&&&& A、# 号后为注释内容
B、所有字母大小写无关
C、LINK= [系统流程号]的用法说明
LINK&用于将流程连接到应用系统的某些固定流程处,同时退出用户定义流程。
系统流程号(TaskProc)的说明可向程序员索取。
&&&&用法:XXX LINK =3000&&&&&(跳转到本模块)&或
XXX LINK =FUN:3000 (跳转到其它模块)
其中,FUN为语音平台功能模块,定义为:
&& VMS&&&&&& =&3,&& //语音信箱
&& FDM&&&&&& =&6,&& //传真服务
如:LINK=1000 直接转移到ChProc=1000 处
&&& LINK=1:1000&直接转移到Fun_port=1,ChProc=1000 处
&&& LINK=11:1000&直接转移到Fun_port=11,ChProc=1000 处
&&&&&&&&参数: 无
&&&&&&&&例如:
1、&转接(2009为听交换机音乐,2019为听回铃)
&LET CHBUF=””
&PLAY_VOX ../Flow/5604/VOC/TT19.WAV LINK=2009&& #转接中,请稍后
2.1 听取留言
&LET CHBUF=604001 - 信箱号码
&DELAY 10 LINK=3:1200
&LET CHBUF=604001 - 信箱号码
&DELAY 10 LINK=3:1001
3.1&发送传真
&LET LASTKEY=4
&LET REP=5
&LET CHBUF=604001 - 传真信箱号码
&DELAY 10 LINK=6:1430
3.2&索取传真
&LET CHBUF=604001 - 传真资料代码
&DELAY 10 LINK=6:1420
PLAY_VOX&../Flow/5555/VOC/009.WAV LINK=2004
&&&&&&&&&&
3.3、系统提供以下几种类型逻辑运算
&&&&& &&&&&大于
&&&&&&& &&&&&小于
&&&&&&& &&=&&&大于等于
&&&&&&& &&=&&&小于等于
&&&&&&& &&&&&&不等于
&&&&&&& &==&&&等于
使用时应配合关键字“IF ”使用。
1、IF 语句的用法
功能:IF 逻辑判断操作, 条件成立,则转到下一个节点;条件不成立, 则分析下一个语句。
语法:IF [param1][op][param2] NEXT=X&&&条件成立,则转移;条件不成立,查找下一句
IF [param1][op][param2] EXIT&&&条件成立,则退出流程。
&&&&&& IF EXIST(filename) NEXT=X &&&&&&文件存在,则转移
&&&&&参数:&& op:&&、&、&=、&=、&&、=
&&&&&& param1:变量
param2:变量或数字,如果字符串中包含保留字符,例如:+,-,*,/,=,空格,Dxx,Fxx,Sxx等,可以使用‘’或“”。
&&&&&&& &&&#----------------------
&&&&&&&&&&&NODE=2
&&&&&&&&&&&IF D1='#' NEXT=3
&&&&&&&&&&IF&D1='1' NEXT=4
&&&&&&&&&&&IF D1='6' NEXT=6
&&&&&&&&&&&PLAY_VOX d:/prompt.wav/lang1/vm5.voc NEXT=100
&IF EXIST(c:/v3000/ptday.voc) &NEXT=100
2、IF...ELSE...ENDIF 语句的用法
语法1:IF [param1][op][param2]
...[COMMAND1]...
...[COMMAND2]...
...[COMMAND3]...
语法2:IF [param1][op][param2]
...[COMMAND1]...
ELSE&IF [param1][op][param2]
...[COMMAND2]...
...[COMMAND3]...
条件成立,则执行[COMMAND1],COMMAND1可以是一条或多条合法语句
条件不成立,则执行[COMMAND2]。
&&&&例如1:NODE=2
&&&&&&&&&&&IF D1='#'
&&&&&&&&&&&&&&&LET S1=12345
PLAY_VOX d:/prompt.wav/lang1/vm5.voc NEXT=100
&&&&&&&&&&&&&&& LET S1=567890
PLAY_VOX d:/prompt.wav/lang1/vm6.voc NEXT=101
&&&&&&&&&& ENDIF
IF EXIST(c:/v3000/ptday.voc) &NEXT=100
例如2:NODE=2
&&&&&&&&&&&IF D1='#'
&&&&&&&&&&&&&&&LET S1=&d:/prompt.wav/lang1/vm5.voc
&&&&&&&&&&&&&&& LET S1=&d:/prompt.wav/lang1/vm6.voc
&&&&&&&&&& ENDIF
PLAY_VOX S1 NEXT=101
例如3:NODE=2
&&&&&&&&&&&IF D1='#'
&&&&&&&&&&&&&&&LET S1=&d:/prompt.wav/lang1/vm5.voc
&&&&&&&&&&&&&&& LET S2=&d:/prompt.wav/lang1/vm6.voc
&&&&&&&&&& ENDIF
PLAY_VOX S1 NEXT=101
&&&例如4:NODE=2
&&&&&&&&&&&IF D1='1'
&&&&&&&&&&&&&&&LET S1=12345
PLAY_VOX d:/prompt.wav/lang1/vm5.voc NEXT=100
&ELSE&IF D=’2’
&&&&&&&&&&&&&&& LET S1=567890
PLAY_VOX d:/prompt.wav/lang1/vm6.voc NEXT=101
&PLAY_VOX d:/prompt.wav/lang1/vm7.voc NEXT=101
&&&&&&&&&& ENDIF
IF EXIST(c:/v3000/ptday.voc) &NEXT=100
3、WHILE...WEND 语句的用法
语法:WHILE [param1][op][param2]
...[COMMAND]...
条件成立,则执行[COMMAND],直到条件满足退出循环。
条件不成立,则不执行[COMMAND]。
&&&&例如1:&NODE=2
&&&&&&&&&& LET D1=1
&&&&&&&&&&&WHILE D1&10
&&&&&&&&&&&&&&&LET D1=D1+1
&&&&&&&&&&&PLAY_VOX d:/prompt.wav/lang1/vm6.voc NEXT=101
例如2:NODE=2
&&&&&&&&&& LET D1=1
&&& &&&&&&&WHILE D1&10
&&&&&&&&&&&&&&&LET D1=D1+1
IF D1&5 NEXT=3
&&&&&&&&&&&PLAY_VOX d:/prompt.wav/lang1/vm6.voc NEXT=101
3.4、系统提供以下几种类型四则运算
+&&&加法
@&取长字符串的子串,不同项目用|号隔开
例如:S4=.45|148.23||567.78|
LET &&& #取S4第一个|号之前的子串,即1234567
LET &&& #取S4第一个|号之后、第二个|号之前的子串,即156.45
LET &&& #取S4第二个|号之后、第三个|号之前的子串,即148.23
LET &&& #取S4第三个|号之后、第四个|号之前的子串,即“”(空)
LET &&& #取S4第四个|号之后、第五个|号之前的子串,即567.78
&&&&&数据类型的转换,字符串的和并等
◆&使用时应配合关键字“LET&”使用。
◆ LET四则运算/赋值操作, 完成运算,则分析下一个语句
&&&◆&LET语句可处理负数
语法:&LET [param1]=[param2]&&&&&&&&&&&&将变量param2的值赋给param1。
LET [param1]=[param2][op][param3]&将变量param2&与param3的运算结果赋给param1。
LET [param1]=[param2][op][param3] [op][param4]
&&Op:+&—&* /&:
&&&& param1 :&变量
&&&& param2,param3:&变量或数字
LET Dxx=Sxx&&&&&&&&&将Sxx中的字符串转换为数字赋给Dxx。
LET Dxx=Fxx&&&&&&&&&将Fxx中的浮点数转换为数字赋给Dxx。
LET Fxx=Dxx&&&&&&&&&将Dxx中的数字转换为浮点数赋给Fxx。
LET Fxx=Sxx&&&&&&&&&将Sxx中的字符串转换为浮点数赋给Fxx。
LET Sxx=Dxx&& &&&&&&将Dxx中的数字转换为字符串赋给Sxx。
LET Sxx=Fxx&&&&&&&&&将Fxx中的浮点数转换为字符串赋给Sxx。
LET Sxx=Sxx1+Sxx2&&&&&将后两个中的字符串合并赋给Sxx。
LET Sxx=Sxx1+Dxx2&&&&&将后两个中的字符串合并赋给Sxx。
特殊用法1: 将应用程序变量值赋给生成器的变量(只限程序员使用)
LET Sxx=CHBUF&&&&&&&将ChBuf[Channl]的值赋给Sxx变量
LET Sxx=CALLER&&&&&&将Calling_code[Channl]&的值赋给Sxx变量
LET Sxx=CALLED&&&&&&将Called_code[Channl]&的值赋给&Sxx变量
LET Fxx=R168&&&&&&&将R168[Channl]&的值赋给Fxx变量
LET Dxx=REP&&&&&&&&将Rep[Channl]&的值赋给Dxx变量
LET Sxx=LASTKEY&&&&将Lastkey[Channl]&的值赋给Sxx变量
LET Dxx=CH&&&&&&&&&将Channl的值赋给Dxx变量
LET Dxx=LANG &&&&&&&&将Lang[Channl]的值赋给Dxx变量
LET Sxx=GBUF&&&&&&&&&将gBuf[Channl]的值赋给Sxx变量
特殊用法2:将生成器的变量值赋给应用程序变量(只限程序员使用)
LET CHBUF=Sxx&&&&&&&将Sxx变量的值或字符串赋给ChBuf[Channl]
LET&CALLER=Sxx&&&&&&将Sxx变量的值或字符串赋给Calling_code[Channl]
LET CALLED=Sxx&&&&&&将Sxx变量的值或字符串赋给Called_code[Channl]
LET R168=Fxx&&&&&&&&将Fxx变量的值或浮点数赋给R168[Channl]
LET REP=Dxx&&&&&&&&&将Dxx变量的值或数字赋给Rep[Channl]
LET LASTKEY=Sxx&&&&&将Sxx变量的第一个字符或单个字符赋给Lastkey[Channl]
LET LANG=Dxx&&&&&&&&将Dxx变量的值赋给Lang[Channl]
LET GBUF=Sxx&&&&&&&&将Sxx变量的值赋给gBuf[Channl]
&例如&: 1、LET CHBUF=604001
&&&& &&2、LET&CALLER=
&&&&&&&&& 3、LET CALLED=
4、LET F1=604001
LET R168=F1
5、LET D1=2
LET REP=D1
&&&&&&&&& 6、LET LASTKEY=A
&&&&&&&&&&&&& &7、LET D1=1
&&&&&&&&&&&&&&&&&&&& &LET LANG=D1
&&&&&&&&& 8、LET S1=GBUF
3.5、系统提供以下几种类型函数
1、DATE()&取日期时间,格式为:YYYYMMDDHHMMSSW。
语法:CALL&DATE(Sxx)
参数: Sxx:存放时间的寄存器,只能为S1..S99.
YYYY:年() MM:月(01-12) DD:日(01-31)&
HH:时(00-23) MM:分(00-59) SS:秒(00-59) W:星期(0-6)
2、STRGET()&截取字符串。
语法:CALL&STRGET(src,des,position,lenth)
参数: src, 存放源字符串的寄存器,只能为S1..S99。
&&& des,&存放目标字符串的寄存器,只能为S1..S99。
&&& position,取字符串的开始位置。
&&& lenth,取字符串的长度。
例如:LET S1=
&&&&& CALL STRGET(S1,S2,5,3)&& // S2&的值为567
3、STRREV()&字符串取反。
语法:CALL&STRREV(src,des)
参数: src, 存放源字符串的寄存器,只能为S1..S99。
&&& des,&存放目标字符串的寄存器,只能为S1..S99。
例如:LET S1=
&&&&& CALL STRREV(S1,S2)&& // S2&的值为
4.STRLEN()&取字符串长度。
语法:CALL&STRLEN(src,Dxx)
参数: src, 存放源字符串的寄存器,只能为S1,S2.S99。
Dxx,&存放字符串长度的寄存器,只能为D1,D2.D99。
例如:LET S1=
&&&& CALL STRLEN(S1,D1)&& // D1&的值为9
5.RAMDOM()&在一定范围内取随机数。
语法:CALL &RAMDOM(range,Dxx)
参数: range, 随机数范围值,可以为D1-D99,1-100000。
Dxx, 存放随机数的寄存器,只能为D1-D99.
例如:CALL RAMDOM(100,D1)&& // D2&的值可能为1-100之间任意一个数值。
6.CREATEDIR()&创建文件夹
语法:CALL CREATEDIR(DirName)
参数: DirName 文件夹名称,如:C:/USERDAT
或存放文件夹名称的寄存器,可以为S1-S99。
7.DISP()&显示寄存器的数值
语法:CALL&DISP(Register)
参数: Register, 存放显示寄存器,可以为D1-D99、F1-F99、S1-S99。
8.TXT_TO_TIF()&将字符串转换为传真文件
语法:CALL TXT_TO_TIF(REG,FAXFILE,OP)
参数: REG,存放字符串的寄存器,可以为S1-S99。
&&&&& FAXFILE:传真文件名
OP: = 1 生成传真的第一行,如果文件不存在,自动生成。
= 2 生成传真文件的中间行
= 3生成传真的最后一行
9.DLL_FUN()&调用动态连接库(DLL)
语法:CALL&DLL_FUN(DllName,FunctionName,&inReg1,inReg2,inReg3,outReg1,outReg2,outReg3)
参数: DllName:&动态连接库(DLL)文件名,可以为S1-S99。
FunctionName:&调用函数名称,可以为S1-S99。
inReg1、inReg2、inReg3:为函数输入变量,可以是S1-S99.
inRegx:为空,可用0或NULL表示。
outReg1、outReg2、outReg3,&为函数返回变量值或结果,可以为S1-S99。
outRegx:为空,可用0或NULL表示。
调用函数名称的入口参数必须为
FunctionName(char * inParm1&,&char * inParm2, char * inParm3,
char * outParm1&,&char * outParm2, char * outParm3,
10.SENDBYUDP()&通过UDP发送消息
语法:CALL&SENDBYUDP(strMessage,method)
参数: strMessage:发送的消息,最大长度为250
method:发送方式:
1:发到指定地址,由IVR语音服务器-&系统参数-&设定TCP/IP通信参数菜单中‘UDP发送数据端口及IP’项设定。
0:广播,由IVR语音服务器-&系统参数-&设定TCP/IP通信参数菜单中 ‘UDP广播及端口IP地址’项设定。
&&&&&&例如:
如果某些流程需要记录语音节点的访问量可以在流程中通过发送UDP消息的方式将相关信息发送给呼叫监控系统。例如在流程中做以下设置:
&& NODE=21
LET S1=IREPORT;UID=615; OP=1;OPNAME=投诉
&CALL SENDBYUDP(S1,1)
&&&&&&&表示615用户的语音流程中的NODE=21是要记录访问量的节点,对应到报表数据的字段为操作1,OPNAME表示本操作节点的名称。
11.SENDBYTCP()&通过TCP发送消息
语法:CALL SENDBYTCP(strMessage)
参数: strMessage:发送的消息,最大长度为250
接收端应该与IVR语音服务器建立TCP连接,作为SERVER端, TCP/IP端口值由 “系统参数-&设定TCP/IP通信参数菜单中‘使用的TCP/IP端口值’项设定”。
12.JOIN_CNF()&将指定的通道加入会议
语法:CALL&JOIN_CNF(ch,cnfid,mothed)
参数: ch, 加入会议的通道号,可以为D1-D99,1-90。
&&&&&& Ch=0,&为本通道
&&&&& Cnfid,会议室号,可以为D1-D99,1-30。
&&&&& Mothed,加入会议方式,1.双工 2.只听
例如:CALL&JOIN_CNF(1,2,1)
13.LEAVE_CNF()&指定的通道退出会议
语法:CALL&LEAVE_CNF(ch,mothed)
参数: ch, 退出会议的通道号,可以为D1-D99,1-90。
&&&&&& Ch=0,&为本通道
&&&&& Mothed,退出会议方式,1.双工 2.只听
例如:CALL&LEAVE_CNF(1)
3.6、系统提供以下几种类型数据库操作
DB 数据库的操作, 完成运算,则分析下一个语句
注:以下语句(SQL),Table Name 可以为Sxx变量
A)&连接ODBC,与指定的数据库相连。
格式:DB_CONNECT DATABASE=[数据库名];UID=[user];PWD=[pass];DSN=[ODBC名]
例如:1) DB_CONNECT DATABASE=PCMDAT;UID=PWD=;DSN=V3000;
B)&断开ODBC,与指定的数据库脱离。
格式:DB_DISCONNECT
格式:&DB_FIND &[字段1,字段2…字段n]&FROM &[表名]&[WHERE clause]
&&&&&&&&&& MAP(REG1,REG2…,REGn)&[Dxx]&&
说明: 1)字段1,字段2…字段n&为数据库中不同的字段。
&&&&& 2)WHERE clause&查询条件,与“SELECT语句”定义一致。
3)REG1,REG2…,REGn&可为D1-D99,F1-F99,S1-S99,用于存放对应
[字段1,字段2…字段n]&的数值,对应位置的数据类型必须一致,例如,
字段5为字符型,REG5应为S1-S99。
4)Dxx:为D1-D99,用于存放查询结果,0&未找到&1,&找到。
&&&&&&& 5)字段为int,double,str均返回+-值&
例如:DB_FIND&&PASS,SDATE,PT&&FROM&&MAILBOX
&&&&&&&&&WHERE&&MAILNO=608&&MAP(S1,S2,D1)&D10
格式:&DB_UPDATE &[字段1,字段2…字段n]&FROM &[表名]&
[WHERE clause]&MAP(REG1,REG2…,REGn)
说明: 1)字段1,字段2…字段n&为数据库中不同的字段。
&&&&& 2)WHERE clause&查询条件,与“SELECT语句”定义一致。
3)REG1,REG2…,REGn&可为D1-D99,F1-F99,S1-S99,数字,字符串,
用于存放变量值,更新[字段1,字段2…字段n]&的值,对应位置的数据类型必须一致,例如,字段5为字符型,REG5应为S1-S99。
例如:&DB_UPDATE PASS,SDATE,PT FROM MAILBOX
&&&&&&&&&WHERE MAILNO=608 MAP(S1,'',D1)
格式:DB_ADD &[字段1,字段2…字段n]&FROM &[表名] MAP(REG1,REG2…,REGn)
说明: 1)字段1,字段2…字段n&为数据库中不同的字段。
&&&&& 2)REG1,REG2…,REGn&可为D1-D99,F1-F99,S1-S99,数字,字符串,
用于存放变量值,更新[字段1,字段2…字段n]&的值,对应位置的数据类型必须一致,例如,字段5为字符型,REG5应为S1-S99。
例如:DB_ADD MAILNO,PASS,SDATE,PT FROM MAILBOX&&
&&&&&&&&&MAP(666,S1,'',D1)
格式:DB_DEL&FROM &[表名]&[WHERE clause]
说明: 1)WHERE clause&查询条件,与“SELECT语句”定义一致。
例如:DB_DEL FROM MAILBOX WHERE MAILNO=666
格式:DB_SQL&SELECT STATE
说明: 1)SELECT STATE,与“SELECT语句”定义一致。
格式:&DB_FUNCTION &function_name[字段]&FROM &[表名]&[WHERE clause]
&&&&&&&&&& MAP(REG)&[Dxx]&&
说明: 1)字段为数据库中指定字段。
&&&&& 2)WHERE clause&查询条件,与“SELECT语句”定义一致。
3)REG&可为D1-D99,F1-F99,S1-S99,用于存放&function_name[字段]
运算的结果,对应位置的数据类型必须一致,例如,
字段为整型,REG应为D1-D99。
4)Dxx&为D1-D99,用于存放执行结果,0&执行错误&1,&执行正确。
5)&function_name为SQL定义的函数,包括:
&&& SUM():计算某一字段之和,字段只能为数字型。
AVG():计算某一字段的平均值,字段只能为数字型。
COUNT():计算某一字段的个数,字段可为数字型、字符型。
MAX():计算某一字段的最大值,字段可为数字型、字符型、日期。
MIN():计算某一字段的最小值,字段可为数字型、字符型、日期。
例如:DB_FUNCTION&&SUM(FEE)&&FROM&&MAILBOX
&&&&&& &&WHERE&&MAILNO=608&&MAP(D1)&D10
四、系统节点命令描述
1、PLAY_VOX&播放一个文件,播放完毕转到下一个节点
&&&&&&&&用法:PLAY_VOX [filename] NEXT=X&&&&
&&&&&&&&参数:&filename:&播放的语音文件名
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
&&&&&&&&&&&&PLAY_VOX d:/prompt/lang1/vm5.voc next=100
2、PLAY_VOX_VOX&连续播放两个语音文件,播放完毕转到下一个节点
&&&&用法:PLAY_VOX_VOX [filename1] [filename2] NEXT=X&&&&
&&&&&&&&参数: filename1: 播放的第一个语音文件名
&&&&&&&&&&&&& filename2:&播放的第二个语音文件名
&&&&&&&&例如:
&&&&&&&&&&&#---------
&&&&&&&&&&&&NODE=4
&&&&&&&&&&&&PLAY_VOX_VOX d:/prompt/lang1/vb1.voc d:/prompt/lang1/ve1.voc next=100
3、PLAY_ONE_DTMF&播放文件完毕后,收一个DTMF转到下一个节点
&&&&用法:PLAY_ONE_DTMF [filename] [Sxx] NEXT=X&&&&
&&&&&&&&参数: filename: 播放的语音文件名
&&&&&&&&&&&&& Sxx:&存放DTMF的寄存器,只能为S1..S99.
&&&&&&&&例如:
&&&&&&&&&&&#---------
&&&&&&&&&&&&NODE=4
&&&&&&&&&&&&PLAY_ONE_DTMF&d:/prompt/lang1/vm1.voc&S1&next=100
4、PLAY_MULT_DTMF&播放文件完毕后,收多个DTMF, 收满长度或遇到'#',转到下一个节点
&&&&&&&&用法:PLAY_MULT_DTMF [filename] [DTMFlen] [Sxx] NEXT=X&&&
&&&&&&&&参数: filename: 播放的语音文件名
&&&&&&&&&&&&& DTMFlen:&接收DTMF的个数
&& &&&&&&&&&&&Sxx:&存放DTMF的寄存器,只能为S1..S99.
&&&&&&&&例如:
&&&&&&&&&&&#---------
&&&&&&&&&&& NODE=4
&&&&&&&&&&&&PLAY_MULT_DTMF d:/prompt/lang1/vm1.voc 3 S1 next=100
5、PLAY_MULT_DTMF_UPDATE&播放文件完毕后,收多个DTMF,
收满长度或遇到'#',
&&&&语音提示”您输入的号码是xxx&-&&确认按1,修改按2&,按1转到下一个节点.
&&&&&&&&用法:PLAY_MULT_DTMF_UPDATE [filename] [DTMFlen] [Sxx] NEXT=X&&&&
&&&&&&&&参数: filename: 播放的语音文件名
&&&&&&&&&&&&& DTMFlen:&接收DTMF的个数
&&&&&&&&&&&&& Sxx:&存放DTMF的寄存器,只能为S1..S99.
&&&&&&&&例如:
&&&&&&&&&&&#---------
&&&&&&&&&&&&NODE=4
PLAY_MULT_DTMF_UPDATE d:/prompt/lang1/vm1.voc 3 S1 next=100
6.PLAY_DIGIT_STRING &播放完语音再播放纯数字串,播放完毕后,转到下一个节点.
&&&&&&&&用法:PLAY_DIGIT_STRING [filename] [DigitBuf] NEXT=X&&&
&&&&&&&&参数: filename: 播放的语音文件名
&&&&&&&&&&&&& DigitBuf:&数字串或存放数字串的寄存器,只能为S1..S99.&&&&&&&&&&&&&
&&&&&&&&例如:
&&&&&&&&&&&#---------
&&&&&&&&&&& NODE=4
&&&&&&&&&&&&PLAY_DIGIT_STRING d:/prompt/lang1/vm1.voc 1234567 next=100
7.PLAY_DIGIT_GSB&播放完语音文件,再播放十进制数字串,&播放完毕后,转到下一个节点
用法:PLAY_DIGIT_GSB [filename] [DigitBuf] NEXT=X&&&
&&&&&&&&参数: filename: 播放的语音文件名
&&&&&&&&&&&&& DigitBuf:&数字串或存放数字串的寄存器,只能为F1,F2..F99.&&&&&&&&&&&&&
&&&&&&&&例如:你查询的分数是:&壹百二拾五点六四”.
&&&&&&&&&&&#---------
&&&&&&&&&&&NODE=4
&&&&&&&&&&&&PLAY_DIGIT_GSB d:/prompt/lang1/vm1.voc 12345.67 next=100
8.PLAY_DIGIT_MONEY&播放完语音文件,再播放货币字符串,播放完毕后,转到下一个节点.
&&&&&&&&用法:PLAY_DIGIT_MONEY [filename] [DigitBuf] NEXT=X&&&
&&&&&&&&参数: filename: 播放的语音文件名
&&&&&&&&&&&&& DigitBuf:&数字串或存放数字串的寄存器,只能为F1..F9.&&&&&&&&&&&&&
&&&&&&&&例如: 你查询的余额是:&壹百二拾五元六角四分”
&&&&&&&&&&&#---------
&&&&&&&&&&&NODE=4
&&&&&&&&&&&&PLAY_DIGIT_MONEY d:/prompt/lang1/vm1.voc 12345.67 next=100
9.PLAY_TTS&播放由文本转换为语音的字符串播放完毕后,转到下一个节点.
&&&&&&&&用法:PLAY_TTS [strText] NEXT=X&&&
&&&&&&&&参数: strText: 字符串或存放字符串的寄存器,只能为S1,S2..S99.
strText最大长度为100,可以是0-9,A-Z,a-z,支持中文二级字库。
(如:&中华人民共和国”),
&&&&&&&&例如:
&&&&&&&&&&&#---------
S1=中华人民共和国
PLAY_TTS S1&next=100
10.PLAY_RECVOX &播放提示语后录音,录音结束后转到下一个节点.
&&&&&&&&用法:PLAY_RECVOX [playname] [Recname] [RecLen] NEXT=X&&&
&&&&&&&&参数: playname: 录音前播放提示语(不用提示语则此参数为空)
Recname:&录音的语音文件名
RecLen:&&&最大录音时长(以秒为单位)
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
PLAY_RECVOX d:/prompt/lang1/vr1.voc d:/demo1.voc 100 next=100
11.PLAY_RECVOX_UPDATE&播放提示语后录音,录音结束后,提示&重放按1,
&&&&&&重录按2&,按1,转到下一个节点.
&&&&&&&&用法:PLAY_RECVOX_UPDATE [playname] [Recname] [RecLen] NEXT=X&&&
&&&&&&&&参数: playname: 录音前播放提示语(不用提示语则此参数为空)
Recname:&录音的语音文件名
RecLen:&&&最大录音时长(以秒为单位)
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
PLAY_RECVOX_UPDATE d:/prompt/lang1/vr1.voc d:/demo1.voc 100 next=100
12.MODIFY_PWD&修改密码,
说明:提示&请输入密码&,输入之后,提示&请再输入一次密码&两次输入一致,转到下一个节点.
&&&&&&&&用法:MODIFY_PWD [playname] [PwdLen] [Sxx] NEXT=X&&&
&&&&&&&&参数: playname: 修改密码前播放提示语(不用提示语则此参数为空)
PwdLen:&&&修改密码的密码长度
&&&&&&&&&&&&& Sxx:&存放密码的寄存器,只能为S1,S2..S99.
&&&&&&&&例如:
&& &&&&&&&&#----------------------
&&&&&&&&&&& NODE=3
MODIFY_PWD d:/prompt/lang1/vp1.voc 4 S2 next=100
13.RECEIVE_DIGIT &收多个DTMF,&收满长度或遇到'#',转到下一个节点.
&&&&&&&&用法:RECEIVE_DIGIT [DTMFLen] [Sxx] NEXT=X&&&
&&&&&&&&参数: DTMFlen:&接收DTMF的个数
&Sxx: 存放DTMF的寄存器,只能为S1,S2..S99.
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
RECEIVE_DIGIT 2 S2 next=101
14.RECEIVE_FAX&接收传真文件,接收结束后转到下一个节点.
&&&&&&&&用法:RECEIVE_FAX [faxfilename] [Sxx] NEXT=X&&&
&&&&&&&&参数: faxfilename: 传真文件名
Sxx&: 存接收传真结果的寄存器,只能为S1,S2..S99.
格式:S|PP|ID
&&&&& S:&接收传真成功 F: 接收传真失败
&&&&& PP:&接收传真页数 0-99
&&&&& ID:&远端传真机号码
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
RECEIVE_FAX&sample.tiff&&S1&next=100
接收完毕,S1内容为:S|2| (接收传真成功,页数2,远端号码)
S1内容为:F|0| (接收传真失败,页数0,远端号码)
15.SEND_FAX&发送传真文件,发送结束后转到下一个节点.
&&&&&&&&用法:SEND_FAX [faxfilename] [parms] [Sxx] NEXT=X&&&
&&&&&&&&参数: faxfilename: 发送传真文件名
[parms] 设置本机传真机号码、本传真机标题等,可以为S1,S2..S99.
格式:L-H&
L: 本机传真机号码,H:本传真机标题&如:-demo
&Sxx&: 存发送传真结果的寄存器,只能为S1,S2..S99.
格式:S: 接收传真成功 F: 接收传真失败
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
SEND_FAX&sample.tiff&-demo S1&next=100
16.PICKUP&处理端口摘机操作,&操作完毕,转到下一个节点.
&&&&用法:PICKUP NEXT=X&&&
&&&&&&&&参数: 无
17.PLACE_CALL &系统自动选择一个空闲端口,摘机后,向外拨号,拨号完毕,
&&&&&&转到下一个节点. (摸拟线/数字卡均可使用)
&&&&&&&&用法1:PLACE_CALL [Called] [Dxx] NEXT=X&&&
&&&&&&&&用法2:PLACE_CALL [ch] [Called] [Dxx] NEXT=X&&&
&&&&&&&&参数: ch: 存放指定拨出通道或存放拨出通道的寄存器,只能为D1..D99.
Called: 存放被叫号码或存放被叫号码的寄存器,只能为S1,S2..S99.
Dxx: 存放呼叫结果的寄存器,只能为D1,D2..D99.
&&&&&&&&&&&&&&定义为:&&&& 1.&CPT_BUSY&&&&&被叫忙
&&& 2. &CPT_NOANS&&&&被叫无人应答
&&& && 3.&CPT_ANSWER&&&被叫应答
&&&&&& &&&&4.&CPT_RINGBACK&被叫开始振铃
&&&&&&&&&& 5.&CPT_FAIL&&&&&呼叫失败
&&& &&&&&& 6.&CPT_FAX&&&&&&被叫为传真
&&&&&&&&&& 0.&其它&
&&&&&&&&例如:
&&&&&&&& &&#----------------------
&&&&&&&&&&& NODE=3
PLACE_CALL&&next=100
18.DIAL&由指定端口向外拨号(DTMF),拨号完毕,转到下一个节点.
&&&&&&&&用法:DIAL [Called] NEXT=X&&&
&&&&&&&&参数: Called: 存放被叫号码或存放被叫号码的寄存器,只能为S1,S2..S9.
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&& &&&&&&&&&NODE=3
DIAL&600 next=100
19.DIALP&由指定端口向外拨号(DTMF),监视呼叫结果
说明:拨号完毕,发生(被叫忙、被叫应答、呼叫失败、被叫为传真、被叫无人应答、被叫开始振铃)转到下一个节点。
&&&&&&&&用法:DIALP [Called] [Dxx] NEXT=X&&&
&&&&&&&&参数: Called: 存放被叫号码或存放被叫号码的寄存器,只能为S1,S2..S99.
Dxx: 存放呼叫结果的寄存器,只能为D1,D2..D99.
&&&&&&& &&&&&&定义为:&&&& 1.&CPT_BUSY&&&&&被叫忙
&&& 2. &CPT_NOANS&&&&被叫无人应答
&&& && 3.&CPT_ANSWER&&&被叫应答
&&&&&& &&&&4.&CPT_RINGBACK&被叫开始振铃
&&&&&&&&&& 5.&CPT_FAIL&&&&&呼叫失败
&&& &&&&&& 6.&CPT_FAX&&&&&&被叫为传真
&&&&&&&&&& 0.&其它&
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
DIALP&&next=100
20.FLASH&处理端口Flash操作,&操作完毕,转到下一个节点.
&&&&&&&&用法:FLASH [Len] NEXT=X&&& ,主要用于电话转接.
&&&&&&&&参数: len: 存放FLASH时长或存放FLASH时长的寄存器,只能为D1,D2..D99,单位10ms.
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
FLASH&100&next=100
21.DELAY&处理端口延时操作,&操作完毕,转到下一个节点.
&&&&&&&&用法:DELAY [delay] NEXT=X&&&
&&&&&&&&参数: delay: 存放延时时长或存延时时长的寄存器,只能为D1,D2..D99,单位10ms.
&&&&&&&&例如:
&&&&&&&&&& #----------------------
&&&&&&&&&&& NODE=3
DELAY&100&next=100
22.GOTO&直接转到下本流程文件的一个节点,或另一个本流程文件某一节点。
&&&&&&&&用法:GOTO X&或
GOTO Sx:X (Sx:为S1-S99,存放流程文件名,X:为节点号) 或
GOTO NEXT=X&或
GOTO LINK=X&或
&&&&&&&&参数: 无
&&&&&&&&例如:&GOTO&100
LET S1=&../Flow//Flowdata/USER.DAT&
&&&&&&&&&&&&&&&&GOTO&S1:100
23.RETURN&返回调用节点.
&&&&&&&&用法:RETURN 返回上次调用节点
RETURN A1B3 返回指定节点
RETURN [Message] [Dataex] 返回上次调用节点,并回送消息。
RETURN [Message] [Dataex] LINK=1000 返回指定节点。
[Message]:为消息类型。
[Dataex]:附加数据。
24.REQUEST&IVR语音平台向代理服务器(客户端)发出一个请求。
说明:发出请求后,等待(最长三分钟)客户端返回消息后,语音流程继续执行下面任务。
用法:REQUEST [inReg] [outReg]&NEXT=X&或者
&&&&& REQUEST [inReg] [outReg] [Delay]&NEXT=X
参数:&inReg:是向客户端传送的消息变量,可以是S1-S99. 最大长度为250
&&&&&&&&&&&& TCP格式为:IVRCMD;CH=XX;REQUEST=inReg;
outReg:是客户端传回的消息变量,可以是S1-S99. 最大长度为250
客户端返回的消息格式应为:RESPONSE XXX,系统自动将XXX存入outReg中。
Delay:是等待客户端传回的消息变量的时间,可以是D1-D99.
&&&&&&&&如果在等待过程中,希望系统播放背景音乐等待,需要录制语音文件:
&&&&&&&&&&&&& ./voc/wait_response.wav即可。
通过这种方法,可以通过代理服务器,访问远程数据库、大型数据库、保密数据库等。
客户端应该与IVR语音服务器建立TCP连接,作为SERVER端, TCP/IP端口值由 “系统参数-&设定TCP/IP通信参数菜单中‘使用的TCP/IP端口值’项设定”。
&&&&&&&&NODE=40
REQUEST 5|1|123.45 S1 NEXT=41 #消息变量分别为:帐号|密码|月份|金额
#客户端收到该消息,通过查询数据库返回:RESPONSE .11|12.22|12.33|12.44
&&&&&&&&NODE=41
#S1=.11|12.22|12.33|12.44
PLAY_DIGIT_GSB PT1.VOC F1 NEXT=42
25、NOTHING&什么工作也不做,指针指到下一个节点
&&&&&&&&用法:NOTHING NEXT=X
&&&&&&&&&&& NODE=3
PLACE_CALL&600 D1&NEXT=4
IF D1=1 NEXT=5&&& #被叫忙,跳转到5
IF D1=2 NEXT=6&&& #被叫无人应答,跳转到6
IF D1=3 NEXT=7&&& #被叫应答,跳转到7
NOTHING NEXT=4&#其它,继续等候
26、RELEASE_CALL&处理端口挂机操作, 操作完毕,转到下一个节点
&&&&&&&&用法:RELEASE_CALL&&&&
&&&&&&&&参数: 无
五、典型应用
1、如何进入SMARTELE生成器系统
当某通道有电话呼入,系统先识别被叫号码,如被叫号码为“5604”,系统会到FLOW目录下查找以被叫号码为名的文件夹,如果文件夹不存在系统放一段语音后挂断,文件夹存在,则到文件夹中查找FLOWDATA的文件夹中的AnswerCall.dat,文件存在,执行其中的流程(注:多用此流程进行直转或拒接的功能),此文件不存在,系统在Flowdata文件夹中查找user.dat,并执行流程中定义的流程内容
当流程进行转接的电话转接失败后会自动进入被叫号码目录下的CallExt目录下的CallFail.dat流程,由此流程进行处理
当需要系统记录话单时,在所有流程中加入NODE=0节点,在该节点进行处理记录话单,系统会在挂机时指向NODE=0的节点动作。
系统执行某个流程的流程图:
2、如何实现拒接的功能
在业务流程的目录下.flow/5604/flowdata/&目录下加一个&AnswerCall.dat&,编写方式如下例:
&如&拒接电话号码为“”
&LET S1=CALLER
&IF S1== NEXT=2
&LET R168=100
&DELAY 10 LINK=1
PLAY_VOX ./BYEBYE.WAV NEXT=3
RELEASE_CALL
3、如何记录小号用户及本机传真话单
&&&&&& 1.小号用户话单输出
在小号用户&IVR执行流程的NODE=0里通过发送UDP消息将相关信息传给呼叫监控系统。例如在流程中做以下设置:
2.本机传真话单输出
在本机传真&IVR执行流程的NODE=0里通过发送UDP消息将相关信息传给呼叫监控系统。例如在流程中做以下设置:
4、如何处理传真资源不足的情况
&&&&&&&当传真资源已满或传真信箱不存在时,系统会自动查找系统目录下的FaxFail.dat流程文件,由该文件流程对此种情况进行处理(一般情况下将电话转至中心站点进行处理),流程编写如下:
&LET S1=CALLED #被叫为5400
&CALL STRGET(S1,S2,13,3) #取企业号码
&LET&CALLER='10001'+S12
&LET CHBUF=''
&DELAY 10 LINK=2019
5、如何实现IVR不摘机转接功能
&&&&&&&当有用户需要IVR进行转接,但不希望产生费用,可以采用IVR不摘机转接的方法。此方法通过.flow/5604/flowdata/&目录下AnswerCall.dat&来实现,可以在此流程中做查询真实被叫、转接等操作,转接失败仍进入CallFail.dat流程文件,但此时不可以做放音等操作,需要重新LINK到user.dat流程文件中,IVR摘机后才可以实现放音、留言等功能。如某企业IVR不摘机转接,失败后留言,下面以985的流程为例:
1、AnswerCall.dat
&&&&&& NODE=1&&&&&&&&&&&&&
&LET D99=1
&LET S70=CALLER&&&&&&&&&&&&&&&&&
&CALL STRLEN(S70,D70)
&LET D71=D70-3
&LET D72=D70-4
&CALL STRGET(S70,S73,0,1)
&CALL STRGET(S70,S74,0,2)
&CALL STRGET(S70,S75,0,3)
&CALL STRGET(S70,S76,0,4)
&CALL STRGET(S70,S77,3,D71)
&CALL STRGET(S70,S78,4,D72)
&LET S80=GBUF&&&&&&&&&&&&&&&&&
&IF S75==021&NEXT=211
&IF S75==028&NEXT=280
&IF S75==057&NEXT=571
&IF S76==0531 NEXT=320
&LET S99=201985
&GOTO 1010
&LET S14=015
&LET S15=S14+S77
&LET&CALLER=S15
&LET S99=201985
&GOTO 1010
&LET S14=014
&LET S15=S14+S77
&LET&CALLER=S15
&LET S99=201985
&GOTO 1010
&LET S14=032
&LET S15=S14+S77
&LET&CALLER=S15
&LET S99=201985
&GOTO 1010
&LET S14=026
&LET S15=S14+S78
&LET&CALLER=S15
&LET S99=201985
&GOTO 1010
&LET D99=2
&LET R168=100
&DELAY 10 LINK=1
&#PLAY_VOX ../Flow/5985/VOC/002.WAV NEXT=12&&
&LET D99=3
&LET R168=100
&DELAY 10 LINK=1
&#PLAY_VOX ../Flow/5985/VOC/001.WAV NEXT=12&&
NODE=12&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&IF S73='0'
&&& GOTO 121
&ELSE&IF S74='13'
&&& GOTO 121
&&& LET S91=S80+S70
&&& LET&CALLER=S91
&&& GOTO 121
&LET CHBUF=985001
&DELAY 10 LINK=3:1001
NODE=1010&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&LET S89=ROUTER
&LET S13=ERROR|
&GOTO 1011
&LET D79=1
&LET S79=D79
&LET S11=CALLER&
&LET S12=S89+&;CALLER=&
&LET S12=S12+S11
&LET S12=S12+&;CALLED=&
&LET S12=S12+S99
&LET S12=S12+&;NUM=&
&LET S12=S12+S79
&LET S12=S12+&;TYPE=3;&
&REQUEST S12 S13 3 NEXT=1012
&LET D17=S17
&LET LANG=D17
&CALL DISP(S16)
&IF S14==ERROR NEXT=1013
&IF S15==END NEXT=1014
&IF S16==&NEXT=11&&&&&&&&
&IF S16== NEXT=10&&&&&&&&
&LET S20='59985' #?
&LET S21='00000' #
&LET S20=S20+S21
&LET S16=S20+S16
&LET CHBUF=S16
&DELAY 10 LINK=2009
&IF S89==ROUTER1 NEXT=1014
&LET S89=ROUTER1
&GOTO 1011
&RELEASE_CALL
2、CallFail.dat
&&&&&& NODE=1
&LET D79=D79+1
&LET S71=D79
&LET D1=REP
&IF S15==LST NEXT=10
&IF S15==END NEXT=10
&CALL STRLEN(S15,D15)
&IF D15==0 NEXT=10
&LET S11=CALLER&&&
&LET S12=S89+&;CALLER=&&
&LET S12=S12+S11
&LET S12=S12+&;CALLED=&
&LET S12=S12+S99&&
&LET S12=S12+&;NUM=&
&LET S12=S12+S71
&LET S12=S12+&;TYPE=3;&
&REQUEST S12 S13 2 NEXT=1011
&LET D17=S17
&LET LANG=D17
&CALL DISP(S16)
&IF S16==0 NEXT=10
&IF D1==1&NEXT=2001
&IF D1==2&NEXT=2002
&LET S20='59985'
&LET S21='00003'
&GOTO 2003
&LET S20='59985'
&LET S21='00001'
&GOTO 2003
&LET S20='59985'
&LET S21='00002'
&GOTO 2003
&LET S20=S20+S21
&LET S16=S20+S16
&LET CHBUF=S16
&DELAY 10 LINK=2009
&CALL DISP(D99)
&IF D99==1 NEXT=101
&LET R168=100
&DELAY 10 LINK=1
&LET D89=0
&LET D1=REP
&IF D1==1 NEXT=110
&IF D1==2 NEXT=111
&LET S1=IREPORT;UID=985;OP=1;OPNAME=??
&CALL SENDBYUDP(S1,1)
&LET S1=IREPORT;UID=985; OP=2;OPNAME=??????
&CALL SENDBYUDP(S1,1)
&PLAY_VOX&../Flow/5985/VOC/003.WAV&NEXT=13&
&IF S73='0'
&&& GOTO 131
&ELSE&IF S74='13'
&&& GOTO 131
&&& LET S91=S80+S70
&&& LET&CALLER=S91
&&& GOTO 131
&DELAY 230 NEXT=121
&LET CHBUF=985001
&DELAY 10 LINK=3:1001
3、user.dat
CALL DISP(D99)
&&&&& IF D99==2 NEXT=10
&&&&& IF D99==3 NEXT=11
&&&&& IF D99==1 NEXT=101&&
&&&&& LET S70=CALLER&&&&&
&&&&& CALL STRLEN(S70,D70)
&&&&& LET D71=D70-3
&&&&& LET D72=D70-4
&&&&& CALL STRGET(S70,S73,0,1)
&&&&& CALL STRGET(S70,S74,0,2)
&CALL STRGET(S70,S75,0,3)
&CALL STRGET(S70,S76,0,4)
&CALL STRGET(S70,S77,3,D71)
&CALL STRGET(S70,S78,4,D72)
&LET S80=GBUF&&&&&&&&&&&&&&&&& #OPCODE
NODE=101 #ADD BY TANGL
&LET S69=&../Flow/5985/CallExt/CallFail.dat&
&DELAY 10 NEXT=S69:102
&IF S75==021&NEXT=211
&IF S75==028&NEXT=280
&IF S75==057&NEXT=571
&IF S76==0531 NEXT=320
&LET S99=201985
&GOTO 1010
&LET S14=015
&LET S15=S14+S77
&LET&CALLER=S15
&LET S99=201985
&GOTO 1010
&LET S14=014
&LET S15=S14+S77
&LET&CALLER=S15
&LET S99=201985
&GOTO 1010
&LET S14=032
&LET S15=S14+S77
&LET&CALLER=S15
&LET S99=201985
&GOTO 1010
&LET S14=026
&LET S15=S14+S78
&LET&CALLER=S15
&LET S99=201985
&GOTO 1010
&PLAY_VOX ../Flow/5985/VOC/002.WAV NEXT=12&&
&PLAY_VOX ../Flow/5985/VOC/001.WAV NEXT=12&&
NODE=12&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&IF S73='0'
&&& GOTO 121
&ELSE&IF S74='13'
&&& GOTO 121
&&& LET S91=S80+S70
&&& LET&CALLER=S91
&&& GOTO 121
&LET CHBUF=985001
&DELAY 10 LINK=3:1001
NODE=1010&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&LET S89=ROUTER
&LET S13=ERROR|
&GOTO 1011
&LET D79=1
&LET S79=D79
&LET S11=CALLER&& #>>?u??÷ 1/2 ?
&LET S12=S89+&;CALLER=&
&LET S12=S12+S11
&LET S12=S12+&;CALLED=&
&LET S12=S12+S99
&LET S12=S12+&;NUM=&
&LET S12=S12+S79
&LET S12=S12+&;TYPE=3;&
&REQUEST S12 S13 3 NEXT=1012
&LET D17=S17
&LET LANG=D17
&CALL DISP(S16)
&IF S14==ERROR NEXT=1013
&IF S15==END NEXT=1014
&IF S16==&NEXT=11&&&&&&&&
&IF S16== NEXT=10&&&&&&&&
&LET S20='59985'
&LET S21='00000'
&LET S20=S20+S21
&LET S16=S20+S16
&LET CHBUF=S16
&DELAY 10 LINK=2009
&IF S89==ROUTER1 NEXT=1014
&LET S89=ROUTER1
&GOTO 1011
&RELEASE_CALL
附录一、Smartele流程生成器通过调用DLL函数的用法
由于Smartele流程生成器的函数有限,有时候不能解决某些比较复杂的操作,例如:处理数据库的记录集、不能对文本文件内容进行读写、不能删除某个文件等。针对这些问题,我们编写了一个名称为ctaCallDll.dll的函数集,专门用来弥补某些直接用流程生成器不能实现的功能。
二、可用函数说明:
1.&删除文件函数
&int Killfile(char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)&
入口参数:inParm1,为要删除的文件名
返回值:outParm1,1-删除成功,0-删除失败
用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Killfile
LET S3=C:/V3000/temp.voc&
CALL&DLL_FUN(S1,S2,S3,0,0,S4,0,0)&& #将删除C:/V3000/temp.voc
2.&取某个文件的长度
int Getfilelength&(char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1,文件名
返回值:outParm1,文件大小(字节数)
用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Getfilelength
LET S3=C:/V3000/temp.voc&
CALL&DLL_FUN(S1,S2,S3,0,0,S4,0,0)&#S4为该文件的大小(字节数)
3.将输入带*表示小数点的字符串转化成带小数点的字符串
int Getfloat&(char * inParm1,char * inParm2, char * inParm3,
char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1,带*的字符串
返回值:outParm1,带小数点的字符串
用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Getfloat
LET S3=123*58&
CALL&DLL_FUN(S1,S2,S3,0,0,S4,0,0)&#S4=123.58
4。将某些内容写入某个文本文件中
&& int Inputtxt&(char * inParm1,char * inParm2, char * inParm3,
&&&&& &&&&&&&&&&&&&&&&&char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1&文本文件名称
&&&&&&&&& inParm2&字符串内容
返回值:outParm1&& =1&表示操作成功,=0表示操作失败
说明:该函数是以添加的方式写入文本文件,每写一次都自动加回车换行
用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Inputtxt
LET S3=C:/txt/ABC.txt&
CALL&DLL_FUN(S1,S2,S3,S4,0,S5,0,0)&
5.从某个文本文件中读取某些内容
int Getfromtxt&(char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1&文本文件名称
&&&&&&&&&&&&& inParm2&特征字符串
返回值:&outParm1&获得的内容
说明:该函数将inParm1表示的文本文件中某行内容是inParm2=后面的内容赋值给outParm1。
&&&&&&文本中每一行最大长度为150,最多1000行
用法举例:
&例如文本文件C:/txt/ABC.txt中有一行内容是:
&&& PASSWORD=,表示密码值为,语音流程中想获得PASSWORD的值。
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Getfromtxt
LET S3=C:/txt/ABC.txt&
LET S4=PASSWORD
CALL&DLL_FUN(S1,S2,S3,S4,0,S5,0,0)&#S5的值为
6.替换字符串里的某个字符
int Replacestr&(char * inParm1,char * inParm2, char * inParm3,
char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1&源字符串
&&&&&&& &&&&inParm2&要插入的内容
&&&&&&&&&&& inParm3&要替换的字符
返回值:outParm1&替换后的字符串
&&&&用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Replacestr
LET S3=1234~56&
LET S4=8888
CALL&DLL_FUN(S1,S2,S3,S4,S5,S6,0,0)&#S6=
7.获得当前X天以前的日期时间
&int Before_x_day&(char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1&天数
返回值:outParm1&X天以前的日期时间,格式为YYYYMMDDHHMMSS
&用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Before_x_day
CALL&DLL_FUN(S1,S2,S3,0,0,S4,0,0)&#S4:7天前的日期时间
8.获得当前X天以后的日期时间
&int After_x_day (char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1&天数
返回值:&outParm1&X天以后的日期时间,格式为YYYYMMDDHHMMSS
&&&&用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=After_x_day
CALL&DLL_FUN(S1,S2,S3,0,0,S4,0,0)&#S4:7天后的日期时间
9.获得当前X分钟以前的日期时间
&int Before_x_minute&(char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1&分钟数
返回值:outParm1&X分钟以前的日期时间,格式为YYYYMMDDHHMMSS
&&&&用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Before_x_minite
LET S3=30&
CALL&DLL_FUN(S1,S2,S3,0,0,S4,0,0)&#S4:30分钟前的日期时间
10.获得当前X分钟以后的日期时间
&int After_x_minute (char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1分钟数
返回值:&outParm1&X分钟以后的日期时间,格式为YYYYMMDDHHMMSS
&&&&用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=After_x_minite
LET S3=30&
CALL&DLL_FUN(S1,S2,S3,0,0,S4,0,0)&#S4:30分钟后的日期时间
11.计算时间差(分钟)
&int Diff_time_min&(char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1&起始时间,格式为HHMMSS
&&&&&&&&& inParm2&结束时间,格式为HHMMSS
返回值:&outParm1&时间差,单位(分钟)
&&&&用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Diff_time_min
LET S3=123450
LET S4=132034&
CALL&DLL_FUN(S1,S2,S3,S4,0,S5,0,0)&#S5:时间差(分钟)
12.计算时间差(秒)
&int Diff_time_sec&(char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1&起始时间,格式为HHMMSS
&&&&&&&&& inParm2&结束时间,格式为HHMMSS
返回值:&outParm1&时间差,单位(秒)
&&&&用法举例:
LET S1=C:/Dll/ctaCallDll.dll&
LET S2=Diff_time_sec
LET S3=123450
LET S4=132034&
CALL&DLL_FUN(S1,S2,S3,S4,0,S5,0,0)&#S5:时间差(秒)
13.查询数据库符合条件的记录集
int Seekdatabase&(char * inParm1,char * inParm2, char * inParm3,
&&&&&&&&&&&&&&&&& char * outParm1 , char * outParm2, char * outParm3)
入口参数:inParm1表示相关的ODBC信息,例如:ODBC=XX;UID=XX;PWD=XX;TABLE=XX;RECID=XX;&&&&&&&&&
其中TABLE表示表名,RECID表示符合条件的第XX条记录
inParm2&&&表示查询条件,格式例如:
CALLER=~613~&AND&CHNUM=1
&&&&&&&&&&&&&&&&&&&&&&& InParm3&表示要查询的字段,最多10个,格式为:L0=XXX;L1=XXX;……;L9=XXX
返回值:&outParm1&查询到的各字段内容,用|隔开,格式例如:
|613|2|045&表示符合条件的记录各字段内容为依次613、2、、132045
返回END表示没有符合条件的记录
outParm2&&&符合条件的记录总数
&&&&用法举例:
LET S1=ctaCallDll.dll&
LET S2=Seekdatabase&&&&&
LET S3=&ODBC=ALLYTALK;UID=PWD=;TABLE=VMHD;RECID=10;&
&LET S4=&CALLER=~613~ &and &CHNUM=1&
&LET S5=&L0=CODE;L1=CHNUM;L2=SDATE;L3=STIME;&
CALL DLL_FUN(S1,S2,S3,S4,S5,S6,S7,0)&&
&CALL DISP(S6)&#S6=|613|2|045
&CALL DISP(S7)&#S7为符合条件的记录总数
CALL DISP(S10)
CALL DISP(S11)
CALL DISP(S12)
CALL DISP(S13)
&&&&&&&&&&&&以上流程表示要从一个ODBC为ALLYTALK的VMHD表里查询符合条件
CALLER=’613’ and CHNUM=1的记录集中的第10条记录的字段CODE、CHNUM、SDATE、STIME的值。
注意:如果查询条件有字符型字段,请用&~&代替&'
例如:要查CALLER='12345',在生成器中应该写成&CALLER=~12345~
14.去掉字符串的空格
&int Trimstr(char * inParm1,char * inParm2, char * inParm3,char * outParm1 , char * outParm2, char * outParm3)
&入口参数:inParm1&带空格的字符串
&返回值:&outParm2&去掉空格的字符串
&用法举例:
&&&& LET S1=C:/Dll/ctaCallDll.dll&
&&&& LET S2=Trimstr
&&&& LET S3=&&&& 12345&& &
CALL&DLL_FUN(S1,S2,S3,0,0,S4,0,0)&#S4=12345
> 本站内容系网友提交或本网编辑转载,其目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请及时与本网联系,我们将在第一时间删除内容!
协同OA系统工作流中的文档型模板应用案例大中小
来源:畅享网
[我要评论]摘要:OA系统的工作流贯穿了企业最大范围内的人员.岗位和部门,它对各项办公事务进行整理.规范和统一,形成标准化的模板供员工使用,从而构建高效率的协作执行体系.本文关键字: 协同 OA系统 文档型模板 工作流 OA系统的工作 ...
PageOffice如何控制在系统中打开Word文档只读 在文档系统有些环节需要限制用户编辑word文件,只许查看,那么如何实现用程序控制文件打开的时候,用只读模式打开呢?若通过PageOffice开发平台,则要实现这一功能则很容易,下面就以只读形式在线打开一个Word文档为例介绍一下实现过程. 具体实现步骤如下: 第一步:请先安装PageOffice的服务 ...
centos6.5系统cacti监控部署文档 系统要求:本文中的Linux操作系统为CentOS 6.5,以下操作均以root执行. 环境描述: 操作系统 ip 监控类别 软件 CentOs 6.5 监控ip 监控端 lnmp环境,cacti,snmp服务,rrdtool CentOs 6.5 * 被监控端 snmp服务 注:lnmp环境和snmp服务安装不 ...
package com.tfy.jbpm. import java.util.L import org.jbpm.api.ProcessE import org.jbpm.api.task.T import org.junit.T import com.tfy.jbpm.base.BaseJ /
U盘FAT系统手工恢复二进制文档碎片经典案例分析 U盘的文件系统一般为FAT16或者FAT32(目前主要为后者),文件在删除或者中病毒后会把文件在FAT表中占相应的簇位清空,并将其目录项的首个字节改为E5,如果文件不连续,比如经常在U盘内编辑更新的文件就会产生碎片,这时针对某个重要的文件,比如说文档就不能利用软件来恢复,在FAT表被清零的情况下软件的恢复原理 ...
windows和linux系统之间的txt文档兼容问题 在给公司做自动化文件同步的测试时,出现的这个问题,因为本地开发的从外网拿同步路径列表的脚本文件没有svn上传.就在windows机器上生成了文件列表.偷了个懒,直接传到本地服务器上测试,结果以前完全正常的脚本,总是报错.找不到目标.把同步命令打印出来后发现.只是出现了文件路径,根本米有命令. 想了很多办 ...
Linux系统下如何修改文档及文件夹(含子文件夹)权限,我们来看一下.
可以使用命令chmod来为文件或目录赋予权限.Linux/Unix 的档案存取权限分为三级 : 档案拥有者.群组.其他.利用 chmod 可以藉以控制档案如何被他人所存取二 详解1 此命令有两种使用方法,一种是chmod后加数字,后接文件名 ...
装了Windows和Linux双系统,最麻烦的莫过于文档的使用,Linux系统如何使用Windows文档,下面为大家一一介绍下 对于计算机装了Windows和Linux双系统的人来说,最麻烦的莫过于文档的使用,Linux系统要如何使用Windows文档呢?下面小编就给大家介绍下如何在Linux系统中使用Windows文档. 在Windows系统中,我们喜欢把 ...}

我要回帖

更多关于 销售工作流程怎么写 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信