Javascript Facebook Messenger API:设置webhook时遇到问题

Javascript Facebook Messenger API:设置webhook时遇到问题,javascript,php,facebook,webhooks,facebook-messenger,Javascript,Php,Facebook,Webhooks,Facebook Messenger,我正在尝试在我的PHP web服务器上为新的Facebook Messenger机器人平台设置一个web挂钩,并收到以下错误: 无法验证URL。响应与挑战不匹配, 预期值='364011207',已收到=' 资源 非常感谢您的帮助。不确定此帮助是否正确,但FB发送的查询参数带有下划线而不是圆点,例如: 集线器校验令牌 集线器模式 集线器挑战赛 附言 抱歉,这对PHP有效,我遇到了一个修复程序。我放弃了js尝试,用以下代码创建了一个新的php文件: <?php $challenge

我正在尝试在我的PHP web服务器上为新的Facebook Messenger机器人平台设置一个web挂钩,并收到以下错误:

无法验证URL。响应与挑战不匹配, 预期值='364011207',已收到=' 资源


非常感谢您的帮助。

不确定此帮助是否正确,但FB发送的查询参数带有下划线而不是圆点,例如:

  • 集线器校验令牌
  • 集线器模式
  • 集线器挑战赛
附言


抱歉,这对PHP有效,我遇到了一个修复程序。我放弃了js尝试,用以下代码创建了一个新的php文件:

<?php

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

if ($verify_token === 'my_token_code') {
echo $challenge;
}
@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');    
   }
}
记下你到底在做什么。但这就是我所做的,它正在发挥作用

我已经使用ngrok服务器进行了测试,因为我没有域名,并且回调URL为


希望这有帮助

该代码是node.js代码,应该在服务器上运行,而不是在HTML中的
标记中运行

下面是使用node.js设置messenger机器人的简单演练:


基本上,您需要确保您有一台支持node.js应用程序的主机,并以此方式运行它。它在HTML中不起作用。

我刚刚通过在回调URL中添加“/webhook”解决了这个问题…

如果您是作为
节点.js
应用程序运行此应用程序的,并且您来自问题中提到的,那么您必须将webhook URL指向
[您的服务器根]/webhook
。请注意以下部分:


谢谢我最终使用php作为解决方案,它可以工作不,它确实使用点;不是下划线。是PHP用下划线代替点。谢谢!为了让FB的示例代码正常工作,我简直疯了。这要容易得多。你做错的是在你的页面上尝试在线使用NodeJS代码。Facebook将在响应正文中查找令牌。在NodeJS中,res.send被用来设置响应主体的内容,但是你的页面已经在这样做了,因为它只是一个普通的HTML页面。即使这样做可以工作,它也不能告诉你应该做什么来让你的Node.js代码工作。。。看看其他答案。@BlueFox和Jamund下面的答案解释了普通HTML页面中JS脚本和NodeJS服务器端脚本之间的区别。如果您没有使用node js,那么上述答案将适用于PHP Web服务器。对于我们来说,关键是:hub.challenge、hub.verify_token而不是hub_challenge、hub_verify_token。“我在服务器上创建了一个.html文件”——这就是问题所在。为什么您认为错误消息说它收到了
,但预期会有完全不同的结果?挑战值是URL应该返回的唯一内容;不是HTML文档…您看到问题中的代码位于
标记中,并且没有在服务器上运行。这在IIS上有效吗?我想在asp.net上托管一个webhook。mvcI也尝试过类似的事情。我设置了一个ngrok服务器并提供了回调URL。“webhook”文档只是一个文本文件,上面有“webhook”代码。然而,我仍然得到与上面Shane相同的错误,返回的只是代码的实际文本内容,而不是质询令牌。有什么想法吗?@MEric我也有类似的问题,但现在已经解决了。请做一件事检查您的req.query对象是否包含“hub.challenge”。我使用的是restify,所以我添加了queryparser中间件,它可以正常工作。
// 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);
});