NetrunНа главную

Если что-то не работает

Ошибка 401 Unauthorized у Telegram-бота: что не так с токеном

· 5 мин чтения

Коротко

Ошибка 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 у Telegram-бота: симптом, причина и что сделать
СимптомВероятная причинаЧто сделать
401 с первого запуска, и локально тожеОпечатка, пробел, кавычки или токен скопирован не целикомСкопируйте токен из BotFather заново и вставьте без лишних символов
Бот работал, потом начал получать 401Токен перевыпущен в BotFatherВозьмите новый токен и обновите его везде, где запускается бот
Локально работает, на сервере 401На сервере другое значение переменной или переменная названа иначеСверьте имя переменной в коде и в настройках, перезапишите значение
Бот запустился, но отвечает не тотУказан токен другого ботаВызовите getMe и сверьте имя бота в ответе
Ошибка 404 Not Found вместо 401Неверно собран адрес запросаПроверьте название метода и что перед токеном стоит слово bot
Ошибка ещё до запроса, со словами invalid tokenПеременная пустая или токен не похож на токен по формеПроверьте, что переменная окружения задана и дошла до кода
  1. Проверьте токен методом getMe#

    Метод getMe — самый простой запрос к Telegram: он ничего не меняет и просто возвращает данные бота, которому принадлежит токен. Откройте в браузере адрес api.telegram.org/bot, сразу за ним вставьте токен, потом /getMe. Если в ответе ok: true и имя вашего бота — токен рабочий, и проблема в том, как он доходит до кода. Если ответ Unauthorized — сам токен недействителен. Не делитесь этой ссылкой и не вставляйте её в чаты: в ней ваш токен целиком.

  2. Уберите лишние пробелы, кавычки и переносы строк#

    Самая частая причина 401 — невидимый мусор вокруг токена. При копировании из Telegram легко захватить пробел в конце, а в файле .env токен иногда пишут в кавычках или оставляют пустую строку с переносом, и часть способов запуска передаёт эти символы в код как есть. Скопируйте токен из BotFather заново, вставьте без кавычек и пробелов и проверьте, что он целиком: число, двоеточие и вся строка после него. В коде можно подстраховаться и обрезать пробелы при чтении переменной.

  3. Узнайте, не перевыпущен ли токен#

    Если бот работал, а потом внезапно начал получать 401, скорее всего, токен перевыпустили: в BotFather есть команда revoke, после которой старый токен перестаёт действовать сразу и везде. Это могли сделать вы сами, соавтор с доступом к боту или вы — случайно, когда разбирались с другой ошибкой. Откройте BotFather, выберите бота и посмотрите текущий токен. Новый токен нужно обновить во всех местах, где бот запускается.

  4. Проверьте, что переменная окружения дошла до кода#

    Если локально бот работает, а на сервере получает 401 или ругается на неверный токен, туда приехало другое значение. Сверьте имя: код читает, например, BOT_TOKEN, а в настройках задано TELEGRAM_TOKEN или TOKEN, и тогда переменная пустая. Если переменная пустая, многие библиотеки отказываются работать ещё до запроса к Telegram. В Netrun токен задаётся на вкладке «Секреты» и попадает в переменные окружения; значения там не показываются, поэтому при сомнении просто перезапишите токен заново и нажмите публикацию — без неё запущенный бот продолжит работать со старым значением.

  5. Убедитесь, что это токен нужного бота#

    Когда ботов несколько — рабочий, тестовый, старый, — легко подставить не тот токен. Тогда ошибки может и не быть, но отвечать будет другой бот, а если тот бот удалён или его токен перевыпущен — придёт 401. Вызовите getMe и посмотрите поле username в ответе: это имя бота, которому принадлежит токен. Удобное правило — называть переменные понятно, например MAIN_BOT_TOKEN и TEST_BOT_TOKEN, чтобы токены не путались.

  6. Если пришла ошибка 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.

Где посмотреть логи и статус проекта?

На странице проекта есть статус, логи и история событий — по ним видно, что происходит с проектом прямо сейчас. Лента логов показывает и более ранние строки: пролистайте её вверх, и они подгрузятся сами.

Запустите свой проект

Загрузите код, ответьте на пару вопросов — и получите рабочую ссылку. Есть бесплатный тариф

Попробовать Netrun
Все статьи блога