Skip to content

Instantly share code, notes, and snippets.

@stevebowman
Last active June 22, 2023 12:09
Show Gist options
  • Save stevebowman/7cff9dd80b227c899728 to your computer and use it in GitHub Desktop.
Save stevebowman/7cff9dd80b227c899728 to your computer and use it in GitHub Desktop.
AWS Lambda Function to send an SMS message via the Twilio API
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();
}
@roydondsouza
Copy link

@jwswj
Copy link

jwswj commented Sep 17, 2017

This was really useful. Thanks!

@UlrichMD
Copy link

Thanks!! Very useful.
For those who need it, querystring is now deprecated. Use this instead
var messageString = new URLSearchParams(message).toString()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment