Я пытаюсь создать скрипт для работы моего бота через Bot API, я использую простой PHP-файл на моем сервере, на котором установлен Webhook, так что Telegram обращается к этому файлу каждый раз при получении сообщения. Но проблема в том, что я не могу получить новое сообщение, когда скрипт уже запущен, если я пытаюсь получить и назначить обновленное сообщение, чтобы изменить рабочий процесс в процессе, я получаю только старое сообщение (которое было присутствует в момент запуска скрипта)
$update = file_get_contents('php://input');///get new data
$update = json_decode($update, TRUE);///decode data
$message = $update["message"]["text"];///assign message
switch($message) {////vary actions accordingly to first message
case "number1":
////send smth to user and wait for answer
$update = file_get_contents('php://input'); ////get new data with updated message
$update = json_decode($update, TRUE); ////decode
$message = $update["message"]["text"]; ////assign
switch($message) {////vary further actions accordingly to new message
case "number2":
////further actions
}
}
...
Вы не можете получить данные { ('php://input')
} несколько раз из телеграммы. Вы можете спросить почему?
Позвольте мне описать, что происходит:
0- Кто-то хочет отправить сообщение вашему боту VIA Telegram client
1- Серверы Telegram получают это сообщение и запускают ваши предопределенные
скрипт. (скрипт который вы передаете Telegram при настройке webhook.2 — один раз и только один раз, когда вы используете
('php://input')
все
данные (включая это сообщение) будут переданы вашему сценарию и СЕЙЧАС
Telegram больше нечего вам дать.3. Ваш скрипт запускается и обрабатывает это сообщение за несколько миллисекунд или
меньше (в это дополнительное небольшое время никто не может набрать и ввести что-то
больше на стороне клиента)4- Ваш сценарий заканчивает работу.
5. В следующий раз, когда пользователь вводит что-то (спустя 1 секунду или 1 год!), Telgram снова вызовет ваши сценарии с новым сообщением.
Как видите, только первый звонок ('php://input')
имеет полезные данные (потому что у telegram есть данные для вас и вызов вашего скрипта бота. Другой вызов ('php://input')
ничего не дать тебе.
КАК ОПЫТ
Получайте данные только один раз в верхней части кода (перед обработкой сообщения), а затем обрабатывайте их. Если вам нужны прежние сообщения, вы можете сохранить их в базе данных при получении.
Других решений пока нет …