Если что-то не работает
Ошибка 401 Unauthorized у Telegram-бота: что не так с токеном
Коротко
Ошибка 401 Unauthorized у Telegram-бота значит, что Telegram не принял токен, с которым пришёл запрос. Чаще всего в токене лишний пробел, кавычки или перенос строки, токен скопирован не целиком, перевыпущен в BotFather или в код попал токен другого бота. Если локально бот работает, а на сервере получает 401, значит, туда приехало другое значение: проверьте, как называется переменная окружения и что в ней лежит. Быстрая проверка — метод getMe: с рабочим токеном он возвращает имя бота, с неверным — ту же ошибку 401.
- Telegram отвечает кодом 401 Unauthorized, когда токен бота недействителен: с ошибкой, перевыпущен или отозван.
- После команды revoke в BotFather старый токен перестаёт работать сразу и везде, где им пользовались.
- Метод getMe проверяет токен одним запросом: рабочий токен возвращает данные бота, неверный — ошибку 401.
- Код 404 Not Found от Telegram обычно означает неверно собранный адрес запроса, например опечатку в названии метода или пропущенное слово bot перед токеном.
- Токен бота выглядит как число, двоеточие и строка из букв, цифр, дефисов и подчёркиваний, без пробелов и кавычек.
Бот не запускается или замолкает, а в логах стоит Unauthorized с кодом 401. В aiogram это выглядит как TelegramUnauthorizedError, в python-telegram-bot — как InvalidToken, в библиотеках для Node.js — как 401 Unauthorized в тексте ошибки. Суть везде одна: Telegram получил запрос, посмотрел на токен и не узнал его. Код бота, обработчики и хостинг тут ни при чём — пока токен не исправлен, остальное проверять бессмысленно.
Токен — это пароль бота, который выдаёт BotFather при создании. Он выглядит как число, двоеточие и длинная строка из букв и цифр, и любой лишний символ делает его другим токеном. Ниже — как по порядку проверить, что именно не так: от самой частой причины к редким, плюс что значит родственная ошибка 404 Not Found.
| Симптом | Вероятная причина | Что сделать |
|---|---|---|
| 401 с первого запуска, и локально тоже | Опечатка, пробел, кавычки или токен скопирован не целиком | Скопируйте токен из BotFather заново и вставьте без лишних символов |
| Бот работал, потом начал получать 401 | Токен перевыпущен в BotFather | Возьмите новый токен и обновите его везде, где запускается бот |
| Локально работает, на сервере 401 | На сервере другое значение переменной или переменная названа иначе | Сверьте имя переменной в коде и в настройках, перезапишите значение |
| Бот запустился, но отвечает не тот | Указан токен другого бота | Вызовите getMe и сверьте имя бота в ответе |
| Ошибка 404 Not Found вместо 401 | Неверно собран адрес запроса | Проверьте название метода и что перед токеном стоит слово bot |
| Ошибка ещё до запроса, со словами invalid token | Переменная пустая или токен не похож на токен по форме | Проверьте, что переменная окружения задана и дошла до кода |
Проверьте токен методом getMe#
Метод getMe — самый простой запрос к Telegram: он ничего не меняет и просто возвращает данные бота, которому принадлежит токен. Откройте в браузере адрес api.telegram.org/bot, сразу за ним вставьте токен, потом /getMe. Если в ответе ok: true и имя вашего бота — токен рабочий, и проблема в том, как он доходит до кода. Если ответ Unauthorized — сам токен недействителен. Не делитесь этой ссылкой и не вставляйте её в чаты: в ней ваш токен целиком.
Уберите лишние пробелы, кавычки и переносы строк#
Самая частая причина 401 — невидимый мусор вокруг токена. При копировании из Telegram легко захватить пробел в конце, а в файле .env токен иногда пишут в кавычках или оставляют пустую строку с переносом, и часть способов запуска передаёт эти символы в код как есть. Скопируйте токен из BotFather заново, вставьте без кавычек и пробелов и проверьте, что он целиком: число, двоеточие и вся строка после него. В коде можно подстраховаться и обрезать пробелы при чтении переменной.
Узнайте, не перевыпущен ли токен#
Если бот работал, а потом внезапно начал получать 401, скорее всего, токен перевыпустили: в BotFather есть команда revoke, после которой старый токен перестаёт действовать сразу и везде. Это могли сделать вы сами, соавтор с доступом к боту или вы — случайно, когда разбирались с другой ошибкой. Откройте BotFather, выберите бота и посмотрите текущий токен. Новый токен нужно обновить во всех местах, где бот запускается.
Проверьте, что переменная окружения дошла до кода#
Если локально бот работает, а на сервере получает 401 или ругается на неверный токен, туда приехало другое значение. Сверьте имя: код читает, например, BOT_TOKEN, а в настройках задано TELEGRAM_TOKEN или TOKEN, и тогда переменная пустая. Если переменная пустая, многие библиотеки отказываются работать ещё до запроса к Telegram. В Netrun токен задаётся на вкладке «Секреты» и попадает в переменные окружения; значения там не показываются, поэтому при сомнении просто перезапишите токен заново и нажмите публикацию — без неё запущенный бот продолжит работать со старым значением.
Убедитесь, что это токен нужного бота#
Когда ботов несколько — рабочий, тестовый, старый, — легко подставить не тот токен. Тогда ошибки может и не быть, но отвечать будет другой бот, а если тот бот удалён или его токен перевыпущен — придёт 401. Вызовите getMe и посмотрите поле username в ответе: это имя бота, которому принадлежит токен. Удобное правило — называть переменные понятно, например MAIN_BOT_TOKEN и TEST_BOT_TOKEN, чтобы токены не путались.
Если пришла ошибка 404, проверьте адрес запроса#
Ошибка 404 Not Found — родственница 401, но значит другое: Telegram не узнал сам адрес запроса. Так бывает, если в коде опечатка в названии метода, например sendMesage вместо sendMessage, или адрес собран вручную и перед токеном пропущено слово bot. С готовыми библиотеками вроде aiogram или python-telegram-bot такое встречается редко, а вот при самописных запросах через requests или fetch — часто. Сверьте адрес с образцом: api.telegram.org, потом bot и токен слитно, потом название метода.
Ошибка 401 Unauthorized у Telegram-бота почти всегда про сам токен: лишний символ, перевыпуск в BotFather или значение, которое не доехало до кода. Проверьте токен через getMe, вставьте его заново без кавычек и пробелов и сверьте имя переменной окружения — этого хватает в подавляющем большинстве случаев. В Netrun токен хранится зашифрованным на вкладке «Секреты», а логи запуска видны в кабинете, поэтому 401 заметно сразу после публикации. На бесплатном тарифе бот работает 3 часа, чтобы вы всё проверили, а для круглосуточной работы нужен Pro. Попробовать Netrun.
Частые вопросы
Что значит Unauthorized в ошибке Telegram-бота?
Это значит, что Telegram не узнал токен, с которым пришёл запрос. Токен может быть с опечаткой или лишним символом, перевыпущен в BotFather или вовсе не дошёл до кода. Остальная логика бота здесь ни при чём, пока токен не исправлен.
Почему бот работает у меня на компьютере, а на сервере выдаёт 401?
Потому что на сервер приехало другое значение токена. Чаще всего переменная окружения там называется иначе, чем в коде, или в значение попали кавычки, пробел или перенос строки. Сверьте имя переменной и задайте токен заново.
Как проверить, рабочий ли токен бота?
Вызовите метод getMe: откройте в браузере адрес api.telegram.org/bot с вашим токеном и /getMe на конце. Рабочий токен вернёт ok: true и имя бота, неверный — ошибку 401 Unauthorized. Ссылку с токеном никому не отправляйте.
Что будет со старым токеном после revoke в BotFather?
Он перестанет работать сразу и везде: все копии бота, запущенные со старым токеном, начнут получать 401. Новый токен нужно указать во всех местах, где бот должен работать. Так же можно намеренно отключить копию бота, до которой у вас нет доступа.
Чем ошибка 404 Not Found отличается от 401 Unauthorized?
При 401 Telegram понял, что вы обращаетесь к боту, но не принял токен. При 404 он не узнал сам адрес запроса: обычно в названии метода опечатка или перед токеном пропущено слово bot. Первое лечится новым токеном, второе — исправлением адреса в коде.
Где указать токены и другие секретные значения?
В проекте есть вкладка «Секреты» — там задаются значения из кода, например токен от BotFather. Мы храним их в зашифрованном виде: названия переменных вы видите, сами значения не показываем никому, включая вас.
Можно ли разместить Telegram-бота?
Да. Загрузите код бота и укажите токен от BotFather (его выдаёт сам Telegram при создании бота) — Netrun запустит бота, VPS и ручная настройка не нужны. На бесплатном тарифе бот работает 3 часа, чтобы вы всё проверили; чтобы он работал круглосуточно, подключите тариф Pro.
Где посмотреть логи и статус проекта?
На странице проекта есть статус, логи и история событий — по ним видно, что происходит с проектом прямо сейчас. Лента логов показывает и более ранние строки: пролистайте её вверх, и они подгрузятся сами.