Telegram-бот на Python: aiogram, webhook и ИИ-ответы
Обновлено: Mon Jul 06 2026 00:00:00 GMT+0000 (Coordinated Universal Time)
Пошаговый разбор Telegram-бота на aiogram 3: команды, FSM, webhook на VPS и подключение LLM для умных ответов.
Что получится
Telegram-бот с командами /start, /help, диалогом через FSM и опциональными ИИ-ответами через OpenRouter или другой LLM API.
Шаг 1. Регистрация бота
-
Откройте @BotFather в Telegram.
-
/newbot→ имя и username. -
Сохраните токен в
.env(BOT_TOKEN=), не в git.
Шаг 2. Каркас на aiogram 3
Создай структуру: handlers/, services/, main.py.
Router для /start и echo. Pydantic settings из env.
Типичная структура:
bot/
main.py
handlers/
services/llm.py
config.py
Шаг 3. Webhook vs polling
| Режим | Когда |
|-------|-------|
| Polling | локальная разработка |
| Webhook | продакшен на VPS с HTTPS |
Webhook URL: https://ваш-домен.ru/bot/webhook — проксируется nginx на контейнер с ботом.
Шаг 4. ИИ-ответы
-
Вынесите вызов LLM в
services/llm.py. -
Rate limit на пользователя (Redis или in-memory для MVP).
-
Не логируйте тексты с PII — маскируйте user_id.
Шаг 5. Деплой
-
Docker-образ с Python 3.12.
-
systemd или compose-сервис
bot. -
Healthcheck и перезапуск при падении.
Связанные материалы
Ключевые выводы
aiogram 3 + webhook на VPS + env для токена — базовая prod-схема. LLM-ответы выносите в сервисный слой с rate limit и без логирования PII.
FAQ
Polling или webhook?
Polling для dev, webhook для prod с HTTPS.
Где хранить BOT_TOKEN?
Только в .env на сервере, не в git и не в rules Cursor.
Как ограничить спам в боте?
Rate limit по user_id, captcha или whitelist для MVP.