Technical Guide: Migrating from Twilio to Plivo

Introduction

Migrating from Twilio to Plivo is a seamless and 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-side comparison of the two companies’ features and APIs. An added advantage with Plivo is that not only can you code using the old familiar API/XML 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
SMS API: Send SMS/MMS messages Request and response variables’ structure API
PHLO
Managed number pool for US/CA Messaging Copilot Powerpack Feature parity API
Console
Geo Permissions Feature parity Console
SMS Sender ID registration Feature parity Console
Number Lookup API API Parity API
Phone number management Feature parity API
Console
Validating Requests Feature parity API
XML
Subaccounts Feature parity API
HTTP callbacks Feature parity API
XML
PHLO

Plivo account creation

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 to start testing the full range of our voice and SMS features. A page in our support portal walks you through the signup process.

You can also port your numbers from Twilio to Plivo, as we explain in this guide.

Migrating your SMS application

You can migrate your existing application from Twilio to Plivo by refactoring the code, or you can try our intuitive visual workflow builder PHLO. To continue working with the APIs, use one of the quickstart guides to set up a development environment for your preferred language. Plivo offers server SDKs in seven languages: PHP, Node.js, .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 send an SMS message

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 send an SMS message 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)

message = client.messages.create(
    from_="+12125551234",
    to="+13125552345",
    body="Hi there"
)

print(message)
   
import os, plivo

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

message = client.messages.create(
    src="+12125551234",
    dst="+13125552345",
    text="Hi there"
)
print(message)

Alternatively, you can implement the same functionality using one of our PHLO templates. For example, if you want to send an SMS message, your PHLO would be this:

Create PHLO for outbound SMS

How to receive and reply to SMS

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

Twilio Plivo
from flask import Flask, request, redirect
from twilio.twiml.messaging_response import MessagingResponse

app = Flask(__name__)


@app.route("/reply_sms", methods=["GET", "POST"])
def sms_reply():
    """Respond to incoming calls with a simple text message."""
    # Start our TwiML response
    resp = MessagingResponse()

    # Add a message
    resp.message("Thank you, we have received your request.")
    
    return str(resp)


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

app = Flask(__name__)


@app.route("/reply_sms", methods=["GET", "POST"])
def sms_reply():

    from_number = request.values.get("From")
    to_number = request.values.get("To")
    text = request.values.get("Text")
    
    # Plivo Message XML to handle Reply
    response = plivoxml.ResponseElement()
    response.add(
        plivoxml.MessageElement(
            "Thank you, we have received your request.", src=to_number, dst=from_number
        )
    )
    
    return Response(response.to_string(), mimetype="application/xml")


if __name__ == "__main__":
    app.run(debug=True)

Here again, you can implement the same functionality using one of our PHLO templates. Your PHLO would look like:

With Dynamic Payload

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

How to send an MMS message

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 send an MMS message 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)

message = client.messages.create(
        from_='+12125551234',
        to='+13125552345',
        body='Use this GIF',
        media_url=['https://media.giphy.com/media/26gscSULUcfKU7dHq/source.gif']
     )

print(message)
   
import os, plivo

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

message = client.messages.create(
        src='+12125551234',
        dst='+13125552345',
        text=Use this GIF,
        media_urls=['https://media.giphy.com/media/26gscSULUcfKU7dHq/source.gif'],
        type_='mms'
    )
print(message)

Alternatively, you can implement the same functionality using one of our PHLO templates. For example, if you want to send an MMS message, your PHLO would be this:

Create PHLO for outbound MMS

More use cases

You can migrate your applications serving various other use-cases like the following ones too:

Porting your existing numbers from Twilio to Plivo

If you wish to continue using your phone numbers from Twilio, you can port the numbers to Plivo painlessly 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. Submission of a porting request with documentation
  2. Verification of the porting request
  3. Porting request submission to the gaining carrier
  4. Porting request submission to the losing carrier
  5. Response from the losing carrier
  6. Firm Order Commitment or porting date set

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

Buy new phone numbers for your migrated app

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