Last active
June 16, 2017 21:52
-
-
Save jonchurch/0032944c2385b62b4f04ea3f8d6d4ee9 to your computer and use it in GitHub Desktop.
Use custom express webserver with Botkit
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var Botkit = require('botkit'); | |
// Create the Botkit controller, which controls all instances of the bot. | |
var controller = Botkit.facebookbot({ | |
debug: true, | |
verify_token: process.env.verify_token, | |
access_token: process.env.page_token, | |
}); | |
// Set up an Express-powered webserver to expose oauth and webhook endpoints | |
// We are passing the controller object into our express server module | |
// so we can extend it and process incoming message payloads | |
var webserver = require('./express_webserver.js')(controller); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module.exports = function(webserver, controller) { | |
// Receive post data from fb, this will be the messages you receive | |
webserver.post('/facebook/receive', function(req, res) { | |
// respond to FB that the webhook has been received. | |
res.status(200); | |
res.send('ok'); | |
var bot = controller.spawn({}); | |
// Now, pass the webhook into be processed | |
controller.handleWebhookPayload(req, res, bot); | |
}); | |
// Perform the FB webhook verification handshake with your verify token | |
webserver.get('/facebook/receive', function(req, res) { | |
if (req.query['hub.mode'] == 'subscribe') { | |
if (req.query['hub.verify_token'] == controller.config.verify_token) { | |
res.send(req.query['hub.challenge']); | |
} else { | |
res.send('OK'); | |
} | |
} | |
}); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var express = require('express'); | |
var bodyParser = require('body-parser'); | |
var querystring = require('querystring'); | |
module.exports = function(controller, bot) { | |
var webserver = express(); | |
webserver.use(bodyParser.json()); | |
webserver.use(bodyParser.urlencoded({ extended: true })); | |
webserver.use(express.static('public')); | |
// You can pass in whatever hostname you want as the second argument | |
// of the express listen function, it defaults to 0.0.0.0 aka localhost | |
webserver.listen(process.env.PORT || 3000, null, function() { | |
console.log('Express webserver configured and listening at ', | |
process.env.HOSTNAME || 'http://localhost/' + ':' + process.env.PORT || 3000); | |
}); | |
// Register our routes, in this case we're just using one route | |
// for all incoming requests from FB | |
// We are passing in the webserver we created, and the botkit | |
// controller into our routes file so we can extend both of them | |
require('./webhook_routes.js')(webserver, controller) | |
controller.webserver = webserver; | |
return webserver; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment