Zoho Desk + Zoho CRM + Exotel: Cloud Telephony for Indian Customer Service

Amit Prabhu Amit Prabhu · Jun 10, 2026 · 18 min read #Cloud Telephony #Customer Service #Exotel
Zoho Desk + Zoho CRM + Exotel: Cloud Telephony for Indian Customer Service

Indian customer service teams face a specific set of constraints that generic telephony guides never address: TRAI-regulated caller ID presentation, DND scrubbing before outbound calls, regional language IVR requirements, and per-second billing that makes every second of hold time a real cost. Exotel, a Bengaluru-based cloud telephony provider with TRAI licensing, was built for exactly this environment. When you connect Exotel to Zoho Desk and Zoho CRM, your agents get screen pops, automatic call logging, and click-to-call directly inside the tools they already use every day.

This guide covers the complete implementation: Exotel account setup, Zoho Desk telephony connector configuration, CRM screen pop via the Exotel passthru API, IVR flow design, a Deluge function for call logging, inbound webhook handling, agent routing rules, and click-to-call activation. Pricing references use INR throughout. If you are also handling WhatsApp alongside voice, see our guide on Zoho CRM WhatsApp integration for a parallel channel setup.

What the Zoho Desk Exotel Integration Actually Does

Before touching any configuration, it helps to understand what each system contributes. Exotel manages the telephony layer: virtual numbers, IVR trees, call routing, recordings, and the webhook callbacks that fire when a call starts, connects, or ends. Zoho Desk handles ticketing: it receives the call event, creates or updates a ticket, links the caller to an existing contact, and gives the agent a screen pop with ticket history. Zoho CRM sits alongside Desk, storing the full customer record, previous deals, and any notes your sales team has added.

The integration connects these three systems through two main mechanisms:

Together, every inbound and outbound call becomes a logged, searchable record in both Desk and CRM, linked to the correct customer.

Exotel Account Setup for Indian Businesses

Choosing a Virtual Number

Exotel offers three number types relevant to Indian businesses: 10-digit mobile numbers (starting with 70-99 series), geographic landline numbers (city STD codes like 080, 022, 044), and toll-free numbers (1800 series). For customer service, a landline number tied to your city gives callers a familiar, trusted format. Toll-free works well if your customer base spans multiple states and you want to absorb the call cost.

You purchase virtual numbers through the Exotel dashboard under Numbers > Buy Number. Number provisioning typically takes 24-48 hours for mobile numbers and 2-5 business days for landlines, as Exotel must complete DID (Direct Inward Dialing) activation with the underlying telecom operator.

TRAI Compliance Checklist

Before going live with outbound calls, complete the following:

Pricing Reference (April 2026)

PlanMonthly Cost (INR)AgentsVirtual Numbers
Starter4,99931
Growth9,999102
Enterprise19,999Unlimited5

Call costs are billed separately. Inbound calls typically run INR 0.25-0.40 per minute. Outbound calls to mobile numbers are INR 0.40-0.60 per minute. Toll-free inbound is INR 0.65-1.00 per minute (you pay both sides). These rates vary by volume and negotiated contracts for larger accounts.

Zoho Desk Telephony Connector Configuration

For a thorough introduction to the ticketing platform itself, see our Zoho Desk setup guide before proceeding with the telephony integration steps below.

Step 1: Locate the Telephony Settings

In Zoho Desk, go to Setup (gear icon, top-right) > Channels > Telephony. You will see a list of supported providers. Select Exotel from the list. If Exotel is not visible, click “Other Providers” and search for it — Zoho periodically adds providers to the native list.

Step 2: Enter Exotel Credentials

You need three pieces of information from your Exotel dashboard (Settings > API Credentials):

Paste these into the corresponding fields in Zoho Desk’s Exotel connector form. Save.

Step 3: Agent Phone Number Mapping

Each Zoho Desk agent needs a phone number mapped in their agent profile. This is the number Exotel will dial when connecting an inbound call to that agent. Go to Setup > Agents, open each agent profile, and enter their direct number (mobile or desk extension) in the Phone field. This number must be reachable — Exotel bridges the inbound caller to this number when the agent answers.

Step 4: Test the Screen Pop

With the connector saved and at least one agent number mapped, call your Exotel virtual number from a mobile phone that is already saved as a contact in Zoho Desk. The agent’s Desk interface should display a call notification banner with the contact name and any open tickets. If the screen pop does not appear, check that the calling number is stored in the contact record with the country code prefix +91.

IVR Flow Setup in Exotel

Exotel’s IVR builder is called ExoIVR. You access it under Flows > Create New Flow in the Exotel dashboard. A flow is a visual graph of nodes — each node represents an action like playing a message, collecting DTMF input, or transferring a call.

A Practical IVR Structure for Indian Support Teams

A well-designed IVR for a mid-size Indian business typically looks like this:

  1. Welcome message: “Thank you for calling [Company Name]. This call may be recorded for quality purposes. For English, press 1. Hindi mein baat karne ke liye, 2 dabaye.” (Bilingual greeting is standard for pan-India customer service.)
  2. Department routing: “For sales, press 1. For billing, press 2. For technical support, press 3. To speak to the next available agent, press 0.”
  3. Queue with estimated wait: If all agents in a department are busy, play the queue position and estimated wait time. Exotel provides a built-in queue node for this.
  4. Voicemail fallback: After 3 minutes in queue with no answer, play a voicemail node and email the recording URL to the team’s shared inbox.

In the ExoIVR editor, each branch maps to a Zoho Desk agent group. You enter the Desk agent’s phone number (or a ring group number if using Exotel ring groups) as the Transfer destination in the Connect Agent node.

Mapping IVR Branches to Zoho Desk Departments

In Zoho Desk, create a Department for each IVR branch (Sales, Billing, Technical Support). Under Setup > Telephony > Call Routing, map each department to the corresponding agent group. When the IVR routes a call and the agent answers, Zoho Desk creates the ticket under the correct department automatically.

Zoho CRM Screen Pop via the Exotel Passthru API

Zoho Desk handles ticketing, but your sales agents work inside Zoho CRM. The Exotel passthru API lets you push a custom URL-based event to a CRM URL when a call connects. You use this to open the matching CRM contact record in the agent’s browser.

Configuring the Passthru URL

In your Exotel flow, on the Connect Agent node, there is an optional “Passthru URL” field. Enter a Zoho CRM custom function webhook URL that accepts the caller’s number as a query parameter. The URL format is:

https://creator.zoho.com/api/v2/{org}/{app}/report/{report}/trigger?phone={caller_number}

Replace {org}, {app}, and {report} with your Zoho Creator app details, or use a Zoho Flow webhook if you prefer a no-code approach. The webhook looks up the CRM Contact or Lead by phone number and returns the record URL, which you can use to auto-open the contact in the agent’s CRM tab.

Building the CRM Lookup Function in Deluge

The following Deluge function runs inside Zoho CRM as a custom function. It accepts an inbound phone number, strips the country code prefix to handle both +91XXXXXXXXXX and 0XXXXXXXXXX formats, and searches for a matching Contact:

phone = input.get("phone");
// Normalise to 10-digit format
if(phone.startsWith("+91")) { phone = phone.substring(3); }
if(phone.startsWith("91") && phone.length() == 12) { phone = phone.substring(2); }
if(phone.startsWith("0")) { phone = phone.substring(1); }

contacts = zoho.crm.searchRecords("Contacts", "Phone:equals:" + phone);
if(contacts.size() > 0)
{
  record_id = contacts.get(0).get("id");
  return {"status": "found", "record_url": "https://crm.zoho.in/crm/org{ORG_ID}/tab/Contacts/" + record_id};
}
else
{
  leads = zoho.crm.searchRecords("Leads", "Phone:equals:" + phone);
  if(leads.size() > 0)
  {
    record_id = leads.get(0).get("id");
    return {"status": "found", "record_url": "https://crm.zoho.in/crm/org{ORG_ID}/tab/Leads/" + record_id};
  }
  return {"status": "not_found", "phone": phone};
}

Replace {ORG_ID} with your Zoho CRM organisation ID (found in Setup > Developer Space > API Key). Deploy this function and expose it as a custom function URL.

Call Logging with a Deluge Webhook Function

When a call ends, Exotel sends a POST request to your configured webhook URL. This webhook fires for every completed call — inbound and outbound. The payload contains the caller number, called number, call duration in seconds, call status (completed, busy, no-answer), the agent who answered, and a recording URL if recording is enabled.

Setting Up the Exotel Webhook

In Exotel, go to Settings > Webhooks. Create a new webhook with the following event types selected: call.completed. Enter your Zoho Flow webhook URL or a Zoho Creator function URL as the destination. Exotel will POST a JSON body to this URL after every call.

Deluge Function for Automatic CRM Call Logging

// Called by Zoho Flow when Exotel posts call.completed webhook
payload = input.get("payload");
caller = payload.get("From");
duration_sec = payload.get("Duration").toLong();
status = payload.get("Status");
recording_url = payload.get("RecordingUrl");
agent_number = payload.get("To");
call_sid = payload.get("CallSid");

// Normalise caller number
if(caller.startsWith("+91")) { caller = caller.substring(3); }
if(caller.startsWith("0")) { caller = caller.substring(1); }

// Find matching CRM record
contacts = zoho.crm.searchRecords("Contacts","Phone:equals:" + caller);
related_id = null;
related_type = "Contacts";

if(contacts.size() > 0) {
  related_id = contacts.get(0).get("id");
} else {
  leads = zoho.crm.searchRecords("Leads","Phone:equals:" + caller);
  if(leads.size() > 0) {
    related_id = leads.get(0).get("id");
    related_type = "Leads";
  }
}

// Build call activity map
call_map = map();
call_map.put("Subject","Exotel Call - " + caller);
call_map.put("Call_Type","Inbound");
call_map.put("Call_Status",if(status == "completed","Completed","Missed"));
call_map.put("Call_Duration",duration_sec / 60 + " min " + (duration_sec mod 60) + " sec");
call_map.put("Description","Recording: " + recording_url + " | SID: " + call_sid);
call_map.put("Call_Start_Time",zoho.currenttime.toString("yyyy-MM-dd HH:mm:ss"));

if(related_id != null) {
  call_map.put("$se_module", related_type);
  call_map.put("Who_Id", related_id);
}

response = zoho.crm.createRecord("Calls", call_map);
return response;

Deploy this function in Zoho Flow as a webhook trigger. The function normalises the phone number, finds the matching CRM record, and creates a Call activity with the recording URL in the description. You can modify the field mappings to match your CRM layout. For teams using SMS-based follow-up alongside voice, consider pairing this with our guide on Zoho CRM WhatsApp integration to log multi-channel interactions in a single timeline.

Click-to-Call Setup for Outbound Calls

Click-to-call lets agents initiate a call directly from a phone number field in Zoho CRM or Zoho Desk by clicking the number. The call connects the agent first (Exotel calls the agent’s phone), then bridges to the customer once the agent answers. This is called a two-leg outbound call.

Enabling Click-to-Call in Zoho CRM

Go to Zoho CRM Setup > Channels > Telephony. If you have already configured Exotel as your Desk telephony provider, you can use the same credentials here. Enter the Exotel Account SID, API Token, and virtual number. Save.

Once enabled, phone number fields in Contact, Lead, and Deal records display a small phone handset icon. Clicking it triggers Exotel’s call API with the following flow:

  1. Exotel calls the agent’s registered phone number.
  2. Agent answers and hears a brief tone.
  3. Exotel bridges the call to the customer’s number.
  4. Call connects — both parties are speaking on the same Exotel call SID.
  5. When the call ends, the webhook fires and logs the Call activity in CRM.

Outbound Caller ID

For outbound calls, configure the Exotel virtual number as the outbound caller ID. This is set in the Exotel API call parameters under the “CallerId” field. Presenting your registered virtual number ensures TRAI CLI compliance and gives customers a consistent number to call back on.

Call Recording Access

Exotel stores call recordings on their servers for 60 days by default (extendable to 180 days on higher plans). The recording URL is included in the webhook payload and is written to the CRM Call activity description field by the Deluge function above. Agents can click the URL directly from the CRM activity to play back the recording in their browser. Ensure your Zoho CRM permissions restrict recording access to supervisors and quality assurance roles only — call recordings contain personally identifiable information and must be handled under your data retention policy.

Agent Routing and Overflow Handling

A production deployment needs rules for what happens when agents are unavailable. Exotel and Zoho Desk together give you several options:

Ring Group vs. Sequential Routing

In Exotel, a Ring Group calls all agents in a department simultaneously. The first agent to answer gets the call. Sequential routing calls agents one by one in a defined order. For small teams (2-3 agents), ring groups minimise wait time. For larger teams, sequential routing paired with a queue reduces simultaneous ring fatigue.

Business Hours and After-Hours Handling

Exotel flows support time-based branching. Add a “Time Condition” node to your IVR flow and configure your business hours (for example, Monday through Saturday, 9 AM to 7 PM IST). Outside these hours, route callers to a voicemail node that sends the recording to your support email. Zoho Desk can create a ticket automatically from the emailed voicemail if you configure the email channel to parse these messages.

Missed Call Auto-Callback with Zoho CRM

When a caller hangs up before connecting to an agent, Exotel fires a call.missed webhook event. You can use a Zoho Flow automation triggered by this webhook to create a CRM Task assigned to the team lead, with the subject “Missed call from +91XXXXXXXXXX — call back within 30 minutes.” This ensures no missed call goes unactioned. For teams that also use Slack for internal coordination, see our guide on Zoho Desk Slack integration to send missed call alerts to the right Slack channel simultaneously.

Comparing Exotel and Twilio for Indian Deployments

FactorExotelTwilio
TRAI licensingYes (licensed in India)No direct TRAI license
Indian number typesMobile, landline, toll-freeLimited Indian DIDs
DND scrubbing APIBuilt-inNot built-in
Billing currencyINRUSD
SupportIndia-based support teamGlobal support (slower for IST)
Entry pricingINR 4,999/monthPay-per-use (higher at scale)
Zoho Desk native connectorYesYes (see Twilio integration)

For purely Indian operations with a full-time customer service team, Exotel is the more practical choice. Twilio may be preferable if your team handles calls from multiple countries or if you need advanced programmable voice features with global PSTN reach.

Troubleshooting Common Issues

Screen Pop Not Appearing

The most common cause is a phone number format mismatch. Zoho Desk matches the inbound caller number against contact records. If your contacts are stored as 9XXXXXXXXX (without country code) and Exotel passes the number as +919XXXXXXXXX, there is no match. Fix this by standardising all contact phone numbers in Desk to include the +91 prefix. A bulk update via the Zoho Desk import CSV handles this in one step.

Webhook Not Firing

If your Zoho Flow webhook is not receiving Exotel callbacks, verify two things: the webhook URL is publicly accessible (not localhost or a VPN-only address), and the Exotel webhook configuration uses the correct event type (call.completed, not a legacy callback URL field). Test the endpoint manually using a tool like webhook.site before connecting it to Exotel.

Call Logging Creating Duplicate Records

If the Deluge function runs multiple times per call (which can happen if Exotel retries the webhook on a 5xx response), add a deduplication check using the call_sid. Before creating the Call record, search for an existing CRM Call with the Description containing the SID. If found, skip creation and return a success response to prevent further retries.

IVR Audio Quality

Exotel’s text-to-speech for IVR messages uses a default voice that many callers find robotic. For professional deployments, record your IVR prompts as MP3 files (8kHz, mono, 128kbps works well for telephony) and upload them as audio clips in the ExoIVR flow editor. A human-recorded greeting in both English and Hindi noticeably improves caller experience. Teams using live chat alongside voice can also connect live chat integration for customers who prefer text over phone.

Frequently Asked Questions

Does Zoho Desk have a native Exotel integration?
Zoho Desk supports Exotel through its telephony integration framework. You configure Exotel as the telephony provider in Zoho Desk’s Setup > Channels > Telephony section, entering your Exotel SID, API token, and virtual number. Native screen pops and call logging work out of the box after this setup, without requiring any custom code on the Desk side.
Can I log Exotel calls directly in Zoho CRM?
Yes. Using Exotel’s webhook callbacks combined with a Zoho CRM Deluge function, you can automatically create Call activity records linked to matching Contact or Lead records whenever a call completes. The function matches on the caller’s phone number after normalising the +91 prefix. The recording URL is stored in the Call description field for easy playback.
How does IVR routing work with Zoho Desk?
Exotel’s IVR builder (ExoIVR) routes calls to agents or queues based on DTMF key presses. You map each IVR branch to a Zoho Desk department by assigning agent phone numbers as transfer destinations in the ExoIVR Connect Agent node. When a call connects, Zoho Desk receives the screen pop with ticket context for the incoming caller number.
Is Exotel compliant with TRAI regulations for Indian businesses?
Yes. Exotel is a TRAI-licensed telecom provider in India. Their numbers are compliant with TRAI’s telemarketing regulations. They also support DND scrubbing via their API and CLI presentation rules for Indian numbers. You must still configure your outbound calling windows (9 AM to 9 PM for transactional calls) and record call consent in your IVR greeting to maintain full TRAI compliance.
What is the pricing for Exotel in India?
Exotel pricing starts at approximately INR 4,999 per month for their Starter plan covering 3 agents and 1 virtual number. A Growth plan covering 10 agents is available at INR 9,999 per month. Enterprise plans with unlimited agents start at INR 19,999 per month. Call costs are billed separately at approximately INR 0.25 to 0.60 per minute depending on call direction and volume commitments.

Setting up Exotel with Zoho Desk and CRM? Aaxonix is a Zoho-certified implementation partner based in India. Get in touch for a scoped implementation.

Talk to Our Team
Share this article LinkedIn Twitter / X
# Cloud Telephony # Customer Service # Exotel # India # Zoho CRM # Zoho Desk

Thinking about Zoho or NetSuite?

Our team builds systems that actually work. No fluff, just honest architecture and clean implementation.