How to use telephony?

I had installed this app but seem’s not fully completed. I setup my exotel credential and tried to call and search dial pad I couldn’t find it. am I using this app wrongly. ot should i missing anythin. please soneone help.

@Ritvik_Sardana @pratik_b

@Antony_Praveenkumar

Scenario A — You’re on Frappe CRM

This is where outbound call UI actually lives. Ensure the email is the same in both the Telephony Agent record and your Exotel account. Then configure the Exotel App Bazar flow with the correct callback webhook URL from your CRM’s Exotel Settings page. Once done, the call button appears contextually on Lead/Deal/Contact pages — no separate dial pad needed.

Scenario B — You’re on ERPNext (not CRM)

ERPNext’s Exotel integration is primarily inbound-focused. The standard setup involves configuring the Exotel App Bazar flow with incoming call webhook URLs, assigning it to your ExoPhone, and setting up Communication Medium with the ExoPhone number and schedule. For outbound calls from ERPNext, there is no official dial pad UI — this has been a known gap since day one.

The workaround for outbound from ERPNext: trigger calls via Exotel’s Click-to-Call API from a custom button on Lead/Customer doctype using a client script:

// Client Script on Lead
frappe.ui.form.on('Lead', {
    refresh(frm) {
        frm.add_custom_button('📞 Call', () => {
            frappe.call({
                method: 'your_app.api.trigger_exotel_call',
                args: {
                    from_number: frappe.session.user_mobile, // agent's number
                    to_number: frm.doc.mobile_no,
                    caller_id: 'your_exophone'
                },
                callback: (r) => {
                    frappe.msgprint('Call initiated via Exotel!');
                }
            });
        });
    }
});

Backend (your_app/api.py):

import frappe, requests

@frappe.whitelist()
def trigger_exotel_call(from_number, to_number, caller_id):
    settings = frappe.get_single("Exotel Settings")
    url = f"https://api.exotel.com/v1/Accounts/{settings.account_sid}/Calls/connect"
    response = requests.post(url, auth=(settings.api_key, settings.api_token), data={
        "From": from_number,
        "To": to_number,
        "CallerId": caller_id,
    })
    return response.json()

Scenario C — You specifically want a Dial Pad UI

That’s outside the scope of frappe/telephony. Your options:

Option What to do
Switch to Frappe CRM Has native call button per Lead/Deal
Use Exotel’s own web dialer Their dashboard has one — use in parallel
Build custom Frappe Page Create a /telephony-dial page with an iframe or JS dialer using Exotel’s WebRTC SDK
2 Likes

Hi @Falguni_Satat_Tech thanks for the input its very detaiing. appriciate your time.

2 Likes