Facebook的聊天机器人回传不工作(Facebook Chatbot postback not

2019-11-04 13:49发布

我设置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窗口按下后表示回发按钮,信使似乎是“输入”与三个点对话框显示几秒钟,但当时它只是停止没有任何回复。 我没有启用网络挂接“message_postback”选项,以及其他查询工作(例如,如果我输入“营业时间”手动我会得到营业时间回复)。 我处理其他查询与下面的代码和它的工作原理:

$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
}

任何意见非常感谢!

Answer 1:

由于我没有看到代码,这会触发实际的发送,可以在那里发现的错误。 如果您复制的基础教程它可能看起来像这样的我开始在很久以前:

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']属性,回传的消息。 所以,如果你发现一个回传,你必须保持该标志。



然而,我强烈建议建立自己的类来处理邮件,回传,交付,回声等。 更多关于这些,你可以在这里找到: Facebook的Messenger的文件



文章来源: Facebook Chatbot postback not working