Skip to content

Instantly share code, notes, and snippets.

@tjanczuk
Created November 11, 2016 22:00
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tjanczuk/47e7a45de00d7f046be8c96fbc0fe87c to your computer and use it in GitHub Desktop.
Save tjanczuk/47e7a45de00d7f046be8c96fbc0fe87c to your computer and use it in GitHub Desktop.

In order to use this slash webtask, you must configure the following secrets in the webtask editor:

TWILIO_NUMBER - the "from" twilio number
TWILIO_SID, TWILIO_AUTH_TOKEN - your twilio credentials

var numbers = {
skynet: ['+14251234567','+15148836820'],
gustav: ['+13036498063'],
crew2: ['+16102423400', '+16083352365','+5491154760241','+5481161020204','+5491156130402']
};
var twilio = require('twilio');
var async = require('async');
module.exports = function (ctx, cb) {
console.log('NEW REQUEST', ctx.body);
// Parse command: {slack_username} {message_to_send}
var tokens = ctx.body.text.match(/^\s*([^\s+]+)\s+(.+)$/);
if (!tokens) return cb(null, {
response_type: 'in_channel',
text: 'Usage: /wt wakeup {name} {message}\nAllowed {name}s are:\n' + Object.keys(numbers).sort().join('\n')
});
var user = tokens[1];
var message = tokens[2];
if (!numbers[user]) return cb(null, {
response_type: 'in_channel',
text: `Unknown name: ${user}.\nAllowed {name}s are:\n` + Object.keys(numbers).sort().join('\n')
});
cb(null, { text: `Waking up ${user}...`, response_type: 'in_channel'});
// Initialize Twilio client, use keys provided by webtask runtime in context
var client = new twilio.RestClient(ctx.secrets.TWILIO_SID, ctx.secrets.TWILIO_AUTH_TOKEN);
// Send SMS
var response = [];
async.each(numbers[user], (number, cb) => {
client.messages.create({
body: `From ${ctx.body.user_name}: ${message}`,
to: number,
from: ctx.secrets.TWILIO_NUMBER
}, (err, message) => {
response.push(err ? `${number}: ${err.message}` : `${number}: ${message.status || message.message}`);
cb();
});
}, (e) => {
// Confirm back on Slack
require('superagent').post(ctx.body.response_url)
.send({ text: response.join('\n'), response_type: 'in_channel' })
.end();
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment