Задать вопрос
@fakin_kiska
Telegram Bots and iOS

Как получать ошибки при отправке запросов Telegram?

Мне нужно доставать из базы данных все юзер айди и проверять на то, кто из них заблокировал бота, чтобы в конечном итоге их посчитать, я пытаюсь сделать это следующим способом:

// Отправка запросов в Telegram
function sendRequest($method, $post = '') {
$ch = curl_init('https://api.telegram.org/bot' . BOT_TOKEN . '/' . $method);

if ($post) {
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);

return $data;
}

$user_count = count(get_all_users_id()); // Получить количество юзеров всего
$blocked_users = 0;
for ($i = 0; $i < $user_count; $i++) {
    $users_id_get = get_all_users_id()[$i];
    $all_users = "\n" . $users_id_get['user_id'];

    // Отправляю каждому пользователю запрос методом sendChatAction
    try {
        $post = [
            'chat_id' => $users_id_get['user_id'],
            'action' => 'typing'
        ];
        sendRequest('sendChatAction', $post);
    // Но эта часть не работает, заблокировавшие бота пользователи не добавляются в 
    // счетчик переменной $blocked_users и сообщение с ошибкой не выводится
    } catch (Exception $ex) {
        $post = [
            'chat_id' => $user_id,
            'text' => 'data: ' . $ex->getMessage() . ' user_id: ' . $users_id_get['user_id']
        ];
        sendRequest('sendMessage', $post);
        $blocked_users = $blocked_users + 1;
    }
}


В каком месте нужно делать try...catch? В самой функции sendRequest или уже при получении каждого user_id и отправке запроса (если тут, то почему не выводится ошибка)?
  • Вопрос задан
  • 79 просмотров
Подписаться 1 Средний 1 комментарий
Решения вопроса 1
@fakin_kiska Автор вопроса
Telegram Bots and iOS
Добавил в функцию sendRequest проверку на ошибки в http-запросах:

if (!curl_errno($ch)) {
        global $http_code;
        $http_code = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    }


А в цикле доставал эти ошибки, когда бот натыкался на пользователя, заблокировавшего бота:

switch ($http_code) {
            case 200: // OK
                break;
            case 403: // Forbidden
                $blocked_users = $blocked_users + 1;
                break;
        }
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы