Merge branch 'soondobu-master'

This commit is contained in:
Ian Webster 2014-10-09 00:15:19 -07:00
commit 5504c7388f
11 changed files with 124 additions and 35 deletions

View File

@ -1 +1 @@
web: node app.js
web: node server/app.js

View File

@ -22,6 +22,38 @@ Sample failure:
```
{"success":false,"message":"Exceeded quota for this phone number."}
```
### Usage as a module
Though this repository contains an express server so you may run your own
instance of the web app, you may also use it to send text messages in your
project. The only requirement is unix/posix `sendmail`, used to forward the message.
For example, to send a text using the default settings:
```
var text = require('textbelt');
text.send('9491234567', 'A sample text message!', undefined, function(err) {
if (err) {
console.log(err);
}
});
```
You can also supply a region (valid choices are `us`, `intl`, or `canada`)
```
var text = require('textbelt');
// Canada
text.send('9491234567', 'A sample text message!', 'canada', function(err) {
...
});
// International
text.send('1119491234567', 'Bonjour!', 'intl', function(err) {
...
});
```
### Canadian and International endpoints

4
index.js Normal file
View File

@ -0,0 +1,4 @@
var textbelt = require('./lib/text');
module.exports = textbelt;

77
lib/text.js Normal file
View File

@ -0,0 +1,77 @@
var providers = require('./providers.js')
, _ = require('underscore')
, exec = require('child_process').exec
, spawn = require('child_process').spawn;
var debugEnabled = false;
//----------------------------------------------------------------
/*
General purpose logging function, gated by a configurable
value.
*/
function output() {
if (debugEnabled === true) {
return console.log.apply(this, arguments);
}
}
//----------------------------------------------------------------
/* Enable verbosity for the text module.
If enabled, logging functions will
print to stdout.
Params:
enable - bool
*/
function debug(enable) {
debugEnabled = enable;
return debugEnabled;
}
//----------------------------------------------------------------
/* Sends a text message
Will perform a region lookup (for providers), then
send a message to each.
Params:
phone - phone number to text
message - message to send
region - region to use (defaults to US)
cb - function(err), provides err messages
*/
function sendText(phone, message, region, cb) {
output('txting phone', phone, ':', message);
region = region || 'us';
var providers_list = providers[region];
var done = _.after(providers_list.length, function() {
cb(false);
});
_.each(providers_list, function(provider) {
var email = provider.replace('%s', phone);
email = 'Subject: Text\r\n\r\n' + email;
var child = spawn('sendmail', ['-f', 'txt2@textbelt.com', email]);
child.stdout.on('data', output);
child.stderr.on('data', output);
child.on('error', function(data) {
output('sendmail failed', {email: email, data: data});
done();
});
child.on('exit', function(code, signal) {
done();
});
child.stdin.write(message + '\n.');
child.stdin.end();
});
}
module.exports = {
send: sendText, // Send a text message
debug: debug // Enable or disable debug output
};

View File

@ -1,3 +1,3 @@
#!/bin/sh
nohup hotnode app.js &
nohup hotnode server/app.js &

View File

@ -6,20 +6,24 @@ var express = require('express')
, exec = require('child_process').exec
, spawn = require('child_process').spawn
, Stream = require('stream')
, providers = require('./providers.js')
, redis = require('redis-url').connect()
, text = require('../lib/text');
// Enable log messages when sending texts.
text.debug(true);
// Optional modules
var banned_numbers;
try {
banned_numbers = require('./banned_numbers.js')
banned_numbers = require('./banned_numbers.js');
} catch(e) {
banned_numbers = {BLACKLIST: {}};
}
var mpq;
var mpq
, mixpanel_config;
try {
mixpanel_config = require('./mixpanel_config.js')
mixpanel_config = require('./mixpanel_config.js');
mpq = new mixpanel.Client(mixpanel_config.api_key);
} catch(e) {
mpq = {track: function() {}};
@ -104,7 +108,7 @@ function textRequestHandler(req, res, number, region, key) {
response_obj = response_obj || {};
// Time to actually send the message
sendText(number, message, region, function(err) {
text.send(number, message, region, function(err) {
if (err) {
mpq.track('sendText failed', tracking_details);
res.send(_.extend(response_obj,
@ -195,34 +199,6 @@ function stripPhone(phone) {
return (phone+'').replace(/\D/g, '');
}
function sendText(phone, message, region, cb) {
console.log('txting phone', phone, ':', message);
region = region || 'us';
var providers_list = providers[region];
var done = _.after(providers_list.length, function() {
cb(false);
});
_.each(providers_list, function(provider) {
var email = provider.replace('%s', phone);
email = 'Subject: Text\r\n\r\n' + email;
var child = spawn('sendmail', ['-f', 'txt2@textbelt.com', email]);
child.stdout.on('data', console.log);
child.stderr.on('data', console.log);
child.on('error', function(data) {
mpq.track('sendmail failed', {email: email, data: data});
done();
});
child.on('exit', function(code, signal) {
done();
});
child.stdin.write(message + '\n.');
child.stdin.end();
});
}
// Start server
var port = process.env.PORT || 9090;