У меня установлен Facebook Messenger с чат-ботом на PHP.
Я разбиваю то, что обычно бывает одним ответом, на несколько ответных сообщений, чтобы оно выглядело более естественным в чате и было легче читать, чем один большой пузырь чата.
Вот как я это делаю:
for ($i=0; $i<count($response_array); $i++){
$message_fb_format = [
'recipient' => [
'id' => $userID,
],
'message' => [
'text' => $response_array[$i],
],
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $replyMessageJSON);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Hub-Signature: xxxxxxxxxxxxxxxxxxxxxxxxx', 'Content-Type: application/json'));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HTTP_VERSION, 'CURLOPT_HTTP_VERSION_NONE');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
sleep(2);
}
Я обнаружил, что когда я установил sleep()
на 2 секунды или более, Facebook Messenger повторяет отправку исходного пользовательского ввода. Затем окно чата появляется так, как будто мой чат-робот повторяет свои ответы много раз на один вход, но мои журналы ясно показывают, что мой сервер получает одно и то же сообщение от Facebook много раз, и чат-бот отвечает правильно на каждый из них.
Вопрос в том, почему?
Почему 2-секундная пауза между несколькими ответными сообщениями приводит к тому, что Facebook Messenger повторяет отправку исходного сообщения?