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