Телеграм-бот на Python за вечір: перший бот на aiogram 3
Автор: Daniel academy · 23 липня 2026 р. · wc: ~5 хв

Про Telegram-ботів написано стільки, що можна потонути. Біда в тому, що половина цих текстів переказує офіційну документацію своїми словами, а друга половина обривається рівно там, де стає цікаво. Ти копіюєш код, він навіть запускається, а потім лишаєшся сам на сам із питанням «а що ж далі».
Давай інакше. За цей вечір ти збереш живого бота на Python, який відповідає на команди та кнопки, зрозумієш, що робить кожен рядок, і побачиш чесну карту: де легко, а де починається справжня інженерія.
Одна умова. Зовсім з нуля Python по ходу справи не вивчити: якщо змінні та функції для тебе поки темний ліс, відклади ботів на тиждень і почни з безкоштовного курсу з Python з нуля. Повернешся підготовленим, і все, що нижче, ляже само.
Що знадобиться
Небагато:
- Python 3.11 або новіший. Перевірити:
python --version. - Акаунт у Telegram.
- П'ятнадцять вільних хвилин і бажання, щоб щось запрацювало вже сьогодні.
Жодних серверів, доменів і хмар поки не треба. Бот житиме у тебе на ноутбуці, і цього досить, щоб усе спробувати.
Токен: знайомимося з BotFather
У кожного бота є той, хто його реєструє, і це не ти напряму, а спеціальний бот на ім'я BotFather. Звучить кумедно, працює буденно.
- Відкрий Telegram і знайди
@BotFather(у нього синя позначка, не переплутай із двійниками). - Надішли йому
/newbot. - Придумай боту ім'я (його бачать люди) і username (обов'язково закінчується на
bot, наприкладvechir_test_bot). - У відповідь прилетить рядок на кшталт
123456789:AAeR7.... Це і є токен.
Стався до токена як до пароля. Хто ним володіє, той керує ботом. Не викладай його в GitHub і не показуй на скриншотах. Якщо випадково засвітив, зайди в @BotFather, набери /mybots, обери свого бота, відкрий API Token і натисни «Revoke current token». Старий токен помре, ти отримаєш новий.
Мінімальний бот, який справді працює
Ставимо бібліотеку. aiogram це найживіший і найсучасніший фреймворк для ботів на Python, і ми беремо його третю версію:
pip install aiogram
Створи файл bot.py і поклади в нього ось це:
import asyncio
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
TOKEN = "сюди_встав_свій_токен"
dp = Dispatcher()
@dp.message(CommandStart())
async def start(message: Message) -> None:
await message.answer("Привіт. Я живий. Напиши мені щось.")
@dp.message()
async def echo(message: Message) -> None:
await message.answer(f"Ти написав: {message.text}")
async def main() -> None:
bot = Bot(TOKEN)
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())
Запусти командою python bot.py, відкрий свого бота в Telegram, натисни Start і напиши кілька повідомлень. Він відповідає. Вітаю, це вже справжній бот.
Тепер розберемо, що тут відбувається, бо копіювати без розуміння сенсу мало.
Dispatcher це диспетчер: він дивиться на вхідні повідомлення і вирішує, якій функції їх віддати. Функції з декоратором @dp.message(...) називають хендлерами, тобто обробниками. Перший ловить команду /start, другий ловить геть усе інше і повертає текст назад.
Слова async і await лякають новачків даремно. Бот майже весь час нічого не робить, він чекає на повідомлення від багатьох людей одразу. Асинхронність це спосіб чекати багато всього водночас, не піднімаючи під кожного окремий потік. Поки досить запам'ятати правило: будь-який похід у Telegram пишемо через await.
start_polling це опитування: бот у циклі питає в Telegram «є щось нове?» і обробляє те, що прийшло. Для старту ідеально, налаштовувати нічого не треба.
Додамо кнопки
Текст це добре, але живого бота роблять кнопки. Замінимо хендлер /start на такий і додамо до нього обробник натискання:
from aiogram import F
from aiogram.types import (
CallbackQuery,
InlineKeyboardButton,
InlineKeyboardMarkup,
)
@dp.message(CommandStart())
async def start(message: Message) -> None:
keyboard = InlineKeyboardMarkup(
inline_keyboard=[
[InlineKeyboardButton(text="Розкажи про себе", callback_data="about")]
]
)
await message.answer("Привіт. Натисни на кнопку.", reply_markup=keyboard)
@dp.callback_query(F.data == "about")
async def about(callback: CallbackQuery) -> None:
await callback.message.answer("Я бот, якого ти написав за вечір. Непогано для початку.")
await callback.answer()
З'явилася нова річ: callback_query. Коли людина тисне на inline-кнопку, Telegram надсилає не повідомлення, а callback із даними, які ми зашили в callback_data. Ми ловимо його окремим хендлером. Маленький await callback.answer() наприкінці прибирає в користувача годинник, що крутиться. Забудеш його, і кнопка виглядатиме завислою. Це перша класична пастка, на яку наступають усі.
Де закінчується вечір і починається робота
Ось чесний момент, заради якого варто було все затівати. Те, що ти зібрав, відповідає на повідомлення, але нічого не пам'ятає. А майже будь-який корисний бот це діалог із пам'яттю: записати на заняття, оформити замовлення, провести опитування по кроках. Для цього потрібен стан (англійською FSM, скінченний автомат): бот має пам'ятати, що хвилину тому він спитав твоє ім'я і тепер чекає саме на ім'я, а не на випадковий текст.
Далі за наростанням іде те, що відрізняє іграшку від продукту:
- Стан і сценарії. Бот веде людину по кроках і не плутається, навіть якщо та відповідає невлад.
- База даних. Щоб дані пережили перезапуск, їх треба десь зберігати.
- Роутери і структура. Один файл на весь бот перетворюється на кашу швидше, ніж здається, тому код розносять по роутерах.
- Деплой. Поки ноутбук закритий, бот мертвий. Щоб він працював цілодобово, потрібен сервер, а polling рано чи пізно міняють на webhook.
- Навантаження. Одна річ ти і троє друзів, інша річ п'ять тисяч людей за одну хвилину.
Жоден із цих пунктів не страшний сам по собі. Страшно інше: збирати їх по уривках статей, де кожна написана під свою версію бібліотеки і половина вже застаріла.
Якщо хочеться пройти весь шлях по порядку, від першого хендлера до бота, який живе в проді і не падає, у нас є курс з Telegram-ботів на aiogram 3. Він зібраний так, як пояснюють новому розробнику в команді: через код, через типові пастки і через питання «а що буде, коли користувачів стане багато». Кожна тема завершується практикою, яку тренажер перевіряє одразу після запуску.
А сьогодні закрий ноутбук із відчуттям, що вечір минув не дарма. У тебе є робочий бот, і ти розумієш, чому він працює. Це помітно більше, ніж виносить із середнього туторіалу дев'ять людей із десяти.