FB messenger Bot 没有收到回发负载

Posted

技术标签:

【中文标题】FB messenger Bot 没有收到回发负载【英文标题】:FB messenger Bot not getting postback payloads 【发布时间】:2018-10-18 02:32:32 【问题描述】:

我正在开发一个 Facebook 聊天机器人。我面临一个我无法解决的问题。我正在 laravel 中开发这个。在这里,我无法获取回发有效负载。这是我的代码

公共功能索引(请求 $request) if ($request->hub_verify_token === $this->verifyToken) 回声 $request->hub_challenge; 出口; $input = json_decode(file_get_contents("php://input"), true); $senderId = $input['entry'][0]['messaging'][0]['sender']['id']; $messageText = $input['entry'][0]['messaging'][0]['message']['text']; $pageId = $input['entry'][0]['id']; $accessToken = "access_token_that_got_from_fb"; //设置消息 if($messageText != "") $answer = "你好!用户"; if($messageText == "你好") $answer = '从机器人测试你好'; foreach ($input['entry'][0]['messaging'] as $message) // 当bot收到用户的消息时 if (!empty($message['postback'])) $answer = '知道了'; //向facebook bot发送消息 $响应 = [ 'recipient' => ['id' => $senderId], 'message' => [ 'text' => $answer ] //json_encode($request->getContent()) ]; $ch = curl_init('https://graph.facebook.com/v2.11/me/messages?access_token='.$accessToken); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($response)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); $result = curl_exec($ch); curl_close($ch);

我的路线是

Route::any('chatbot', 'ChatbotController@index');

这里的消息是有效的。但回发有效负载请求不会发送到服务器。另一方面,在普通 php 文件中使用相同的代码,我可以获得回发工资。

$hubVerifyToken = '聊天机器人'; $accessToken = "access_token"; // 在设置时检查令牌 if ($_REQUEST['hub_verify_token'] === $hubVerifyToken) 回声 $_REQUEST['hub_challenge']; 出口; // 处理 bot 的 anwser $input = json_decode(file_get_contents('php://input'), true); $senderId = $input['entry'][0]['messaging'][0]['sender']['id']; $messageText = $input['entry'][0]['messaging'][0]['message']['text']; $postback = isset($input['entry'][0]['messaging'][0]['postback']['payload']) ? $input['entry'][0]['messaging'][0]['postback']['payload'] : '' ; //设置消息 if($messageText == "hi") $answer = "你好"; if($messageText == "你好") $answer = "您好,欢迎来到 Chatleads"; 如果($回发) $answer = "回发 TADA"; //向facebook bot发送消息 $响应 = [ 'recipient' => ['id' => $senderId], '消息' => ['文本' => $answer ] ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://graph.facebook.com/v2.11/me/messages?access_token=$accessToken"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($response)); curl_setopt($ch, CURLOPT_POST, 1); $标头=数组(); $headers[] = "内容类型:应用程序/json"; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $result = curl_exec($ch); if (curl_errno($ch)) 回声“错误:”。 curl_error($ch); curl_close ($ch);

如何解决这个问题?谁能给我指路?

【问题讨论】:

【参考方案1】:

通过检查 laravel.log 文件解决了它。

$this->messageText  = isset($this->input['entry'][0]['messaging'][0]['message']['text']) ? $this->input['entry'][0]['messaging'][0]['message']['text'] : '' ;

messageText 应该是这样的。这就是它导致错误的原因。

【讨论】:

以上是关于FB messenger Bot 没有收到回发负载的主要内容,如果未能解决你的问题,请参考以下文章

如何使用多个用户测试 FB Messenger bot

FB Messenger Bot:Webhook更新未送达

使用 facebook messenger bot 示例教程代码时,我收到消息:'(#100) No matching user found'

Azure Bot服务Facebook Messenger回调URL提供404

如何在Messenger bot中创建没有标题和长字幕的模板消息?

java的Facebook Messenger bot对象结构