highfive
highfive

Reputation: 638

How to send Twilio SMS via Web Service in Salesforce Apex

I want to send SMS from Twilio noticed they have libraries built for Java, .Net, Node, etc. so that we can use them if we are upto those technologies.

But I want to do the same from Salesforce Apex and trying to figure out how to build the Http parameters to make the authorization.

I tried to map with cURL example given in Twilio documentation and can't find header keys for Auth token.

Below is my current code and looking for how to set the authentication params.

req.setEndpoint(baseURL + '/2010-04-01/Accounts/account_sid/Messages.json');
req.setMethod('POST');                
req.setHeader('to', EncodingUtil.urlEncode('+to_number', 'UTF-8'));
req.setHeader('from', EncodingUtil.urlEncode('+from_number', 'UTF-8'));

Http ht = new Http();
HttpResponse res = ht.send(req);

Updated request :

Blob headerValue = Blob.valueOf('my-twilio-account-sid:my-twilio-auth-token');
String authorizationHeader = 'BASIC ' + EncodingUtil.base64Encode(headerValue);
req.setHeader('Authorization', authorizationHeader);
req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
String body = EncodingUtil.urlEncode('From=+from_number&To=+to_number&Body=Sample text from twilio', 'UTF-8');
req.setBody(body);
Http ht = new Http();
HttpResponse res = ht.send(req);

Response saying

Bad Request : A 'From' phone number is required.

Upvotes: 1

Views: 641

Answers (1)

Alex Baban
Alex Baban

Reputation: 11702

The phone numbers don't go in the headers.

For the headers you will need

Content-Type: "application/x-www-form-urlencoded"

then you will need another header for authorization

Authorization: auth-string

where auth-string is a combination of the string Basic followed by a space followed by a base64 encoding of twilio-account-sid:twilio-auth-token (replace with your Twilio credentials joined by the colon) so the header will look something like

Authorization: "Basic ABCiDEdmFGHmIJKjLMN2OPQwR2S3TUVzABliCDE3FGc1HIo2JKL2MjNwOPcxQRSwTUc1Vzc0XmYhZAB3CDElFGH1Jw=="

The body of the POST request should contain key, value pairs of To, From and Body, something like

"From=" + twilio-phone-number + "&To=" + to-number + "&Body=" + message-body (replace with string values for phone numbers and message).


I hope this helps.

Upvotes: 1

Related Questions