Convert Figma logo to code with AI

twilio logotwilio-php

A PHP library for communicating with the Twilio REST API and generating TwiML.

1,543
559
1,543
20

Top Related Projects

A Python module for communicating with the Twilio API and generating TwiML.

A Ruby gem for communicating with the Twilio API and generating TwiML

Node.js helper library

Quick Overview

Twilio-php is the official PHP library for interacting with Twilio's API. It provides a convenient way to integrate Twilio's communication services, such as SMS, voice calls, and video, into PHP applications. The library simplifies the process of making API requests and handling responses.

Pros

  • Easy to use and well-documented
  • Supports all Twilio API features
  • Regularly updated and maintained by Twilio
  • Includes helper libraries for common tasks

Cons

  • Requires a Twilio account and API credentials
  • May have a learning curve for developers new to Twilio's services
  • Large library size may impact application performance if not used efficiently

Code Examples

  1. Sending an SMS:
use Twilio\Rest\Client;

$client = new Client($accountSid, $authToken);
$client->messages->create(
    '+1234567890',
    [
        'from' => '+0987654321',
        'body' => 'Hello from Twilio!'
    ]
);
  1. Making a voice call:
use Twilio\Rest\Client;

$client = new Client($accountSid, $authToken);
$call = $client->calls->create(
    '+1234567890',
    '+0987654321',
    [
        'url' => 'http://demo.twilio.com/docs/voice.xml'
    ]
);
  1. Retrieving call logs:
use Twilio\Rest\Client;

$client = new Client($accountSid, $authToken);
$calls = $client->calls->read(
    ['startTime' => new DateTime('2023-01-01')]
);

foreach ($calls as $call) {
    echo $call->sid . ' ' . $call->status . "\n";
}

Getting Started

  1. Install the library using Composer:
composer require twilio/sdk
  1. Include the Twilio autoloader in your PHP script:
require_once 'vendor/autoload.php';
  1. Initialize the Twilio client with your account credentials:
use Twilio\Rest\Client;

$accountSid = 'your_account_sid';
$authToken = 'your_auth_token';
$client = new Client($accountSid, $authToken);
  1. You can now use the $client object to interact with Twilio's API services.

Competitor Comparisons

A Python module for communicating with the Twilio API and generating TwiML.

Pros of twilio-python

  • More extensive documentation and examples
  • Better support for asynchronous operations
  • Stronger type hinting and static typing support

Cons of twilio-python

  • Slightly steeper learning curve for beginners
  • Less mature ecosystem compared to PHP

Code Comparison

twilio-python:

from twilio.rest import Client

client = Client(account_sid, auth_token)
message = client.messages.create(
    body="Hello from Python!",
    from_="+1234567890",
    to="+0987654321"
)

twilio-php:

<?php
require_once 'vendor/autoload.php';
use Twilio\Rest\Client;

$client = new Client($account_sid, $auth_token);
$message = $client->messages->create(
    "+0987654321",
    array("from" => "+1234567890", "body" => "Hello from PHP!")
);

Both libraries offer similar functionality, but twilio-python's syntax is generally more concise and Pythonic. The PHP version requires more boilerplate code and uses array syntax for parameters. Python's version benefits from named parameters, making the code more readable.

twilio-python also provides better support for modern Python features like async/await, which can be beneficial for applications requiring high concurrency. However, twilio-php might be a better choice for developers already familiar with PHP or working on existing PHP projects.

A Ruby gem for communicating with the Twilio API and generating TwiML

Pros of twilio-ruby

  • More idiomatic Ruby syntax and conventions
  • Better support for Ruby-specific features like blocks and enumerators
  • Generally more concise code due to Ruby's expressive nature

Cons of twilio-ruby

  • Smaller community compared to PHP, potentially fewer resources and third-party integrations
  • May have slower performance in some scenarios due to Ruby's interpreted nature

Code Comparison

twilio-ruby:

client = Twilio::REST::Client.new(account_sid, auth_token)
message = client.messages.create(
  body: 'Hello from Ruby!',
  from: '+15551234567',
  to: '+15557654321'
)
puts message.sid

twilio-php:

$twilio = new Client($account_sid, $auth_token);
$message = $twilio->messages->create("+15557654321", [
    "body" => "Hello from PHP!",
    "from" => "+15551234567"
]);
echo $message->sid;

Both libraries offer similar functionality, but twilio-ruby's syntax is more aligned with Ruby conventions, using named parameters and a more object-oriented approach. The PHP version uses associative arrays for options, which is typical for PHP libraries.

The choice between these libraries often comes down to the developer's preferred language and the project's existing technology stack. Both are well-maintained official SDKs from Twilio, ensuring reliable integration with Twilio's services.

Node.js helper library

Pros of twilio-node

  • Asynchronous operations support with Promises, ideal for Node.js event-driven architecture
  • More frequent updates and active maintenance
  • Better TypeScript support with type definitions included

Cons of twilio-node

  • Steeper learning curve for developers not familiar with JavaScript/Node.js
  • Potentially more complex error handling due to asynchronous nature

Code Comparison

twilio-node:

const client = require('twilio')(accountSid, authToken);

client.messages
  .create({
     body: 'Hello from Node',
     from: '+15017122661',
     to: '+15558675310'
   })
  .then(message => console.log(message.sid));

twilio-php:

<?php
require_once('path/to/twilio-php/Services/Twilio.php');
$client = new Services_Twilio($accountSid, $authToken);
$message = $client->account->messages->create(array(
    'To' => "+15558675310",
    'From' => "+15017122661",
    'Body' => "Hello from PHP",
));
echo $message->sid;

Both libraries provide similar functionality, but twilio-node leverages JavaScript's asynchronous capabilities, while twilio-php uses a more traditional synchronous approach. The choice between them often depends on the developer's preferred language and the specific requirements of the project.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

twilio-php

Tests Quality Gate Status Packagist Packagist Learn with TwilioQuest

Documentation

The documentation for the Twilio API can be found here.

The PHP library documentation can be found here.

Versions

twilio-php uses a modified version of Semantic Versioning for all changes. See this document for details.

Supported PHP Versions

This library supports the following PHP implementations:

  • PHP 7.2
  • PHP 7.3
  • PHP 7.4
  • PHP 8.0
  • PHP 8.1
  • PHP 8.2
  • PHP 8.3

Installation

You can install twilio-php via composer or by downloading the source.

Via Composer

twilio-php is available on Packagist as the twilio/sdk package:

composer require twilio/sdk

Test your installation

Here is an example of using the SDK to send a text message:

// Send an SMS using Twilio's REST API and PHP
<?php
// Required if your environment does not handle autoloading
require __DIR__ . '/vendor/autoload.php';

// Your Account SID and Auth Token from console.twilio.com
$sid = "ACXXXXXX";
$token = "YYYYYY";
$client = new Twilio\Rest\Client($sid, $token);

// Use the Client to make requests to the Twilio REST API
$client->messages->create(
    // The number you'd like to send the message to
    '+15558675309',
    [
        // A Twilio phone number you purchased at https://console.twilio.com
        'from' => '+15017250604',
        // The body of the text message you'd like to send
        'body' => "Hey Jenny! Good luck on the bar exam!"
    ]
);

Without Composer

While we recommend using a package manager to track the dependencies in your application, it is possible to download and use the PHP SDK manually. You can download the full source of the PHP SDK from GitHub, and browse the repo if you would like. To use the SDK in your application, unzip the SDK download file in the same directory as your PHP code. In your code, you can then require the autoload file bundled with the SDK.

<?php
// Require the bundled autoload file - the path may need to change
// based on where you downloaded and unzipped the SDK
require __DIR__ . '/twilio-php-main/src/Twilio/autoload.php';

// Your Account SID and Auth Token from console.twilio.com
$sid = "ACXXXXXX";
$token = "YYYYYY";
$client = new Twilio\Rest\Client($sid, $token);

// Use the Client to make requests to the Twilio REST API
$client->messages->create(
    // The number you'd like to send the message to
    '+15558675309',
    [
        // A Twilio phone number you purchased at https://console.twilio.com
        'from' => '+15017250604',
        // The body of the text message you'd like to send
        'body' => "Hey Jenny! Good luck on the bar exam!"
    ]
);

Usage

Make a Call

<?php
$sid = "ACXXXXXX";
$token = "YYYYYY";

$client = new Twilio\Rest\Client($sid, $token);

// Read TwiML at this URL when a call connects (hold music)
$call = $client->calls->create(
    '8881231234',
    // Call this number
    '9991231234',
    // From a valid Twilio number
    [
        'url' => 'https://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient'
    ]
);

Warning It's okay to hardcode your credentials when testing locally, but you should use environment variables to keep them secret before committing any code or deploying to production. Check out How to Set Environment Variables for more information.

Get an existing Call

<?php
require_once '/path/to/vendor/autoload.php';

$sid = "ACXXXXXX";
$token = "YYYYYY";
$client = new Twilio\Rest\Client($sid, $token);

// Get an object using its SID. If you do not have a SID,
// check out the list resource examples on this page
$call = $client->calls("CA42ed11f93dc08b952027ffbc406d0868")->fetch();
print $call->to;

Iterate through records

The library automatically handles paging for you. Collections, such as calls and messages, have read and stream methods that page under the hood. With both read and stream, you can specify the number of records you want to receive (limit) and the maximum size you want each page fetch to be (pageSize). The library will then handle the task for you.

read eagerly fetches all records and returns them as a list, whereas stream returns an iterator and lazily retrieves pages of records as you iterate over the collection. You can also page manually using the page method.

<?php
require_once '/path/to/vendor/autoload.php';

$sid = "ACXXXXXX";
$token = "YYYYYY";
$client = new Twilio\Rest\Client($sid, $token);

$limit = 5;
$pageSize = 2;

// Read - fetches all messages eagerly and returns as a list
$messageList = $client->messages->read([], $limit);
foreach ($messageList as $msg) {
    print($msg->sid);
}

// Stream - returns an iterator of 'pageSize' messages at a time and lazily retrieves pages until 'limit' messages
$messageStream = $client->messages->stream([], $limit, $pageSize);
foreach ($messageStream as $msg) {
    print($msg->sid);
}

// Page - get the a single page by passing pageSize, pageToken and pageNumber
$messagePage = $client->messages->page([], $pageSize);
$nextPageData = $messagePage->nextPage();  // this will return data of next page
foreach ($messagePage as $msg) {
    print($msg->sid);
}

For more information about these methods, view the auto-generated library docs.

Use the read method

<?php
require_once '/path/to/vendor/autoload.php';

$sid = "ACXXXXXX";
$token = "YYYYYY";
$client = new Twilio\Rest\Client($sid, $token);

// Loop over the list of calls and print a property from each one
foreach ($client->calls->read() as $call) {
    print $call->direction;
}

Specify Region and/or Edge

To take advantage of Twilio's Global Infrastructure, specify the target Region and/or Edge for the client:

<?php
$sid = "ACXXXXXX";
$token = "YYYYYY";

$client = new Twilio\Rest\Client($sid, $token, null, 'au1');
$client->setEdge('sydney');

A Client constructor without these parameters will also look for TWILIO_REGION and TWILIO_EDGE variables inside the current environment.

This will result in the hostname transforming from api.twilio.com to api.sydney.au1.twilio.com.

Enable Debug Logging

There are two ways to enable debug logging in the default HTTP client. You can create an environment variable called TWILIO_LOG_LEVEL and set it to debug or you can set the log level to debug:

$sid = "ACXXXXXX";
$token = "YYYYYY";

$client = new Twilio\Rest\Client($sid, $token);
$client->setLogLevel('debug');

Generate TwiML

To control phone calls, your application needs to output TwiML.

Use Twilio\TwiML\(Voice|Messaging|Fax)Response to easily chain said responses.

<?php
$response = new Twilio\TwiML\VoiceResponse();
$response->say('Hello');
$response->play('https://api.twilio.com/cowbell.mp3', ['loop' => 5]);
print $response;

That will output XML that looks like this:

<?xml version="1.0" encoding="utf-8"?>
<Response>
    <Say>Hello</Say>
    <Play loop="5">https://api.twilio.com/cowbell.mp3</Play>
</Response>

Handle exceptions

When something goes wrong during client initialization, in an API request, or when creating TwiML, twilio-php will throw an appropriate exception. You should handle these exceptions to keep your application running and avoid unnecessary crashes.

The Twilio client

For example, it is possible to get an authentication exception when initiating your client, perhaps with the wrong credentials. This can be handled like so:

<?php
require_once('/path/to/twilio-php/Services/Twilio.php');

use Twilio\Exceptions\ConfigurationException;
use Twilio\Rest\Client;

$sid = "ACXXXXXX";
$token = "YYYYYY";

// Attempt to create a new Client, but your credentials may contain a typo
try {
    $client = new Twilio\Rest\Client($sid, $token);
} catch (ConfigurationException $e) {
    // You can `catch` the exception, and perform any recovery method of your choice
    print $e->getCode();
}

$call = $client->account->calls
    ->get("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

print $call->to;

CurlClient

When initializing the curl client, you will see an EnvironmentException if curl is not installed on your system.

<?php
require_once('/path/to/twilio-php/Services/Twilio.php');

use Twilio\Exceptions\TwilioException;
use Twilio\Http\CurlClient;

$sid = "ACXXXXXX";
$token = "YYYYYY";
$client = new Twilio\Rest\Client($sid, $token);

try {
    $client = new CurlClient();

    $client->options(
        'GET',
        'http://api.twilio.com',
        array(),
        array(),
        array(),
        $sid,
        $token
    );
} catch (EnvironmentException $e) {
    print $e->getCode();
}

print $call->to;

TwilioException

TwilioException can be used to handle API errors, as shown below. This is the most common exception type that you will most likely use.

<?php
require_once('/path/to/twilio-php/Services/Twilio.php');

use Twilio\Exceptions\TwilioException;

$sid = "ACXXXXXX";
$token = "YYYYYY";
$client = new Twilio\Rest\Client($sid, $token);

try {
    $call = $client->account->calls
        ->get("CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
} catch (TwilioException $e) {
    print $e->getCode();
}

print $call->to;

TwimlException

When building TwiML with twilio-php, if the result does not conform to what the API expects, you will see a TwimlException which you then need to handle like so:

<?php
require_once './vendor/autoload.php';
use Twilio\Twiml;

try {
    $response = new Twiml();
    $dial = $response->dial();
    $dial->conference('Room 1234');
    print $response;
} catch (TwimlException $e) {
    print $e->getCode();
}

Debug API requests

To assist with debugging, the library allows you to access the underlying request and response objects. This capability is built into the default Curl client that ships with the library.

For example, you can retrieve the status code of the last response like so:

<?php
$sid = "ACXXXXXX";
$token = "YYYYYY";

$client = new Twilio\Rest\Client($sid, $token);
$message = $client->messages->create(
    '+15558675309',
    [
        'from' => '+15017250604',
        'body' => "Hey Jenny! Good luck on the bar exam!"
    ]
);

// Print the message's SID
print $message->sid;

// Print details about the last request
print $client->lastRequest->method;
print $client->lastRequest->url;
print $client->lastRequest->auth;
print $client->lastRequest->params;
print $client->lastRequest->headers;
print $client->lastRequest->data;

// Print details about the last response
print $client->lastResponse->statusCode;
print $client->lastResponse->body;

Use a custom HTTP Client

To use a custom HTTP client with this helper library, please see the advanced example of how to do so.

Docker image

The Dockerfile present in this repository and its respective twilio/twilio-php Docker image are currently used by Twilio for testing purposes only.

Getting help

If you need help installing or using the library, please check the Twilio Support Help Center first, and file a support ticket if you don't find an answer to your question.

If you've instead found a bug in the library or would like new features added, go ahead and open issues or pull requests against this repo!