Skip to content

Вывод ошибок при работе с Telegram API #30

@brinza888

Description

@brinza888

Все функции для работы с Telegram Bot API в backup-scheduler.sh используют curl с перенаправлением в /dev/null. Пример ниже.

curl -s -X POST $curl_proxy_args "https://api.telegram.org/bot$telegram_bot_token/sendDocument" \
                    -F "chat_id=$telegram_chat_id" \
                    -F "document=@$file_path" \
                    -F "caption=$full_caption" \
                    -F "parse_mode=Markdown" \
                    -F "message_thread_id=$telegram_thread_id" >/dev/null 2>&1

При этом при какой-либо ошибке со стороны Telegram (например, неправильная настройка прав участника группы или нечто подобное), реальный ответ сервера будет следующий

{"ok":false,"error_code":400,"description":"Bad Request: not enough rights to send documents to the chat"}

Кроме того ответ приходит с HTTP кодом != 200, однако в силу особенности curl он завершается c нулевым exit-code, из-за чего логируется сообщение об успешной отправке, вместо вывода ошибки:

[2026-04-21 19:27:35] File sent successfully to Telegram

А из-за перенаправления вывода в /dev/null тело HTTP ответа в принципе невозможно увидеть по логам.

Чтобы curl завалился с ошибкой и ненулевым статус кодом достаточно флага --fail. Но в идеале проверять HTTP код и JSON ответ, при ошибках выводить поле ответа "description".

Обратил внимание, когда добавил бота в чат, где нет разрешения на отправку файлов.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions