Super lightweight Node.js / Express application that serves webhook for Facebook Messenger API.
Fork or clone the repo.
Turn on appropriate background music on. Uplink OST is highly suggested.
Follow the guide at Facebook Messenger Platform - Getting Started. You should have a Facebook page and App set up before continuing.
Set up web access to your appication. HTTPS is prefered. If you don't have a personal preference, Heroku is well suited for quick deployment, development and experimentation.
Enter your app https address followed by /webhook
in
Subscribe to messages and messaging_postbacks at least. Then whatever you set as Verify Token change it accordingly in server.js
//server.js
app.get('/webhook', function (req, res) {
if (req.query['hub.verify_token'] === 'my_voice_is_my_password_verify_me') {
...
Commit, push... or whatever workflow you use to deploy. Click Verify and Save, it should proceed without error.
Select your page and obtain Page Access Token
Then copy it into:
//fbMessengerBot/config/appToken.js
module.exports = '<ACCESS TOKEN HERE>';
Save, commit, deploy. You should be up and running. Open up your Facebook page, click messages and start conversing with the bot...
Whenever you write a message to your bot in Facebook Messenger, a POST request is made to https://yourappurl.com/webhook
. App initially receives them in /fbMessengerBot/index.js
Then based on message type they are passed onto different handlers
/fbMessengerBot/handleMessages.js
- generic messages typed by users/fbMessengerBot/handlePostbacks.js
- postbacks whenever user clicks a button with postback payload defined/fbMessengerBot/handleOptins.js
- user optins
Bot has few initial commands to play with
@bot debug on
Turns on debug mode on, should echo back every message you write with full JSON message data.
@bot debug off
Turns it off...
@bot reply with image
@bot reply with button template
@bot reply with generic template
@bot reply with receipt template
Facebook API expects JSON messages in format described in Send API reference.
For convenience you can use fbMessage class in /fbMessengerBot/fbMessage/fbMessage.js
Sample messages are assembled in /fbMessengerBot/handleBotCommands.js
Example:
var buttonTemplateReply = new fbMessage
.ButtonTemplate("Which button would you like to press today?")
.addButton({
type: "web_url",
title: "Visit www.nu.nl",
url: "http://www.nu.nl"
})
.addButton({
type: "postback",
title: "Postback to bot",
payload: "POSTBACK_SAMPLE_PAYLOAD"
})
.compose();
don't forget to add .compose() at the end, because that will return the final JSON and assign to the variable.
Available message types:
- fbMessage.PlainText(text)
- fbMessage.Image(imageUrl)
- fbMessage.ButtonTemplate(title)
- fbMessage.GenericTemplate
- fbMessage.ReceiptTemplate (not implemented yet...)