Technical Guide: Migrating from Twilio to Plivo

Introduction

Migrating from Twilio to Plivo is a painless process. The two companies’ API structures, implementation mechanisms, XML structure, SMS message processing, and voice call processing are similar. We wrote this technical comparison between Twilio and Plivo APIs so that you can scope the code changes for a seamless migration.

Understanding the differences between Twilio and Plivo development

Most of the APIs and features that are available on Twilio are also available on Plivo, and the implementation mechanism is easier as the steps involved are almost identical. This table gives a side-by-side comparison of the two companies’ features and APIs. An added advantage with Plivo is that not only can you code using the familiar API/XML coding method, you can also implement your use cases using PHLO (Plivo High Level Objects), a visual workflow builder that lets you create workflows by dragging and dropping components onto a canvas — no coding required.

Features and APIs Twilio Plivo Similarities Implementation Interface
Voice API: Make phone calls Request and response variables’ structure API
PHLO
Programmatically manage call flows Twiml Plivo XML XML element and its attributes structure XML
PHLO
Geo Permissions Feature parity Console
Number Lookup API API Parity API
Phone number management Feature parity API
Console
Call Insights Feature parity Console
Validating Requests Feature parity API
XML
Subaccounts Feature parity API
Speech recognition Feature parity XML
SSML (Speech Synthesis Markup Language) Feature parity XML
PHLO
Browser and Mobile SDKs Feature parity Browser
Android
iOS
Transcription Feature parity API
XML
PHLO
Custom SIP Headers Feature parity API
XML
PHLO
Browser SDK
Mobile SDKs
HTTP callbacks Feature parity API
XML
PHLO

Create a Plivo account

Start by signing up for a free trial account that you can use to experiment with and learn about our services. The free trial account comes with free credits, and you can add more as you go along. You can also add a phone number to your account, or port a number from Twilio to Plivo, to start testing the full range of our voice and SMS features. A page in our support portal walks you through the signup process.

Migrate your voice application

To migrate an existing application from Twilio to Plivo using APIs, follow the voice quickstart guides for one of the seven languages Plivo provides SDKs for: PHP, Node.js, C# (.NET), Java, Python, Ruby, and Go. For another alternative that lets you evaluate Plivo’s SMS APIs and their request and response structure, use our Postman collections.

How to make an outbound call

Let’s take a look at the process of refactoring the code to migrate your app from Twilio to Plivo to set up a simple Python application to make an outbound call by changing just a few lines of code.

Twilio Plivo
import os
from twilio.rest import Client
account_sid = os.environ["<twilio_account_sid>"]
auth_token = os.environ["<twilio_auth_token>"]
client = Client(account_sid, auth_token)

call = client.calls.create(
    to='+14155551212',
    from_='+14165553434',
    url='https://demo.twilio.com/docs/voice.xml'
    )

print(call)
import os, plivo

auth_id = os.environ["<plivo_auth_id>"]
auth_token = os.environ["<plivo_auth_token>"]
client = plivo.RestClient(auth_id, auth_token)

call = client.calls.create(
    to_='+14155551212',
    from_='+14165553434',
    answer_url='https://s3.amazonaws.com/static.plivo.com/answer.xml',
  )
print(call)

Replace the authentication placeholders with authentication credentials from the Twilio or Plivo console.

Alternatively, you can implement the same functionality using one of our PHLO templates. To make an outbound call, you can create a PHLO like this:

Create a PHLO for outbound calls

How to receive an incoming call

You can migrate an application for receiving and handling an incoming call from Twilio to Plivo just as seamlessly, as in this example:

Twilio Plivo
from flask import Flask
from twilio.twiml.voice_response import VoiceResponse

app = Flask(__name__)

@app.route("/receive_call", methods=['GET', 'POST'])
def receive_call():
    """Respond to incoming phone calls with a 'Hello world' message"""
    # Start our TwiML response
    resp = VoiceResponse()

    # Read a message aloud to the caller
    resp.say("Hello, world!", voice='alice')
    
    return str(resp)

if __name__ == "__main__":
    app.run(debug=True)
from flask import Flask, request, make_response
from plivo import plivoxml

app = Flask(__name__)

@app.route('/receive_call', methods=['GET','POST'])
def receive_call():
  # Generate a Speak XML element with the details of the text to play on the call
    response = (plivoxml.ResponseElement()
            .add(plivoxml.SpeakElement('Hello, world!')))
    return(response.to_string())

if __name__ == "__main__":
    app.run(host='0.0.0.0', debug=True)

Here again you can implement the same functionality using one of our PHLO templates:

Create a PHLO to receive incoming call

How to forward an incoming call

You can migrate an application for forwarding an incoming call from Twilio to Plivo as in this example:

Twilio Plivo
from flask import Flask
from twilio.twiml.voice_response import Dial, VoiceResponse, Say

app = Flask(__name__)

@app.route("/forward_call", methods=['GET', 'POST'])
def forwardcall():
    """Forward incoming phone call to connect the caller to another party"""

    # Start our TwiML response
    response = VoiceResponse()

    # Dial verb to forward the call
    response.dial('202-555-1234')
    response.say('Goodbye')

    return str(response)

if __name__ == "__main__":
    app.run(debug=True)
from flask import Flask, request, make_response, Response
from plivo import plivoxml

app = Flask(__name__)

@app.route('/forward_call', methods=['GET', 'POST'])
def forwardcall():

    response = plivoxml.ResponseElement()
    response.add(
        plivoxml.DialElement().add(
         plivoxml.NumberElement('12025551234')))
    return(response.to_string())

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)

Here again you can implement the same functionality using one of our PHLO templates:

Create a PHLO to receive incoming call

For more information about migrating your voice applications to Plivo, check out our detailed use case guides, available for all seven programming languages and PHLO.

More use cases

You can migrate applications that serve other use cases too:

Port your existing numbers from Twilio to Plivo

If you want to continue using your phone numbers from Twilio, you can port the numbers to Plivo without having any downtime on your services for your customers. Phone number porting must be requested by a phone number’s owner. Here’s an overview of the process for porting a phone number to Plivo:

  1. Phone number’s owner submits porting request with documentation.
  2. Plivo verifies the porting request.
  3. Plivo submits porting request to the gaining carrier.
  4. The gaining carrier submits porting request to the losing carrier.
  5. The losing carrier responds with an approval or a rejection.
  6. Plivo notifies phone number owner of Firm Order Commitment or porting date.

You can check our number porting guide to initiate the process.

Rent new phone numbers for your migrated app

You can rent new phone numbers on the Plivo platform for your migrated applications as well. Plivo provides a self-serve console to rent new numbers and to manage them. You can also use the Phone Numbers API for number management. Our Phone Numbers quickstart guide provides more information.