Set Up Your Node.js Environment
Install Necessary Packages
Create an Express Server
- Set up a basic Express application with a route to handle webhook events. Create a file named `app.js` and add the following code:
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const PORT = process.env.PORT || 3000;
// Body parser middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Webhook verification
app.get('/webhook', (req, res) => {
const VERIFY_TOKEN = 'your_verify_token';
const mode = req.query['hub.mode'];
const token = req.query['hub.verify_token'];
const challenge = req.query['hub.challenge'];
if (mode && token === VERIFY_TOKEN) {
if (mode === 'subscribe') {
console.log('WEBHOOK_VERIFIED');
res.status(200).send(challenge);
}
} else {
res.sendStatus(403);
}
});
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Replace 'your_verify_token'
with your own verify token.
Set Up the Endpoint to Receive Events
- Implement a POST route to handle incoming updates from Facebook:
// Receiving webhook events
app.post('/webhook', (req, res) => {
const body = req.body;
if (body.object === 'page') {
body.entry.forEach(entry => {
const webhookEvent = entry.messaging[0];
console.log(webhookEvent);
});
res.status(200).send('EVENT_RECEIVED');
} else {
res.sendStatus(404);
}
});
This route listens for POST requests from Facebook and logs the events to the console.
Tunnel Your Local Server
Configure Webhook in Facebook Developer Dashboard
- Go to your Facebook App Dashboard, navigate to the "Webhooks" section, and set the callback URL to the URL provided by `ngrok` along with `/webhook` appended to it.
- Enter the verify token you defined in your code. Set the fields you want to subscribe to for event updates (e.g., messages, likes).
Test Your Webhook
- Once configured, you can test incoming messages and other events to ensure your webhook is receiving them correctly. Send a message to your page and check your server's console to confirm the event was logged.
- Make sure to deploy your server to a cloud service like Heroku or AWS to keep your webhook persistent and accessible publically.