我无法让我的Messenger聊天机器人成功回复有效负载

时间:2018-01-19 20:50:21

标签: php facebook-chatbot

所以我正在努力实施"快速回复"根据此处的文档: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而我不知道为什么(所以它总是在&#34下面给我发送消息) ;否则"

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);
        }
    }
}

var分解:

$postback包含由答案分配的所有回发。

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

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

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

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

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

采用的代码路径如下:任何用户发送的内容。然后,$postback$message变量会读取该消息(字面上会查看$input。之后,if会跟随,如果它是$message,则会跟随route(如果它是$postback则相反的情况。)之后,消息由defaultJSON()jsonQuickReplies()方法创建,最后replyUser获取值并将其发送给用户。

1 个答案:

答案 0 :(得分:0)

你的牙套不匹配。我只是试图让代码与大括号相匹配,以使其更加明显。

[pepe@localhost glfw-3.2.1]$ make
....

/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-redhat-linux/7/../../../libXinerama.so when searching for -lXinerama
/usr/bin/ld: skipping incompatible //lib/libXinerama.so when searching for -lXinerama
/usr/bin/ld: skipping incompatible //usr/lib/libXinerama.so when searching for -lXinerama
/usr/bin/ld: cannot find -lXinerama
collect2: error: ld returned 1 exit status 
make[2]: *** [examples/CMakeFiles/wave.dir/build.make:129: examples/wave] Error 1
make[1]: *** [CMakeFiles/Makefile2:185: examples/CMakeFiles/wave.dir/all] Error 2
make: *** [Makefile:130: all] Error 2