Store your Wedgies API key in an environment variable and reference in a global variable.
var WEDGIES_API_KEY = process.env.WEDGIES_API_KEY;
This is the express route to handle the incoming Twilio SMS
app.post('/', function(req, res, next) {
This function is defined below, and returns a Wedgies Poll from the Wedgies API or an error object that can be passed to the Express function next.
getWedgiePoll(function(error, poll) {
if (error) {
return next(error);
}
Make sure your Twilio credentials are stored in environment variables.
var client = new twilio.RestClient(process.env.TWILIO_ACCOUNT_SID,
process.env.TWILIO_AUTH_TOKEN);
Prepare the MMS message with a to, body and from fields.
// Now, get the parameters POSTed from our form:
var twilioMessage = {
to: req.body.From,
body: poll.text + " " + poll.urls.page,
from: process.env.TWILIO_NUMBER
};
If the Wedgies poll has an image, make it an MMS!
if (poll.images && poll.images.questionImage) {
twilioMessage.mediaUrl = poll.images.questionImage.url;
}
Send the MMS using Twilio's awesome NodeJS client library
// Now let's send the message! This is going back to Twilio, not to your user
client.sendMessage(twilioMessage, function(error, messageData) {
if (error) {
// Remember, errors are not strings
var err = new Error(error);
err.status = 500;
return next(err);
} else {
res.status = 201;
res.send('Message sent! SID: ' + messageData.sid);
}
});
});
});
This is the function that hits the Wedgies API and returns a poll
function getWedgiePoll(callback) {
Here is actual API call using Request
var requestOptions = {
url: "https://api.wedgies.com/question?limit=1",
headers: {
"wedgies-api-key": WEDGIES_API_KEY
},
json: true
};
request.get(requestOptions, function(error, response, body) {
This is a pet peeve of mine. Use objects for errors, not strings. Here we handle the case where the request flat out fails. This could be due to a bad URL or similar.
if (error) {
// An error is not a string, let's use an error object
var err = new Error(error);
err.status = 500;
return callback(err);
}
Here we handle the case where the Wedgies API call is successful, but the response code is something other than 200
if (response.statusCode != 200) {
var err = new Error("Not 200, Not OKAY");
err.status = response.statusCode;
return callback(err);
}
Finally, everything looks good, return the poll.
return callback(null, body);
});
}