Cisco Cisco Computer Telephony Integration Option 8.5 Developer's Guide

Page of 506
   
4-72
CTI OS Developer’s Guide for Cisco Unified Contact Center Enterprise
Release 8.5(1)
Chapter 4      Building Your Application
Building Supervisor Applications
OnMonitoredAgentStateChange events.  The agent select grid normally updates when the 
OnMonitoredAgentStateChangeevent is received.  In order to prevent this, supervisors who are not 
members of the team that they are supervising will need to be marked as such.  This information can be 
used to avoid updates when an OnMonitoredAgentStateChange event is received for a supervisor that is 
not part of the team.  In order to accomplish this, the application leverages the following.
1.
OnNewAgentTeamMember events will not be received for supervisors that are not part of the team.
2.
The CIL keeps a cache of all the agents and supervisors that it knows about.  Agents in this cache 
have properties that can be modified by applications built on top of the CIL.
Knowing this, the application will mark every agent that is included in a OnNewAgentTeamMember 
event as a member of this supervisor's team.  When OnMonitoredAgentStateChange events are received, 
the agent select grid will only update when the agent that is represented by the event is marked as a 
member of the team.  In short, any agent that does not send a OnNewAgentTeamMember event to the 
CIL will not be displayed in the agent select grid.  This is illustrated in the 
SupervisorUIManager.ProcessMonitoredAgentStateChange() method.
OnMonitoredAgentStateChange Events
OnMonitoredAgentStateChange events are sent when an agent in the supervisor’s team changes state.  
Supervisor applications, like the CTI OS Toolkit Combo Desktop use this event to update structures that 
store the supervisor’s team (the agent team grid).  This event is processed similar to 
OnNewAgentTeamMember.  However, there is one subtle difference.  Instead of using the Arguments 
object carried with the event, the application should use the arguments associated with the agent object 
cached by the CIL.  This is done to correctly handle skill group membership changes related to dynamic 
reskilling.  The CIL contains logic that processes the OnMonitoredAgentStateChange and determines 
whether or not an agent has been added or removed from a skill group.  The changes in the agent’s skill 
group membership are reflected in the agent object’s properties.
OnMonitoredAgentInfo Event
This event can be used to populate the following agent information.
AgentID
AgentFirstName
AgentLastName
LoginName
Time in State
If your application needs to track an agent’s time in state, it can be done as follows.  The algorithm is 
contained in AgentSelectGridHelper.cs.  The first part of the algorithm resides in the 
AgentData.UpdateData() method.  This method decides if the agent’s state duration is known or 
unknown.  An agent’s state duration is unknown if the agent has just been added to the grid or if the 
agent’s state has not changed since being added to the grid.  If a state change is detected after the agent 
has been added to the grid, the time of the state change is marked.
Second, there is a timer callback that the AgentSelectGridHelper class starts when the grid is initialized.  
The timer callback fires every ten seconds.  When the callback fires, the method 
AgentSelectGridHelper.m_durationTimer_Tick() cycles through all of the rows in the grid.  Each row 
who’s Time in State column is not unknown, has its value set to the time the agent changed state minus 
the current time.