Play dynamic text or audio from URL in connect applet

What is usual?

Typically, while configuring your Connect applet, you would enter the text or upload the audio that you want your agents  to listen before the call gets connected to the customer. This is static in nature - ie, all your agents will hear the same message / audio. 


How to make it dynamic?

In Exotel, you have an option to make this  dynamic - ie, you can potentially play a different greeting to each agent. 

In the Connect applet, you can specify a URL (instead of a static text) in the "Read text like a robot" option. See below. 


Choose this option if you want to control playback for each user uniquely 



Choose this option if you want to have a static playback


When the option is chosen for  URL, Exotel will make a HTTP GET request to that URL (which is hosted at your server). Your server can now return either a text or a URL (to an audio file). If it returns a text, the text will be converted to audio using out Text-To-Speech (TTS) engine and then played out. 


The applets mentioned above are a part of Custom App section also called App Builder , to know more about App Builder please follow----> Exotel App Builder


HTTP Request from Exotel (to your URL)

The GET request that Exotel makes to the URL will have the following query parameters:




string; unique identifier of the call


string; the number of the calling party


string; your Exotel company number that is being called; this will be from your "Company Numbers" page


string; the number that is being called currently (This might be empty also)



HTTP Response from your web server

Your web server

  • MUST set the Content-Type HTTP header to 'application/json' and nothing else.

  • MUST support a HEAD request from Exotel and return the exact same headers that it would for a GET request.

  • The response will look something like



  • "type":"audio_url",

  • "value":"http://...mp3..."

  • OR

  • type”: “text”,

  • value”: “hello, this is a sample text

  • }


    • start_delay”:5,

    • play_to_caller”:false,

    • type”: “audio_url”,

    • value”: “http://...mp3

    • type”: “text”,

    • value”: “hello, this is a sample text

  • }


    • type”: “audio_url”,

    • value”: “http://...mp3

    • type”: “text”,

    • value”: “hello, this is a sample text

  • }

  • }

One can choose to give only start_call_playback or in_call_playback or end_call_playback and accordingly the audio will be played to users


  1. If the customer backend fails to respond to GET request and Exotel receives 4xx or 5xx responses , then the audio will not be played to user and Connect applet will proceed and patch the call between callee and caller  

  2. The Audio files MUST be in the .wav/.mp3, 8Khz Mono format. The bit depth must be 16 bit.

            NOTE: All other formats are not supported (like 16Kz Mono/Stereo etc)


Caching of the audio files

Exotel caches the audio files that it downloads and plays - so that the next time you send the same file, we don't need to download and it will be faster.

Exotel caches the file based on the name of the URL. So in case you are changing first-audio.wav, you will need to send in another name the next time (Ex: