簡介
本文檔詳細介紹了Finesse架構,以便基礎流程在解決finesse問題時發揮作用。
必要條件
需求
思科建議瞭解以下工具和功能:
JTAPI - Java電話API
API — 應用程式程式設計介面
UCCX - Unified Contact Center Express
CUCM - Cisco Unified Communications Manager
CTI — 電腦電話整合
採用元件
- Cisco Unified Contact Center Express(UCCX)
本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除(預設)的組態來啟動。如果您的網路運作中,請確保您瞭解任何指令可能造成的影響。
背景資訊
本文檔從高級概述開始介紹Finesse體系結構,然後介紹深入的訊號流以及示例和圖表。
50,000英尺檢視
50000 view
Finesse Tomcat
Finesse Tomcat與CUCM中的Cisco Tomcat類似,因為載入網頁的功能相同,但適用於不同的服務(稱為Finesse)。Tomcat專為Finesse而設計,因為它是一個單獨的Web應用程式。根據早於11.5的版本,您只能使用CCX主節點登入finesse。從11.6開始,您只能在故障轉移期間登入到任何節點(但不推薦)。因此,如果您考慮一個WAN群集,其中兩個代理(在站點A和站點B)都連線到主節點上的Finesse,則在任何時候,都存在到另一個節點的非活動連線,該連線從Cisco Finesse到引擎,這是failover所需的CTI openconf請求。
定期傳送Openconf請求以檢查節點是活動節點還是備用節點。如果發生故障轉移,通知服務將使用名為systeminfo API的API,告知客戶端此節點已關閉並且需要故障轉移。然後運行一個檔案,將瀏覽器重定向到另一個節點,然後傳送openconf rejavascriptsponse。僅當接受證書時,此故障切換才起作用。(建立與伺服器的安全連線)。
共提供3個證書,它們是:
- 該節點的通知服務證書。
- 遠端節點的通知服務證書。
- 遠端節點的Finesse服務證書。
注意:需要接受遠端節點證書,以便故障轉移可以正常工作。
HTTP
它是用於傳送超媒體文檔(如HTML)的應用層協定。它是為Web瀏覽器和Web伺服器之間的通訊而設計的。它是一個無狀態協定,表示伺服器在兩個請求之間不保留任何資料。這是客戶端伺服器協定。對於UCCX,Finesse客戶端在代理瀏覽器(PC)上運行。它使用HTTP向伺服器發出請求。以下是一些常見的HTTP方法:
GET — 從伺服器獲取資訊。
POST — 向伺服器傳送資訊。
PUT — 替換伺服器上的任何內容。
DELETE — 從伺服器中刪除資訊。
Finesse使用http請求中的systeminfo api請求。例如,如果您想更改代理的狀態,瀏覽器會傳送PUT而不是POST,因為如果傳送POST,伺服器會因為手頭有2個狀態而混亂,那麼選擇哪一個狀態?因此,使用PUT將替換當前狀態。
XMPP
可延伸訊息和狀態通訊協定
它是一組用於即時消息傳遞和線上狀態的協定。所有XMPP實體均使用其Jabber ID或JID進行標識。此XMPP協定的一個擴展(用於小工具)稱為PUBSUB。
PUBSUB
這不是你能想到的發佈者訂閱者。它仍然發佈和訂閱,但與資料庫無關。XMPP使用一種稱為節點的機制。節點主要監控您關心的實體。任何對您來說重要並想要監控的內容,都可以在其中新增一個節點。然後PUBSUB的作用就是訂閱該節點上的更新或通知。可以為每種型別的實體(如代理、對話方塊等)設定節點。如果為某個代理建立節點,則會訂閱該代理上的節點,然後無論代理執行什麼操作,都會收到有關該代理的通知。
此規範的目的在於允許XMPP伺服器(通知服務)獲取發佈到XMPP節點的資訊(主題),然後向訂閱該節點的實體傳送XMPP事件。
對於Finesse,電腦電話整合(CTI)伺服器會向Finesse Web服務傳送CTI消息,以通知Finesse有關配置更新,例如(但不限於)建立座席或聯絡服務隊列(CSQ)或呼叫資訊。然後,此資訊會轉換為XMPP消息,Finesse Web服務會將其發佈到Finesse通知服務。然後,Finesse通知服務會通過BOSH將XMPP消息傳送到訂閱了某些XMPP節點的代理。
BOSH — 使用同步HTTP的雙向流
BOSH是一個長時間執行的HTTP連線,其中伺服器將儲存更長的請求,直到請求得到響應,否則將傳送空響應。這適用於XMPP客戶端和XMPP伺服器,但也可以用於非XMPP應用程式。
注意:XMPP是有狀態的,而HTTP是無狀態的(它不儲存有關最後一個請求的資訊)
如果Web應用程式需要與XMPP配合使用,則會出現多個問題。
問題1:瀏覽器本身不支援傳輸控制協定(TCP)上的XMPP。
解決方案1:Web伺服器和瀏覽器通過超文本傳輸協定(HTTP)消息進行通訊,因此Finesse和其他Web應用程式將XMPP消息包裝在HTTP消息中。
問題2:HTTP是無狀態協定。
解決方案2:您可以為此使用cookie/post資料。
問題3:第三個問題是HTTP的單向行為,這意味著只有客戶端傳送請求,伺服器只能響應。伺服器無法推送資料使得通過HTTP實施XMPP變得不自然。
解決方案3:要解決此問題,您需要在HTTP和XMPP之間架起一個網橋。
推薦的解決方案包括:
- 輪詢(傳統協定):重複的HTTP請求請求請求定義的新資料:HTTP輪詢
- 長輪詢也稱為BOSH:傳輸協定,它通過高效使用多個同步HTTP請求/響應對來模擬兩個實體之間長壽命雙向TCP連線的語義,而不需要使用頻繁輪詢。使用BOSH是為了掩蓋伺服器不必在請求發出時立即作出響應這一事實。響應延遲到指定的時間,直到伺服器有客戶端的資料,然後作為響應傳送。客戶端收到響應後,就會發出新的請求,以此類推。
Finesse案頭客戶端(Web應用程式)每30秒通過TCP埠7443建立過時的BOSH連線。30秒後,如果沒有Finesse通知服務的更新,通知服務將傳送一個HTTP回覆,回覆正文為(近)200 OK。例如,如果通知服務更新了代理的存在或對話(呼叫)事件,則資料會立即傳送到Finesse Web客戶端。
總結一下:
Finesse Web客戶端通過TCP埠7443設定到Finesse伺服器的陳舊HTTP連線(http-bind)。這被稱為BOSH長調查。Finesse通知服務是一種線上狀態服務,用於發佈有關座席、呼叫等狀態的更新。如果通知服務有更新,它會使用狀態更新作為HTTP響應正文中的XMPP消息來回覆http-bind請求。如果在收到http-bind請求後30秒內沒有狀態更新,則通知服務會回覆而不進行任何狀態更新,以允許Finesse Web客戶端傳送另一個http-bind請求。這樣,通知服務就知道Finesse Web客戶端仍然能夠連線到通知服務,並且代理沒有關閉其瀏覽器或將其電腦置於睡眠狀態,以此類推。
CTI
您可以使用電腦電話整合(CTI)來利用電腦處理功能,同時進行、接收和管理電話呼叫。CTI應用程式允許您執行諸如使用呼叫者ID從資料庫檢索使用者資訊之類的任務,或者使用互動式語音應答(IVR)系統收集的資訊將來自使用者的呼叫及其資訊路由到相應的服務代表。CUCM上的CTI管理器響應來自UCCX的JTAPI請求。CTI伺服器TCP埠為12018。這就是Finesse伺服器和引擎(CTI伺服器)彼此通訊的方式。
以下是通過CTI交換的一些資訊:
- 當前系統配置和未來更新。
- 代理及其狀態。
- 呼叫及其狀態。
- 即時座席、呼叫和隊列統計資訊。
JTAPI
Cisco Unified JTAPI是Sun Microsystems開發的程式設計介面標準,用於基於Java的電腦電話應用。Cisco JTAPI通過其他Cisco擴展實施Sun JTAPI 1.2規範。UCCX和CUCM之間的任何通訊都駐留在JTAPI上。這就是CUCM和引擎(電話子系統)相互通訊的方式。JTAPI用於控制和監控CUCM電話、使用CTI埠和路由點路由呼叫、在CUCM上開始和停止錄音以及任何呼叫路由功能
30000 ft檢視
下圖說明UCCX引擎、Finesse、CUCM和瀏覽器如何相互通訊。
30000 view
讓我們考慮一下與座席建立呼叫。現在,通過JTAPI監視代理擴展的RmCm會向CTI伺服器告知Agent正在通話的狀態更改。此資訊使用CTI從CTI伺服器(在CCX引擎內部)傳送到Finesse伺服器(Tomcat)。Finesse伺服器使用XMPP將此資訊傳送到有關狀態更改的CCX通知服務。通知服務(Openfire)開啟一個到代理瀏覽器的BOSH隧道,並更新有關狀態更改的資訊,這樣您就可以看到代理進入「已保留」狀態。使用HTTPS(如WAR檔案、小工具等)向finesse伺服器請求任何型別的Web資源(如果尚未在快取中)。
休眠
下圖說明了Hibernate服務。
休眠
HIBERNATE被稱為高效能對象/關係永續性和查詢服務。簡單地說,它將JAVA類對映到資料庫表。例如,您有一個名為Team的JAVA對象,而finesse資料庫中有一個名為Team的資料庫表。JAVA類控制表內的資訊,而HIBERNATE則是實現此目的的原因。它不使用SQL查詢,而是使用java類來更新資訊。
AXL
管理XML。
XML代表eXtensible Markup Language,是一種標籤語言,定義了一些相對簡單的編碼資料規則。它主要是為了以兩個系統都能理解的明確定義格式傳輸和接收結構化資料而設計的。在最基本的格式中,XML定義用尖括弧(<>)括起來的標籤,這些標籤將標籤所描述的資料括起來。標籤可以與其他標籤內的標籤形成層次。例如,要定義基本電話裝置,您可以說電話裝置需要三個引數:名稱、說明和電話號碼。
它是基於SOAP的API,可在CUCM上啟用遠端調配。它用於新增、更新、刪除或檢索CUCM資料庫中的資訊。檢索功能包括檢查使用者身份驗證和運行SQL查詢。AXL API為您提供了訪問整個CUCM資料庫的許可權。AXL API純粹用於調配,不提供對運行時或效能資料的訪問。
AXL API利用HTTPS基本身份驗證。如果任何CUCM使用者(應用程式或終端使用者)是Standard CCM Super Users訪問控制組的成員,或具有為其分配的Standard AXL API Access角色的任何組,則他們具有通過AXL的讀/寫訪問權。這意味著所有超級使用者帳戶已隱式地擁有對AXL API的訪問許可權。要建立專用於AXL API使用的帳戶,必須首先建立一個訪問控制組並向其分配標準AXL API訪問角色,然後將應用程式使用者與新建立的組相關聯。要提供只讀AXL API訪問,您可以建立一個單獨的訪問控制組,並僅為其分配標準AXL只讀API訪問角色。
肥皂
簡單對象訪問協定(SOAP)是一種以XML格式在應用程式之間傳遞資訊的方式。SOAP消息通常通過HTTP會話從傳送應用程式傳輸到接收應用程式。實際SOAP消息由Envelope元素組成,該元素包含Body元素和可選的Header元素。
- Envelope - 此強制元素是SOAP消息的根,將傳輸的XML標識為SOAP資料包。信封包含主體部分和可選信頭部分。
- Header — 此可選元素提供指示消息處理資訊的擴展機制。例如,如果使用郵件的操作需要安全憑據,則這些憑據必須屬於信封報頭。
- 正文 - 此元素包含消息負載,即傳送和接收應用程式之間傳輸的原始資料。主體本身可由多個子元素組成,XML架構通常定義此資料的結構。
20000 ft檢視
下圖以更加詳細的方式說明了Finesse架構中涉及的協定。
20000 view
這些協定負責不同UCCX元件之間的通訊。
- UCCX引擎和Finesse伺服器通過CTI協定進行通訊。
- UCCX引擎和CUCM Talk over JTAPI協定。
- Finesse Tomcat和CUCM通過AXL通話。
- Finesse通知服務和代理瀏覽器在XMPP/BOSH上通話。
- Finesse Tomcat和資料庫通過Hibernate通訊。
- 通過XMPP進行Finesse Tomcat和Finesse通知通話。
APACHE SHINDIG
申迪格
Apache Shindig是一個OpenSocial容器,通過提供用於呈現小工具、代理請求以及處理REST和RPC請求的代碼,幫助您快速開始託管OpenSocial應用。OpenSocial是一組API,用於構建在Web上運行的社交應用程式。(Web/Servlet)容器由Web伺服器用於動態生成Web頁。
WAR檔案
WAR代表Web Archive。它包含Web專案的檔案。它可以有servlet、XML、JSP、影象、HTML、CSS、JS等。Catalina日誌包含有關正在部署的WAR的資訊。
10000 ft檢視
下圖詳細說明了身份驗證流程在UCCX和Finesse元件中的工作方式。
10000 view
根據您登入的方式,需要使用WAR檔案來顯示和建立頁面。瀏覽器要求Shindig需要渲染小工具,然後shindig會與CUIC對話來渲染小工具。CCX領域用於使用AXL對CUCM進行身份驗證。通知服務還使用AXL通過CUCM進行身份驗證。
Finesse Rest API WAR是實際與通知服務、CCX引擎和資料庫進行通訊的主儲存庫。Shindig僅與Finesse Rest API(WebServices)對話,因為cfadmin和案頭WAR僅用於顯示頁面。任何與Finesse Rest API WAR相關的內容,您都可以在Finesse WebServices日誌中看到,這些日誌是finesse最重要的日誌。您可以在Shindig和Finesse Web服務(Rest API WAR)之間使用HTTP。Finesse Web服務(Rest API WAR)和引擎通過CTI相互通訊。
AJAX - Finesse之美
AJAX代表非同步Javascript和XML。它不是一種程式語言,而是一種從網頁訪問Web伺服器的方法。AJAX是一種進行部分頁面更新的機制。它使您能夠使用來自伺服器的資料來更新頁面的各個部分,而無需刷新整個頁面。
例如,如果您談論Facebook messenger,則當有新消息傳入時,無需刷新整個頁面即可獲取該消息,相反,該頁面的消息部分會自動刷新,並即時獲取新消息,而無需刷新整個頁面。
每個瀏覽器都有一個稱為XMLHTTPREQUEST(也稱為XHR)的內建對象。對伺服器中AJAX的每個請求都會通過此XML請求。其中包含需要更新的內容的具體資訊。
使用AJAX的優點
下圖說明了非同步請求和同步請求之間的區別。
AJAX
如果是同步請求,您必須等待第一個請求得到處理,然後可以傳送第二個請求。例如,需要刷新頁面,在刷新頁面之前,您無法執行任何操作。另一方面,如果是非同步請求,則不必等待第一個請求完成就可以傳送第二個請求。您可以同時傳送多個請求。例如,網站上的天氣應用小工具。您可以刷新頁面的天氣部分,同時也可以同時處理網站的其他部分,而不需要刷新整個頁面。這是非同步請求的主要優點。
AJAX的工作
AJAX是XMLHTTPREQUEST(XHR)(用於從Web伺服器傳送和接收更新)的組合,以及用於顯示或使用資料的Javascript和HTML。
使用AJAX向伺服器傳送請求
下面將介紹一個3步流程:
1.建立變數並將XHR對象存儲到該變數中。
Var請求=新的XMLHttpRequest();
2.訪問在XHR對象中具有負載的請求變數。
請求.open(GET, URL)
;
3.傳送請求
Request.send();
案頭體系結構
下圖說明了在網頁上呈現小工具時AJAX訊號的流程。
案頭體系結構
IFrame駐留在容器中託管BOSH隧道。提供OPENAJAX中心以跨小工具(使用pubsub方法)發佈消息。REST請求也通過Shindig代理到其他伺服器。小工具可以在AJAX中心發佈自己的消息。
小工具架構
下圖詳細解釋了Finesse Gadget架構。
小工具體系結構
與典型的小工具不同,CUIC小工具還從OpenFire接收即時XMPP源。 在UCCX中,CUIC和Finesse與UCCX共存,則有一個共用的OpenFire例項。大多數Gadget內容和所有REST API都是通過Finesse伺服器中的Shindig代理的。這適用於Finesse小工具和REST API以及CUIC小工具例項和REST API。CUIC小工具使用D-Grid來呈現其報告。必須執行引導過程,該過程會直接與CUIC一起完成。 因此,在載入過程中,CUIC小工具最初直接與CUIC伺服器通訊。因此,使用者瀏覽器必須接受CUIC證書(除Socket.IO隧道之外)。小工具內容和REST API在Finesse和CUIC之間代理到客戶端。Rest API呼叫將同時呼叫Intelligence Center Reporting Service和CCX Web Service。CCX Live Data Socket.IO服務通過JMS從ActiveMQ獲取來自Live Data的消息。CCX Live Data Socket.IO服務通過客戶端的Socket.IO連線發佈Real-Time Reporting JSON。與Finesse Desktop的BOSH Tunnel iFrame保持與Cisco Finesse Notification Service的BOSH連線的方式類似,主即時資料小工具也有一個Socket.IO Tunnel iFrame,它保持與CCX Live Data Socket.IO服務的Socket.IO(websocket)連線。
OpenAjax Hub將所有事件分發到訂閱的偵聽程式。 這將既是Gadgets,也是Finesse Container本身的一部分。Finesse Desktop有一個BOSH隧道iFrame,用於維護與Cisco Unified CCX通知服務的BOSH連線。 這會將事件發佈到OpenAjax中心。
參考連結