How to Implement Number Blocking for Voice Calls
Once in a while, your contact center's agents get calls from those annoying spamming trolls or maybe from a lonely individual who just wants to talk. Regardless of whom it may be, it is disruptive and takes up an agent’s valuable time. So, how do you handle these pesky disruptions? Number blocking.
Bright Pattern Contact Center software provides a highly customizable environment that allows one to implement a number of capabilities and functions; however, it can be tricky to know where to start. In this guide, we will be showing you one of several ways to implement number blocking for voice calls.
How it works
Very simply, when an agent receives a phone call that they want to block, they can end the call, select the Block Number disposition and click the complete button.
Once the disposition is submitted, it will trigger a workflow that creates an instance inside a blocked list. The list will then be accessed by an inbound voice scenario that determines whether a call will get connected to an agent or dropped—"blocking" that number.
Requirements
Before you dive into the setup, there are two things you will need for this to work: an API secret to call your APIs and a .CSV file that will be used to format your list.
API Secret
The API secret property can be accessed from a user that has the appropriate API privileges in the Contact Center Administrator application, section Users & Teams > Users. All you need to do is click Generate and an API secret will be provided for you.
CSV File
As for the .CSV file, make sure that you have two fields filled out: one for phone numbers and one for a blocked status, which can be either true or false.
Setup
This setup is implemented easily on a higher level, working in only four areas: lists, dispositions, workflows, and scenarios.
Creating a List
The list is where the blocked numbers will be stored. In the Lists section of the Contact Center Administrator application, create a list by uploading the .CSV file you made earlier.
As you go through the list import wizard, the key things you need to configure are:
- Check the 'First line contains field names checkbox in the Format Type tab.
- Set both the "Phone Number" and "Blocked" fields to be required and searchable in the Fields tab.
- Set the "Phone Number" field to be the unique identifier in the Key tab.
Configuring Services & Campaigns - Dispositions
Once the list is created, attach it to the inbound voice service of your choosing. This service should be assigned to the team handling inbound calls.
Within the chosen service, go to the Properties tab, and check the Use dispositions checkbox.
Next, in the Dispositions tab, add a new inbound disposition to the desired category and name it "Block Number". This is what enables agents to block numbers.
Building a Workflow
Having a disposition is great as it gives agents something to interact with, but unless a workflow is attached, no action takes place.
Start by creating a new workflow in the Workflows section in the Contact Center Administrator application. Clicking the + button will open the Workflow Builder application.
In the workflow builder, you will add blocks to get an access token to call the other APIs, and check to see if this phone number already exists in the blocked list. If the phone number entry exists, you will update that entry’s blocked status to true, else you will add the new number as a new list entry.
Your workflow should be structured as follows:
- A Fetch URL block that gets an access token
- A Fetch URL block that queries a record
- For this block's 'No data conditional' exit add a Fetch URL block that updates a record; the 'Blocked' field is set from false to true.
- A Fetch URL block that adds a record
- An Exit block
Note: For specific Fetch URL block configurations, see section Fetch URL Block Examples.
With the workflow completed, save it and then, in the workflow entries' properties, add the "Block Number" disposition as a trigger. Now, when an agent submits the "Block Number" disposition, it will automatically run this workflow.
Building a Scenario
So far, you have implemented the capabilities to put undesirable phone numbers into a blocked list, but this list doesn't actually block any numbers. That’s because you need to create a scenario to handle the inbound calls you want to block.
As you did when creating your workflow, go to section Scenarios > Voice in the Contact Center Administrator application and create a new scenario. In the Scenario Builder application, you will add blocks to get an access token and then check if a phone number exists in the blocked list. If an entry does exist, you will then check if the blocked status is true or false. If true, the scenario will end, otherwise it will continue on.
Your scenario should be structured as follows:
- A Fetch URL block that gets an access token
- A Fetch URL block that queries a record
- An If block with a true branch, with the condition:
- Scenario variable (string)
- jsdata.__data__.entry.blocked
- is =
- true
- (Note: “jsdata” is the scenario variable containing the results of the previous Fetch URL block.)
- The true branch will contain:
- A Play Prompt block notifying the caller that the number they have reached no longer exists.
- An Exit block.
Note: For specific Fetch URL block configurations, see section Fetch URL Block Examples.
After saving, this blocking scenario can be called in your main scenario that handles inbound calls, as shown in the example below. Specifically, you will use the Start Another Scenario block to trigger the blocked-number scenario. If the incoming caller's number is not blocked, the call will return to the main scenario and connect to an agent.
Unblocking
Just like blocking, there are many ways to implement unblocking. In this instance, you will find that it is showcased through SMS, where an agent or supervisor can message a dedicated number with the word "UNBLOCK".
A scenario will listen for the word and check if the phone number requesting for the unblock matches a qualified agent or supervisor’s phone number. If the number is valid, it will send a message asking for the number that is to be unblock. Once it receives the number, it will retrieve the entry with that number attached and update its blocked status to false.
For this, you will create a new chat scenario that will look like this:
- An If block that checks the variable item.message to see if it matches the string "UNBLOCK".
- A Request input block asking for the phone number that is to be unblocked
- A Fetch URL block that gets an access token
- A Fetch URL block that queries a record
- A Fetch URL block that updates a record
- A Send Message+ block that confirms that the number has been unblocked
When you are finished, assign this scenario to the service handling inbound chat with the dedicated number set as the Outbound chat account in the service's Property tab.
Customization
This tutorial presents a bare-bones implementation of number blocking for voice calls that you can be customized to suit your contact center’s needs. Some customization examples include adding timeouts, make blocking for specific agents, implement blocking for SMS, and so forth.
Fetch URL Block Examples
The Fetch URL blocks used in both the workflow and the scenario use methods from the Bright Pattern List Management API. The following examples show how the method requests are made per block.
Get Access Token
Note that all List Management API methods must include a valid access token in order to work successfully.
- Title text: <any_text>
- Request type: POST
- URL to fetch: https://<tenant_URL>/configapi/v2/oauth/token
- Content Type: application/x-www-form-urlencoded
- Form parameters:
- client_id: <username>
- client_secret: <client_secret>
- grant_type: <client_credentials>
- scope: <contact_center_URL>
- Scenario variable: <any_text>
Add Record
- Title text: <any_text>
- Request type: POST
- URL to fetch: https://<tenant_URL>/configapi/v2/callinglist/add/:list_name
- Extra Headers:
- Authorization: Bearer $(<scenario_variable>.access_token)
- Content Type: application/json
- Body: {"<list_phone_field_name>": "$(item.customerPhone)", "Blocked": "true"}
Query A Record
- Title text: <any_text>
- Request type: POST
- URL to fetch: https://<tenant_URL>/configapi/v2/callinglist/get/:list_name/:campaignname
- Extra Headers:
- Authorization: Bearer $(<scenario_variable>.access_token)
- Content Type: application/json
- Body: {"<list_phone_field_name>": "$(item.customerPhone)"}
- Check Use GenNext block to loop through data
Update Record
- Title text: <any_text>
- Request type: POST
- URL to fetch: https://<tenant_URL>/configapi/v2/callinglist/get/:list_name/:campaignname
- Extra Headers:
- Authorization: Bearer $(<scenario_variable>.access_token)
- Content Type: application/json
- Body: {"<list_phone_field_name>": "$(item.message)", "Blocked": "false"}
- Check Use GenNext block to loop through data