Telegram Bot на Python: от идеи до рабочего MVP
Цель кейса: запустить Telegram-бота, который обрабатывает команды, ведет простой диалог и устойчиво работает в реальных условиях.
Что вы соберете
MVP-бот с командами:
/start— приветствие;/help— список возможностей;/task— добавление задачи в память процесса;/list— вывод задач пользователя.
Термины перед стартом
Bot API— HTTP API Telegram для работы с ботами (проверка webhook и методов — утилита curl, curl / fetch — примеры).Token— секретный ключ доступа к API.Update— событие от Telegram (сообщение, команда, нажатие кнопки).Long polling— бот сам регулярно запрашивает обновления.Webhook— Telegram отправляет события на ваш HTTPS-адрес.
Шаг 1. Создайте бота через BotFather
- Откройте
@BotFatherв Telegram. - Введите
/newbot. - Укажите имя и username бота.
- Сохраните выданный токен в защищенном месте.
Токен дает полный доступ к управлению ботом. Храните его в .env, добавьте .env в .gitignore и сразу отзывайте токен через /revoke при утечке.
Шаг 2. Подготовьте проект
mkdir telegram-bot-mvp
cd telegram-bot-mvp
python -m venv .venv
Активация:
- Windows:
.venv\Scripts\activate - Linux/macOS:
source .venv/bin/activate
Установка библиотек:
pip install python-telegram-bot python-dotenv
Создайте .env:
TELEGRAM_BOT_TOKEN=ваш_токен_из_BotFather
Шаг 3. Реализуйте минимального бота
Полный main.py — в каталоге примеров (можно скопировать целиком):
Запуск:
python main.py
Шаг 4. Проверьте сценарий пользователя
- Откройте чат с ботом.
- Выполните
/start. - Добавьте 2-3 задачи через
/task. - Проверьте выдачу через
/list.
Критерий успеха: команды стабильно выполняются, ошибки отсутствуют в консоли.
Шаг 5. Улучшите архитектуру
Для роста проекта разделите код:
handlers/commands.py— обработчики команд;services/task_service.py— бизнес-логика;storage/memory.pyилиstorage/sqlite.py— хранение данных;config.py— загрузка переменных окружения.
Шаг 6. Добавьте устойчивость
- логирование (
logging); - обработчик ошибок приложения;
- лимиты на длину входных сообщений;
- очистка и валидация пользовательского ввода.
Когда переходить с long polling на webhook
Long polling подходит для разработки и небольших проектов.
Webhook нужен, когда важны:
- минимальная задержка обработки;
- стабильная работа под нагрузкой;
- управляемый production-деплой.
Частые ошибки
- токен в репозитории;
- вся логика в одном файле;
- отсутствие валидации команд;
- хранение состояния только в памяти без плана миграции в БД.
Практическое продолжение
Следующие улучшения:
- добавить inline-кнопки;
- подключить SQLite/PostgreSQL;
- внедрить FSM для пошаговых диалогов;
- добавить деплой в Docker;
- покрыть ключевые сценарии автоматическими тестами.