1.1.具備的條件
1.1.1.客戶在排隊的時候,由于等待時間比較久而選擇取消排隊,或者呼叫坐席的時候呼叫超時了,這種情況下,客戶程序會選擇登出 AnyChat服務器(考慮到可節約licences)。
1.1.2.坐席給客戶發透明通道消息,由客戶來呼叫坐席。(如果是坐席給客戶發送呼叫請求,則不會出現坐席假死現象)
1.2.解決辦法
對于條件1中的兩種情況進行說明如下:
1.2.1.取消排隊退出服務器
這種情況一般發生在客戶排隊比較多,而且坐席人員也比較多的情況下。由于在客戶取消排隊的瞬間,核心服務器碰巧給該客戶路由了一個坐席。那么當坐席給客戶發起透明通道消息的時候,客戶由于已經logout了,所以就收不到透明通道回調而無法對坐席進行呼叫請求,這個時候坐席就會處于一種假設狀態(坐席狀態為0,對外關閉服務),既不能服務被分配的客戶,又不能被重新路由。
解決辦法:需要坐席端程序進行判斷,如果從發起透明通道消息算起,10s后沒有收到客戶發送過來的呼叫請求,就調用結束服務接口,并且修改狀態為等待中。
1.2.2.呼叫坐席超時
由于客戶收到坐席發送的透明通道消息并且成功向坐席發起了呼叫請求,而坐席此時未對此呼叫請求做出任何回復,那么過了超時時間后,客戶端程序會收到一個回復事件,錯誤碼為呼叫超時,在該事件里會選擇logout Anychat服務器。而核心服務器的原理是會繼續給該客戶路由一個坐席,那么被路由的這個坐席會給該客戶發透明通道消息,而此時客戶端程序已經logout了所以收不到透明通道消息回調,就不能給坐席發起呼叫請求。所以被路由的這個新的坐席會處于假設狀態
解決辦法
客戶在收到呼叫超時的回調事件之后,可以判斷一下當前是否有空閑坐席,如果有可以繼續等待10s。坐席端程序可以在發出透明通道消息接口之后等待10s,如果沒有收到回復請求則結束服務并修改狀態為等待中。