CTI技術(shù)步入JAVA世界.docx_第1頁
CTI技術(shù)步入JAVA世界.docx_第2頁
CTI技術(shù)步入JAVA世界.docx_第3頁
CTI技術(shù)步入JAVA世界.docx_第4頁
CTI技術(shù)步入JAVA世界.docx_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

CTI技術(shù)步入JAVA世界1. 什么是JTAPIa. 什么是JTAPI?談JTAPI,首先得了解什么是CTI。CTI(Computer Telephony Integration)就是計(jì)算機(jī)電話集成技術(shù),它是目前國內(nèi)正火的呼叫中心熱潮的核心技術(shù)。JTAPI主要是為CTI技術(shù)服務(wù)。JTAPI(Java Telephone API)是一套專門為JAVA語言提供的與電話應(yīng)用相關(guān)的程序接口,它定義了一組跨平臺(tái)、跨廠家的電話應(yīng)用程序?qū)ο竽P汀J褂肑TAPI提供的對(duì)象,我們就可以簡單方便地用軟件實(shí)現(xiàn)各種CTI技術(shù)。由于JTAPI的誕生是由若干知名計(jì)算機(jī)、通訊廠商(Sun, Lucent Technologies, Nortel, Novell, Intel, and IBM)聯(lián)合努力的結(jié)果,利用JTAPI編寫的CTI程序甚至可以操作若干種電話交換機(jī),這些交換機(jī)包括Lucnet、Nortel等等廠家。b. 為什么要使用JTAPI?JTAPI的主要特點(diǎn)歸納如下:1. 簡化CTI程序的編寫。2. 提供一套可以擴(kuò)展的框架結(jié)構(gòu),可以平滑的使Client/Server結(jié)構(gòu)的程序過渡到Browser/Server結(jié)構(gòu)。3. 對(duì)已有的傳統(tǒng)CTI程序接口,如TSAPI、SunXTL、以及TAPI進(jìn)行WEB方向的擴(kuò)展。4. 可以運(yùn)行于任何JAVA可以運(yùn)行的平臺(tái)。利用以上優(yōu)點(diǎn),采用JTAPI技術(shù)搭建的呼叫中心就可以平滑的過渡到Internet時(shí)代。c. JTAPI的應(yīng)用場(chǎng)合目前JTAPI主要應(yīng)用于呼叫中心領(lǐng)域,利用它還可以編寫包括自動(dòng)撥號(hào)、語音郵件、傳真接收等各類軟件。特別在互聯(lián)網(wǎng)呼叫中心領(lǐng)域更是大有用武之地。比如Lucent 推出的ICC(Internet Call Center)就是一個(gè)典型的例子。整個(gè)ICC系統(tǒng)從技術(shù)上劃分,可以分為3部分:管理、CTI、工作流。三個(gè)部分都用JAVA開發(fā),其中CTI部分使用JTAPI1.3。利用JAVA的優(yōu)勢(shì),ICC可以運(yùn)行在NT、SALORIS等各種平臺(tái)之上。d. 目前的版本目前JTAPI的應(yīng)用案例大多采用JTAPI ver 1.2版本,不過JTAPI ver 1.3也已經(jīng)逐漸普及。下文將以JTAPI1.2為例進(jìn)行講解。2. JTAPI的結(jié)構(gòu) 對(duì)象包結(jié)構(gòu):JTAPI1.2由18個(gè)JAVA對(duì)象包(PACKAGE)組成,每一個(gè)包分別提供CTI應(yīng)用的一個(gè)方面的功能。比如呼叫控制包(javax.telephony.callcontrol)、用戶數(shù)據(jù)包(javax.telephony.privatedata)、核心包(javax.telephony)、呼叫中心專用包(javax.telephony.callcenter)等等。這樣做的目的是可以把CTI應(yīng)用也功能化、模塊化,使整個(gè)CTI應(yīng)用的子功能模塊相對(duì)獨(dú)立。如下圖所示: 對(duì)象包分析:JTAPI的對(duì)象包除了核心包以外都提供自己獨(dú)特的功能。核心包比較特殊,按照面向?qū)ο蟮睦碚摚诵陌瞧渌母割?。核心包只能夠提供最基本的電話功能,而其它?duì)象包則是核心包的擴(kuò)展。比如針對(duì)核心包中的對(duì)象Call,呼叫控制包有專門的對(duì)象CallControlCall,后者具有前者的所有屬性和方法,并在前者的基礎(chǔ)上添加了專門的屬性和方法。比如CallControlCall和Call都有方法connect(),而CallControlCall更有自己獨(dú)有的方法conference()、transfer()。簡單的說,實(shí)際上核心包的對(duì)象Call可以提供基本的電話功能,如外撥、接聽、掛機(jī)等。而呼叫控制包的對(duì)象CallControlCall不僅有基本的電話功能,還有特殊的會(huì)議電話、轉(zhuǎn)接電話、監(jiān)聽電話等功能。同樣呼叫中心專用包的電話對(duì)象CallCenterCall也是一樣,它的特殊功能有預(yù)撥電話、得到用戶數(shù)據(jù)等方法。3. 利用JTAPI搭建CTI程序JTAPI電話模型樹程序員在掌握利用JTAPI編寫CTI程序之前,首先得搞清JTAPI最基本的電話模型,這個(gè)模型是搭建CTI程序的基礎(chǔ),它可以以樹狀結(jié)構(gòu)表現(xiàn)出來(如下圖)。 可以說,程序員心里有了這幅樹狀電話模型圖,從簡單的外撥電話到復(fù)雜的兩路來話相互切換功能都可以很方便的實(shí)現(xiàn)。構(gòu)成電話模型圖的元素都是JTAPI核心包的主要對(duì)象,每個(gè)對(duì)象都代表了CTI領(lǐng)域中的一個(gè)物理或邏輯的實(shí)體。由圖可知,這些實(shí)體之間有著相互的聯(lián)系。利用每個(gè)實(shí)體的功能以及實(shí)體之間的關(guān)系,程序員就可以組合出各種各樣的CTI程序。下面簡單介紹電話模型中涉及的最主要的幾個(gè)實(shí)體。 Provider Object:Provider是對(duì)和CTI技術(shù)相關(guān)的硬件設(shè)備的一個(gè)抽象,它可能代表工控機(jī)上插的一塊板塊,也可能代表一臺(tái)復(fù)雜的DEFINITY ECS。Provider把具體的硬件設(shè)備和程序員隔離開來,使程序員不必懂得復(fù)雜的硬件設(shè)備。這有些類似于數(shù)據(jù)庫編程時(shí)遇到的ODBC概念,數(shù)據(jù)庫程序員不必知道后臺(tái)的數(shù)據(jù)庫是ORACLE還是簡單的ACCESS。程序員只需知道經(jīng)過初始化,就能得到一個(gè)可以訪問后臺(tái)資源的實(shí)例即可。利用Provider ,可以輕易的實(shí)現(xiàn)CTI程序和硬件的無關(guān)性。程序不變,后臺(tái)的PBX可以從Lucent Technologies的產(chǎn)品換成Nortel的產(chǎn)品。 Call Object:CALL是對(duì)一次呼叫過程進(jìn)行抽象,它的屬性記錄了這個(gè)呼叫目前的信息,調(diào)用Call的方法,可以引導(dǎo)這個(gè)呼叫的發(fā)展。 Address Object簡單的說,Address Object是對(duì)電話號(hào)碼的抽象。它是對(duì)一部邏輯電話的描述,和它對(duì)應(yīng)的不是一部物理電話,所以一個(gè)Address Object可能對(duì)應(yīng)了多個(gè)物理話機(jī)。 Terminal Object:Terminal Object描述了一部具體的物理話機(jī)和其相關(guān)的屬性。每個(gè)Terminal Object至少存在一個(gè)Address Object與之對(duì)應(yīng)。 Connection Object:一個(gè)Connection Object是對(duì)Call Object和Address Object之間的通訊連接的抽象。通過對(duì)Connection Object的屬性查看,可以分析出當(dāng)前Call Object與Address Object的連接狀態(tài)信息。Connection Object的狀態(tài)有IDLE、ACTIVE、RINGING、DROPPED等等。a. 軟電話功能調(diào)用和電話消息處理利用JTAPI進(jìn)行CTI應(yīng)用程序的編寫,工作上可以分為兩個(gè)部分。首先是客戶端主動(dòng)調(diào)用后臺(tái)PBX資源,實(shí)現(xiàn)軟電話功能的調(diào)用;其次是客戶端對(duì)后臺(tái)資源傳來的大量電話消息進(jìn)行分析,實(shí)現(xiàn)消息分發(fā)與分揀。利用Call Object能夠進(jìn)行各種軟電話調(diào)用的工作,如call.connect()可以實(shí)現(xiàn)撥打一個(gè)電話;call. conference()可以實(shí)現(xiàn)與第三方會(huì)議一個(gè)電話;call.transfer()可以實(shí)現(xiàn)把接起的電話進(jìn)行轉(zhuǎn)接到第三方的操作;利用諸如以上所述的種種方法,可以任意搭建出復(fù)雜功能的CTI應(yīng)用。JTAPI利用OBSERVER的概念來進(jìn)行各種消息處理。OBSERVER直譯過來是觀察者的意思,顧名思義,OBSERVER就是對(duì)每個(gè)呼叫對(duì)象進(jìn)行“觀察”工作。它的工作流程是“綁定到專門對(duì)象?觀察專門對(duì)象?獲取專門對(duì)象的信息?分析并匯報(bào)專門對(duì)象的信息”。針對(duì)前文JTAPI對(duì)象樹提到的各種對(duì)象,都有專門的OBSERVER為之“服務(wù)”。比如對(duì)Provider,有ProviderObserver,它可以隨時(shí)匯報(bào)目前被監(jiān)控的Provider的狀態(tài),如Provider.OUT_OF_SERVCE, Provider.IN_SERVICE等等;針對(duì)Terminal,有TerminalObserver,它能匯報(bào)出一個(gè)Terminal的所有事件以及相關(guān)信息,CTI應(yīng)用中非常重要的數(shù)據(jù)主叫號(hào)碼、同步數(shù)據(jù)等就可以在這里得到。類似的,還有AddressObserver、CallObserver等多種Observer。所有的Observer都是javax.telephony.observer的子類。4. 應(yīng)用實(shí)例分析下面提供一個(gè)簡單的軟電話外撥程序代碼。代碼分為“外撥”模塊,以及“監(jiān)控”模塊。這兩個(gè)模塊分別和前文提到的“ 客戶端主動(dòng)調(diào)用后臺(tái)PBX資源”,以及“客戶端對(duì)后臺(tái)資源傳來的電話消息進(jìn)行分析”相對(duì)應(yīng)。通過對(duì)這個(gè)例子的分析,我們可以很快掌握利用JTAPI開發(fā)CTI應(yīng)用程序的基本思想。4.1外撥模塊首先是“外撥”模塊,這個(gè)部分的程序流程圖如上圖所示,以下是代碼分析。import javax.telephony.*;import javax.telephony.events.*;import MyOutCallObserver;/整個(gè)程序的結(jié)果是實(shí)現(xiàn)從電話4761111外撥到電話5551212public class Outcall public static final void main(String args) / 產(chǎn)生一個(gè)Provider實(shí)例Provider myprovider = null;try JtapiPeer peer = JtapiPeerFactory.getJtapiPeer(null);myprovider = peer.getProvider(null); catch (Exception excp) System.out.println(Cant get Provider: + excp.toString();System.exit(0);/ 利用Provider實(shí)例產(chǎn)生一個(gè)和電話4761111的Address實(shí)例Address origaddr = null;Terminal origterm = null;try origaddr = myprovider.getAddress(4761111);/得到這個(gè)Address上綁定的Terminial(物理話機(jī)實(shí)例)列表,取出第一個(gè)。/這一操作,可以理解為對(duì)于電話4761111,有可能不止綁定了一部分機(jī)。/如果有若干分機(jī),任意取出一個(gè)可用的進(jìn)行后續(xù)操作。Terminal terminals = origaddr.getTerminals();if (terminals = null) System.out.println(No Terminals on Address.);System.exit(0); origterm = terminals0; catch (Exception excp) /處理異常;/建立一個(gè)空的Call 對(duì)象Call mycall = null;try mycall = myprovider.createCall();/在這個(gè)Call上綁定一個(gè)Observer,這個(gè)Observer可以/對(duì)整個(gè)外撥過程進(jìn)行消息分析。(Observer的代碼下文有講解)mycall.addObserver(new MyOutCallObserver(); catch (Exception excp) /處理異常/進(jìn)行外撥,所需的資源有剛才得到的Address、Terminal、Call對(duì)象/以及被叫號(hào)碼try mycall.connect(origterm, origaddr, 5551212); catch (Exception excp) /處理異常4.2消息處理模塊下面對(duì)Observer的代碼進(jìn)行簡單的分析import javax.telephony.*;import javax.telephony.events.*;/類MyOutCallObserver實(shí)現(xiàn)了接口CallObserver的若干方法/MyOutCallObserver對(duì)Call相關(guān)的各種事件進(jìn)行了處理。public class MyOutCallObserver implements CallObserver public void callChangedEvent(CallEv evlist) for (int i = 0; i evlist.length; i+) /判斷是否得到有關(guān)Address的事件if (evlisti instanceof AddrEv) /如果是有關(guān)于Address的事件,則利用這個(gè)事件獲得相關(guān)的Address實(shí)例String name = null;try Address addr = (AddrEv )evlisti) getAddress();/從這個(gè)Address實(shí)例獲取主叫號(hào)碼name = addr.getName(); catch (Exception excp) /處理異常String msg = Connection to Address: + name + is ;/分析這個(gè)事件的具體類型并進(jìn)行相應(yīng)處理/這個(gè)事件屬于“震鈴”事件,進(jìn)行相應(yīng)處理。if (evlisti.getID() = ConnAlertingEv.ID) System.out.println(msg + ALERTING);/這個(gè)事件屬于“來話接起”事件,進(jìn)行相應(yīng)處理。else if (evlisti.getID() = ConnConnectedEv.ID) System.out.println(msg + C

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論