-
-
Save stevebowman/7cff9dd80b227c899728 to your computer and use it in GitHub Desktop.
console.log('Loading event'); | |
// Twilio Credentials | |
var accountSid = ''; | |
var authToken = ''; | |
var fromNumber = ''; | |
var https = require('https'); | |
var queryString = require('querystring'); | |
// Lambda function: | |
exports.handler = function (event, context) { | |
console.log('Running event'); | |
// Send an SMS message to the number provided in the event data. | |
// End the lambda function when the send function completes. | |
SendSMS(event.to, 'Hello from Lambda Functions!', | |
function (status) { context.done(null, status); }); | |
}; | |
// Sends an SMS message using the Twilio API | |
// to: Phone number to send to | |
// body: Message body | |
// completedCallback(status) : Callback with status message when the function completes. | |
function SendSMS(to, body, completedCallback) { | |
// The SMS message to send | |
var message = { | |
To: to, | |
From: fromNumber, | |
Body: body | |
}; | |
var messageString = queryString.stringify(message); | |
// Options and headers for the HTTP request | |
var options = { | |
host: 'api.twilio.com', | |
port: 443, | |
path: '/2010-04-01/Accounts/' + accountSid + '/Messages.json', | |
method: 'POST', | |
headers: { | |
'Content-Type': 'application/x-www-form-urlencoded', | |
'Content-Length': Buffer.byteLength(messageString), | |
'Authorization': 'Basic ' + new Buffer(accountSid + ':' + authToken).toString('base64') | |
} | |
}; | |
// Setup the HTTP request | |
var req = https.request(options, function (res) { | |
res.setEncoding('utf-8'); | |
// Collect response data as it comes back. | |
var responseString = ''; | |
res.on('data', function (data) { | |
responseString += data; | |
}); | |
// Log the responce received from Twilio. | |
// Or could use JSON.parse(responseString) here to get at individual properties. | |
res.on('end', function () { | |
console.log('Twilio Response: ' + responseString); | |
completedCallback('API request sent successfully.'); | |
}); | |
}); | |
// Handler for HTTP request errors. | |
req.on('error', function (e) { | |
console.error('HTTP error: ' + e.message); | |
completedCallback('API request completed with error(s).'); | |
}); | |
// Send the HTTP request to the Twilio API. | |
// Log the message we are sending to Twilio. | |
console.log('Twilio API call: ' + messageString); | |
req.write(messageString); | |
req.end(); | |
} |
Thank you, this saved me lot of time.
Great
I tried this code within an Amazon Echo Alexa Skill and it didn't work. Obviously you have to be able to make external API calls from AWS. I must be missing a critical concept. I can't post on the Amazon discussion forums because I'm a newbie. Any thoughts by anyone who may read this?
I have tried this code and my message only stays in queued and delivery always fails. can you suggest where i might be doing wrong??
very helpful. thanks
For people having timeout issues. Check if your lambda function is configured for a VPC. If yes, check if the subnet has access to the Internet. http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Internet_Gateway.html
roydondsouza could you please write how to setup a VPC for sending SMS with Twilio?
This was really useful. Thanks!
Thanks!! Very useful.
For those who need it, querystring is now deprecated. Use this instead
var messageString = new URLSearchParams(message).toString()
Thanks for the write up, I was able to use it for my usecase.