Как повторять запрос каждые 5 секунд пока выполняется curl?
Всем привет. Получаю обращение к боту telegram, далее использую метод (Telegram API) sendChatAction?chat_id=xxx&action=typing (что бы пользователь понимал что на стороне бота что то происходит) и отправляю curl запрос на сторонний сервер. Проблема в том что метод sendChatAction работает только 5 секунд или меньше, а ждать выполнение curl приходится иногда 10-20 секунд. Как мне заставить метод sendChatAction повторяться каждые 5 сек. до тех пор, пока curl не выполнится и бот не отправит ответ пользователю?
Дополнительно:
Вместо костыляния с chatAction честно написать пользователю "запрос обрабатывается, это может занять время, просто подождите"?
Ответы:
AFAIK, телеграм требует, чтобы в течение 5 секунд ваш бот завершил обработку запроса и вернул код 200, в противном случае повторяет запрос, считая, что предыдущий не дошёл до бота. Если у вас есть какая-то долгая процедура, то лучше поместить задание в очередь, сказать клиенту "Подождите" и сразу завершить запрос. Отдельный обработчик должен прочитать задание из очереди, выполнить его и послать клиенту в телеграм полученную информацию.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для повторения запроса каждые 5 секунд при использовании curl в PHP, вам потребуется использовать цикл и функцию sleep(). Ниже приведен пример кода, который показывает как это сделать:
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://example.com"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); while(true) { $response = curl_exec($ch); if($response === false) { echo "Ошибка при выполнении запроса: " . curl_error($ch); } else { echo "Успешный запрос: " . $response; } sleep(5); // Подождать 5 секунд перед следующим запросом }
В этом коде мы создаем новый ресурс cURL с помощью curl_init() и устанавливаем URL с помощью curl_setopt(). Затем мы запускаем бесконечный цикл, в котором выполняем запрос с помощью curl_exec() и выводим результат. Если запрос выполнен успешно, мы выводим ответ, в противном случае выводим сообщение об ошибке.
После выполнения каждого запроса мы используем функцию sleep(5), чтобы приостановить выполнение скрипта на 5 секунд перед отправкой следующего запроса. Таким образом, запрос будет повторяться каждые 5 секунд.
Не забудьте добавить дополнительные проверки и обработку ошибок в вашем коде, чтобы обеспечить стабильность и надежность выполнения запросов.