Search code examples
facebookfacebook-javascript-sdkfacebook-ads-api

Facebook Ad API webhook not called when a form is submitted but works when tested from the webhook page of the Page


I have implemented the webhook for Facebook Leads api

// index.js
'use strict';

// Imports dependencies and set up http server
const
    express = require('express'),
    bodyParser = require('body-parser'),
    app = express().use(bodyParser.json()); // creates express http server

// Sets server port and logs message on success
app.listen(process.env.PORT || 3000, () => console.log('webhook is listening'));

// Creates the endpoint for our webhook 
app.post('/webhook', (req, res) => {

    let body = req.body;

    // Checks this is an event from a page subscription
    if (body.object === 'page') {

        // Iterates over each entry - there may be multiple if batched
        body.entry.forEach(function (entry) {
            console.log(JSON.stringify(entry));
            // Gets the message. entry.messaging is an array, but 
            // will only ever contain one message, so we get index 0
            let webhook_event = entry.messaging[0];
            console.log(webhook_event);
        });

        // Returns a '200 OK' response to all requests
        res.status(200).send('EVENT_RECEIVED');
    } else {
        // Returns a '404 Not Found' if event is not from a page subscription
        res.sendStatus(404);
    }

});

// Adds support for GET requests to our webhook
app.get('/webhook', (req, res) => {

    // Your verify token. Should be a random string.
    let VERIFY_TOKEN = "deb123";

    // Parse the query params
    let mode = req.query['hub.mode'];
    let token = req.query['hub.verify_token'];
    let challenge = req.query['hub.challenge'];

    // Checks if a token and mode is in the query string of the request
    if (mode && token) {

        // Checks the mode and token sent is correct
        if (mode === 'subscribe' && token === VERIFY_TOKEN) {

            // Responds with the challenge token from the request
            console.log('WEBHOOK_VERIFIED');
            res.status(200).send(challenge);

        } else {
            // Responds with '403 Forbidden' if verify tokens do not match
            res.sendStatus(403);
        }
    }
});

This code is taken directly from the Facebook Webhook Javascript Demo...

It works fine when i try to subscribe and test from https://developers.facebook.com/apps/{app_id}/webhooks/

but when i fill the form for testing it doesn't work.


Solution

  • In your app permission, go to the webhook tab and then process the test webhook and see if it is recived to your code or not. If that is recived then it is ok. otherwise you have not linked it properly to the webhook.

    For your referance, I am sharing a link and have a deep look on it. https://developers.facebook.com/docs/messenger-platform/webhooks