一、系統功能概述
SmarTele語音流程腳本語言是針對“SmartDev語音平台”而設計的,用于實作語音流程定制。SmarTele腳本語言采用開放式結構,以獨立文本檔案為資訊存放基礎,檔案之間可以互相調用,簡便易學,維護友善。
可以使用“TeleEdit.exe腳本編輯器”或寫字闆等工具編輯修改。
通過SmarTele,可以實作以下功能:
1、基本功能
◆ 自動語音應答:如播放語音、菜單選擇、收号、錄音等。
◆ 支援靜态傳真的自動收發,圖形存儲格式采用标準的TIF格式,提供多種文字:如中文、英文轉換傳真的功能。
◆ 支援動态傳真發送,可将中文、英文字元實時地轉換為傳真發送出去。
◆ 資料庫查詢采用ODBC與資料庫連接配接,支援MS SQL、Oracle、Sybase、Infomix等主流資料庫;支援加減乘除運算、邏輯判斷、字元串運算等。
◆ 系統支援通過代理伺服器通路資料庫,以保證IVR系統通路遠端資料庫、大型資料庫、保密資料庫時不受影響。
◆ 支援自動撥号,批量外撥,記錄外撥結果,外撥方式不僅支援語音,還可支援傳真,人工話務員等。
◆ 系統能夠将客戶IVR互動活動記錄到電話跟蹤資料庫中。
◆ 以獨立檔案為資訊存放基礎。
◆ 采用解釋執行的運作方式。
2、擴充功能
◆ 調用動态連接配接庫(DLL)
系統提供調用動态連接配接庫接口,對于一些不經常變動的功能子產品、複雜的運算、需要保密的資訊,可以通過動态連接配接庫實作。
◆ 與通信網關伺服器接口
在一些大型項目應用中,IVR語音系統需要和其他系統互動資訊,通路遠端資料庫、大型資料庫、保密資料庫等,這種情況下,需要設立通信網關,作為代理伺服器使用。
這種用法經常在“電話銀行系統”、“證券委托的交易系統”使用。
3、系統其它特點
◆ 系統提供開放的應用層接口,動态加載新的業務子產品。
◆ 系統提供功能強大的應用開發環境:腳本語音控制、DLL功能加載、人工座席控制等。
◆ 提供線上調試工具、預編譯功能及錯誤檢查功能。
二、系統性能名額
1、性能名額
◆ 系統采用WINDOW NT網絡作業系統,伺服器可選擇性能穩定可靠的工業控制機,進而保證了系統運作的穩定性。清楚的中文菜單,便于使用者進行操作;
◆ 系統可選擇模拟電話接口(LPS)、BRI(2B+D)、中國一号信令、ISDN(30B+D)、LineSide E1、七号信令(SS7)、透明傳輸協定(NOCC)等多種與PSTN或PBX的接口方式。對不同型号的交換機,可很容易地設定系統的各項參數,便于調試及維護;
◆ 支援多種交換機:Awaya、Nortel Meridian1、SIEMENS、TD510、NICE288、EDK21等。
◆ 系統單機容量為2、4、6…1200端口。可根據實際情況,平滑更新。
系統支援分布處理,通過IVR網關,實作多主機共享語音資源,具有很強的擴充能力。
◆ 提供系統監控、工作日志、業務統計、呼叫分析、遠端管理功能接口擴充。
◆ 網絡通信基于TCP、IP協定族
◆ 系統采用堆疊式子產品化設計,使用者可以根據自己的實際情況,對任意功能子產品進行擴充和重組,在系統配置上進行從小規模到大規模的靈活選擇,規模可大可小,并可平滑更新。
◆ 使用者無須編寫程式,便可生成各種流程的程式,友善快捷,是構造CTI系統的利器。
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線語音卡(傳真)
AG4000_1E1/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)
5)、其它
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碼,字元串型,按通道存放。
LASTKEY:
如果是智能總機業務請在流程中将做
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 行。
一個語音節點的模式為:
NODE=1
節點指令 [參數1、參數2 ….. ] NEXT= [下一個節點号] 或
節點指令 [參數1、參數2 ….. ] NEXT= [Sx:下一個節點号] 或
節點指令 [參數1、參數2 ….. ] LINK= [系統流程号]
NODE=2
節點指令 [參數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= [系統流程号] :将流程下一步連接配接到應用程式中。
平台常用的系統流程号碼:
● 2019 将被叫賦給【CHBUF】,然後LINK=2019即可,聽回鈴轉接;
● 2009将被叫賦給【CHBUF】,然後LINK=2009即可,聽音樂轉接;
● 3:1001 将信箱号碼賦給【CHBUF】,然後LINK到3:1001,實作留言;
● 3:1200 将信箱号碼賦給【CHBUF】,然後LINK到3:1200,實作聽取留言;
● 6:1430 接收傳真
● 6:1450 傳真釋出
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為聽回鈴)
NODE=100
LET CHBUF=”596040000001082015269”
PLAY_VOX ../Flow/9560400000105604/VOC/TT19.WAV LINK=2009 #轉接中,請稍後
2、 留言
2.1 聽取留言
NODE=100
LET CHBUF=604001 - 信箱号碼
DELAY 10 LINK=3:1200
2.2 留言
NODE=100
LET CHBUF=604001 - 信箱号碼
DELAY 10 LINK=3:1001
3、 傳真
3.1 發送傳真
NODE=100
LET LASTKEY=4
LET REP=5
LET CHBUF=604001 - 傳真信箱号碼
DELAY 10 LINK=6:1430
3.2 索取傳真
NODE=100
LET CHBUF=604001 - 傳真資料代碼
DELAY 10 LINK=6:1420
4、 結束
NODE=9999
PLAY_VOX ../Flow/9560400000105555/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]...
ELSE
...[COMMAND2]...
ENDIF
...[COMMAND3]...
文法2:IF [param1][op][param2]
...[COMMAND1]...
ELSE IF [param1][op][param2]
...[COMMAND2]...
ENDIF
...[COMMAND3]...
條件成立,則執行[COMMAND1],COMMAND1可以是一條或多條合法語句
條件不成立,則執行[COMMAND2]。
例如1:NODE=2
IF D1='#'
LET S1=12345
PLAY_VOX d:/prompt.wav/lang1/vm5.voc NEXT=100
ELSE
LET S1=567890
PLAY_VOX d:/prompt.wav/lang1/vm6.voc NEXT=101
ENDIF
NODE=3
IF EXIST(c:/v3000/ptday.voc) NEXT=100
例如2:NODE=2
IF D1='#'
LET S1= d:/prompt.wav/lang1/vm5.voc
ELSE
LET S1= d:/prompt.wav/lang1/vm6.voc
ENDIF
PLAY_VOX S1 NEXT=101
NODE=3
例如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
NODE=3
例如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
ELSE
PLAY_VOX d:/prompt.wav/lang1/vm7.voc NEXT=101
ENDIF
NODE=3
IF EXIST(c:/v3000/ptday.voc) NEXT=100
3、WHILE...WEND 語句的用法
文法:WHILE [param1][op][param2]
...[COMMAND]...
WEND
條件成立,則執行[COMMAND],直到條件滿足退出循環。
條件不成立,則不執行[COMMAND]。
例如1: NODE=2
LET D1=1
WHILE D1<10
LET D1=D1+1
WEND
PLAY_VOX d:/prompt.wav/lang1/vm6.voc NEXT=101
NODE=3
例如2:NODE=2
LET D1=1
WHILE D1<10
LET D1=D1+1
IF D1>5 NEXT=3
WEND
PLAY_VOX d:/prompt.wav/lang1/vm6.voc NEXT=101
NODE=3
3.4、系統提供以下幾種類型四則運算
+ 加法
- 減法
* 乘法
/ 除法
@ 取長字元串的子串,不同項目用|号隔開
例如:S4=1234567|156.45|148.23||567.78|
LET [email protected] #取S4第一個|号之前的子串,即1234567
LET [email protected] #取S4第一個|号之後、第二個|号之前的子串,即156.45
LET [email protected] #取S4第二個|号之後、第三個|号之前的子串,即148.23
LET [email protected] #取S4第三個|号之後、第四個|号之前的子串,即“”(空)
LET [email protected] #取S4第四個|号之後、第五個|号之前的子串,即567.78
資料類型的轉換,字元串的和并等
◆ 使用時應配合關鍵字“LET ”使用。
◆ LET四則運算/指派操作, 完成運算,則分析下一個語句
◆ LET語句可處理負數
◆ 指派操作可直接使用字元串,如果字元串中包含保留字元,例如:+,-,*,/,=,空格,Dxx,Fxx,Sxx等,可以使用‘’或“”。
文法: 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=123569874
3、LET CALLED=59604000000105236548
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:年(1976-2200) 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=123456789
CALL STRGET(S1,S2,5,3) // S2 的值為567
3、STRREV() 字元串取反。
文法:CALL STRREV(src,des)
參數: src, 存放源字元串的寄存器,隻能為S1..S99。
des, 存放目标字元串的寄存器,隻能為S1..S99。
例如:LET S1=123456789
CALL STRREV(S1,S2) // S2 的值為987654321
4.STRLEN() 取字元串長度。
文法:CALL STRLEN(src,Dxx)
參數: src, 存放源字元串的寄存器,隻能為S1,S2.S99。
Dxx, 存放字元串長度的寄存器,隻能為D1,D2.D99。
例如:LET S1=123456789
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=sa;PWD=;DSN=V3000;
B) 斷開ODBC,與指定的資料庫脫離。
格式:DB_DISCONNECT
C) 查找符合條件的記錄,并将結果儲存到相應的變量。
格式: 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
D) 查找符合條件的記錄,并将MAP中的變量更新到相應的字段。
格式: 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,'20000125',D1)
E) 增加新記錄,并将MAP中的變量更新到相應的字段中,未列出的字段為0。
格式: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,'1234567890',D1)
F) 删除符合條件的記錄。
格式:DB_DEL FROM [表名] [WHERE clause]
說明: 1)WHERE clause 查詢條件,與“SELECT語句”定義一緻。
例如:DB_DEL FROM MAILBOX WHERE MAILNO=666
G) 執行SELECT語句。
格式:DB_SQL SELECT STATE
說明: 1)SELECT STATE,與“SELECT語句”定義一緻。
H) 對符合條件的記錄進行統計運算,并将結果儲存到相應的變量。
格式: 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,支援中文二級字庫。
(如:"中華人民共和國”),
例如:
#---------
NODE=4
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|82015266 (接收傳真成功,頁數2,遠端号碼82015266)
S1内容為:F|0|82015266 (接收傳真失敗,頁數0,遠端号碼82015266)
15.SEND_FAX 發送傳真檔案,發送結束後轉到下一個節點.
用法:SEND_FAX [faxfilename] [parms] [Sxx] NEXT=X
參數: faxfilename: 發送傳真檔案名
[parms] 設定本機傳真機号碼、本傳真機标題等,可以為S1,S2..S99.
格式:L-H
L: 本機傳真機号碼,H:本傳真機标題 如:82015266-demo
Sxx : 存發送傳真結果的寄存器,隻能為S1,S2..S99.
格式:S: 接收傳真成功 F: 接收傳真失敗
例如:
#----------------------
NODE=3
SEND_FAX sample.tiff 82015266-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 82015266 D1 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 62179971 D1 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/95105605/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 123456|4455|1|123.45 S1 NEXT=41 #消息變量分别為:帳号|密碼|月份|金額
#用戶端收到該消息,通過查詢資料庫傳回:RESPONSE 123456|12.11|12.22|12.33|12.44
NODE=41
#S1=123456|12.11|12.22|12.33|12.44
LET [email protected]
LET [email protected]
LET [email protected]
LET [email protected]
PLAY_DIGIT_GSB PT1.VOC F1 NEXT=42
25、NOTHING 什麼工作也不做,指針指到下一個節點
用法:NOTHING NEXT=X
例如:
NODE=3
PLACE_CALL 600 D1 NEXT=4
NODE=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生成器系統
當某通道有電話呼入,系統先識别被叫号碼,如被叫号碼為“9560400000105604”,系統會到FLOW目錄下查找以被叫号碼為名的檔案夾,如果檔案夾不存在系統放一段語音後挂斷,檔案夾存在,則到檔案夾中查找FLOWDATA的檔案夾中的AnswerCall.dat,檔案存在,執行其中的流程(注:多用此流程進行直轉或拒接的功能),此檔案不存在,系統在Flowdata檔案夾中查找user.dat,并執行流程中定義的流程内容
當流程進行轉接的電話轉接失敗後會自動進入被叫号碼目錄下的CallExt目錄下的CallFail.dat流程,由此流程進行處理
當需要系統記錄話單時,在所有流程中加入NODE=0節點,在該節點進行處理記錄話單,系統會在挂機時指向NODE=0的節點動作。
系統執行某個流程的流程圖:
2、如何實作拒接的功能
在業務流程的目錄下.flow/9560400000105604/flowdata/ 目錄下加一個 AnswerCall.dat ,編寫方式如下例:
如95105604 拒接電話号碼為“13045678900”
NODE=1
LET S1=CALLER
IF S1==13045678900 NEXT=2
LET R168=100
DELAY 10 LINK=1
NODE=2
PLAY_VOX ./BYEBYE.WAV NEXT=3
NODE=3
RELEASE_CALL
3、如何記錄小号使用者及本機傳真話單
1.小号使用者話單輸出
在小号使用者 IVR執行流程的NODE=0裡通過發送UDP消息将相關資訊傳給呼叫監控系統。例如在流程中做以下設定:
# CODE VarChar 20 企業代碼
# CALLER VarChar 20 主叫号碼
# CALLED VarChar 20 被叫号碼
# EXTNUM VarChar 20 小号
# CHNUM Smallint NOT NULL KEY 語音通道
# SDATE VarChar 8 NOT NULL KEY 呼叫日期
# STIME VarChar 6 NOT NULL KEY 呼叫時間
# ETIME VarChar 6 結束時間
# SERVERID Smallint NOT NLL KEY 語音節點号
# NODELEN int 時長(秒)
# CALLTYPE Smallint 呼叫類型
NODE=0
LET S84=CHBUF #開始時間日期儲存在CHBUF中
LET D1=CH #獲得語音通道号
LET D2=REP #語音節點号儲存在REP中
LET S85=GBUF #站點号
CALL DATE(S1) #YYYYMMDDHHMMSSW
CALL STRGET(S1,S2,0,8) #取結束日期YYYYMMDD
CALL STRGET(S1,S3,8,6) #取結束時間HHMMSS
CALL STRGET(S84,S4,0,8) #取開始日期YYYYMMDD
CALL STRGET(S84,S5,8,6) #取開始時間HHMMSS
LET S10=./SysDll/ctaCallDll.dll
LET S11=Diff_time_sec
CALL DLL_FUN(S10,S11,S5,S3,0,S6,0,0) #利用DLL函數來計算時差
LET D3=S6 #D3通話時長(秒)
LET S98=CALLED
CALL STRGET(S98,S86,10,6)
LET S98="95"+S86
LET S99=CALLER
LET S1="JF;CALLER="+S99
LET S1=S1+";CALLED="+S98
LET S1=S1+";EXT="+S89 #小号代碼儲存在S89中
LET S1=S1+";SDATE="+S4
LET S1=S1+";STIME="+S5
LET S1=S1+";EDATE="+S2
LET S1=S1+";ETIME="+S3
LET S1=S1+";SLEN="+S6
LET S1=S1+";CALLTYPE=0;"
CALL SENDBYUDP(S1,1)
RELEASE_CALL
2.本機傳真話單輸出
在本機傳真 IVR執行流程的NODE=0裡通過發送UDP消息将相關資訊傳給呼叫監控系統。例如在流程中做以下設定:
# CODE VarChar 20 企業代碼
# CALLER VarChar 20 主叫号碼
# CALLED VarChar 20 被叫号碼
# EXTNUM VarChar 20 小号
# CHNUM Smallint NOT NULL KEY 語音通道
# SDATE VarChar 8 NOT NULL KEY 呼叫日期
# STIME VarChar 6 NOT NULL KEY 呼叫時間
# ETIME VarChar 6 結束時間
# SERVERID Smallint NOT NLL KEY 語音節點号
# NODELEN int 時長(秒)
# CALLTYPE Smallint 呼叫類型
NODE=0
LET S84=CHBUF #開始時間日期儲存在CHBUF中
LET D1=CH #獲得語音通道号
LET D2=REP #語音節點号儲存在REP中
LET S85=GBUF #站點号
CALL DATE(S1) #YYYYMMDDHHMMSSW
CALL STRGET(S1,S2,0,8) #取結束日期YYYYMMDD
CALL STRGET(S1,S3,8,6) #取結束時間HHMMSS
CALL STRGET(S84,S4,0,8) #取開始日期YYYYMMDD
CALL STRGET(S84,S5,8,6) #取開始時間HHMMSS
LET S10=./SysDll/ctaCallDll.dll
LET S11=Diff_time_sec
CALL DLL_FUN(S10,S11,S5,S3,0,S6,0,0) #利用DLL函數來計算時差
LET D3=S6 #D3通話時長(秒)
LET S98=CALLED
CALL STRGET(S98,S86,10,6)
LET S98="95"+S86
LET S99=CALLER
LET S1="JF;CALLER="+S99
LET S1=S1+";CALLED="+S98
LET S1=S1+";EXT="
LET S1=S1+";SDATE="+S4
LET S1=S1+";STIME="+S5
LET S1=S1+";EDATE="+S2
LET S1=S1+";ETIME="+S3
LET S1=S1+";SLEN="+S6
LET S1=S1+";CALLTYPE=1;"
CALL SENDBYUDP(S1,1)
RELEASE_CALL
4、如何處理傳真資源不足的情況
當傳真資源已滿或傳真信箱不存在時,系統會自動查找系統目錄下的FaxFail.dat流程檔案,由該檔案流程對此種情況進行處理(一般情況下将電話轉至中心站點進行處理),流程編寫如下:
NODE=1
LET S1=CALLED #被叫為9560400000105400
CALL STRGET(S1,S2,13,3) #取企業号碼
LET CALLER='10001'+S12
LET CHBUF='594000000002982301008'
DELAY 10 LINK=2019
5、如何實作IVR不摘機轉接功能
當有使用者需要IVR進行轉接,但不希望産生費用,可以采用IVR不摘機轉接的方法。此方法通過.flow/9560400000105604/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
GOTO 2
NODE=2
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
NODE=211
LET S14=015
LET S15=S14+S77
LET CALLER=S15
LET S99=201985
GOTO 1010
NODE=280
LET S14=014
LET S15=S14+S77
LET CALLER=S15
LET S99=201985
GOTO 1010
NODE=571
LET S14=032
LET S15=S14+S77
LET CALLER=S15
LET S99=201985
GOTO 1010
NODE=320
LET S14=026
LET S15=S14+S78
LET CALLER=S15
LET S99=201985
GOTO 1010
NODE=10
LET D99=2
LET R168=100
DELAY 10 LINK=1
#PLAY_VOX ../Flow/9560400000105985/VOC/002.WAV NEXT=12
NODE=11
LET D99=3
LET R168=100
DELAY 10 LINK=1
#PLAY_VOX ../Flow/9560400000105985/VOC/001.WAV NEXT=12
NODE=12
IF S73='0'
GOTO 121
ELSE IF S74='13'
GOTO 121
ELSE
LET S91=S80+S70
LET CALLER=S91
GOTO 121
ENDIF
NODE=121
LET CHBUF=985001
DELAY 10 LINK=3:1001
NODE=1010
LET S89=ROUTER
LET S13=ERROR|
GOTO 1011
NODE=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
NODE=1012
LET [email protected]
LET [email protected]
LET [email protected]
LET [email protected]
LET D17=S17
LET LANG=D17
CALL DISP(S16)
IF S14==ERROR NEXT=1013
IF S15==END NEXT=1014
IF S16==01011111111 NEXT=11
IF S16==099111111111 NEXT=10
LET S20='59985' #³
LET S21='00000' #
LET S20=S20+S21
LET S16=S20+S16
LET CHBUF=S16
DELAY 10 LINK=2009
NODE=1013
IF S89==ROUTER1 NEXT=1014
LET S89=ROUTER1
GOTO 1011
NODE=1014
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
NODE=1011
LET [email protected]
LET [email protected]
LET [email protected]
LET [email protected]
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
NODE=2001
LET S20='59985'
LET S21='00001'
GOTO 2003
NODE=2002
LET S20='59985'
LET S21='00002'
GOTO 2003
NODE=2003
LET S20=S20+S21
LET S16=S20+S16
LET CHBUF=S16
DELAY 10 LINK=2009
NODE=10
CALL DISP(D99)
IF D99==1 NEXT=101
GOTO 102
NODE=101
LET R168=100
DELAY 10 LINK=1
NODE=102
LET D89=0
LET D1=REP
IF D1==1 NEXT=110
IF D1==2 NEXT=111
GOTO 11
NODE=110
LET S1=IREPORT;UID=985;OP=1;OPNAME=æ
CALL SENDBYUDP(S1,1)
GOTO 11
NODE=111
LET S1=IREPORT;UID=985; OP=2;OPNAME=ÎÞÓ¦´ð
CALL SENDBYUDP(S1,1)
GOTO 11
NODE=11
PLAY_VOX ../Flow/9560400000105985/VOC/003.WAV NEXT=13
NODE=13
IF S73='0'
GOTO 131
ELSE IF S74='13'
GOTO 131
ELSE
LET S91=S80+S70
LET CALLER=S91
GOTO 131
ENDIF
NODE=131
DELAY 230 NEXT=121
NODE=121
LET CHBUF=985001
DELAY 10 LINK=3:1001
3、user.dat
NODE=1
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
GOTO 2
NODE=101 #ADD BY TANGL
LET S69="../Flow/9560400000105985/CallExt/CallFail.dat"
DELAY 10 NEXT=S69:102
NODE=2
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
NODE=211
LET S14=015
LET S15=S14+S77
LET CALLER=S15
LET S99=201985
GOTO 1010
NODE=280
LET S14=014
LET S15=S14+S77
LET CALLER=S15
LET S99=201985
GOTO 1010
NODE=571
LET S14=032
LET S15=S14+S77
LET CALLER=S15
LET S99=201985
GOTO 1010
NODE=320
LET S14=026
LET S15=S14+S78
LET CALLER=S15
LET S99=201985
GOTO 1010
NODE=10
PLAY_VOX ../Flow/9560400000105985/VOC/002.WAV NEXT=12
NODE=11
PLAY_VOX ../Flow/9560400000105985/VOC/001.WAV NEXT=12
NODE=12
IF S73='0'
GOTO 121
ELSE IF S74='13'
GOTO 121
ELSE
LET S91=S80+S70
LET CALLER=S91
GOTO 121
ENDIF
NODE=121
LET CHBUF=985001
DELAY 10 LINK=3:1001
NODE=1010
LET S89=ROUTER
LET S13=ERROR|
GOTO 1011
NODE=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
NODE=1012
LET [email protected]
LET [email protected]
LET [email protected]
LET [email protected]
LET D17=S17
LET LANG=D17
CALL DISP(S16)
IF S14==ERROR NEXT=1013
IF S15==END NEXT=1014
IF S16==01011111111 NEXT=11
IF S16==099111111111 NEXT=10
LET S20='59985'
LET S21='00000'
LET S20=S20+S21
LET S16=S20+S16
LET CHBUF=S16
DELAY 10 LINK=2009
NODE=1013
IF S89==ROUTER1 NEXT=1014
LET S89=ROUTER1
GOTO 1011
NODE=1014
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-删除失敗
用法舉例:
NODE=4
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,檔案大小(位元組數)
用法舉例:
NODE=4
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,帶小數點的字元串
用法舉例:
NODE=4
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表示操作失敗
說明:該函數是以添加的方式寫入文本檔案,每寫一次都自動加回車換行
用法舉例:
NODE=4
LET S1=C:/Dll/ctaCallDll.dll
LET S2=Inputtxt
LET S3=C:/txt/ABC.txt
LET S4=12345678
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=12345678,表示密碼值為12345678,語音流程中想獲得PASSWORD的值。
NODE=4
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的值為12345678
6.替換字元串裡的某個字元
int Replacestr (char * inParm1,char * inParm2, char * inParm3,
char * outParm1 , char * outParm2, char * outParm3)
入口參數:inParm1 源字元串
inParm2 要插入的内容
inParm3 要替換的字元
傳回值:outParm1 替換後的字元串
用法舉例:
NODE=4
LET S1=C:/Dll/ctaCallDll.dll
LET S2=Replacestr
LET S3=1234~56
LET S4=8888
LET S5=~
CALL DLL_FUN(S1,S2,S3,S4,S5,S6,0,0) #S6=1234888856
7.獲得目前X天以前的日期時間
int Before_x_day (char * inParm1,char * inParm2, char * inParm3,
char * outParm1 , char * outParm2, char * outParm3)
入口參數:inParm1 天數
傳回值:outParm1 X天以前的日期時間,格式為YYYYMMDDHHMMSS
用法舉例:
NODE=4
LET S1=C:/Dll/ctaCallDll.dll
LET S2=Before_x_day
LET S3=7
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
用法舉例:
NODE=4
LET S1=C:/Dll/ctaCallDll.dll
LET S2=After_x_day
LET S3=7
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
用法舉例:
NODE=4
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
用法舉例:
NODE=4
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 時間差,機關(分鐘)
用法舉例:
NODE=4
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 時間差,機關(秒)
用法舉例:
NODE=4
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|20030701|132045 表示符合條件的記錄各字段内容為依次613、2、20030701、132045
傳回END表示沒有符合條件的記錄
outParm2 符合條件的記錄總數
用法舉例:
NODE=4
LET S1=ctaCallDll.dll
LET S2=Seekdatabase
LET S3="ODBC=ALLYTALK;UID=sa;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|20030701|132045
CALL DISP(S7) #S7為符合條件的記錄總數
LET [email protected]
LET [email protected]
LET [email protected]
LET [email protected]
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 去掉空格的字元串
用法舉例:
NODE=4
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