Facebook Messenger Bot Webhook麻烦

时间:2016-04-20 19:49:46

标签: php facebook facebook-sdk-4.0 facebook-messenger chatbot

我正在尝试让FB Messenger Bot API正常工作。我目前正在尝试订阅webhook。我目前有一个以下形式的脚本:

#!/usr/bin/php

<?php

$challenge = $_REQUEST['hub_challenge'];
echo $challenge;  # HERE!
$verify_token = $_REQUEST['hub_verify_token'];

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

?>

但是,当我尝试“验证并保存”回调网址时,我收到以下格式的错误:

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

即我的脚本发送一个空字符串。但是,如果我更改标有“HERE!”的行上面的“echo'cat'”,错误信息是相同的,除了“received ='cat'”,如预期的那样。因此,我的脚本正在执行,并且正在尝试将一些内容发送回FB,但由于某种原因,$ challenge变量为空。为什么会出现这种情况?

谢谢!

2 个答案:

答案 0 :(得分:1)

 if($_GET['hub_verify_token'] === "validation_token"){
     echo($_GET["hub_challenge"]);
 } else {
     echo("error");
 }

答案 1 :(得分:0)

您的回复中可能还有额外的字符串,因为您在打印挑战后没有退出。在浏览器中尝试您的脚本并检查html以查看是否还有其他内容。

使用以下代码,因为您需要从工作webhook调用中分离验证码。另外,验证令牌不是您从Facebook创建的,它是您自己的关键字

/* validate verify token needed for setting up web hook */ 
if (isset($_GET['hub_verify_token'])) { 
   if ($_GET['hub_verify_token'] === 'YOUR_SECRET_TOKEN') {
       echo $_GET['hub_challenge'];
       return;
   } else {
       echo 'Invalid Verify Token';
       return;
   }
}

因此,在这种情况下,验证令牌为YOUR_SECRET_TOKEN,现在当您设置Web挂钩时,请在验证令牌中键入YOUR_SECRET_TOKEN。

我最近写过a step by step guide with screen shots here