diff --git a/.gitignore b/.gitignore index db872f6..26519fe 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ node_modules npm-debug.log .env +.idea \ No newline at end of file diff --git a/config.js b/config.js index a38d135..8c65e77 100644 --- a/config.js +++ b/config.js @@ -8,7 +8,7 @@ if (process.env.NODE_ENV !== 'test') { } // HTTP Port to run our web application -cfg.port = process.env.PORT || 3000; +cfg.port = process.env.PORT || 3003; // Your Twilio account SID and auth token, both found at: // https://www.twilio.com/user/account diff --git a/index.js b/index.js index ee83d69..187421f 100644 --- a/index.js +++ b/index.js @@ -5,8 +5,29 @@ const bodyParser = require('body-parser'); const router = require('./src/router'); +const config = require('./config'); + // Create Express webapp const app = express(); + +// Add headers +app.all('/*', function(req, res, next) { + // CORS headers + res.header('Access-Control-Allow-Origin', '*'); + res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS'); + res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With, Access-Control-Allow-Origin'); + res.header("Access-Control-Max-Age", "86400"); // 24 hours + + // intercept OPTIONS method + if ('OPTIONS' === req.method) { + res.send(200); + } + else { + next(); + } +}); + + app.use(express.static(path.join(__dirname, 'public'))); app.use(bodyParser.urlencoded({extended: false})); @@ -14,8 +35,7 @@ app.use(router); // Create http server and run it const server = http.createServer(app); -const port = process.env.PORT || 3000; -server.listen(port, function() { - console.log('Express server running on *:' + port); +server.listen(config.port, function() { + console.log('Express server running on *:' + config.port); }); diff --git a/src/handler.js b/src/handler.js index 0c2c083..fdb4d60 100644 --- a/src/handler.js +++ b/src/handler.js @@ -4,8 +4,9 @@ const VoiceResponse = require('twilio').twiml.VoiceResponse; const nameGenerator = require('../name_generator'); const config = require('../config'); +const identity = nameGenerator(); + exports.tokenGenerator = function tokenGenerator() { - const identity = nameGenerator(); const capability = new ClientCapability({ accountSid: config.accountSid, authToken: config.authToken, @@ -44,6 +45,15 @@ exports.voiceResponse = function voiceResponse(toNumber) { return twiml.toString(); }; +exports.voiceIncoming = function voiceResponse() { + // Create a TwiML voice response + const response = new VoiceResponse(); + const dial = response.dial(); + dial.client(identity); + console.log(response.toString()) + return response.toString(); +}; + /** * Checks if the given value is valid as phone number * @param {Number|String} number diff --git a/src/router.js b/src/router.js index 154955a..0e6ec9e 100644 --- a/src/router.js +++ b/src/router.js @@ -1,6 +1,6 @@ const Router = require('express').Router; -const {tokenGenerator, voiceResponse} = require('./handler'); +const {tokenGenerator, voiceResponse, voiceIncoming} = require('./handler'); const router = new Router(); @@ -17,4 +17,9 @@ router.post('/voice', (req, res) => { res.send(voiceResponse(req.body.To)); }); +router.post('/incoming', (req, res) => { + res.set('Content-Type', 'text/xml'); + res.send(voiceIncoming()); +}); + module.exports = router;