Skip to contentSkip to navigationSkip to topbar
Rate this page:
On this page

Use Twilio REST APIs from Apex


The Twilio for Salesforce package includes an Apex(link takes you to an external page) helper class that reduces the amount of code needed to interact with Twilio APIs. The Lightning components in the package focus only on SMS, so the helper class provides you with a way to write custom Apex to interact with any of Twilio's APIs, such as Voice and Chat.

(information)

Info

Code samples are written in Apex, but are labeled as Java for syntax highlighting purposes.


Send Outbound SMS

send-outbound-sms page anchor

_17
//Post Example
_17
TwilioSF.TwilioApiClient api = new TwilioSF.TwilioApiClient();
_17
api.addUrlPart('Accounts');
_17
api.addUrlPart('ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_17
api.addUrlPart('Messages.json');
_17
_17
api.addParam('To','+15558675310');
_17
api.addParam('From','+15017122661');
_17
api.addParam('Body','Here is my message');
_17
TwilioSF.TwilioApiClientResponse response = api.doPost();
_17
_17
//Example with key value pairs
_17
String sid = response.getTwilioJsonParser().get('sid').getString();
_17
Integer totalSegments = response.getTwilioJsonParser().get('num_segments').getInteger();
_17
_17
//Example a key with object
_17
String media = response.getTwilioJsonParser().get('subresource_uris').get('media').getString();

Twilio will verify that you've included a valid Twilio phone number in the From parameter, then either queue the call or return an error.

Check out the Messages API reference for the full list of parameters you can include in your request. You can add these using the addUrlPart method. You can also find the properties you can expect in the response from Twilio.


Send Message with Error Handling

send-message-with-error-handling page anchor

_16
//Put Example with failures
_16
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_16
//Switch for throwing exceptions,=.
_16
//client.setThrowExceptionsOnFailedResponses();
_16
client.addUrlPart('Accounts');
_16
client.addUrlPart('ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_16
client.addUrlPart('Messages.json');
_16
_16
client.addParam('To','+15017122661');
_16
client.addParam('From','+15558675310');
_16
client.addParam('Body','Here is my message');
_16
_16
_16
TwilioSF.TwilioApiClientResponse response = client.doPut();
_16
system.debug(response.hasError());
_16
system.debug(response.getErrorMessage());

Use TwilioApiClientResponse to retrieve the status code and error message from your request.


Get Messages with no Params

get-messages-with-no-params page anchor

_12
//Get Messages No Params
_12
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_12
client.addUrlPart('Accounts');
_12
client.addUrlPart('ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_12
client.addUrlPart('Messages');
_12
client.addUrlPart('.json');
_12
TwilioSF.TwilioApiClientResponse response = client.doGet();
_12
_12
system.debug(response.getTwilioJsonParser().get('first_page_uri').getString());
_12
system.debug(response.getTwilioJsonParser().get('previous_page_uri').getString());
_12
system.debug(response.getTwilioJsonParser().get('end').getInteger());
_12
system.debug(JSON.serializePretty(response.toMap()));

This example shows you how to pull a list of messages from Twilio. By default, this method will return 50 results. The maximum number of records in a single request is 1000. You can set how many results are returned using the pageSize param.

See the "get messages with pagination" examples for retrieving larger groups of messages.


Get Messages with Params

get-messages-with-params page anchor

_21
//Get Messages with Params
_21
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_21
client.addUrlPart('Accounts');
_21
client.addUrlPart('ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_21
client.addUrlPart('Messages');
_21
client.addUrlPart('.json');
_21
_21
client.addParam('To','+15558675310');
_21
client.addParam('PageSize','5');
_21
client.addParam('DateSent','2018-06-01','>=');
_21
TwilioSF.TwilioApiClientResponse response = client.doGet();
_21
_21
system.debug(response.getTwilioJsonParser().get('previous_page_uri').getString());
_21
system.debug(response.getTwilioJsonParser().get('page_size').getInteger());
_21
system.debug(JSON.serializePretty(response.toMap()));
_21
_21
String messagesString = response.getTwilioJsonParser().get('messages').getString();
_21
List<TwilioJsonParser> messagesArray = response.getTwilioArrayJsonParser(messagesString);
_21
for(TwilioJsonParser p:messagesArray){
_21
system.debug(p.get('sid').getString());
_21
}

This example demonstrates how to retrieve a list of messages that match specified criteria. See this documentation to view additional options for filtering messages.


Get Messages with Pagination - Example 1

get-messages-with-pagination---example-1 page anchor

_18
//Pagination
_18
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_18
client.addUrlPart('Accounts');
_18
client.addUrlPart('ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_18
client.addUrlPart('Messages');
_18
client.addUrlPart('.json');
_18
_18
_18
TwilioSF.TwilioApiClientResponse response = client.doGet();
_18
String nextPage = response.getTwilioJsonParser().get('next_page_uri').getString();
_18
client.setNextUrl(nextPage);
_18
while (client.hasNextPage()) {
_18
response = client.doGetNext();
_18
if(response.responseBody != null){
_18
nextPage = response.getTwilioJsonParser().get('next_page_uri').getString();
_18
client.setNextUrl(nextPage);
_18
}
_18
}

Get all messages in your Twilio account using pagination. In this example, you get the next page URL if it exists, and then call it in your Twilio client.


Get Messages with Pagination - Example 2

get-messages-with-pagination---example-2 page anchor

_22
//Pagination Example
_22
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_22
client.addUrlPart('Accounts');
_22
client.addUrlPart('ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_22
client.addUrlPart('Messages');
_22
client.addUrlPart('.json');
_22
_22
_22
TwilioSF.TwilioApiClientResponse response = client.doGet();
_22
String nextPage = response.getTwilioJsonParser().get('next_page_uri').getString();
_22
client.setNextUrl(nextPage);
_22
if(client.hasNextPage()){
_22
response = client.doGetNext();
_22
_22
String previousPage = response.getTwilioJsonParser().get('previous_page_uri').getString();
_22
client.setPreviousUrl(previousPage);
_22
_22
if(client.hasPreviousPage()){
_22
response = client.doGetPrevious();
_22
system.debug(response.getTwilioJsonParser().get('uri').getString());
_22
}
_22
}



_10
//Delete Example
_10
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_10
_10
client.addUrlPart('Accounts');
_10
client.addUrlPart('ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_10
client.addUrlPart('Messages');
_10
client.addUrlPart('SMXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.json');
_10
_10
TwilioApiClientResponse response = client.doDelete();
_10
system.debug(response.getHtttpStatusCode());



_10
//Get Messages Services
_10
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_10
TwilioSF.TwilioApiClientResponse response = client.doGet('https://messaging.twilio.com/v1/Services');
_10
system.debug(JSON.serializePretty(response.toMap()));

A messaging service is a pool of phone numbers that properly encodes your message body, matches the recipient's area code, and distributes SMS across multiple numbers. You can read more about messaging services here.

This code example demonstrates how to get a list of Messaging Services in your account.


Update Messaging Services

update-messaging-services page anchor

_13
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_13
client.setBaseUrl('https://messaging.twilio.com/');
_13
client.setApiVersion('v1');
_13
client.addUrlPart('Services');
_13
client.addUrlPart('MGXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_13
_13
client.addParam('FriendlyName','Dev Org1');
_13
TwilioSF.TwilioApiClientResponse response = client.doPost();
_13
_13
system.debug(response.getTwilioJsonParser().get('friendly_name').getString());
_13
system.debug(response.getTwilioJsonParser().get('area_code_geomatch').getBoolean());
_13
system.debug(response.getTwilioJsonParser().get('links').get('phone_numbers').getString());
_13
system.debug(JSON.serializePretty(response.toMap()));

This example shows you how to update the friendly name of a messaging service using the Twilio API.


Get Taskrouter Reservations

get-taskrouter-reservations page anchor

_20
//Task Router Get Reservations
_20
TwilioSF.TwilioApiClient client = new TwilioSF.TwilioApiClient();
_20
client.setBaseUrl('https://taskrouter.twilio.com/');
_20
client.setApiVersion('v1');
_20
client.addUrlPart('Workspaces');
_20
client.addUrlPart('WSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_20
client.addUrlPart('Workers');
_20
client.addUrlPart('WKXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
_20
client.addUrlPart('Reservations');
_20
_20
TwilioSF.TwilioApiClientResponse response = client.doGet();
_20
system.debug(response.getTwilioJsonParser().get('meta').get('first_page_url').getString());
_20
system.debug(JSON.serializePretty(response.toMap()));
_20
String messagesString = response.getTwilioJsonParser().get('reservations').getString();
_20
List<TwilioJsonParser> messagesArray = response.getTwilioArrayJsonParser(messagesString);
_20
for(TwilioJsonParser p:messagesArray){
_20
system.debug(p.get('worker_sid').getString());
_20
system.debug(p.get('date_updated').getDatetime());
_20
system.debug(p.get('links').get('task').getString());
_20
}

Taskrouter is an API for tracking the availability of call center workers and routing tasks to the appropriate worker. In this example, we pull the current list of open ("reserved") tasks for an individual worker.


Rate this page: