所以我试图为新的Facebook Messenger API设置机器人。
我跟随the quickstart。
我设置了webhook ok,并在我的webhooks中看到它,
我打电话给:
https://graph.facebook.com/v2.6/me/subscribed_apps?access_token=%3Ctoken%3E
它并没有抛出任何错误,
但是当我进入我生成访问令牌的页面并发送消息时,它不会调用我的webhook。 我检查了httpaccess,它没有调用它。
有什么方法可以调试这个或任何想法吗?
另外,我仍然困惑的一件事是如何支持从一个Facebook应用程序管理多个页面?任何人都知道答案,或者您是否需要创建一个新的应用程序并获得每个页面的权限?
答案 0 :(得分:42)
我最近使用过新的聊天机器人API,并且有很多可能出错的地方。所以,这里有一些想法。
9953593875
。重要强>
确保您发送邮件的Facebook用户列为管理员或开发者或测试人员您的应用角色(https://developers.facebook.com/apps/YOUR_APP_ID/roles/)。除非您的应用获得批准并公开发布,否则来自其他用户的邮件将无效。
您是否收到过facebook api的回电?或者只是消息?查看您的Web服务器的日志,并检查您是否在webhook上获得任何点击。另请查看错误日志。
尝试手动点击您的webhook,看看它是否响应。您可以使用 curl生成手动请求。这是来自的要求 Facebook看起来像:
<强>命令:强>
{"success" : "true"}
答案 1 :(得分:8)
所以我的问题是我在尝试订阅时调用GET而不是POST
https://graph.facebook.com/v2.6/:pageid/subscribed_apps?access_token=:token
GET将返回当前订阅(空{[]}),POST返回{&#34;成功&#34; :&#34; true&#34;}
我遇到的其他一些问题是,
我仍然困惑的一件事是如何支持从一个Facebook应用程序管理多个页面?任何人都知道答案,或者您是否需要创建一个新的应用程序并获得每个页面的权限?
答案 2 :(得分:5)
可以阻止某些响应发送到您的webhook的另一件事是在队列中阻止消息类型。
如果某个特定的消息类型已发送到您的webhook但未在20秒内收到200响应,它将继续尝试再次向您发送该消息数小时。
在第一个消息类型被确认之前,facebook messenger将不再向您发送该消息类型。它基本上将它们放入队列中。
与此同时,其他消息类型将继续正常发送。
当我在代码中不小心引入了一个处理标准消息的未声明变量时,发生了这种情况。这意味着回发邮件都运行良好,但快速回复和普通邮件永远不会发送到我的webhook。一旦你修正了错误,它们就会立刻堆积起来。
正如其他人所提到的,使用POSTMAN之类的服务向你的webhook发送消息是找到这种错误的好方法,否则,messenger就会无声地失败。
答案 3 :(得分:4)
如果您使用框架,那么从CSRF验证中排除您的bot溃败可能会有所帮助。这对我有帮助(Laravel 5.4,app / Http / Middleware / VerifyCsrfToken.php):
protected $except = [
'/your_bot_route'
];
答案 4 :(得分:0)
几天前,当我在机器人上工作时,我也遇到了同样的问题。按照这个gist修改了下面的代码,一切正常。
public function index()
{
$challenge = $_REQUEST['hub_challenge'];
$verify_token = $_REQUEST['hub_verify_token'];
// Set this Verify Token Value on your Facebook App
if ($verify_token === 'MyVerifyToken!') {
echo $challenge;
}
$input = json_decode(file_get_contents('php://input'), true);
// Get the Senders Graph ID
$sender = $input['entry'][0]['messaging'][0]['sender']['id'];
// Get the returned message
$message = $input['entry'][0]['messaging'][0]['message']['text'];
//$senderName = $input['entry'][0]['messaging'][0]['sender']['name'];
$reply="Sorry, I don't understand you";
switch($message)
{
case 'hello':
$reply = "Hello, Greetings from MyApp.";
break;
case 'pricing':
$reply = "Sample reply for pricing";
break;
case 'contact':
$reply = "Sample reply for contact query";
break;
case 'webinar':
$reply = "Sample reply for webinar";
break;
case 'support':
$reply = "sample reply for support";
break;
default:
$reply="Sorry, I don't understand you";
}
//API Url and Access Token, generate this token value on your Facebook App Page
$url = 'https://graph.facebook.com/v2.6/me/messages?access_token=MYACCESSTOKEN';
//Initiate cURL.
$ch = curl_init($url);
//The JSON data.
$jsonData = '{
"recipient":{
"id":"' . $sender . '"
},
"message":{
"text":"'.$reply.'"
}
}';
//Tell cURL that we want to send a POST request.
curl_setopt($ch, CURLOPT_POST, 1);
//Attach our encoded JSON string to the POST fields.
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
//Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
//Execute the request but first check if the message is not empty.
if (!empty($input['entry'][0]['messaging'][0]['message'])) {
$result = curl_exec($ch);
}
}
注意:确保应用程序页面中的用户角色从Web挂钩获取响应。我已经设置了Administrator和Tester用户。只有能够得到答复。其他用户将在发布后获得。此外,相应地更改验证令牌和页面标记。
在发布应用程序时会询问有关此机器人将要使用的业务数量的选项。但我不知道如何使用它。仍然在搜索。
答案 5 :(得分:0)
如果仍然无法解决问题,请尝试检查并更新您的隐私权政策链接。
我更新了有关隐私权政策的担忧链接,即使Webhoob已通过验证,Facebook也显示404错误...
答案 6 :(得分:-1)
您可以在Messenger设置的“添加或删除页面”标签下,将多个页面链接到您的应用程序