Play MP3 Audio to Caller

    Whether it’s as simple as playing music while your callers are on hold or greeting callers with a specific message, playing pre-recorded audio is an important part of any call logic. Plivo supports both MP3 and WAV file formats. The <Play> XML element is used to play an audio file (referenced by URL) to the caller.

    Prerequisites

    1. Sign up for a free Plivo trial account.
    2. Check out our server-side SDKs page and install the right helper based on the programming language you want to use.
    3. Buy a Plivo phone number. A phone number is required to receive calls. You can buy a Plivo phone number in over 20+ countries through the Buy Numbers tab on your Plivo account UI. Check the Voice API coverage page for all the supported countries.
    4. Use a web hosting service to host your web application. There are many inexpensive cloud hosting providers that you can use for just a few dollars a month. Follow the instructions of your hosting provider to host your web application.

    Set up a Web Server

    Let’s assume your web server is located at myvoiceapp.com. Below is a snippet to set up a route on your webserver. Let’s call it, play. Now when we send an HTTP request to myvoiceapp.com/play this route will be invoked. You will now have to configure this URL in your Plivo application.

    Note: For PHP, the route will be myvoiceapp.com/play.php
    1. Copy the relevant code below into a text file and save it. Let’s call it, play.
      Note: Make sure to use the appropriate file extention for your code (e.g., play.py for Python).
    2. Now that you have the code, you will need to expose your server to the public Internet. This way, Plivo will know where to find your app when a particular phone number is dialed. Moving forward, we will assume that your app is available at myvoiceapp.com.

    Code

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    from flask import Flask, request, make_response
    import plivo, plivoxml
    
    app = Flask(__name__)
    
    @app.route('/play/', methods=['GET','POST'])
    def play_xml():
        # Generate a Play XML with the details of audio file to play during the call
        body = "https://s3.amazonaws.com/plivocloud/Trumpet.mp3"
        r = plivoxml.Response()
        r.addPlay(body)
    
        print r.to_xml()
        return Response(str(r), mimetype='text/xml')
    
    if __name__ == "__main__":
        app.run(host='0.0.0.0', debug=True)
            
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    require 'rubygems'
    require 'sinatra'
    require 'plivo'
    include Plivo
    
    get '/play/' do
        r = Response.new()
        r.addPlay("https://s3.amazonaws.com/plivocloud/Trumpet.mp3")
    
        puts r.to_xml()
        content_type 'text/xml'
        return r.to_s()
    end
            
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    var plivo = require('plivo');
    var express = require('express');
    var app = express();
    
    app.set('port', (process.env.PORT || 5000));
    
    app.all('/play/', function(request, response) {
      // Generate a Play XML with the details of audio file to play during the call
      var r = plivo.Response();
    
      r.addPlay("https://s3.amazonaws.com/plivocloud/Trumpet.mp3");
      console.log(r.toXML());
    
      response.set({'Content-Type': 'text/xml'});
      response.send(r.toXML());
    });
    
    app.listen(app.get('port'), function() {
        console.log('Node app is running on port', app.get('port'));
    });
            
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    <?php
        require 'vendor/autoload.php';
        use Plivo\Response;
    
        // Generate a Play XML with the details of the audio file to play on the call.
        $body = "https://s3.amazonaws.com/plivocloud/Trumpet.mp3";
        $r = new Response();
        // Add Play element
        $r->addPlay($body);
        Header('Content-type: text/xml');
        echo($r->toXML());
    ?>
            
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    
    package plivoexample;
    
    import java.io.IOException;
    import com.plivo.helper.exception.PlivoException;
    import com.plivo.helper.xml.elements.Play;
    import com.plivo.helper.xml.elements.PlivoResponse;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.eclipse.jetty.server.Server;
    import org.eclipse.jetty.servlet.ServletContextHandler;
    import org.eclipse.jetty.servlet.ServletHolder;
    
    public class playRecorded extends HttpServlet {
        private static final long serialVersionUID = 1L;
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
    
            PlivoResponse response = new PlivoResponse();
            Play play = new Play("https://s3.amazonaws.com/plivocloud/Trumpet.mp3");
    
            try {
                response.append(play);
                System.out.println(response.toXML());
                resp.addHeader("Content-Type", "text/xml");
                resp.getWriter().print(response.toXML());;
            } catch (PlivoException e) {
                e.printStackTrace();
            }
        }
    
        public static void main(String[] args) throws Exception {
            String port = System.getenv("PORT");
            if(port==null)
                port ="8000";
            Server server = new Server(Integer.valueOf(port));
            ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
            context.setContextPath("/");
            server.setHandler(context);
            context.addServlet(new ServletHolder(new playRecorded()),"/play/");
            server.start();
            server.join();
        }
    }
            
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using RestSharp;
    using Plivo.XML;
    using Nancy;
    
    namespace play_recorded
    {
        public class Program : NancyModule
        {
            public Program()
            {
                Get["/play/"] = x =>
                {
                    Plivo.XML.Response resp = new Plivo.XML.Response();
    
                    // Add Play tag
                    resp.AddPlay("https://s3.amazonaws.com/plivocloud/Trumpet.mp3", new Dictionary&lt;string, string&gt;() { });
    
                    Debug.WriteLine(resp.ToString());
    
                    var output = resp.ToString();
                    var res = (Nancy.Response)output;
                    res.ContentType = "text/xml";
                    return res;
                };
            }
        }
    }
            
    

    Create an Application

    1. Create an Application by visiting the Application Page and click on New Application or by using Plivo’s Application API.
    2. Give your application a name. Let’s call it Play Audio. Enter your server URL (e.g., http://myvoiceapp.com/play) in the Answer URL field and set the method as POST or GET. See our Application API docs to learn how to modify your application through our APIs.
    3. Click on Create to save your application.

    Plivo Create Application Play Audio

    Assign a Plivo number to your app

    1. Navigate to the Numbers page and select the phone number you want to use for this app.
    2. Select Play Audio (name of the app) from the Plivo App dropdown list.
    3. Click on Update to save.

    Create Text to Speech Application

    If you don’t have a Plivo phone number, go to the Buy Number page to purchase a Plivo phone number.

    SMS Phone Number Search

    Test it out

    When you make a call to your Plivo number, Plivo will play the audio file found at https://s3.amazonaws.com/plivocloud/Trumpet.mp3. After the music is played, the call is automatically hung up. The XML instructions to Plivo are below.

    Sample XML

    <Response>
        <Play>https://s3.amazonaws.com/plivocloud/Trumpet.mp3</Play>
    </Response>

    Next Step

    Learn how to hangup calls using the API.

    1. Make an Outbound Call
    2. Play a Text-to-speech Message
    3. Connect Call to a Second Person
    4. Greet Caller by Name
    5. Play MP3/WAV Audio to Caller
    6. Hangup Using API
    7. Receive Incoming Call
    8. Forward Incoming Call
    9. Record Using API
    10. Screen Incoming Call
    11. Reject incoming call
    12. Get Details of all Calls
    13. Get Details of a single Call
    14. Get Details of Live Calls
    15. Build an IVR Phone Menu
    16. Conference Call
    17. Call Forward
    18. SIP Endpoint (Direct-Dial)