= Overview= The Bright Pattern Contact Center ''Virtual Queue Tutorial'' explains Bright Pattern's virtual queue option, how to configure it, and how enabling it can affect reporting statistics. ''Virtual Queuing'', also referred to as the ''Callback Option'', is an enhancement of the regular automatic call distribution method (ACD) used in inbound call centers. During periods of significant wait times, this option allows customers to hang up the call while keeping their position in the service queue and to receive a callback when it is their turn to be connected to an agent. The benefits of using virtual queuing include: * '''Improved customer satisfaction''' – After requesting a callback, customers get back to their normal activities instead of being tied on the phone. * '''Reduced abandonment rates''' – Customers who can continue their normal activities are less likely to abandon their service requests (i.e., to ignore the callback). * '''Reduced talk time''' – Customers waiting in a virtual queue are less likely to spend any time venting their frustration with a long wait when they are finally connected to an agent. * '''Lower telco costs''' – Customers waiting in a virtual queue do not occupy physical voice channels. == How It Works == Bright Pattern Contact Center ''Virtual Queue'' works in the following way: For each incoming service call, the system calculates its estimated waiting time (EWT) in queue. If this time exceeds a threshold EWT value preconfigured for the given service, the system notifies the calling customer about the wait time and offers the customer the option of receiving a callback when it is the customer's turn to be connected to an agent. The customer can request the callback to be made to the phone from which the customer is calling, or to a different number that the customer can enter using the phone keypad. The original live call is then disconnected while the customer’s position in the service queue is maintained by the system as if the customer had remained on the line (hence the name ''Virtual Queuing''). When it is the customer’s turn to be connected to an agent, the system makes an outbound call to the designated callback number. Upon answer, this call is connected to an available agent. To the agent, the answered callback appears as a regular incoming call. If an agent becomes available for a given virtual call before the EWT, the callback is made at the moment when the agent becomes available. Otherwise, the callback attempt is made a few seconds before EWT expiration based on the prediction that an agent will have become available by the time the callback is answered by the customer. If an agent does not become available at that time, the answered call is placed in the first position in the service queue to be connected to the next available agent. An interactive voice response (IVR) announcement can be played for the answered callback to prevent the customer from hanging up a call if it cannot be immediately connected to an agent. Subsequent processing of answered callbacks delivered to agents is no different from the processing of calls waiting in the queue. An agent may be reserved by setting the property ''Start Dialing'' on the ''Request Callback'' scenario block to a value of "0". This will reserve a skilled ready agent for the callback. During this time, agent may not change skill.
[[#topic_virtual-queue-tutorial/Configuration|Next >]]
= Configuration= To configure a virtual queue (VQ) for your existing inbound voice services, follow these steps: == Step 1: Select the scenario that will distribute calls to the services that will have VQ enabled == # Log in as Admin to the Contact Center Administrator application.

# Navigate to [[#topic_contact-center-administrator-guide/Voice|''Scenarios > Voice'']].

# Select the scenario that is used for the distribution of calls to the services for which you would like to enable VQ. In the example shown, the scenario selected is called "Inbound Service." [[File:Scenarios-Voice-Inbound-Service.png|800px|thumbnail|center|Select the scenario that will be used for virtual queue]] == Step 2: Rename the scenario == # Double-click the scenario name or click the '''Edit''' button to open the scenario in the Scenario Builder application.

# Using the '''Save As''' button, save this scenario under a new, unique name. This name can be anything you like. [[File:Save-Scenario-As.png|800px|thumbnail|center|Save the scenario with a new name to create a duplicate scenario with your VQ settings saved]] == Step 3: Locate the Find Agent block in Scenario Builder == # Double-click the scenario name, or click the '''Edit scenario''' [[File:Edit-Scenario-Button.png|26px]] button to open the scenario in the Scenario Builder application.

# Within this new scenario, select the [[#topic_scenario-builder-reference-guide/FindAgent|Find Agent]] block that is used to distribute calls to the particular service for which you would like to enable VQ. [[File:VQ-Find-Agent.png|800px|thumbnail|center|The Find Agent block is where you will specify VQ properties]] == Step 4: Enable VQ and specify the Estimated Wait Time Threshold == # In the ''Virtual Queue option'' section of this Find Agent block, select the checkbox to enable VQ.

# Then specify the estimated wait time (EWT) threshold, in seconds. The VQ option will be offered only if the EWT of a given call exceeds the threshold value entered here. In the example shown, the threshold value is zero (0) seconds. [[File:virtual-queue-tutorial-image2.PNG|thumb|600px|center|Virtual Queue option in Find Agent block]] == Step 5: Enable callback == In the ''Callback button'' drop-down menu, select a number. This number is the dial pad digit that the caller will press to accept the VQ option. [[File:Callback-Button.png|800px|thumbnail|center|Select the numeric digit that the caller should press to accept the VQ option]] == Step 6: Record the EWT announcement to play for callers == # Create the EWT Announcement. For example, an EWT announcemnt might include ''The estimated waiting time is '' where "Estimated Waiting Time" is a voice segment of the ''EWT'' type.

'''Note: If you have already created one, skip this step and proceed to Step 7.'''

# To create a new prompt/announcement, find ''EWT Announcement'' in the Prompts list and click '''select'''.

[[File:EWT-Announcement.png|800px|thumbnail|center|Select the desired announcement to use]]

# In the ''Prompts list'' window that appears, click '''Add new'''.

[[File:Prompts-List-Add-New.png|800px|thumbnail|center|If you do not already have an EWT announcement, you must add a new one]]

# In the ''New prompt'' window that appears, type the name of the announcement.

# Click '''Add voice segment'''.

# In the drop-down menu the appears, select '''EWT''' and click the green checkmark.

[[File:Add-Segment-EWT.png|800px|thumbnail|center|Select the segment to add to the announcement]]

# Click '''Add voice segment''' again.

# In the drop-down menu the appears, select '''Voice''' and type the text that you wish to be spoken in the announcement. Typically, the text is ''The estimated waiting time is''. This describes the spoken announcement that the caller will hear on the phone.

# Click '''upload''' to add a voice recording of your announcement text.

[[File:Add-Segment-Voice.png|800px|thumbnail|center|Select the Voice segment to add to the announcement]]

# You now have two segments in your EWT Announcement. Click '''Apply''' to save your changes.

# In the Prompts list that appears again, select the EWT Announcement you just created, and click '''Select'''. == Step 7: Create the Virtual Queue availability announcement == The Virtual Queue availability announcement will be used to offer the VQ option to the caller. For example, the announcement might include ''To hang up now and have us call you back once a representative is available, press [digit] at any time'', where ''digit'' is the digit selected in Step 5. To create this announcement, follow the instructions given in Step 6 of this procedure: # Beside ''Virtual Queue availability announcement:'', click '''select'''.

# In the Prompts list that appears, click '''Add new'''.

# Add a voice segment, naming it "Virtual Queue availability announcement" and typing "To hang up now and have us call you back once a representative is available, press 1 at any time." in the content box.

# Upload the voice recording that will be played to callers.

# Click '''Apply''' to save your changes.

# In the Prompts list that appears again, select the new announcement you just created, and click '''Select'''. Your Prompts section of the Find Agent block now includes the two announcements you created. [[File:VQ-Prompts.png|800px|thumbnail|center|Find Agent > Properties > Prompts]] == Step 8: Define Request Callback block properties == For the ''Callback'' exit of the Find Agent block, insert a [[#topic_scenario-builder-reference-guide/RequestCallback|Request Callback]] block and define its parameters. [[File:Find-Agent-Request-Callback.png|800px|thumbnail|center|In the Find Agent block, below the Callback exit, place a Request Callback block]] === Parameters === The parameters are described as follows: * '''Title text''' - The name of this block * '''Confirmation prompt''' - Confirms the callback request (e.g., “Thank you. We will call you back.”) * '''Callback phone''' - Specifies the phone number for the callback. If callbacks will always be made to the phone that was used to make the original call, you can use the ''$(item.from)'' variable here, which is the caller ID of the original call. If, however, you want to give the customer a choice of providing another phone number for callback, you should use a combination of scenario blocks [[#topic_scenario-builder-reference-guide/SetVariable|Set Variable]], [[#topic_scenario-builder-reference-guide/Menu|Menu]], and [[#topic_scenario-builder-reference-guide/CollectDigits|Collect Digits]] as illustrated in the [[#topic_virtual-queue-tutorial/ScenarioExample|example offered in this tutorial]]. In this case, set the ''Callback phone'' to the new variable that you define in the [[#topic_scenario-builder-reference-guide/SetVariable|Set Variable]] block. * '''Cancel request after''' - Specifies the amount of time (in seconds) after which the virtual calls will be terminated if no matching agents are found * '''Start dialing''' - Specifies how far in advance (in seconds) of the EWT expiration moment that the callback attempt will be made; note that if an agent becomes available earlier for the given call, the callback will be placed at that moment * '''No Answer Timeout''' - Specifies how long (in seconds) the block will wait for the customer to answer the callback attempt before taking the ''No Answer'' exit [[File:virtual-queue-tutorial-image3.PNG|thumb|800px|center|Request Callback block]] == Step 9: Use an IVR prompt to inform the customer that he/she is receiving a callback == The normal exit of the Request Callback block is taken when the callback attempt is answered before the specified ''No Answer Timeout'' expires. Instead of connecting the answered call directly to the Find Agent block for immediate distribution to an agent, it is good practice to use an IVR prompt to announce to the customer that this is the requested callback. This explains the purpose of the call to the customer and, more importantly, prepares the caller for a possible short waiting time in case an agent is not immediately available. In the [[#topic_virtual-queue-tutorial/ScenarioExample|Scenario Example]] given in this guide, the [[#topic_scenario-builder-reference-guide/Menu|Menu block]] is used to make such an announcement and to wait for customer’s confirmation before passing this call to the Find Agent block for distribution. == Step 10: Define when conditional exits should be taken == Use the conditional exits of the [[#topic_scenario-builder-reference-guide/RequestCallback|Request Callback block]] to define what happens when the callback attempt meets various "abnormal" conditions, such as ''No Answer'' or ''Busy''. In the [[#topic_virtual-queue-tutorial/ScenarioExample|Scenario Example]] given in this guide, the call is terminated under any such conditions, which is shown via the [[#topic_scenario-builder-reference-guide/Exit|Exit]] blocks placed beneath each conditional exit. You can define a different type of reaction, such as a repeated callback attempt in case of ''No Answer''. [[File:Request-Callback-Exits.png|800px|thumbnail|center|Exit blocks are placed beneath each conditional exit of the Request Callback block]] == Step 11: Enable VQ for any other services and save your work == # Repeat Step 3 through Step 10 for other Find Agent blocks of this scenario that are used to distribute calls to other services for which you would like to enable VQ.

# Save the new scenario by clicking the '''Save''' button at the bottom of Scenario Builder. == Step 12: Complete remaining VQ configuration steps in Contact Center Administrator == # To complete the remaining VQ configuration steps, open the Contact Center Administration application.

# Log in as Admin. == Step 13: Activate the VQ function for the service desired == The configured VQ will not be operational until it is explicitly activated for the desired services. # To activate the VQ function for a particular service for which it was configured as described above, select the ''Enable callback functionality'' checkbox in the [[#topic_contact-center-administrator-guide/PropertiesTab|Properties tab]] of that service.

# Before you activate the VQ function for all other services where it may have been configured, consider using the Virtual Queue Report to monitor VQ performance within the service where it has been activated and to adjust its parameters if necessary. See the ''Reporting Reference Guide'' for more information on reports. See also section [[#topic_virtual-queue-tutorial/Reporting|Reporting]] for more information. == Step 14: Test the scenario == As with any other significant service configuration change, the new scenario should be tried in a test environment. # Create a test [[#topic_contact-center-administrator-guide/Dial-in|dial-in scenario entry]], associate it with your new scenario and make some test calls imitating various VQ conditions to make sure everything works as you expect.

# Pick a time when your call center is closed for business and replace your current production scenario with the VQ-enabled scenario in the [[#topic_contact-center-administrator-guide/Dial-in|dial-in scenario entries]] where the current scenario is used. (These scenario entries will appear in the Scenario Entries tab when you select your current scenario in the [[#topic_contact-center-administrator-guide/Voice|Scenarios > Voice]] list view. To make the replacement, click one of the listed dial-in scenario entries and select the new scenario from the ''Scenario'' drop-down list.)
[[#topic_virtual-queue-tutorial/Overview|< Previous]] | [[#topic_virtual-queue-tutorial/ScenarioExample|Next >]]
= Scenario Example= This section provides a fragment of an inbound voice scenario with Virtual Queue (VQ) related logic. This example scenario is based on the ''Virtual Queue (Callback)'' [[#topic_contact-center-administrator-guide/Voice|scenario template]]. You can open this template in the Scenario Builder application and review the settings of each block involved in this scenario. For more information on how to create a scenario from a template, refer to the ''Contact Center Administrator Guide'', section [[#topic_contact-center-administrator-guide/ScenariosOverview|Scenarios Overview]]. [[File:virtual-queue-tutorial-image4.PNG|center]] [[File:Virtual-queue-tutorial-image7.PNG|center]] == Scenario Flow == A scenario is comprised of a series of actions that are initiated by scenario blocks. The main flow of blocks in this VQ-enabled scenario, from top to bottom, is briefly explained as follows. '''The Play Prompt block greets the caller.''' The [[#topic_scenario-builder-reference-guide/PlayPrompt|Play Prompt]] block begins the scenario. The caller hears the initial announcement (i.e., a welcome message or a prompt for more information). [[File:Virtual-queue-tutorial-image4-1.png|800px|thumbnail|center|Play Prompt block]] '''The Find Agent block facilitates whether callers wait in queue or accept the callback option.''' The Virtual Queue option is offered in the [[#topic_scenario-builder-reference-guide/FindAgent|Find Agent]] block, as described in section [[#topic_virtual-queue-tutorial/Configuration|Configuration]] of this tutorial. Callers that prefer to wait online will remain in the Find Agent block until it is their turn to be connected. Callers that accept the Virtual Queue option will exit this block via the ''Callback'' exit. [[File:Virtual-queue-tutorial-image4-3.png|800px|thumbnail|center|Find Agent block]] '''The No Agents block gives the caller a way to exit the scenario if there are no agents available.''' If no agent is available to accept the call, the scenario will take the ''No Agents'' exit. [[File:Virtual-queue-tutorial-image4-4.png|800px|thumbnail|center|No Agents conditional exit]] '''Callback properties are handled by Set Variable and If blocks.''' Because virtual queue/callback is enabled for this scenario, the caller is given the option to receive a callback if no agents are available or if the caller does not want to wait in queue. A series of [[#topic_scenario-builder-reference-guide/SetVariable|Set Variable]] blocks and [[#topic_scenario-builder-reference-guide/If|If]] blocks determine how a callback should be handled. Within the Callback exit, in the first Set Variable block, the callback number is initially set to the value of ''$(item.from)'', which is the caller ID of the original call. '''If blocks determine whether there is a caller ID and whether the ID can be dialed.''' The scenario then uses [[#topic_scenario-builder-reference-guide/If|If]] blocks to ensure that * there is a caller ID (ANI) to use for the callback (if there is no ANI, then a phone number is collected) * the caller ID is dialable and is not a 1-900 number (note that the ''length()'' function is used to check the number of digits in the phone number) [[File:Virtual-queue-tutorial-image4-5.png|800px|thumbnail|center|Callback > Set Variable > If]] '''The Menu block asks the caller to establish the callback number.''' The [[#topic_scenario-builder-reference-guide/Menu|Menu]] block that follows will ask the caller to choose the callback number. The caller can either use the current phone or enter a different callback phone number. [[File:Virtual-queue-tutorial-image4-6.png|800px|thumbnail|center|Menu block]] '''The Collect Digits block gets a new callback number, if needed.''' If the caller selects a different callback phone number, the [[#topic_scenario-builder-reference-guide/CollectDigits|Collect Digits]] block is used next to collect the new number. [[File:Virtual-queue-tutorial-image7-1.png|800px|thumbnail|center|Collect Digits block]] '''If blocks determine whether the number can be dialed.''' Then If blocks are used to ensure that the entered number is dialable and is not a 1-900 number. Note that the ''length()'' function is used to check the number of digits. Once the callback number is identified, the call is passed back to the [[#topic_scenario-builder-reference-guide/RequestCallback|Request Callback]] block. This block confirms the request, disconnects the original call, places the associated callback request in the virtual queue, waits for a matching agent, and makes the callback when either an agent becomes available or the estimated waiting time (EWT) expires. '''The Menu block explains the callback to the party who answers the call.''' The [[#topic_scenario-builder-reference-guide/Menu|Menu]] block that follows announces the purpose of the call to the party that answers the callback attempt. This is done to make sure the call is connected to the correct party. The call is then handed over to the Find Agent block for distribution to an agent. Note that despite the EWT prediction that no agents are immediately available, the call will be placed in the first position in the service queue to be picked up by the next agent who becomes available. [[File:Virtual-queue-tutorial-image7-2.png|800px|thumbnail|center|If and Set Variable blocks]] '''The Connect Call block connects the caller to the agent.''' As usual, the [[#topic_scenario-builder-reference-guide/ConnectCall|Connect Call]] block is used to connect the call to the agent identified by the Find Agent block. [[File:Virtual-queue-tutorial-image7-3.png|800px|thumbnail|center|Connect Call block]]
[[#topic_virtual-queue-tutorial/Configuration|< Previous]] | [[#topic_virtual-queue-tutorial/Reporting|Next >]]
= Reporting= For reporting purposes, general real-time and historical service metrics treat virtual calls as if they were regular inbound calls waiting in the physical queue. Calls that select the Virtual Queue (VQ) option are counted as ''Queued''. Successful callbacks (i.e., answered by customers and connected to agents) are counted as ''Answered'', while unsuccessful callbacks (unanswered, busy, or answered but abandoned before being connected to agents) are counted as ''Abandoned in Queue''. In addition, both real-time and historical reporting functions provide a number of metrics that focus specifically on the VQ functions. == Example Situation == To illustrate such reporting metrics and functions, consider the following example situation, in which 100 customers have called a service since the start of the day up to the present moment. 40 of those customers have selected the VQ option. Of those 40, * 25 answered callbacks and were connected to agents. * 1 answered the callback but hung up before being connected to an agent. * 3 did not answer when called back. * 1 was busy when called back. * 10 are still waiting for a callback at the present moment. 60 of those customers have selected to remain on the line. Of those 60, * 40 were connected to agents. * 12 abandoned their call attempts after waiting for a while in the queue. * 8 are still waiting in the queue at the present moment. == Example Reports == This example situation would generate the following metrics and reports. === Real-Time Service Metrics View === For this example, the real-time [[#topic_supervisor-guide/ServiceMetricsView|service metrics view]] will show the following numbers for this service (only the relevant metrics are listed): * IN Received = 100 * IN Queued = 100 * IN Queue Abandoned = 17 [3+1+1+12] * IN Handled = 65 [25+40] * IN ASA = (sum of wait times of the 65 answered calls) / 65 * IN Waiting = 18 [10+8] * IN Max Wait = current waiting time of the longest of the 18 calls currently waiting in queue * CB Requested = 40 * CB Waiting = 10 For the formal definitions of the above real-time metrics, see the Bright Pattern Contact Center ''Supervisor Guide'', section [[#topic_supervisor-guide/ListofServiceMetrics|List of Service Metrics]]. === Historical Service Metrics === Continuing this example, assume that all of the live and virtual calls that were waiting in the queue were eventually connected to agents and that no other calls were made to the service on that day. The historical [[#topic_reporting-reference-guide/ServiceMetricsReport|Service Metrics Report]] for that day will show the following numbers for this service (only the relevant metrics are listed): * Number of Calls Received = 100 * Queued = 100 * Abandoned = 17 [3+1+1+12] * Abandonment Time = (sum of time in queue of the 17 abandoned calls) / 17 * Answered = 83 [25+40+10+8] * Average Speed of Answer = (sum of wait times of the 83 answered calls) / 83 === Historical Virtual Queue Report === The historical [[3.15:reporting-reference-guide/VirtualQueue(Callback)Report|Virtual Queue Report]] for that day will show the following numbers for this service: * Callbacks Requested = 40 * Callbacks Requested Ratio = 40% [40/100] * Callbacks Busy = 1 * Callbacks Busy Ratio = 2.5% [1/40] * Callbacks No Answer = 3 * Callbacks No Answer Ratio = 7.5% [3/40] * Callbacks Answered = 35 * Callbacks Answered Ratio = 87.5% [35/40] * Average Wait Time to Callback = (sum of time in queue of the 40 virtual calls) / 40 * Average Callback Dialing Time = (sum of dialing times of the 35 answered callbacks) / 35 * Average Agent Answer Time = (sum of connection times of the 35 answered callbacks) / 35 * Callbacks Abandoned = 1 [1/40] * Callbacks Abandoned Ratio = 2.5%
[[#topic_virtual-queue-tutorial/ScenarioExample|< Previous]]