Алерты в Telegram на сервере: частые ошибки и решения
Бот создан, скрипт написан, а алерты в Telegram не приходят — или, наоборот, сыплются десятками и вы перестаёте их читать. Почти все проблемы с уведомлениями в Telegram упираются в несколько типовых причин: неверный токен, забыли написать боту первым, недоступен API, нет группировки. Разберём частые ошибки алертов в Telegram на сервере с точной диагностикой по кодам ответа API.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Сообщения не доходят: с чего начать диагностику
Telegram API на каждый запрос отвечает JSON, и в нём всегда написано, что не так. Это ваш главный инструмент — не гадайте, а читайте ответ. Отправьте тестовое сообщение и посмотрите ответ целиком:
curl -s -X POST "https://api.telegram.org/bot<ТОКЕН>/sendMessage" \
-d chat_id=<CHAT_ID> -d text="тест"
Если в ответе "ok":true — сообщение ушло, и проблема не в отправке, а в том, что вы смотрите не тот чат. Если "ok":false — рядом будет "error_code" и "description" с точной причиной. Дальше разберём самые частые коды. Главное правило: прежде чем менять настройки наугад, всегда прочитайте, что именно вернул API.
Ошибка 401 Unauthorized
Ответ с "error_code":401 и описанием «Unauthorized» означает одно — неверный токен бота. Варианты, как это случается: опечатка при копировании, лишний пробел, обрезанный токен, или токен был отозван в BotFather.
Проверьте токен запросом getMe — он возвращает информацию о боте, если токен верный:
curl -s "https://api.telegram.org/bot<ТОКЕН>/getMe"
При верном токене придёт "ok":true с именем бота. Если снова 401 — токен неправильный. Скопируйте его заново из чата с BotFather (команда /mybots → выбрать бота → API Token) и подставьте целиком, без пробелов. Частая незаметная ошибка — потерять двоеточие или часть после него: токен состоит из числового id и длинной строки через двоеточие, нужны обе части. Отдельная ловушка возникает, когда токен хранится в переменной окружения или в файле конфига: при копировании туда легко занести невидимый перевод строки или кавычки, которые ломают запрос. Если getMe в командной строке проходит, а из вашего скрипта — нет, ищите проблему именно в том, как токен подставляется в переменную, а не в самом токене.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS под мониторингОшибка 400 Bad Request и chat not found
Код "error_code":400 с описанием «chat not found» — вторая по частоте проблема. Причин две, и обе связаны с chat_id.
Первая и самая частая — вы не написали боту первым. Бот физически не может отправить сообщение пользователю, который не начинал с ним диалог. Решение: откройте чат с ботом в Telegram и отправьте ему любое сообщение, хотя бы /start. После этого доставка заработает. Вторая причина — неверный chat_id: перепутанный, с лишними символами или от другого чата. Узнайте актуальный chat_id заново:
curl -s "https://api.telegram.org/bot<ТОКЕН>/getUpdates"
Найдите "chat":{"id":...}. Для групп id отрицательный и начинается с минуса — минус обязателен, без него будет «chat not found». Ещё один частый случай с 400 — «can't parse entities»: вы указали parse_mode=HTML или Markdown, но в тексте есть неэкранированные спецсимволы. Либо экранируйте их, либо уберите parse_mode.
Бот в группе молчит
Вы добавили бота в группу, чтобы алерты видела вся команда, но сообщения не идут, хотя в личку доходят. Причина обычно в настройках приватности бота или правах в группе.
По умолчанию у ботов включён режим приватности, и в группах они видят не все сообщения — но для отправки это не помеха. А вот отправлять бот может, только если он состоит в группе и не был из неё удалён. Проверьте, что бот действительно в составе группы. Для каналов бот должен быть администратором с правом публикации. И снова про chat_id: у группы он отрицательный, у супергруппы — начинается с -100. Возьмите его через getUpdates уже после добавления бота в группу и отправки туда сообщения, иначе группа не появится в обновлениях.
Шторм алертов: слишком много уведомлений
Обратная и коварная проблема — уведомлений так много, что вы перестаёте их читать, и в потоке теряется настоящая авария. Это не менее опасно, чем молчание. Причины — отсутствие группировки, срабатывание на каждое мелкое колебание и повторные уведомления об одной проблеме.
Лечится несколькими приёмами:
- Порог с выдержкой. Слать алерт, только если проблема держится N минут, а не при секундном всплеске. В Grafana это параметр
for, в самописных скриптах — счётчик подряд идущих срабатываний. - Дедупликация. Не слать повтор, пока проблема не изменила состояние. Простой способ — запоминать в файле, что алерт уже отправлен, и молчать до восстановления.
- Группировка. Объединять однотипные алерты в одно сообщение вместо десятка отдельных.
- Только actionable. Слать то, на что вы реально среагируете. Информационный шум отключайте.
Хороший мониторинг присылает редкие, но важные сообщения. Если бот пишет каждые пять минут, вы скоро замьютите чат — и пропустите главное.
Простую дедупликацию в самописном скрипте делают через файл-флаг: при первом срабатывании создаёте файл вроде /tmp/alert_disk.flag и шлёте сообщение, при последующих проверках, если файл уже есть, молчите, а при восстановлении удаляете флаг и отправляете уведомление «проблема устранена». Так вы получаете ровно два сообщения на инцидент — «сломалось» и «починилось», — вместо потока одинаковых напоминаний. Этот приём стоит десяти минут работы и радикально меняет ощущение от мониторинга: чат снова становится тем, на что хочется реагировать.
Rate limit и стабильность доставки
При массовой отправке Telegram может ответить "error_code":429 с полем retry_after — вы превысили лимит частоты (примерно 30 сообщений в секунду и до 20 в минуту в одну группу). Уважайте retry_after: подождите указанное число секунд перед повтором. Для скриптов это значит — не слать сотни сообщений в цикле без пауз.
Отдельная причина недоставки — сервер не достаёт до api.telegram.org из-за сетевых ограничений. Проверьте доступность и время ответа:
curl -s -o /dev/null -w "%{http_code} %{time_total}\n" https://api.telegram.org
Если API недоступен или отвечает нестабильно, надёжное решение — зарубежный VPS со стабильным доступом к Telegram. MAATRIX даёт сервер в США или UK с оплатой картой РФ, СБП или криптой, без иностранной карты, и алерты доходят без сбоев за пару минут после запуска.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.
Арендовать VPS под мониторингОбсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Частые вопросы
Почему бот пишет 401 Unauthorized?
Неверный токен: опечатка, лишний пробел или обрезанная часть после двоеточия. Проверьте токен запросом getMe и скопируйте его заново из BotFather целиком.
Ошибка «chat not found», что делать?
Чаще всего вы не написали боту первым — отправьте ему /start. Либо неверный chat_id: возьмите актуальный через getUpdates, для групп он отрицательный с обязательным минусом.
Как убрать шторм уведомлений?
Добавьте выдержку (слать только если проблема держится несколько минут), дедупликацию (не повторять до изменения состояния) и группировку однотипных алертов. Слать стоит только то, на что реагируете.
Как оплатить VPS под мониторинг из России?
Картой РФ, по СБП, криптовалютой или токеном MAAT. Иностранная карта не нужна, сервер поднимается за пару минут.
Нужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.