我无法让我的 Messenger 聊天机器人成功回复负载
I can't get my Messenger chatbot to reply successfully to a payload
所以我正在尝试根据此处的文档实施 "quick replies":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']: '' ;
之后我检查它是哪种类型的消息。如果它是 "message" 则显示一些响应。如果它是 "postback" 那么其他人。但是,在 "message" 中,我还检查了一个快速回复 ($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
。之后是 if,如果它是 $message
则遵循该路由(如果它是 $postback
,则相反。在此之后,消息由 defaultJSON()
或 jsonQuickReplies()
方法创建,最后 replyUser
获取值并将其发送到用户。
你的牙套不对。我只是尝试让代码与大括号匹配,使其更加明显。
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);
}
}
}
所以我正在尝试根据此处的文档实施 "quick replies":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']: '' ;
之后我检查它是哪种类型的消息。如果它是 "message" 则显示一些响应。如果它是 "postback" 那么其他人。但是,在 "message" 中,我还检查了一个快速回复 ($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
。之后是 if,如果它是 $message
则遵循该路由(如果它是 $postback
,则相反。在此之后,消息由 defaultJSON()
或 jsonQuickReplies()
方法创建,最后 replyUser
获取值并将其发送到用户。
你的牙套不对。我只是尝试让代码与大括号匹配,使其更加明显。
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);
}
}
}