NICE inContact and Mindful integration guide
The Mindful Callback integration with the NICE inContact platform utilizes SIP for end-to-end communication while using the Mindful Datastore application to store and retrieve custom user data. The example integration presented in this guide allows the NICE inContact platform to post any required user data to Mindful Datastore before sending calls to the Callback application for an offer.
In this guide, we present configuration requirements for the following processes and components.
- Configuring pseudo numbers for the contact center and holding queues
- Call routing scripts and subroutines
- Establishing an offer threshold in NICE inContact based on the wait time
- Providing a callback offer through Mindful Callback, including the option to hold
- Retaining user data between Callback and NICE inContact via Mindful Datastore
For further validation against additional integration options, please contact a VHT representative.
This article is not intended as a configuration guide for a NICE inContact environment. For help with inContact deployments and configuration, consult the official documentation.
The configuration in this guide is an example and may be used as a template for integrating with Mindful. Any sample code in this guide should not be considered ready for production.
When quoting the estimated wait time prior to offering a callback, it is a best practice to set an upper limit for the amount of time that can be quoted. For example, if the wait time exceeds 10 minutes, you might choose to say "...more than than 10 minutes from now" rather than quoting an exact time.
We recommend setting a minimum offer threshold based on the current estimated wait time to ensure that callback offers are not made when wait times are very low. You may also wish to check agent availability prior to offering a callback.
Overview
This integration guide covers the following topics.
- Components and architecture
- Step 1: Configure your Mindful account
- Step 2: Configure the NICE inContact environment
- Call flow diagrams
- (Optional) Consolidate return-call destinations
- (Optional) Offer Second Chance Callback
Components and architecture
Acronyms and definitions
Term | Definition |
---|---|
DID | Direct Inward Dialing number |
Pseudo Number | A SIP destination that is not a dialable phone number or DN |
SBC | Session Border Controller |
SIP Trunk | Virtual phone line that enables users and applications to make and receive calls |
SIP URI | SIP addressing scheme that determines where to send calls |
UUI | User to User information about a call, passed in a SIP header |
Components and architecture
Mindful Callback component | Description |
---|---|
SIP Proxies | Send and receive SIP messaging |
RTP Proxies | Establish and maintain RTP streams |
Callback Application | Tracks callbacks and system configuration |
Management Interface | Provides a user interface for administrators |
Datastore | Stores and provides user data KVPs |
NICE inContact component | Description |
---|---|
SIP Gateway | Gateway for the SIP and RTP proxies used by Mindful Callback |
API Gateway | Gateway used for communication with Mindful Datastore |
Studio | Interface for creating and managing scripts for call routing |
Step 1: Configure the Mindful platform
Before your ACD can send inbound calls to Mindful, there are a few items that must be configured on the Mindful side:
- At least one Call Target to register and dial callbacks
- One Scheduler Widget for each Call Target used in the integration
- A Data Set Template in Mindful Datastore (if you intend to use Datastore to store custom user data and context)
Call Target configuration
There are a few settings in Callback that must be adjusted to integrate with your ACD.
Registration
Quick access: Callback > Call Targets > Your Call Target > General tab > Registration
- Offer ASAP Callback: Select this checkbox to offer callbacks to be returned as soon as possible.
- Offer Choose Hold: Select this to offer callers the option to wait on hold rather than accepting the offer of a callback.
- Offer Scheduled Callback: Select one or both of these checkboxes (Voice and/or Widget/API) if you wish to offer callback scheduling for specific dates and times.
Contact Center
Quick access: Voice > Call Targets > Your Call Target > General tab > Contact Center
- Callback Telephony Type: Select SIP.
- Callback Number: This will be configured in a later step.
- Choose Hold Telephony Type: Select SIP.
- Choose Hold Number: This will be configured in a later step.
Callback Strategy
Quick access: Voice > Call Targets > Your Call Target > General tab > Callback Strategy
Most of the Callback Strategy settings are not relevant to the integration, and they can be set however you would like. However, there is one notable exception when using the Customer First Callback Strategy.
When using Customer First, enable Wait for live Agent. This will prompt agents to press a digit to accept a callback, which provides an Agent Answer event to Mindful. The Agent Answer events assist in calculating an accurate Estimated Callback Time (ECBT).
Quick access: Configuration > Phone Numbers
On the Phone Numbers page, provision as many SIP numbers as needed and assign a number to each Call Target in your Organization. This is the number to use when configuring the SIP endpoint to which to send inbound calls for callback treatment.
Each Call Target used in the integration will require a Scheduler Widget. These Widgets will provide API endpoints that will allow your ACD to check the status of a Call Target before forwarding an inbound call to Mindful. Important points for the Widgets used in this integration are listed below:
- Template: Select any Scheduler Template. Templates will not be used since this Widget will only be accessed via API, but Mindful Callback requires a Template to be assigned.
- Call Target: Select the appropriate Call Target. The ACD will check the status of this Call Target (via the Widget) to ensure it is ready to register callbacks before transferring inbound calls to Mindful.
For complete instructions on creating Widgets, see Getting Started with Scheduler Widgets.
Datastore configuration
Mindful Datastore allows you to store user data to maintain call context at critical points in an interaction. If you intend to use Datastore, you will need to perform the next few steps within the Datastore user interface.
A Data Set Template contains a collection of Data Keys that allows the Mindful Datastore to store customer data during the callback request process. This collection includes:
- The set's name and description
- How long you want to retain collected data submitted with this Data Set
- What information you want the set to collect (through configuration of Data Keys)
- The API token that is used to associate data submitted via POST requests and return information via GET requests
The Mindful Solution Delivery team can assist with setting up a Data Set Template, as well as a unique authentication token. To create one on your own, use the steps below.
Quick access: Datastore > Data Set Templates
- On the Data Set Templates page, click Add Data Set Template. This takes you to the New Data Set Template page.
- Name: Enter a name that will be recognizable to others in your organization.
- Description: Enter a description for the benefit of other Administrators.
- Data Retention Period (Hours): Manually enter or use the +/- buttons to customize your Data Retention Period. You can retain data for 1 hour, or for up to 48 hours.
- API Token: The system automatically generates your API Token.
- Template Data Keys: You can select from existing Data Keys in your system or add new keys. The selected keys will filter out any submitted data that does not correspond to one of the configured keys, and will only retain submitted data that matches the configured keys.
Add a Data Key
Click Add Template Data Key. This opens the New Template Data Key modal window.
- Click in the Manually Enter Data Keys field.
- If your Mindful Datastore instance contains existing Data Keys, select one from the dropdown list that appears.
- If not, type the name of a new Data Key here.
- When finished, click Add.
Your key now appears in the Template Data Keys list.
Example
In our example integration, we set up the following Data Keys for callbacks:
- FirstName
- LastName
- AccNum
- CallId
You can configure Data Keys in the same way for any user data that you need to maintain in your environment.
Step 2: Configure the NICE inContact environment
You will need to configure two or three Studio routing scripts to prepare your NICE inContact environment for integration with Mindful Callback. One script is needed to route inbound calls while posting user data to Mindful Datastore, and one or two scripts can be used to handle calls returned from the Callback application.
Configure routing scripts
View each of the following sections for details about each of the required scripts.
Inbound routing script
You will need to modify the existing inbound script that is already configured to queue calls to agents. The modifications will first set user data variables, then invoke a subroutine to post those variables to Mindful Datastore, and finally transfer calls to Mindful Callback for treatment.
Use the following image and steps as a guide to modify the inbound script.
- Set user data variables. In our example integration, we assign the caller's first name, last name, and account number into their own variables.
- You can use this method to save any user data that you would like.
- The variables saved at this point will be stored in Mindful Datastore to be retrieved later, and they will be available for agent screenpop if the call needs to be sent directly to an agent.
- Use a Snippet block to assign the parameters that are required to be passed into the Mindful Datastore subroutine.
- The Snippet block should setting the following parameters:
- varAuthToken: Must contain the word Bearer followed by the complete API Token from the Dataset Template you created in Mindful Datastore in a previous step
- varPostURL: The URL for the HTTP POST to the Datastore application
- varANI: The caller's ANI (prefixed by 1 for the U.S. numbering format)
- varCallId (Optional): Set to the ContactID from NICE inContact to retrieve on the return call for reporting purposes, if needed
- The Snippet block should setting the following parameters:
- Use a Runsub block to call the Datastore subroutine. Details on configuring the subroutine can be found in a later section.
The subroutine will post the required and optional variables to a Data Set record, including:
|
The Runsub block uses zero-based indexing for variable assignment, but the subroutine Snippet block that will be configured later uses one-based indexing. This means that Parameter [0] in the Runsub block will be Variable p1 in the subroutine; Parameter [1] will be Variable p2, and so on.
- Use a SIPXFERPUTHD tool to set the X-Mindful-Routing-Token SIP header on INVITEs to Mindful Callback. This header is required by the Mindful SIP Router.
- You can access the SIPXFERPUTHD tool at Studio > Tools > Framework tab.
- headerName: Enter X-Mindful-Routing-Token.
- headerValue: Enter the value provided by the Mindful Solution Delivery team.
|
Return Call scripts
You can choose one of two methods for routing return calls. Since there are two types of return calls--callbacks and callers that chose to hold--the first option is to create two separate return call scripts. In this case, the Chose Hold script should look similar to the end of the inbound script. Calls entering the Chose Hold script should simply be routed to an agent group at normal priority.
The second option is to use a single routing script for return calls instead of using separate scripts. To do this, you would need to add logic to check the DNIS of the destination pseudo number and take action based on which DNIS was targeted (the callback or hold DNIS).
Handling callbacks
The Callback Return script (or the callback portion of a single Return Call script) must begin by fetching user data from Mindful Datastore and parsing the returned values into their own variables for use. Once the user data is handled, the script can then queue calls to agents at high priority.
Use the following image and steps as a guide to build the Callback Return script.
- Use a Snippet block to populate variables with data that will be required in the Datastore GET subroutine:
- varAuthToken: Must contain the word Bearer followed by the complete API Token from the Dataset Template you created in Mindful Datastore in a previous step
- varGetURL: The URL for the Datastore HTTP GET endpoint
- varANI: The caller's ANI, prefixed by 1 for the US national numbering format
| |
|
- Use Assign or Snippet blocks to assign each piece of user data in the array into its own variable. See the example below for details.
Example
In the following example, we are taking the value of the account number contained in the array variable (dsReturn.accNum) and assigning it to a variable named Account Number. You can use this method to extract all user data from the array and assign each item to its own variable.
This example also has the ScreenPop parameter set to True to indicate that the Account Number should appear on the agent screenpop page. |
- Queue the call to an agent group or skill at high priority.
Configure subroutines
The Inbound and Callback Return routing scripts both require subroutines to post data to Mindful Datastore during inbound calls and retrieve it for returned callbacks.
Inbound subroutine (DS_POST)
The Inbound subroutine bundles custom user data together and makes an HTTP POST to Datastore before returning to the Inbound script.
- Use a Snippet block to build the body string, which will contain the customer user data to be posted to Mindful Datastore via HTTP.
- In our example configuration, we use a dynamic array variable named postDataValues to hold the parameters passed in from the Inbound routing script. All variables except for the caller ANI are assigned to a JSON-formatted variable named DatastorePostDataValuesJson.
- Use a REST API block to post the data to Mindful Datastore, using the following image and notes as a guide.
|
- Set the return value to indicate success or failure based on the outcome of the HTTP POST to Mindful Datastore. If you wish, you can use this value to determine whether or not to transfer the call to Mindful Callback in the next step, since a failure would indicate that user data will not be present on the return call.
- Return to the Inbound routing script.
Callback Return subroutine (DS_GET)
The Callback Return subroutine uses the data passed in by the routing script (ANI, authorization token, and Datastore URL) to retrieve user data stored in Mindful Datastore for the returned call.
|
Example
The following example shows the expected result of building the URL string:
- URL (Parameter [0], Variable p1): https://datastore.mindfulcx.com/api/v1/data_sets/search?customer_contact_number=
- ANI variable (Parameter [2], Variable p3): 18005551234
- Final URL string: https://datastore.mindfulcx.com/api/v1/data_sets/search?customer_contact_number=18005551234
|
- Assign the values returned from Datastore to an array. In the final slot of the array, assign all fields and values together formatted in a JSON string. Each variable should be placed in its own slot in the array, with the final slot holding the JSON-formatted string containing all fields and values, as shown in the following image. In our example integration, we use an array named getReturnValues.
|
Call flow diagrams
Callback Call Targets use a complete phone number for the inbound call transfer. Each Call Target represents a queue/skill/group, such as Sales or Billing.
The call flow diagrams below use three example Call Targets with the following phone numbers.
- Support Call Target: 111-111-1111
- Sales Call Target: 222-222-2222
- Billing Call Target: 333-333-3333
Customer First
Agent First
(Optional) Consolidate return-call destinations
This integration guide has assumed that each Call Target is configured with a Call Center Phone Number leading to a single group of agents in your call center. However, in some ACD environments, the same group of agents are spread out among multiple queuing destinations. Since a Call Target is intended to serve a particular agent group, there needs to be a way to deliver callbacks and return-to-hold calls to a single destination that can ultimate route calls throughout the entire agent group.
You can configure a Call Target to send calls to a Call Center Phone Number that leads to a shared disposition destination, then make further routing decisions based on data attached to the call. This form of queue consolidation allows you to route return calls among multiple destinations representing the same group of agents.
How it works
Using a consolidated callback destination requires custom data to be passed to Mindful Callback with inbound calls to identify their ultimate return destinations. This can be done in two ways:
- Send the destination to Callback via SIP Headers. This requires that you configure additional Metadata Items for each affected Call Target. Or...
- Post the destination to the Mindful Datastore application, using the customer's ANI as the data key. This method can be used even when calls are delivered via the PSTN rather than SIP.
In either case, Callback will re-attach the custom data to the return call (whether it is a callback or a customer returning to hold) and deliver the call to a single return-call disposition destination. From there, you can use the custom data to route the call to the appropriate agent groups.
We recommend using different universal return destinations for callbacks and callers who chose to hold. The choose-hold destination is only needed if the Callback Offer or the End of Day Handling > Return to Hold settings are enabled.
Example
Consider the following example. Let's say you have the same agent skill assigned to different queuing destinations labeled 111, 222, and 333. You have a single disposition destination for callbacks and another for return-to-hold calls. In this case, the routing path for a callback could look like this:
- You identify that a particular new inbound call should ultimately be delivered to 333, so you attach that destination number to the call as custom data when sending it to Callback for treatment.
- When the time comes, Callback delivers the return call (a callback in this case) with the destination number still attached.
- When the call arrives at the callback disposition destination on your ACD, additional routing logic ensures that the call ends up with agents at 333.
- The appropriate priority is set, and the call is delivered to an agent.
(Optional) Offer Second Chance Callback
Second Chance Callback is a best-practice methodology that can increase the take-rate of callback offers and lower the abandon rate in your call center's holding queues. With a few updates to your routing logic, you can provide additional callback offers to customers waiting on hold who have already declined an initial offer.
There are a variety of reasons that customers might appreciate a second chance to accept an offer of a callback. For example, perhaps something has come up that requires their attention and they can no longer wait on hold. Perhaps the quoted wait time was low when they declined the first offer but queue conditions have quickly changed and resulted in a longer hold time. Regardless of the scenario, Second Chance Callback ensures that customers have the callback option available when they need it.
Benefits
Our research shows positive results for call centers offering Second Chance Callback, including:
- Keeping customers in control with additional options while holding.
- Reducing abandoned calls in the holding queue by offering an alternative option.
- Fully controlling Second Chance offers in your ACD with no integration constraints.
- Adding another tool to address unexpected increases in hold time.
- No additional requirements for customers. They are not required to respond to Second Chance prompts, but can instead simply continue to wait on hold if they choose.
ACD configuration
Most configuration for Second Chance Callback is done on your ACD platform, so the technical implementation will vary based on your integration. In all integrations, the following logic must be introduced to interact with customers in the holding queue.
- Whether offers are made in your ACD or in Mindful Callback, the process begins with the first offer. If the initial offer is accepted, then a callback is registered and no Second Chance offer is needed.
- If the initial offer is not accepted, callers are routed to a holding queue.
- A timer begins in the holding queue. When the specified time expires, another callback offer is made.
- If the customer declines the Second Chance offer, then the timer is reset, and another offer will be made when it expires again.
- If the customer accepts the Second Chance offer, the call is sent to Mindful Callback for treatment.
You can add logic into the routing script to limit the total number of offers made per call.
Things You'll Need
If you wish to use a single Call Target for normal inbound calls and Second Chance calls, you will need:
- Two Phone Numbers provisioned for the same Call Target.
- The Return to Hold Call Target setting disabled. Offering a hold option in Mindful Callback after a customer has already chosen to leave the holding queue can negatively impact the customer experience.
If you wish to use separate Call Targets for normal inbound calls and Second Chance calls, you will need:
- Two Call Targets configured with the same Call Center Phone Number targeting the same group of agents.
- The Return to Hold setting disabled for the Second Chance Call Target. The setting can still be enabled for the normal inbound Call Target.
For either method, you will also need:
- The ability to capture DTMF input from customers in your holding queue.
- The ability to play audio prompts to customers in your holding queue based on a timer.
Mindful Callback configuration
There are two alternatives for preparing your Mindful Callback account for Second Chance Callback. Each alternative introduces its own advantages and drawbacks.
- Option 1 (best practice): Use separate Call Targets for normal inbound calls and Second Chance calls.
- Option 2: Use a single Call Target for both normal inbound calls and Second Chance calls.
Option 1 (best practice): Use separate Call Targets
This option uses the first Call Target to service normal inbound callback requests with a second Call Target dedicated to servicing Second Chance callback requests. For an initial offer, send the call to the first Call Target. For a Second Chance offer, send the call to the second Call Target. This option separates the two types of calls for ease of reporting and real-time analysis.
Advantages | Drawbacks |
---|---|
Call Detail reporting is more convenient. | ECBT is not combined between the two Call Targets. Therefore, ECBT on the normal inbound Call Target may be lower than it should be, since the call volume from the Second Chance Call Target is not included in the calculation. |
Real-time monitoring clearly distinguishes the two call types. | |
You can enable the Return to Hold option on the normal inbound Call Target while disabling it on the Second Chance Call Target. |
Option 2: Use a single Call Target
The second option uses a single Call Target to service both normal inbound callback requests and Second Chance requests. This method is easier to configure and maintain, but it introduces a few additional drawbacks to consider.
Advantages | Drawbacks |
---|---|
Configuration is simpler. | When a Second Chance ASAP callback is registered, it will be placed at the back of the virtual queue or waitlist. This can result in customers who accept Second Chance offers waiting longer than they would have if they remained in the holding queue. |
Return to Hold should not be offered by the Call Target. This can affect your offer strategy for normal inbound calls, which may not be intended. | |
Reporting on Second Chance interactions requires additional steps. | |
Real-time monitoring combines normal inbound callback requests and Second Chance requests together. |
Reporting on Second Chance Callback interactions
As noted in the lists of advantages and drawbacks, reporting on Second Chance interactions varies depending on whether you use one or two Call Targets.
Reporting with separate Call Targets
On the Metrics, Executive Summary, and Call Detail pages, use the Call Target filter to view data only for the Second Chance Call Target. This will exclude any data from initial offers and callers that chose to hold. If you offer Second Chance for multiple lines of business, you can add all of your Second Chance Call Targets into a shared Reporting Category to view all Second Chance interactions.
On the Callback Status page, review real-time statistics for the Second Chance Call Target or use the Category filter to limit the view to only Second Chance Call Targets.
Reporting with a single Call Target
When using a single Call Target, additional configuration is required and the reporting capabilities are limited.
Preparation:
- Provision two Phone Numbers in the Mindful Callback user interface, and assign both Phone Numbers to the same Call Target.
- In your routing scripts, send normal inbound calls for callback treatment to the first Phone Number.
- Send Second Chance calls for treatment to the second Phone Number.
Reporting:
- On the Call Detail screen, export the reporting data to CSV. In the exported CSV file, the Call Target Phone Number to which each call was sent will be noted in the Source column.
- In the CSV file, filter the Source column for all records matching the Second Chance phone number. The remaining data will include only Second Chance interactions.
When using a single Call Target, the Callback Status, Metrics, and Executive Summary screens will combine Second Chance interactions with initial offers and callers that chose to hold.