Progressive Dialer using API’s

Contact Center
  • Contact Center
BPO & 1 more
  • BPO
  • Call Center
Auto Dialer & 1 more
  • Auto Dialer
  • Progressive Dialer


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.


  • An active Exotel account.
  • Outbound calling enabled for your Exotel account (reach out to your account manager or hello@exotel.com).
  • Integration to be completed by the customer development team using API Documentation.
  • Calls should be made to non DND numbers only. Please check with the account manager for more information.
  • A system/database where leads are allocated to an agent. This is a must to return customer phone numbers for every agent.

Integration Components

  • Connecting to a flow API.
  • Webhook for returning a customer number in flow builder.
  • Webhook for updating logs against every call in flow builder.
  • Webhook to display popup to the agent in your CRM.

Flow Diagram


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.



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: 

  • Connect, Passthru & Transfer 
  • A GET webhook to be developed by your tech team for returning phone numbers and storing real time call logs.
  • Transfer applet used here will be routed to the same call flow which ensures that it creates a loop after completing a call without disconnecting the agent line.


Flow Diagram

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:




string; unique identifier of the call


string; the number of the calling party


string; The callerID the customer had called to . This will be the Exotel VN associated with the flow


string ; This is the direction of the call . For connect applet this shall say "outbound-dial"


Time ;The time when the event created 


string; the number of the calling party


string; The callerID the customer had called to . This will be the Exotel VN associated with the flow


Time ;Time when the event was fired 


string ; This is the agents number being dialed by Exotel for this attempt


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.


  • Cost effective, no infrastructure needed!
  • Easy to scale up.
  • Plug and play REST API's.
  • Integrate with any CRM.

Industry Application

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.

Progressive Dialer Pricing

There are three SKUs under this solution: 

  • Software Rentals: This is monthly fixed charge for availing the Exotels services
  • Call Charges: Normal call charges, charged at pulse rate (where pulse can be 30s, 60s, or any other agreed upon value)
  • Virtual number rental: Based on the plan selected, Virtual number rental will be applicable. You can read more about pricing plans here: https://exotel.com/pricing/

Contributed By:

Last modified Date

December 20th, 2021