【发布时间】: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