Все функции для работы с 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".
Обратил внимание, когда добавил бота в чат, где нет разрешения на отправку файлов.
Все функции для работы с Telegram Bot API в
backup-scheduler.shиспользуют curl с перенаправлением в /dev/null. Пример ниже.При этом при какой-либо ошибке со стороны Telegram (например, неправильная настройка прав участника группы или нечто подобное), реальный ответ сервера будет следующий
{"ok":false,"error_code":400,"description":"Bad Request: not enough rights to send documents to the chat"}Кроме того ответ приходит с HTTP кодом != 200, однако в силу особенности curl он завершается c нулевым exit-code, из-за чего логируется сообщение об успешной отправке, вместо вывода ошибки:
А из-за перенаправления вывода в /dev/null тело HTTP ответа в принципе невозможно увидеть по логам.
Чтобы curl завалился с ошибкой и ненулевым статус кодом достаточно флага
--fail. Но в идеале проверять HTTP код и JSON ответ, при ошибках выводить поле ответа "description".Обратил внимание, когда добавил бота в чат, где нет разрешения на отправку файлов.