Merge branch 'soondobu-master'
This commit is contained in:
commit
5504c7388f
32
README.md
32
README.md
@ -22,6 +22,38 @@ Sample failure:
|
|||||||
|
|
||||||
```
|
```
|
||||||
{"success":false,"message":"Exceeded quota for this phone number."}
|
{"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
|
### Canadian and International endpoints
|
||||||
|
4
index.js
Normal file
4
index.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
|
||||||
|
var textbelt = require('./lib/text');
|
||||||
|
|
||||||
|
module.exports = textbelt;
|
77
lib/text.js
Normal file
77
lib/text.js
Normal 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
|
||||||
|
};
|
@ -1,3 +1,3 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
nohup hotnode app.js &
|
nohup hotnode server/app.js &
|
||||||
|
@ -6,20 +6,24 @@ var express = require('express')
|
|||||||
, exec = require('child_process').exec
|
, exec = require('child_process').exec
|
||||||
, spawn = require('child_process').spawn
|
, spawn = require('child_process').spawn
|
||||||
, Stream = require('stream')
|
, Stream = require('stream')
|
||||||
, providers = require('./providers.js')
|
|
||||||
, redis = require('redis-url').connect()
|
, redis = require('redis-url').connect()
|
||||||
|
, text = require('../lib/text');
|
||||||
|
|
||||||
|
// Enable log messages when sending texts.
|
||||||
|
text.debug(true);
|
||||||
|
|
||||||
// Optional modules
|
// Optional modules
|
||||||
var banned_numbers;
|
var banned_numbers;
|
||||||
try {
|
try {
|
||||||
banned_numbers = require('./banned_numbers.js')
|
banned_numbers = require('./banned_numbers.js');
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
banned_numbers = {BLACKLIST: {}};
|
banned_numbers = {BLACKLIST: {}};
|
||||||
}
|
}
|
||||||
|
|
||||||
var mpq;
|
var mpq
|
||||||
|
, mixpanel_config;
|
||||||
try {
|
try {
|
||||||
mixpanel_config = require('./mixpanel_config.js')
|
mixpanel_config = require('./mixpanel_config.js');
|
||||||
mpq = new mixpanel.Client(mixpanel_config.api_key);
|
mpq = new mixpanel.Client(mixpanel_config.api_key);
|
||||||
} catch(e) {
|
} catch(e) {
|
||||||
mpq = {track: function() {}};
|
mpq = {track: function() {}};
|
||||||
@ -104,7 +108,7 @@ function textRequestHandler(req, res, number, region, key) {
|
|||||||
response_obj = response_obj || {};
|
response_obj = response_obj || {};
|
||||||
|
|
||||||
// Time to actually send the message
|
// Time to actually send the message
|
||||||
sendText(number, message, region, function(err) {
|
text.send(number, message, region, function(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
mpq.track('sendText failed', tracking_details);
|
mpq.track('sendText failed', tracking_details);
|
||||||
res.send(_.extend(response_obj,
|
res.send(_.extend(response_obj,
|
||||||
@ -195,34 +199,6 @@ function stripPhone(phone) {
|
|||||||
return (phone+'').replace(/\D/g, '');
|
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
|
// Start server
|
||||||
var port = process.env.PORT || 9090;
|
var port = process.env.PORT || 9090;
|
Loading…
Reference in New Issue
Block a user