Skip to content

Instantly share code, notes, and snippets.

@inakiabt
Forked from stevebowman/AWSLambdaSimpleSMS.js
Last active October 30, 2017 20:21
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save inakiabt/569c974b59a6cb5736a6 to your computer and use it in GitHub Desktop.
Save inakiabt/569c974b59a6cb5736a6 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:', 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, event.body,
function (error, response) { context.done(error, response); });
};
// 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);
var r = JSON.parse(responseString);
if (!r.sid) {
completedCallback(JSON.stringify(r));
} else {
completedCallback(null, r);
}
});
});
// Handler for HTTP request errors.
req.on('error', function (e) {
console.error('HTTP error: ' + e.message);
completedCallback(JSON.stringify(e));
});
// 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();
}
function getTwilioClient() {
return {
sendSms: function(data, callback) {
var url = 'YOUR_AWS_API_GATEWAY_ENPOINT';
Parse.Cloud.httpRequest({
method: 'POST',
url: url,
body: data,
headers: {
"Content-Type": "application/json",
"x-api-key": 'YOUR_AWS_API_GATEWAY_API_KEY'
},
success: function(res){
var json = JSON.parse(res.text);
if (json.errorMessage) {
callback(JSON.parse(json.errorMessage));
} else {
callback(null, json);
}
},
error: function(res){
console.log('ERROR RESPONSE: ' + JSON.stringify(res))
callback({
status: -1,
data: res.text
});
}
});
}
};
}
var client = getTwilioClient();
client.sendSms({
to: to,
body: body
},
function(error, responseData){
// handle response
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment