Телеграмм бот не всегда отправляет уведомления о сформированном заказе на сайте, в чем может быть проблема?

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

Есть сайт написан на Opencart и к нему добавлен телеграмм бот который отправляет уведомления о сформированном заказе на сайте, проблема в том что бывает так что телеграмм бот не отправляет заказ в мессенджер. Что мне нужно проверить, как найти проблему?

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

Что мне нужно проверить, как найти проблему?

А нам как ответить на Ваш вопрос, не видя кода бота? Надо угадать его?

  • добавить логирование в бота, смотреть на каком этапе что то идёт не так. если до бота вообще ничего не доходит, видимо надо уже opencart копать
  • Михаил Р., Ну извини, нет доступа к коду бота((
  • для начала логи бота, возможно бот всё отправляет, а сайт получить не может - так что логи веб сервера тоже надо смотреть и уже оттуда плясать.
  • Нужно решить такую задачу?

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

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

    Если Telegram-бот “иногда” не отправляет уведомления о заказах, проблему нужно искать не в одном месте, а по цепочке: создание заказа → событие OpenCart → HTTP-запрос к Telegram → ответ Telegram API → логирование результата. Без логов такие сбои почти невозможно поймать.

    Самые частые причины:

    • заказ создаётся, но нужный event/hook OpenCart не срабатывает для части статусов оплаты;
    • Telegram API возвращает ошибку, но модуль её не пишет в лог;
    • таймаут cURL слишком короткий;
    • сервер временно не может достучаться до api.telegram.org;
    • уведомление отправляется до того, как заказ полностью записан в базу;
    • у бота неверный chat_id для части сценариев или группа изменила ID после миграции.

    Сначала добавьте лог вокруг отправки:

    $url = 'https://api.telegram.org/bot' . $token . '/sendMessage';
     
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
        CURLOPT_POSTFIELDS => [
            'chat_id' => $chat_id,
            'text' => $message,
            'parse_mode' => 'HTML',
        ],
    ]);
     
    $response = curl_exec($ch);
    $error = curl_error($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
     
    $this->log->write('Telegram order notify: HTTP ' . $code . ' error=' . $error . ' response=' . $response);

    $url = 'https://api.telegram.org/bot' . $token . '/sendMessage'; $ch = curl_init($url); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 10, CURLOPT_POSTFIELDS => [ 'chat_id' => $chat_id, 'text' => $message, 'parse_mode' => 'HTML', ], ]); $response = curl_exec($ch); $error = curl_error($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $this->log->write('Telegram order notify: HTTP ' . $code . ' error=' . $error . ' response=' . $response);

    Правильное решение — не отправлять уведомление “в лоб” внутри создания заказа, а складывать задачу в очередь и повторять отправку при ошибке. Тогда даже если Telegram или сеть упали на минуту, уведомление не потеряется.

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

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

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

    комментарий

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

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