Php Facebook Chatbot回发无效

Php Facebook Chatbot回发无效,php,facebook,postback,chatbot,Php,Facebook,Postback,Chatbot,我已经在PHP中设置了一个可运行的facebook聊天机器人,并构建了一个通用模板转盘,其中一个回发按钮是: [ type"=>"postback", "title"=>"Opening Hours", "payload"=>"Opening Hours" ], 按下回发按钮并检查我的PHP

我已经在PHP中设置了一个可运行的facebook聊天机器人,并构建了一个通用模板转盘,其中一个回发按钮是:

[
type"=>"postback",
"title"=>"Opening Hours",
"payload"=>"Opening Hours"                                                                                              
],
按下回发按钮并检查我的PHP日志,我得到:

{"object":"page","entry":[{"id":"457107221010xxx","time":1513219207386,
    "messaging": [{"recipient":
              {"id":"457107221010xxx"},"timestamp":1513219207386,"sender":
              {"id":"1510264525690xxx"},"postback":{"payload":"Opening 
            Hours","title":"Opening Hours"}}]}]}
我通过以下方式在代码中处理此回发:

$postback = $input['entry'][0]['messaging'][0]['postback']['payload'];
if ($postback!="") {
 $answer = ["text"=> $openingHours];
}
但在messenger窗口中,按下上述回发按钮后,messenger似乎正在“键入”并显示三点对话框几秒钟,但随后它停止了,并没有任何回复。我确实在webhooks中启用了“message_postback”选项,并且其他查询正在工作(例如,如果我手动键入“open Hours”,我将得到open Hours回复)。我使用以下代码处理其他查询,它可以正常工作:

$sender     = $input['entry'][0]['messaging'][0]['sender']['id'];
$message    = $input['entry'][0]['messaging'][0]['message']['text'];
if(preg_match('[opening|hours]', strtolower($message))) {
        $answer =     ["text"=>"
                Opening Hours:
10:30 am – 1:00 am (Sun-Thu)"];
} else {
   //show menu
}

非常感谢任何建议

因为我没有看到触发实际发送的代码,所以可以在那里找到错误。如果您复制了基础教程,它可能看起来像我很久以前开始学习的教程:

if(preg_match('[time|current time|now]', strtolower($message))) {
    $message_to_reply = date('l jS \of F Y h:i:s A');
} else {
    $message_to_reply = 'Huh! what do you mean?';
}

// your code here
$postback = $input['entry'][0]['messaging'][0]['postback']['payload'];
if ($postback!="") {
    $message_to_reply = "postback!";
    $foundPostback = true;
}

$url = 'https://graph.facebook.com/v2.11/me/messages?access_token='.$access_token;
$ch = curl_init($url);
$jsonData = '{
    "recipient":{
        "id":"'.$sender.'"
    },
    "message":{
        "text":"'.$message_to_reply.'"
    }
}';

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

if(!empty($input['entry'][0]['messaging'][0]['message']) || $foundPostback ){
    $result = curl_exec($ch);
}
请注意
$foundPostback
。如果您的发送触发器与教程中的一个类似,它将不会发送消息,因为回发消息中没有
$input['entry'][0]['messaging'][0]['message']
属性。因此,如果检测到回发,则必须保留该标志




但是,我强烈建议构建自己的类来处理消息、回发、传递、回音等。您可以在这里找到更多信息:

因为我没有看到触发实际发送的代码,所以可以在那里找到错误。如果您复制了基础教程,它可能看起来像我很久以前开始学习的教程:

if(preg_match('[time|current time|now]', strtolower($message))) {
    $message_to_reply = date('l jS \of F Y h:i:s A');
} else {
    $message_to_reply = 'Huh! what do you mean?';
}

// your code here
$postback = $input['entry'][0]['messaging'][0]['postback']['payload'];
if ($postback!="") {
    $message_to_reply = "postback!";
    $foundPostback = true;
}

$url = 'https://graph.facebook.com/v2.11/me/messages?access_token='.$access_token;
$ch = curl_init($url);
$jsonData = '{
    "recipient":{
        "id":"'.$sender.'"
    },
    "message":{
        "text":"'.$message_to_reply.'"
    }
}';

curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

if(!empty($input['entry'][0]['messaging'][0]['message']) || $foundPostback ){
    $result = curl_exec($ch);
}
请注意
$foundPostback
。如果您的发送触发器与教程中的一个类似,它将不会发送消息,因为回发消息中没有
$input['entry'][0]['messaging'][0]['message']
属性。因此,如果检测到回发,则必须保留该标志




但是,我强烈建议构建自己的类来处理消息、回发、传递、回音等。你可以在这里找到更多关于这些问题的信息:

好吧,我还是有同样的问题,不知道如何解决。我们的问题已经解决了!嗯,我也有同样的问题,但我仍然不知道如何解决。我们的问题都解决了!非常感谢您抽出时间指出这一点!这就是问题所在!非常感谢您抽出时间指出这一点!这就是问题所在!