Shane
Shane

Reputation: 701

Facebook Messenger API: Trouble setting up a webhook

I am trying to set up a web hook for the new Facebook Messenger bot platform on my PHP webserver and am receiving this error:

The URL couldn't be validated. Response does not match challenge, expected value = '364011207', received='

Resources

https://developers.facebook.com/docs/messenger-platform/quickstart

https://developers.facebook.com/docs/messenger-platform/webhook-reference#common_format

Any help is greatly appreciated.

Upvotes: 16

Views: 27122

Answers (6)

Cedric Ipkiss
Cedric Ipkiss

Reputation: 6337

If you're running this as a Node.js application, and you're coming from the The Facebook Quickstart Guide mentioned in the question, you'll have to point the webhook URL to [your-server-root]/webhook. Notice this part of the tutorial:

// Adds support for GET requests to our webhook
app.get('/webhook', (req, res) => {
    ...
    // Responds with the challenge token from the request
    res.status(200).send(challenge);
});

Upvotes: 5

Shane
Shane

Reputation: 701

I came across a fix. I scrapped my js attempt and created a new php file with the following code:

<?php

$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];

if ($verify_token === 'my_token_code') {
echo $challenge;
}

I got this code from the first 10 minutes of this video: https://www.facebook.com/marketingdevelopers/videos/883648801749520/

Upvotes: 31

Zernel
Zernel

Reputation: 1547

I just resolved this problem by adding '/webhook' in the callback URL...

Upvotes: 4

Jamund Ferguson
Jamund Ferguson

Reputation: 17014

That code is node.js code and should be run on the server not in a <script> tag in your HTML.

Here's a simple walk through of setting up the messenger bot with node.js: https://github.com/voronianski/simon-le-bottle

Essentially you need to make sure you have a host that supports node.js applications and run it as such. It will not work inside of HTML.

Upvotes: 6

cloudnat
cloudnat

Reputation: 71

@shane

webhook: function(req, res) {

   if (req.query['hub.verify_token'] === 'tokentoken') {
      res.send(req.query['hub.challenge']);
   } else {
      res.send('Error, wrong validation token');    
   }
}

Note sure what exactly you're doing. but this is what I did and it's working.

I've tested using ngrok server as I don't have a domain name and the callback URL is https://werwrwetwtw.ngrok.io/webhook

Hope this helps!

Upvotes: 3

Stan Kolev
Stan Kolev

Reputation: 41

Not sure if this help, but the query parameters that FB send are with underscore not dot e.g. :

  • hub_verify_token
  • hub_mode
  • hub_challenge

P.S.

Sorry, this is valid for PHP

Upvotes: 4

Related Questions