Как повторять запрос каждые 5 секунд пока выполняется curl?

Ссылка скопирована
1 ответ

Всем привет. Получаю обращение к боту telegram, далее использую метод (Telegram API) sendChatAction?chat_id=xxx&action=typing (что бы пользователь понимал что на стороне бота что то происходит) и отправляю curl запрос на сторонний сервер. Проблема в том что метод sendChatAction работает только 5 секунд или меньше, а ждать выполнение curl приходится иногда 10-20 секунд. Как мне заставить метод sendChatAction повторяться каждые 5 сек. до тех пор, пока curl не выполнится и бот не отправит ответ пользователю?

Дополнительно:

Вместо костыляния с chatAction честно написать пользователю "запрос обрабатывается, это может занять время, просто подождите"?

  • Adamos, да. Я рассматриваю такой вариант. Просто хотелось бы понять, как такое реализуется. Видел в подобных ботах реализацию с sendChatAction, хотелось бы понять как можно сделать.
  • запускай параллельный поток который будет каждые 5 секунд обновлять статус
  • Ответы:

    AFAIK, телеграм требует, чтобы в течение 5 секунд ваш бот завершил обработку запроса и вернул код 200, в противном случае повторяет запрос, считая, что предыдущий не дошёл до бота. Если у вас есть какая-то долгая процедура, то лучше поместить задание в очередь, сказать клиенту "Подождите" и сразу завершить запрос. Отдельный обработчик должен прочитать задание из очереди, выполнить его и послать клиенту в телеграм полученную информацию.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Андрей PHP Ответ

    Для повторения запроса каждые 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 секунд перед следующим запросом
    }

    $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 секунд.

    Не забудьте добавить дополнительные проверки и обработку ошибок в вашем коде, чтобы обеспечить стабильность и надежность выполнения запросов.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно