Я пишу чат-бота для Facebook, используя php. Запрос от Facebook обрабатывается через файл php. И это похоже на эту логику:
//got request from facebook
foreach ($data['entry'][0]['messaging'] as $message){
if (checkAnswer($message['sender']['id'], $command)){
$command = "";
$command = empty($message['postback']) ? $message['message']['text'] : $message['postback']['payload'];
$bot->send(new Message($message['sender']['id'], 'Thank you very much for participation!'));
}
}
function checkAnswer($id, $text){
//some logic;
}
Если два сообщения от разных людей отправляются в один момент, я наблюдаю следующее. Вызов функции checkAnswer отсутствует в очереди (я понял это, записав процесс выполнения с записью в файл). Например, он может быть вызван по запросу 2 (запрос из Facebook), в то время как запрос 1 не завершен. И из-за этого (я не уверен на 100%), переменная $ id не всегда одинакова, и у меня неверный алгоритм выполнения … Файл регистрации запуска и остановки находится здесь:
///////start////////////////////////
01:0:21 PM ID: 250 Text: 2
///////start////////////////////////
01:0:21 PM ID: 352 Text: 1
01:0:22 PM ID: 250 Text: 2
////////stop////////////////////////
01:0:22 PM ID: 352 Text: 1
////////stop////////////////////////
Я работаю с apache2 и php7, и это мое первое приложение с веб-сервисами. Не могли бы вы дать какую-нибудь подсказку, как это можно исправить?
Задача ещё не решена.
Других решений пока нет …