Call campaigns are automated calls scheduled to trigger a list of people. You can use it to communicate critical information, reminders, or promote a new offer/deal. Just record your message, upload a list of contacts and schedule a particular time. It completely removes the need for manual calling hence saving a ton of time.
The pickup rate or the call completion rate becomes very crucial in these campaigns. The following solution will help you to increase the completion rate.
Outgoing call to connect number to a call flow: This API will first call the Customer number, 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 that can play a greeting, have IVR, etc.
You can use this API to trigger calls in a sequential manner. The maximum number of API requests you can make is 200 per minute*.
Number metadata API: This API provides the following metadata about a phone number viz.Telecom Circle, Telecom Circle Name,Number Type. This is used to find the carrier circle.
Step 1: Your server can either batch process the data set or process one by one. Your server needs to trigger “Number Metadata API”. To get the Circle of the number
var request = require('request');
var options = {
url: 'https://<your_api_key>:<your_api_token><subdomain>/v1/Accounts/<your_sid>/Numbers/XXXXX30240'
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
{
"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
}
}
{
"Numbers": {
"PhoneNumber": "0XXXXX30240",
"Circle": "GJ",
"CircleName": "Gujarat Telecom Circle (includes Daman & Diu, Dadra & Nagar Haveli)",
"Type": "Mobile",
"Operator": "R",
"OperatorName": "Reliance",
"DND": "Yes"
}
}
Step 2: Exotel returns the Circle, Circle name, Operator etc. These details should be stored against the customer phone number.
Step 3: Your server has to pick up matching VN against the circle of the customer.
Step 4: Your server initiates the “outbound call to connect to a call flow API”
var request = require('request');
var dataString = 'From=XXXXX30240&CallerId=0XXXXXX4890&Url=http://my.exotel.com/Exotel/exoml/start_voice/926';
var options = {
url: 'https://<your_api_key>:<your_api_token><subdomain>/v1/Accounts/<your_sid>/Calls/connect',
method: 'POST',
body: dataString
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
Step 5: The status call back is fed into your server. The status call back has the CallSid, status, Date updated parameters.
Step 6: Using the call reference Id from the status call back, Your server triggers Call details API synchronously.
var request = require('request');
var options = {
url: 'https://<your_api_key>:<your_api_token><subdomain>/v1/Accounts/<your_sid>/Calls/b6cfaf5f5cef3ca0fc937749ef960e25?details=true’
};
function callback(error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
}
request(options, callback);
Step 7: Exotel sends the call details response to your server.
{
"Call": {
"Sid": "b6cfaf5f5cef3ca0fc937749ef96d245",
"ParentCallSid": "",
"DateCreated": "2016-11-29 15:58:45",
"DateUpdated": "2016-11-29 16:00:09",
"AccountSid": "Exotel",
"To": "0XXXXX30240",
"From": "0XXXXX85175",
"PhoneNumberSid": "0XXXXXX4890",
"Status": "completed",
"StartTime": "2016-11-29 15:59:10",
"EndTime": "2016-11-29 15:59:27",
"Duration": "17",
"Price": "1.500",
"Direction": "outbound-api",
"AnsweredBy": "human",
"ForwardedFrom": "",
"CallerName": "",
"Uri": "/v1/Accounts/Exotel/Calls/b6cfaf5f5cef3ca0fc937749ef96d245",
"RecordingUrl": "https://s3-ap-southeast-1.amazonaws.com/exotelrecordings/Exotel/b6cfaf5f5cef3ca0fc937749ef96d245.mp3",
"Details": {
"ConversationDuration": 8,
"Leg1Status": "completed",
"Leg2Status": "completed"
"Legs": [
{ "Leg": {
"Id": "1",
"OnCallDuration": 21
}
},
{ "Leg": {
"Id": "2",
"OnCallDuration": 8
}
}
]
}
}
}
Step 8: Your server sends the data to the Data processing engine.
Step 9: The data processing engine processes the data using following variables and stores the data.
The business team can use predictive analytics based on the historical data. We’ve proposed a way of handling the campaign but these metrics or computations differ from industry to Industry. The historical data should ideally recommend the time & the VN to be used to call a customer to achieve a higher pickup or completion rate.
Step 10: Your server triggers the next calls based on the recommendation from the data processing engine.
There are three SKUs under which costs of solution is charged:
Contributed By:
Last modified Date
December 10th, 2022