【问题标题】:I can't get my Messenger chatbot to reply successfully to a payload我无法让我的 Messenger 聊天机器人成功回复有效负载
【发布时间】:2018-01-19 20:50:21
【问题描述】:

所以我正在尝试按照此处的文档实现“快速回复”:https://developers.facebook.com/docs/messenger-platform/send-messages/quick-replies#text

我有一个聊天机器人,可以成功回复用户的任何输入。当答案是快速回复有效负载时,我的主要问题出现了,所以我在最顶部有这个:

$postback = isset($input['entry'][0]['messaging'][0]['postback']['payload']) ? $input['entry'][0]['messaging'][0]['postback']['payload']: '' ;
$message = isset($input['entry'][0]['messaging'][0]['message']['text']) ? $input['entry'][0]['messaging'][0]['message']['text']: '' ;

然后我检查它是哪种类型的消息。如果它是“消息”,则会显示一些响应。如果它是“回发”,那么其他人。但是,在“消息”中,我还会检查是否有快速回复 ($qr),如果该值不为空,则应该进入该 if,但它没有这样做,我不知道为什么。

到最后,我有一个replyUser 方法,它接收 $jsonData 并只是回复。这工作正常。此外,defaultJSON 回复只是发回纯文本,而jsonQuickReplies 将 json 格式化为快速回复。我知道这行得通,因为我可以看到快速回复没有问题,只是在用户选择一个之后没有任何反应。

回发有效负载(即使它被捕获在 $input['entry'][0]['messaging'][0]['message']['quick_reply']['payload'] 中,由于某种原因,它会跳过 if 并且我不知道为什么(所以它总是在“else”下向我发送消息。

if($message || $postback) { 

    if($message){

        $qr = isset($input['entry'][0]['messaging'][0]['message']['quick_reply']['payload']) ? $input['entry'][0]['messaging'][0]['message']['quick_reply']['payload']: '' ;

        if(!empty($qr)){
            if(preg_match('[postback payload from qr]', strtolower($qr))){
                $message_to_reply = "Something for the user";
                $jsonData = defaultJSON($sender, $message_to_reply);
            }
        }

        //Some Basic rules to validate ("chat") incoming messages
        if(preg_match('[hey]', strtolower($message))) { 
           $message_to_reply = "welcome message to the user";
           $jsonData = jsonQuickReplies($sender, $message_to_reply);
        }else {
           $message_to_reply = "default message not knowing what the user said";
           $jsonData = defaultJSON($sender, $message_to_reply);
    }else if($postback){
        // If Page receives Postback, process the Postback and prepare content to reply
        if(preg_match('[any postback]', strtolower($postback))){
            $message_to_reply = "process postback";
            $jsonData = defaultJSON($sender, $message_to_reply);
        }
    }
}

变量分解:

$postback 包含由答案分配的任何回发。

$message 可以是用户发送的任何内容。

$qr 是从回发负载中读取的任何快速回复值。

$message_to_reply 是将作为回复发送给用户的短信。

$jsonData 只是发送给replyUser 以在响应中使用的最终 json 值。

$sender 是刚刚与聊天机器人互动的用户的用户 ID。

采用的代码路径如下:任何用户发送一些东西。然后由$postback$message 变量读取该消息(字面意思是查看$input。之后如果是$message,它会遵循该路线(如果是@987654341,则相反) @)。在此之后,消息由defaultJSON()jsonQuickReplies() 方法创建,最后replyUser 获取值并将其发送给用户。

【问题讨论】:

  • 您能否说明正在采用的代码路径以及相关变量的值。
  • @dan08 我添加了更多信息。希望这就足够了。

标签: php facebook-chatbot


【解决方案1】:

您的牙套不匹配。我只是尝试让代码匹配大括号以使其更明显。

if($message || $postback) { 

    if($message){

        $qr = isset($input['entry'][0]['messaging'][0]['message']['quick_reply']['payload']) ? $input['entry'][0]['messaging'][0]['message']['quick_reply']['payload']: '' ;

        if(!empty($qr)){
            if(preg_match('[postback payload from qr]', strtolower($qr))){
                $message_to_reply = "Something for the user";
                $jsonData = defaultJSON($sender, $message_to_reply);
            }
        }

        //Some Basic rules to validate ("chat") incoming messages
        if(preg_match('[hey]', strtolower($message))) { 
           $message_to_reply = "welcome message to the user";
           $jsonData = jsonQuickReplies($sender, $message_to_reply);
        }else {
           $message_to_reply = "default message not knowing what the user said";
           $jsonData = defaultJSON($sender, $message_to_reply);
           //MISSING BRACE
        }else if($postback){
            // If Page receives Postback, process the Postback and prepare content to reply
            if(preg_match('[duda]', strtolower($postback))){
                $message_to_reply = "process postback";
                $jsonData = defaultJSON($sender, $message_to_reply);
            }
        }
    }

【讨论】:

  • 感谢您指出!但可悲的是,这仍然没有让我回复:(
猜你喜欢
  • 2017-10-06
  • 2017-08-21
  • 2020-12-09
  • 2017-04-12
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
  • 2018-10-25
相关资源
最近更新 更多