天天看點

語音呼叫系統IVR流程編寫文檔整理一、系統功能概述二、系統性能名額三、系統功能子產品四、系統節點指令描述五、典型應用附錄一、Smartele流程生成器通過調用DLL函數的用法

一、系統功能概述

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