Disclosed are embodiments related to a contact center agent state management system.
A contact center functions to assign contacts to contact center agents (or “agents” for short) available to handle those contacts. At times, the contact center may have agents available and waiting for assignment to inbound or outbound contacts (e.g., telephone calls, Internet chat sessions, email). At other times, the contact center may have contacts waiting in one or more queues for an agent to become available for assignment. It is important that the contact center maintain state information (SI) for each agent. In a typical contact center, any given agent, at any given time, is in one of several possible agent states; additionally, when an event for an agent is detected, the agent transitions from its current state to a new state and the agent state management system updates the SI for the agent to reflect the new state.
Certain challenges presently exist. For instance, at any given time an agent may exist in one of multiple possible states (e.g., idle, logged out, on-break, on-call, after-call work (ACW), etc.) and, while in a particular state (e.g., idle), may transition to a new state (e.g., on-call) in response to an event (e.g., call connected). In a contact center that has a large number of agents that handle a large call volume, it can be challenging to keep track of each agents state in a timely manner.
Accordingly, in one aspect there is provided a pairing node comprising memory and processing circuitry coupled to the memory, wherein the pairing node is configured to: obtain an event indicator (EI) indicating an event for an agent; obtain a current state object (CSO) for the agent, the CSO comprising a current state indicator (CSI) indicating a current state of the agent and a pending state indicator (PSI) indicating a pending state for the agent; use the EI and at least one of the CSI or PSI to obtain an index value; use the index value and at least one of the CSI or PSI to obtain a new state object (NSO) for the agent; and associate the NSO with an agent identifier (AI) associated with the agent.
In one embodiment, the pairing node is configured to use the index value and at least one of the CSI or PSI to obtain the NSO by performing a process that comprises: using the index value to select a row from an agent state transition management data table; and using the CSI or PSI to select a field from the selected row, wherein the selected field comprises the NSO.
In one embodiment, the pairing node is configured to use the EI and PSI to obtain the index value by evaluating a function of at least: EI, PSI, and a load indicator (LI).
In one embodiment, evaluating the function comprises calculating one of: EI+PSI−LI, EI×PSI/Interval+LI, (EI−ESV)/Interval+PSI×TE×2+LI, or LI×Interval+PSI×TE−EI, where TE is a total number of possible events, ESV is an event starting value, and Interval is spacing interval.
In one embodiment, the pairing node is configured to obtain the EI by reading from a message queue a message that comprises the EI.
In one embodiment, the pairing node is configured to obtain the CSO for the agent by using the AI to retrieve the CSO from a shared memory.
In one embodiment, the message further comprises the AI, and the pairing node is configured to obtain the AI from the message prior to using the AI to retrieve the CSO.
In one embodiment, the pairing node is configured to associate the NSO with the AI by storing the NSO in a memory location associated with the AI.
In another aspect, there is provided a pairing node comprising memory and processing circuitry coupled to the memory, wherein the pairing node is configured to: obtain a first event message associated with a first agent, wherein the first event message comprises a first agent identifier (AI) associated with the first agent; use the first AI to obtain a first queue identifier (QI); and add the first event message to a message queue associated with the first QI.
In one embodiment, the pairing node is configured to obtain the first event message by generating the first event message.
In one embodiment, the pairing node comprises a first message queue (MQ1) for storing the first event message, and the pairing node is configured to obtain the first event message by reading the first event message from MQ1.
In one embodiment, the pairing node is further configured to remove the first event message from MQI after adding the first event message to the message queue associated with the first QI.
In one embodiment, the pairing node is further operable to: obtain a second event message associated with a second agent, wherein the second event message comprises a second AI associated with the second agent; use the second AI to obtain a second QI; and add the second event message to a message queue associated with the second QI.
In one embodiment, the second QI identifies the same message queue as the first QI.
In one embodiment, the second QI identifies a different message queue than the first QI, and the pairing node is further configured to: initiate a first message handler (MH) for processing messages in the message queue associated with the first QI; and initiate a second MH for processing messages in the message queue associated with the second QI.
In another aspect there is provided a method that includes: obtaining an event indicator (EI) indicating an event for an agent; obtaining a current state object (CSO) for the agent, the CSO comprising a current state indicator (CSI) indicating a current state of the agent and a pending state indicator (PSI) indicating a pending state for the agent; using the EI and at least one of the CSI or PSI to obtain an index value; using the index value and at least one of the CSI or PSI to obtain a new state object (NSO) for the agent; and associating the NSO with an agent identifier (AI) associated with the agent.
In another aspect there is a method that includes obtaining a first event message associated with a first agent, wherein the first event message comprises a first agent identifier (AI) associated with the first agent; using the first AI to obtain a first queue identifier (QI); and adding the first event message to a message queue associated with the first QI.
The accompanying drawings, which are incorporated herein and form part of the specification, illustrate various embodiments.
The central switch 110 may not be necessary such as if there is only one contact center, or if there is only one PBX/ACD routing component, in the communication system 100A. If more than one contact center is part of the communication system 100A, each contact center may include at least one contact center switch (e.g., contact center switches 120A and 120B). The contact center switches 120A and 120B may be communicatively coupled to the central switch 110. In embodiments, various topologies of routing and network components may be configured to implement the contact center system.
Each contact center switch for each contact center may be communicatively coupled to a plurality (or “pool”) of agents. Each contact center switch may support a certain number of agents (or “seats”) to be logged in at one time. At any given time, a logged-in agent may be available and waiting to be connected to a contact, or the logged-in agent may be unavailable for any of a number of reasons, such as being connected to another contact, performing certain post-call functions such as logging information about the call, or taking a break.
In the example of
The communication system 100A may also be communicatively coupled to an integrated service from, for example, a third party vendor. In the example of
A contact center may include multiple pairing nodes. In some embodiments, one or more pairing nodes may be components of pairing node 140 or one or more switches such as central switch 110 or contact center switches 120A and 120B. In some embodiments, a pairing node may determine which pairing node may handle pairing for a particular contact. For example, the pairing node may alternate between enabling pairing via a Behavioral Pairing (BP) strategy and enabling pairing with a First-in-First-out (FIFO) strategy. In other embodiments, one pairing node (e.g., the BP pairing node) may be configured to emulate other pairing strategies.
Each data center 180A, 180B includes web demilitarized zone (DMZ) equipment 171A and 171B, respectively, which is configured to receive the agent endpoints 151A, 151B and contact endpoints 152A, 152B, which are communicatively connecting to CCaaS via the Internet. DMZ equipment 171A and 171B may operate outside a firewall to connect with the agent endpoints 151A, 151B and contact endpoints 152A, 152B while the rest of the components of data centers 180A, 180B may be within said firewall (besides the telephony DMZ equipment 172A, 172B, which may also be outside said firewall). Similarly, each data center 180A, 180B includes telephony DMZ equipment 172A and 172B, respectively, which is configured to receive agent endpoints 151A, 151B and contact endpoints 152A, 152B, which are communicatively connecting to CCaaS via the PSTN. Telephony DMZ equipment 172A and 172B may operate outside a firewall to connect with the agent endpoints 151A, 151B and contact endpoints 152A, 152B while the rest of the components of data centers 180A, 180B (excluding web DMZ equipment 171A, 171B) may be within said firewall.
Further, each data center 180A, 180B may include one or more nodes 173A, 173B, and 173C, 173D, respectively. All nodes 173A, 173B and 173C, 173D may communicate with web DMZ equipment 171A and 171B, respectively, and with telephony DMZ equipment 172A and 172B, respectively. In some embodiments, only one node in each data center 180A, 180B may be communicating with web DMZ equipment 171A, 171B and with telephony DMZ equipment 172A, 172B at a time.
Each node 173A, 173B, 173C, 173D may have one or more pairing modules 174A, 174B, 174C, 174D, respectively. Similar to pairing module 140 of communications system 100A of
Turning now to
In other embodiments, the system may be configured for a single tenant within a dedicated environment such as a private machine or private virtual machine. In other embodiments, the system may be configured for multiple tenants on the premises of a business process outsourcer (BPO) or other service provider.
Pairing node 200 also includes several modules (software and/or hardware components) (e.g., microservices) including a contact detector 202 and an agent detector 204. Contact detector 202 is operable to detect an available contact (e.g., contact detector 202 may be in communication with a switch that signals contact detector 202 whenever a new contact calls the contact center) and, in immediate response to detecting the available contact, store in memory 210 at least a contact ID associated with the detected contact (the metadata described above may also be stored in association with the contact ID). Similarly, agent detector 204 is operable to detect when an agent becomes available, or experiences another state change event, and, in immediate response to detecting the agent becoming available or other state change event, store in memory 210 at least an agent identifier uniquely associated with the detected agent (metadata pertaining to the identified agent may also be stored in association with the agent ID). In this way, as soon as a contact/agent becomes available, memory 210 will be updated to include the corresponding contact/agent identifier and SI indicating that the contact/agent is available. Hence, at any given point in time, memory 210 will contain a set of zero or more contact identifiers where each is associated with a different contact at the contact center system, and a set of zero or more agent identifiers corresponding to agents of the contact center system.
Pairing node 200 further includes other modules (e.g., microservices) including: (i) a contact/agent (C/A) batch selector 220 that functions to identify (e.g., based on the SI) sets of available contacts and agents for pairing, and provide state updates (i.e., modify the SI) for contacts and agents once the contacts and agents are selected for pairing and (ii) a C/A pairing evaluator 221 that functions to evaluate information associated with available contacts and information associated with available agents in order to propose contact-agent pairings. As shown in
After the C/A pairing evaluator 221 receives a set of contact IDs and agent IDs from the C/A batch selector 220, the C/A pairing evaluator 221 may read from memory 210 further information about the received contact IDs and agent IDs. The C/A pairing evaluator 221 uses the read information in order to identify and propose agent-contact pairings for the received contact IDs and agent IDs based on a pairing strategy, which, depending on the pairing strategy used and the available contacts and agents, may result in no contact/agent pairings, a single contact/agent pairing, or a plurality of contact agent pairings.
Upon identifying contact/agent pairing(s), the C/A pairing evaluator 221 sends the set of contact/agent pairing(s) to the batch selector 220. The C/A batch selector 220 provides the set of contact/agent pairing(s) to a contact/agent connector 222 (e.g., if the contact associated with contact ID C12 is paired with the agent associated with the agent ID A7, then C/A batch selector 220 provides these contact/agent IDs to contact/agent connector 222). Contact/agent connector 222 functions to connect the identified agent with the paired identified contact. For each contact/agent connection, C/A batch selector 220 (or C/A connector 222) stores in memory 210 (e.g., in a message queue in memory 210) a message comprising an event indicator (e.g., “connected), the agent ID, and the contact ID. An agent state manager (ASM) 299 reads the message and, based on the event indicator and a current state object for the identified agent, updates the state object for the identified agent.
Therefore, in one embodiment, pairing node 200 provides an asynchronous polling process where memory 210 provides a central repository that is read and updated by the contact detector 202, agent detector 204, C/A batch selector 220, C/A pairing evaluator 221, and C/A connector 222. Accordingly, the objects of each agent and contact do not need to be moved or copied among the microservices of pairing node 200; instead, identifiers associated with the objects are transmitted or shared among the contact detector 202, agent detector 204, memory 210, C/A batch selector 220, C/A pairing evaluator 221, and C/A connector 222, and the objects stay in place within memory 210, which is shared and accessible to each microservice without the need to rely on an operating system kernel to facilitate data copying among the microservices. This process conserves bandwidth, processing power, memory associated with each microservice, and is more expedient than conventional event-based pairing nodes.
In the task assignment system 302, an internal pairing system 390 may be communicatively coupled to the switch 380. The internal pairing system 390 may be native to (or built in) the task assignment system 302 (i.e., “first-party”) or may be provided by a third-party vendor. Typically, the internal pairing system 390 may implement traditional pairing strategies (e.g., first-in-first-out (FIFO) or performance based routing (PBR)) or some other pairing strategy that may be proprietary to the task assignment system 302. The internal pairing system 390 may receive or otherwise retrieve information from the switch 380 about the agents 330 logged into the switch 380 and about the incoming tasks 320.
In the contact-agent pairing system 300, the external pairing system 395 may be communicatively coupled to the switch 380 via an interface 385. The interface 385 may isolate the task assignment system 302 from the external pairing system 395 (e.g., for security purposes), and control information exchanged between the two systems. An example of the interface 385 may be a public or a private proprietary application programming interface (API) provided over a network (e.g., the Internet or a telecommunications network) (not shown).
The external pairing system 395 may be provided by a third-party vendor and the external pairing system 395 may provide a pairing strategy (e.g., behavioral pairing (BP)) that improves the performance of the task assignment system 302 when compared to the pairing strategy (or strategies) of the internal pairing system 390. The external pairing system 395 may also provide the same or a similar pairing strategy as that of the internal pairing system 390.
Relative to the internal pairing system 390, the external pairing system 395 may have access to less information associated with switch 380, e.g., a limited subset of information that is selected and shared by the switch 380. Similarly, relative to the internal pairing system 390, the external pairing system 395 may have less control over the operation of switch 380. Such information and/or control is generally sufficient for the external pairing system 395 to determine the task-agent pairing and convey the determined task-agent pairing to switch 380; however, such limited control negatively impacts the performance of the external pairing system 395.
The task assignment system 302 may operate under a shared control, in which the switch 380 may send route requests to either or both of the internal pairing system 390 and the external pairing system 395 to determine which task is to be routed to which agent. The shared control may be desirable, for example, when the internal pairing system 390 employs a traditional or proprietary pairing strategy (e.g., FIFO or PBR) that may not be provided by the external pairing system 395, while the external pairing system 395 is used to provide a higher-performing pairing strategy (e.g., BP).
When the external pairing system (EPS) 395 includes the same or a similar pairing strategy as that of the internal pairing system 390, the task assignment system 302 may operate under full control such that the switch 380 sends all route requests to the external pairing system 395. In other words, the EPS 395 has full control on determining every task-agent pairing. Under the full control, at times, the EPS 395 may simulate/mimic the pairing strategy of the internal pairing system (IPS) 390 (e.g., FIFO or PBR) and, at other times, employ a different pairing strategy (e.g., BP), and send its pairing recommendation to the switch 380 over the interface 385. The switch 380 may then assign the tasks 320 to agents 330 based on the pairing recommendation.
Process 400 is inefficient because EPS 395 is reliant on the internal components (e.g., switch 380 and/or IPS 390) maintaining and updating SI for each agent; however, EPS 395 must have accurate SI in order to properly pair agents with contacts, and, accordingly, EPS 395 may experience time delays waiting for switch 380 and/or IPS 390. Such time delays decrease the operating efficiency of EPS 395, as EPS 395 may be required to make multiple pairing decisions per second in a high-throughput contact center environment. Accordingly, systems and methods are needed such that EPS 395 is not reliant on state updates from switch 380 and/or IPS 390.
Further, process 400 is a “stateful” process, requiring sequential processing of pairing instructions and updating SI. If node 200 were used in system 300 according to method 400, various “stateless” features of node 200 would be stalled by process 300. Therefore, there is a need for systems and methods for maintaining agent SI by EPS 395; and, further, there is a need for systems and methods for maintaining agent SI in a stateless and/or lockless manner.
When an agent is on a call with contact, the agent's current state may be ‘Connected’. Each agent is always associated with a state object that includes at least i) a current state indicator (CSI) that indicates a current state of the agent, and ii) a pending state indicator (PSI) that indicates a pending state of the agent. The pending state is a state to which the system expects the agent to transition immediately after a resolution of the current state. For example, because an agent should complete ‘After Call Work’ (or ‘ACW’), such as updating notes about a contact's interaction, immediately after a call is terminated, when an agent's current state is ‘Connected’ (i.e., CSI=Connected), the agent typically has a pending state assigned as ACW (i.e., PSI=ACW).
Consider a situation where for a particular agent LI=0, CSI=Connected, PSI=ACW, and the agent tries to go on break by pushing a ‘request break’ button on the agent's interface. In this scenario, the event indicator (EI) would be “on_break.” Based on the LI, CSI, PSI, and EI, ASM 299 would determine for the agent a new PSI (i.e., on_break) and then update the agent's state object so that PSI is changed from ACW to on_break. Note that the CSI remains the same in this scenario.
Consider another situation where for the agent LI=0, CSI-Connected,
PSI=on_break, and the call that the agent is handling terminates naturally. In this scenario, EI=“Call Terminated,” and based on the LI, CSI, PSI, and EI, ASM 299 would determine for the agent a new CSI (i.e., on_break) and then update the agent's state object so that CSI is changed from Connected to on_break. Note that the PSI remains the same in this scenario.
Consider another situation where for the agent LI=0, CSI=on_break, PSI=on_break, and the agent has indicated to the system that the agent is finished with their break. In this scenario, EI=“end_break,” and based on the LI, CSI, PSI, and EI, ASM 299 would determine a new CSI (i.e., idle) and a new PSI (i.e., idle) for the agent and then update the agent's state object so that CSI is changed from on_break to idle and PSI is changed from on_break to Idle.
Table 1 below identifies a set of possible event indicators and corresponding descriptions.
Step 602 comprises MS1 (e.g. ASM 299) obtaining agent state transition (AST) information. AST information is information that enables MS1 to determine a new state object (NSO) for an agent based on an event indicator (EI), a load indicator (LI) indicating the current load for the agent, and a current state object (CSO) for the agent. Table 2 below illustrates an example of AST information:
In the example shown above, a state object is a vector containing two elements: 1) a CSI and 2) a PSI. Because the state vector shown contains two objects, it can also be referred to as a tuple. If the state vector had n elements, then the state vector can be referred to as an “n-tuple.” In some embodiments, the load indicator (LI) is an element of the state object. As an example, given the AST information above in Table 2 and assuming the following for a given agent: EI=call_terminated; LI=0, CSO=[CSI-Connected, PSI=ACW], then the new state object (NSO) for the agent will contain the following information: CSI=ACW, PSI=idle.
Step 604 comprises MS2 determining an agent event for a first agent.
Step 606 comprises MS2 adding a message to a message queue in SHM 510, where the message contains: an agent identifier (AI) that identifies the first agent and an EI that identifies the determined agent event. An example message queue MQ1 is shown in
Step 608 comprises MS1 (e.g., ASM 299) reading the message from the message queue.
Step 610 comprises MS1 using the AI from the message to obtain SI associated with the AI, which SI includes an LI and CSO for the first agent. In one embodiment, the SI associated with the AI is stored in shared memory segment 510 at a memory location associated with the AI (e.g., the AI may be associated with a memory pointer that points to the memory location).
Step 612 comprises MS1 determining an NSO for the first agent based on the EI included in the message, the CSO, the LI, and the agent state transition information.
Step 614 comprises MS1 updating the stored SI associated with the AI so that the determined NSO becomes the CSO for the first agent (e.g., the CSO in the SI is replaced with the NSO so that the NSO becomes the CSO). The SI associated with the AI may be stored in the shared memory segment 510 at a memory location associated with the AI.
Step 702 comprises MS1 (e.g. ASM 299) obtaining an agent state transition management data table, an example of which is shown below in Table 3. In the example shown, the table includes M rows where each row is indexed by an index value (e.g., row M is indexed by index value VM); each row includes N new state objects (NSOs); and each field within a row corresponds to a specific state indicator value (e.g., the second field of each row corresponds to the state indicator value of SI_2). Hence, a tuple consisting of an index value and a state indicator value maps to a specific state object. As described below, the agent state transition management data table is another example of AST information (i.e., information that enables MS1 to determine an NSO for an agent based on an EI, a LI, and a CSO for the agent).
The index value (V) is a value that is a function of: an EI, an LI, and a PSI (i.e., “index value function”). For example, in one embodiment, each value for an EI is associated with a unique numerical value; similarly, each value for a PSI is associated with a unique numerical value. In some examples, the unique numerical values associated with each EI and PSI may be configured such that a function for V results in numerically sequential values for various combinations of EI, LI, and PSI (e.g., V=a row number). In order to achieve such numerically sequential output, the numerical values associated with each EI and PSI may be spaced by an interval of 5, 10, 15, 20, etc. between adjacent EIs/PSIs (i.e., “Interval”). Similarly, a numerically first EI (i.e., “Event Starting Value”) or PSI in a set of numerically-ordered EIs or PSIs may have a starting value which is offset from zero, which starting value may be input into the index value function.
Therefore, for example: V=(((EI−ESV)/Interval)+(PSI×(TE×2)+LI)), where TE is the total number of possible events (e.g., 16) and ESV is the event starting value (e.g., 20). Accordingly, in this embodiment, each EI is a unique integer rather than a unique string of characters and each PSI is a unique integer rather than a unique string of characters. Any other index value function may be used which outputs an appropriate row number for various combinations of EI, PSI, and LI (e.g., V=EI+PSI−LI, V=EI*PSI/Interval+LI, V=LI*Interval+PSI*TE−EI, and/or any other index value formula as may be configured based on EI, PSI, LI, and other variables as contemplated herein). In some examples, the numerical values associated with each EI and PSI may be configured such that multiple combinations of EI, PSI, and LI result in the same index value. Such configurations may increase computational efficiency and speediness of determining a new state object.
The index value function provides a computationally-resource efficient solution and is a method that can be solved quickly (e.g., on the order of milliseconds) in order to determine the correct new state object for a set of inputs. These efficiencies are especially beneficial when the system comprises a large number of possible states and transitions, all of which need to be tracked accurately and quickly for a large number of agents. In some embodiments, the more common new state objects may be sequenced earlier in the table for even greater computational resource and time efficiencies.
Table 4 below shows an example mapping of EIs in character string form to EIs in integer form, and Table 5 below shows an example mapping of PSIs in character string form to PSIs in integer form.
Step 704 comprises MS1 detecting an agent event, and obtaining EI for the event and an AI identifying the agent to which the agent event applies. For example, in one embodiment, detecting an agent event comprises detecting that an event message has been added to a message queue (e.g., queue MQ1, queue MQ2, queue MQ3, or queue MQ4 shown in
Step 706 comprises MS1 using the obtained AI to obtain SI for the agent, which SI comprises an LI, CSI, and PSI for the agent.
Step 708 comprises MS1 obtaining index value using the obtained EI, LI, and PSI. For example, MS1 calculates an index value by using a predetermined formula, which formula is configured to output index values for various combinations of EI, ESV, LI, and PSI (e.g., the index value function as discussed above).
Step 710 comprises MS1 using the index value and the obtained CSI to obtain an NSO for the agent (i.e., the NSO to which the tuple consisting of the index value and the obtained CSI is mapped by the agent state transition management data table). For example, MS1 searches the agent state transition management data table for the NSO corresponding to the index value/CSI pair. Using Table 3 as an example, if the index value is V3 and the CSI value is SI_2, then the NSO corresponding to the tuple [V3,SI_2] is NSO_2N+1. As a more specific example, assume that the value V3 was obtained by inputting into the index value formula: EI=260 (which corresponds to event call_terminated), LI=0, and PSI=4 (which corresponds to ACW) and the value of SI_2 is “Connected” or 3, then NSO_2N+1 would be the following tuple: [CSI=ACW,PSI=Idle], which matches what is shown in the first row of Table 2.
Step 712 comprises MS1 performing step 614.
As noted above, for some embodiments, when an event is detected, an event message is added to message queue MQ1 (see
Step 902 comprises one or more MSs storing one or more event messages in MQ1. In this embodiment, MQ1 is a FIFO queue (i.e., the message at the head of the queue is the oldest message in the queue, new messages are appended to the tail of the queue).
Step 904 comprises MS3 (or another MS) reading the event message located at the head of MQ1 and determining a queue identifier (QI) based on the AI included in the event message. For example, in one embodiment, determining QI comprises calculating: QI=((AI mod Qn)+2), where Qn is the number of additional message queues (in the example, shown in
Step 906 comprises MS3 adding the event message at the head of MQ1 to a message queue associated with the determined QI value (e.g., MQ2, MQ3, or MQ4).
Step 908 comprises MS3 removing the event message from MQ1 (now the event message that followed this removed event message, if any, is located at the head of MQ1).
Step 910 comprises MS3 determining whether MQ1 is now empty. If it is not, process 900 goes back to step 904, otherwise step 910 is repeated.
In the example shown in
In some embodiments, MQ1 is not necessary. In such an embodiment, each module that generates an agent event message associated with an agent determines a QI based on the AI for the agent and then simply adds the event message to the message queue associated with the determined AI. For example, if MS1 generates an event message for the agent associated with agent identifier A4 then MS1 will simply store the event message in MQ3 as there is no need to store the event message in MQ1.
Therefore, the various microservices may submit messages that would update state information for agents in a lockless system, without waiting for the agent state information to be updated beforehand by other microservices. As further described below regarding
Step 1002 comprises MS1 (or another MS) initiating a set of two or more message handlers (e.g., a set of threads or a set of processes), each message handler corresponding to one of the additional message queues). Using the message queues of
Step 1004 comprises each message handler (MH) reading the event message located at the head of the message queue to which the MH corresponds (i.e., MH2 reads the event message located at the head of MQ2 and MH3 reads the event message located at the head of MQ3). As noted above, each event message contains an EI and AI.
Step 1006 comprises each MH determining, using the EI and AI from the message it read in step 1004, a new state object (NSO) for the identified agent. That is, for example, MH2 determines an NSO using the EI and AI included in the message it read from MQ2. MH2 may implement process 700 to determine the NSO.
Step 1008 comprises each MH performing step 614.
Therefore, process 1000 provides an efficient, multi-threaded process for handling agent state information updates, where updates for different agents may happen simultaneously, instead of each agent update being required to wait in turn for all prior agent events to be handled (e.g., as in process 400).
Altogether, the present disclosure provides systems and methods capable of updating agent state objects for a plurality of agents in a dynamic, high-throughput contact center system. The present disclosure provides systems and methods such that any microservice may cause state updates for any agent. Further, updates to agent information may be ‘resilient’ to impacts from microservices, in that the disclosed agent state information table may function as a finite state machine, permitting certain pathways and excluding other pathways, based on an agent's current state object, event information, and load information.
While various embodiments are described herein, it should be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of this disclosure should not be limited by any of the above-described exemplary embodiments. Moreover, any combination of the above-described elements in all possible variations thereof is encompassed by the disclosure unless otherwise indicated herein or otherwise clearly contradicted by context.
Additionally, while the processes described above and illustrated in the drawings are shown as a sequence of steps, this was done solely for the sake of illustration. Accordingly, it is contemplated that some steps may be added, some steps may be omitted, the order of the steps may be re-arranged, and some steps may be performed in parallel.
This application is a bypass continuation of International Patent Application No. PCT/US2023/031391, filed on 2023 Aug. 29, which claims the benefit of U.S. Provisional Patent Application No. 63/402,563, filed on 2022 Aug. 31. The above identified applications are incorporated by this reference.
Number | Date | Country | |
---|---|---|---|
63402563 | Aug 2022 | US |
Number | Date | Country | |
---|---|---|---|
Parent | PCT/US2023/031391 | Aug 2023 | WO |
Child | 19059673 | US |