Progressive Dialing covers the “middle ground” between manual dialing, and the more advanced Predictive Dialer solutions.
A Progressive Dialer, just like a Predictive Dialer, is implemented to avoid agents having to manually dial customer phone numbers to make outbound calls. Progressive Dialers are used in any vertical, for customer service, sales, telemarketing, collections and any other environment that requires making outbound calls from a list and does not want to saddle their call center agents with the actual dialing.
A Progressive Dialer will wait for an agent to finish their current call before it dials the next number on the list, and it will only dial one number per agent. That makes it different from a Predictive Dialer that will dial multiple numbers for every agent and use call center data to determine how many outbound calls are executed for each available call center agent.
Using Exotel Connecting to a flow API, initiate the first leg of the call to the agent. Once an agent picks up the call, Exotel will connect to a preconfigured call flow. In the call flow, based on the agent's phone number, return the phone number of the lead allocated and Exotel will place a call. Once the call is over, update the logs in your CRM with a webhook. Exotel will make a request again to fetch the next customer phone number here without actually disconnecting. This loop will stop once either i) agent disconnect the call or ii) no phone number returned by the webhook.
Step 1: Implementing Connecting to a flow API
This API will first call the From number (agent), and once they pick up the phone, it will connect them to a call flow (aka applet) that you have created in the system - like your landing app, or any other app.
https://<your_api_key>:<your_api_token><subdomain>/v1/Accounts/<your_sid>/Calls/connect
curl -X POST https://<your_api_key>:<your_api_token><subdomain>/v1/Accounts/<your_sid>/Calls/connect \ -d "From=XXXXX30240" \ -d "CallerId=0XXXXXX4890" \ -d "Url=http://my.exotel.com/{your_sid}/exoml/start_voice/{app_id}"
{ "Call": { "Sid": "80bfbec2d78bbbf10fb851f4fa165211", "ParentCallSid": null, "DateCreated": "2017-03-03 12:30:24", "DateUpdated": "2017-03-03 12:30:27", "AccountSid": "Exotel", "To": "0XXXXX40682", "From": "0XXXXX30240", "PhoneNumberSid": "0XXXXXX4890", "Status": "in-progress", "StartTime": "2017-03-03 12:30:27", "EndTime": null, "Duration": null, "Price": null, "Direction": "outbound-api", "AnsweredBy": null, "ForwardedFrom": null, "CallerName": null, "Uri": "/v1/Accounts/Exotel/Calls.json/80bfbec2d78bbbf10fb851f4fa165211", "RecordingUrl": null } }
Step 2: Setting up flow builder
2.1 Applets required:
2.2 Setting up “Connect” applet
Once you arrange the applets in the sequence as per the diagram, look for DialWhom → Primary Url in Connect applet, and configure your webhook:
https://webhook.site/08ffbd71-e873-4bc0-90c6-b206112f422a?CallFrom=07709562799&CallSid=066b197844c030d6737dac19cca6157p&CallStatus=in-progress&CallTo=07314853246&CallType=call-attempt&Created=Sun, 25 Jul 2021 14:56:12&CurrentTime=2021-07-25 14:56:14&DialCallDuration=0&DialWhomNumber=&Direction=incoming&EndTime=1970-01-01 05:30:00&From=07709562799&StartTime=2021-07-25 14:56:12&To=07314853246&flow_id=383431&tenant_id=53926
Sample GET request params are given above
2.3 Setting up “Passthru” applet
A Passthru applet allows communication between Exotel database and your database to send and receive data through a web service. Here Exotel makes a GET request to your web-service and sends data in the form of a query string.
Sample payload: Incomplete call
https://webhook.site/08ffbd71-e873-4bc0-90c6-b206112f422a?CallFrom=077095xxxx&CallSid=0e50bc001da69c238b55b56a0a1c157e&CallTo=07314853246&CallType=client-hangup&Created=Wed, 14 Jul 2021 15:36:22&CurrentTime=2021-07-14 15:36:43&DialCallDuration=0&DialCallStatus=canceled&DialWhomNumber=07995679243&Direction=incoming&EndTime=1970-01-01 05:30:00&ForwardedFrom=null&From=0770956xx&Legs[0][Number]=07995679xx&Legs[0][Type]=single&Legs[0][OnCallDuration]=0&Legs[0][CauseCode]=RING_TIMEOUT&Legs[0][Cause]=1003&OutgoingPhoneNumber=07314853246&ProcessStatus=null&StartTime=2021-07-14 15:36:22&To=07314853246&flow_id=383431&tenant_id=53926
You can read more about actual payload sent by Exotel here: Working with Passthru
Sample Payload: Completed call
https://webhook.site/08ffbd71-e873-4bc0-90c6-b206112f422a?CallFrom=0770956xxx&CallSid=3edd4e59486d063b46403496ad3e157e&CallTo=07314853246&CallType=completed&Created=Wed, 14 Jul 2021 15:40:07&CurrentTime=2021-07-14 15:40:55&DialCallDuration=40&DialCallStatus=completed&DialWhomNumber=0799567xxxx&Direction=incoming&EndTime=1970-01-01 05:30:00&ForwardedFrom=null&From=077095627xx&Legs[0][Number]=07995679243&Legs[0][Type]=single&Legs[0][OnCallDuration]=31&Legs[0][CauseCode]=NORMAL_CLEARING&Legs[0][Cause]=16&OutgoingPhoneNumber=07314853246&ProcessStatus=null&RecordingAvailableBy=Wed, 14 Jul 2021 15:45:55&RecordingUrl=https://s3-ap-southeast-1.amazonaws.com/exotelrecordings/skillstreet/3edd4e59486d063b46403496xxx3e157e.mp3&StartTime=2021-07-14 15:40:07&To=07314853246&flow_id=383431&tenant_id=53926
Before hosting an endpoint in your server, you can also create a dummy endpoint through freemium websites like https://beeceptor.com/, https://pipedream.com/, https://webhook.site/ etc.
Step 3: Creating a popup for the agent
Here multiple customers will be dialled simultaneously hence it’s important for the agent to know which customer is dialled and populate lead data of customer in front of his screen.
Create a webhook and place it under “Create Popup” section of Connect applet. The payload will be sent thrice based on “Dial”, “Answered” & “NoAnswer/Completed scenario” Here is the payload for each scenario:
PARAMETER NAME |
VALUE |
CallSid |
string; unique identifier of the call |
CallFrom |
string; the number of the calling party |
CallTo |
string; The callerID the customer had called to . This will be the Exotel VN associated with the flow |
Direction |
string ; This is the direction of the call . For connect applet this shall say "outbound-dial" |
Created |
Time ;The time when the event created |
From |
string; the number of the calling party |
To |
string; The callerID the customer had called to . This will be the Exotel VN associated with the flow |
CurrentTime |
Time ;Time when the event was fired |
DialWhomNumber |
string ; This is the agents number being dialed by Exotel for this attempt |
Status |
busy/free. This is sent as 'busy' when the above agent is being called. It is sent as 'free' when the call to the above agent ends (either the call ends, or the call didn't go through, or the agent didn't pick up the phone). |
Event Type |
string, This shall have values of " Dial" , "Answered", "Terminal" |
“From”: agent number
“DialWhomNumber: customer number
“Status”: Busy (while ringing or on call), free (once dialing or conversation is over)
“Event Type”: Dial (on ringing), Answered (on call), Terminal (call is finished)
Based on From and DialWhomParameter, you can create a popup on the screen of the respective agent with lead details of the customer.
Step 4. Connecting receiver to the caller
Refer to the Passthru parameters, store the “From” & “DialWhomNumber” parameters in your database. The next steps from here will be the same as “setting up Connect Applet” described above in 2.2.
Progressive dialer widely helps sales/ telecallers to reach out to customers with maximum efficiency. With an API based approach, it gives the flexibility to control the dialer at your pace and implement functionalities like call notes, Call popups in your CRM.
There are three SKUs under this solution:
Contributed By:
Last modified Date
December 20th, 2021