Как исправить ошибку API_TOKEN при запуске Telegram-бота на aiogram?

Koorona_009

Новорег
Статус
Offline
Регистрация
3 Мар 2026
Сообщения
1
Лайки
0
Всем привет!

Столкнулся с проблемой при запуске простейшего Telegram-бота на Python с использованием библиотеки aiogram (версия 3.x). Бот должен просто отвечать на команду /start, но при запуске скрипта в консоли падает ошибка.

Вот код, который я использую:

import asyncio
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command Start

API_TOKEN = 'ЗДЕСЬМОЙТОКЕН_ИЗ_BOTFATHER'

bot = Bot(token=API_TOKEN)
dp = Dispatcher()

@dp.message(CommandStart())
async def cmd_start(message: types.Message):
await message.reply("Привет! Бот работает.")

async def main():
await dp.start_polling(bot)

if name == 'main':
asyncio.run(main())

В консоли вылезает ошибка, связанная с валидацией токена (TokenValidationException), хотя сам токен я скопировал точно из BotFather и вставил строкой.

Подскажите, в чём может быть дело? Возможно, сейчас нужно передавать токен как-то иначе или использовать環境 переменные (классы Settings)? Буду благодарен за подсказку или пример рабочего конфига!
 
С токеном и aiogram 3.x всё по‑старому — строкой передаётся нормально. В твоём примере проблема почти наверняка не в “новом способе”, а в том, что в коде есть несколько мелких косяков из-за которых токен фактически не такой, как ты думаешь (или код вообще не тот, что запускается).

Вот что стоит проверить в первую очередь:

---

### 1) У тебя в импорте и фильтре опечатка
Ты написал:

Код:
from aiogram.filters import Command Start
...
@dp.message(CommandStart())

В aiogram 3 должно быть так:

Код:
from aiogram.filters import CommandStart

И декоратор тогда ок:

Код:
@dp.message(CommandStart())

(Либо Command("start"), но CommandStart() проще.)

---

### 2) if name == 'main' — тоже ошибка
Должно быть:

Код:
if __name__ == "__main__":
    asyncio.run(main())

Иначе main() может вообще не запускаться, и ты тестируешь “не то”.

---

### 3) Самая частая причина TokenValidationException — токен содержит лишние символы
Даже если “точно скопировал”, иногда в конце прилипает пробел/перенос строки, или ты вставил не ASCII : (редко, но бывает), или токен случайно попал с кавычками/мусором.

Сделай жёсткую проверку прямо в коде:

Код:
API_TOKEN = "123456:ABCDEF..."  # твой
print(repr(API_TOKEN))
print(len(API_TOKEN))

Если увидишь '\n', пробелы, странные символы — вот оно.

На всякий случай можно “очистить”:

Код:
API_TOKEN = API_TOKEN.strip()

---

### 4) Убедись, что токен реальный, а не строка-заглушка
В твоём сообщении токен выглядит как "ЗДЕСЬМОЙТОКЕН_ИЗ_BOTFATHER" — если ты так же запускаешь вживую, aiogram правильно ругается валидацией.

---

## Рабочий минимальный пример под aiogram 3.x

Код:
import asyncio
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message

API_TOKEN = "PASTE_REAL_TOKEN_HERE".strip()

dp = Dispatcher()

@dp.message(CommandStart())
async def cmd_start(message: Message):
    await message.answer("Привет! Бот работает.")

async def main():
    bot = Bot(token=API_TOKEN)
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

---

## Если хочешь через переменные окружения (удобно и безопаснее)
Код:
import os
API_TOKEN = os.getenv("BOT_TOKEN").strip()

Запуск:
- Linux/macOS:
Код:
bash
  export BOT_TOKEN="123:ABC..."
  python bot.py
- Windows PowerShell:
Код:
powershell
  $env:BOT_TOKEN="123:ABC..."
  python bot.py

---

Если скинешь точный текст ошибки (пару строк, где видно что именно “не нравится”) и как ты запускаешь скрипт (IDE/терминал), скажу прям прицельно: это пробел/перенос, не тот файл запускается, или токен реально невалидный.
 
Назад
Сверху