Guest

Preview Tool

Cisco Bug: CSCvs94144 - Unable to use 'Agent Mode' for CTI connections, when using both Finesse(HA) & 3rd party CTI Client

Last Modified

Feb 26, 2020

Products (1)

  • Cisco Unified Contact Center Express

Known Affected Releases

11.6(1) 11.6(2) 12.0(1)

Description (partial)

Symptom:
++ CTI Protocol guide for 11.6.1 and above mentions that there are 2 ways of connecting to clients when using a TP CTI client.
- Bridge mode [for all events] and agent mode [for client mode]

++ CTI Protocol Developer Guide:
- https://www.cisco.com/c/en/us/td/docs/voice_ip_comm/cust_contact/contact_center/crs/express_11_0/programming/guide/UCCX_BK_C6EFB2E3_00_cti-protocol-guide/UCCX_BK_C6EFB2E3_00_cti-protocol-guide_chapter_011.html#UCCX_TP_TF949B30_00


But starting UCCX Version 11.6 and above, where Finesse is active-active; 'agent mode' DOES NOT function as expected if BOTH Finesse[in HA] and TP CTI client needs to be used.

Example:

## CU has a TP-CTI-client integrated with CCX that is used by a few agents, while the other agents use Finesse.
- When a particular CCX agent uses a 3rd party CTI Client, the initial logins and call function work fine.
- However, if any event for this user is received from the Finesse server [for eg: Supervisor initiated change], its breaks the connection between the CTI Server and the TP CTI Client.


- Pub: ccx-pub-1.lab.com - 14.2.XX.XX
- Sub: ccx-sub-2.lab.com - 10.48.XX.XX
- CRM: tp_cti_server.lab.com - 172.16.XX.XX

Technically this scenario is a mixed mode deployment: Third party CTI operations  and Finesse operations (i.e. Supervisors log in to Finesse).


++ Example for agent 52293:
===========================

// OPEN_REQ from TP-CLIENT 172.16.XX.XX for agent 52293
- Nov 29 17:53:37.183 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_CLIENTPOOL-60-4150-client_thread_5218] ClientConn: ClientConnMgr: Processing msg on socket:Socket[addr=172.16.XX.XX,port=54238,localport=12028] Msg is {length=69 type=OPEN_REQ,invokeId=1719183458,idleTimeout=100,versionNumber=16,servicesRequested=7,callMsgMask=9853,agentStateMask=511,configMsgMask=15,clientID=,clientPass=[B@a4a433,appPathID=0, clientSignature=null,agentExt=52293,agentInstrument=,agentIDlong=52293,agentID=null,reserve1=0,reserve2=0,reserve3=0,invokeId=1719183458 }

// OPEN_CONF sent to TP-CLIENT 172.16.XX.XX:
- Nov 29 17:53:37.184 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_SERVER-54-1-outboundMsgQ] CSOutboundMsgProcessor: OutboundMessageprocessor : sending msg : { length=-1 type=OPEN_CONF,invokeId=1719183458,serviceGranted=7, monitorID=0,pgStatus=0,peripheralOnline=true,peripheralType=0,agentState=9,numPeripherals=1,fltPeripheralId=0,multilineAgentControl=1 to socket: Socket[addr=172.16.XX.XX,port=54238,localport=12028]

// LOGIN REQ from TP-CLIENT 172.16.XX.XX:
- Nov 29 17:53:37.286 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_CLIENTPOOL-60-4150-client_thread_5218] ClientConn: ClientConnMgr: Processing msg on socket:Socket[addr=172.16.XX.XX,port=54238,localport=12028] Msg is {length=50 type=SET_AGENT_STATE_REQ,invokeId=222740131,agentState=LOGIN,eventReasonCode=0,forcedFlag=True,agentID=52293,agentDN=52293,agentPwd=***** }

// CONF sent to TP-CLIENT 172.16.XX.XX. Note the agentSocket is set to TP-CLIENT and alternate socket is set to Finesse Server. AgentSocket is initialized on first login request and set to the socket from where request is received.
- Nov 29 17:53:37.691 IST %MIVR-ICD_CTI-7-UNK:[EventQueue.DispatchThread-0-10] CRACTIEventHandler: EventHandler: posting {SET_AGENT_STATE_CONF_MSG Socket:Socket[addr=172.16.XX.XX,port=54238,localport=12028] invokeID:222740131 } to outboundQ
- Nov 29 17:53:37.692 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_SERVER-54-1-outboundMsgQ] CSOutboundMsgProcessor: setAlternateFinesseSocket : agentID:52293, agentSocket:Socket[addr=tp_cti_server.lab.com/172.16.XX.XX,port=54238,localport=12028], agentAlternateSocket:Socket[addr=ccx-pub-1.lab.com/14.2.XX.XX,port=34416,localport=12028]

## Problem starts when READY request is received from finesse 14.2.XX.XX. This is when the Supervisor (who is logged in from Finesse Desktop) set the agent to ready.

// READY Request received from 14.2.XX.XX which is the Finesse Primary Server:
- Nov 29 17:54:10.630 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_CLIENTPOOL-60-998-client_thread_1224] ClientConn: ClientConnMgr: Processing msg on socket:Socket[addr=14.2.XX.XX,port=34416,localport=12028] Msg is {length=47 type=SET_AGENT_STATE_REQ,invokeId=242817,agentState=AVAILABLE,eventReasonCode=33,forcedFlag=True,agentID=52293,agentDN=52293,agentPwd=***** }


##
- Since the socket address for the READY Request is from 14.2.XX.XX, the alternate socket 14.2.XX.XX (which is the Finesse Primary Server IP) is set as the primary socket replacing the third party client with IP 172.16.XX.XX. And secondary Finesse [CCX Subscriber] 10.48.XX.XX is set as the alternate Socket.
- This happens because, the READY Request from the supervisor comes from the alternate socket and CTI sees this as a failover for the agent:

- Nov 29 17:54:10.631 IST %MIVR-ICD_CTI-7-UNK:[EventQueue.DispatchThread-0-18] CRACTIEventHandler: EventHandler: posting {AGENT_STATE_EVENT: Socket:Socket[addr=14.2.XX.XX,port=34416,localport=12028] monitoredDeviceDN:52293, agentDN:52293, agentID:52293, monitorID = 0, stateDuration = 0, agentstate = AVAILABLE, eventreasoncode = 33, agentID = 52293, agentExtension = 52293, agentID_Long = 52293 } to outboundQ
- Nov 29 17:54:10.632 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_SERVER-54-1-outboundMsgQ] CSOutboundMsgProcessor: Agent state event received post failover. Agent : 52293
- Nov 29 17:54:10.632 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_SERVER-54-1-outboundMsgQ] CSOutboundMsgProcessor: Setting alternative Finesse to NULL, as no alternate Finesse is reacheable for agent: 52293
- Nov 29 17:54:10.632 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_SERVER-54-1-outboundMsgQ] SocketInfo: isFinesseCTIClient - done validating the client: Finesse and response:true
- Nov 29 17:54:10.632 IST %MIVR-ICD_CTI-7-UNK:[MIVR_ICD_CTI_SERVER-54-1-outboundMsgQ] CSOutboundMsgProcessor: setAlternateFinesseSocket : agentID:52293,  agentSocket:Socket[addr=ccx-pub-1.lab.com/14.2.XX.XX,port=34416,localport=12028], agentAlternateSocket:Socket[addr=ccx-sub-2.lab.com/10.48.XX.XX,port=47822,localport=12028]

## After this, all solicited and unsolicited events are only sent to the Finesse Servers since the agentSocket and agentAlternateSocket consist of Finesse Servers. As the Third Party Client is not registered in bridge mode, no further events will be sent to the Third Party Client.

++ However, we do see heartbeats going on between the TP CTI Client and the CTI Server every 20 seconds.

Conditions:
When using a 3rd party CTI Client [Integrated with CCX] and also using Finesse[HA] at the same time.
Bug details contain sensitive information and therefore require a Cisco.com account to be viewed.

Bug Details Include

  • Full Description (including symptoms, conditions and workarounds)
  • Status
  • Severity
  • Known Fixed Releases
  • Related Community Discussions
  • Number of Related Support Cases
Bug information is viewable for customers and partners who have a service contract. Registered users can view up to 200 bugs per month without a service contract.