🐍 Python • Пошаговый гайд • 2026

Как сделать Telegram бота на Python: пошаговое руководство для начинающих

Научитесь создавать Telegram-ботов на Python с нуля. От простого echo-бота до полноценного приложения с базой данных и деплоем.

Как сделать Telegram бота на Python: пошаговое руководство для начинающих
18 мин чтения ~4500 слов 3 августа 2026 г. Дмитрий Малышев

Почему Python — лучший язык для Telegram-ботов

Python — самый популярный язык для разработки Telegram-ботов, и на это есть веские причины.

Во-первых, простота синтаксиса. Python читается почти как английский текст. Даже если вы новичок в программировании, вы сможете написать работающего бота за несколько часов.

Во-вторых, богатая экосистема. Для Telegram есть несколько зрелых фреймворков: aiogram, python-telegram-bot, telebot (pyTelegramBotAPI). Каждый решает разные задачи — от простых ботов до сложных систем с middleware и FSM.

В-третьих, огромное сообщество. Тысячи готовых примеров, туториалов и библиотек. Если у вас возникнет проблема — ответ уже есть на Stack Overflow или в Telegram-каналах разработчиков.

В-четвёртых, интеграции. Python легко интегрируется с базами данных (PostgreSQL, MongoDB, SQLite), платёжными системами, CRM, API внешних сервисов. Это позволяет создавать не просто ботов, а полноценные бизнес-инструменты.

По данным GitHub, более 60% всех Telegram-ботов написаны на Python. Это значит, что вам доступны готовые решения для практически любой задачи.

Вот сводная таблица стоимости разработки бота на Python:

Тип ботаФункцииЦенаСроки
ПростойПриветствие, FAQ, кнопки, сбор контактов15 000 — 40 000 ₽3-5 дней
Средний+ база данных, CRM, калькуляция40 000 — 100 000 ₽1-2 недели
Сложный+ магазин, оплата, WebApp, AI100 000 — 300 000 ₽2-4 недели
Полезные материалы по теме
Не хотите разбираться сами?заказать разработку бота на Python
Хотите добавить искусственный интеллект?создать AI бота в Telegram
Полный цикл от идеи до запускаразработка бота под ключ
Пошаговое руководство по настройке бота после разработкинастройка Telegram-бота
Полный цикл от идеи до запускаразработка бота с нуля
Сравнение Python-фреймворков для Telegram-ботовAiogram vs Pyrogram

Подготовка рабочего окружения

Прежде чем писать код, нужно подготовить инструменты. Вот что вам понадобится.

Установка Python

Скачайте Python 3.10+ с официального сайта python.org. При установке на Windows обязательно поставьте галочку «Add Python to PATH». Проверьте установку: откройте терминал и введите python --version. Должно показать версию 3.10 или выше.

Создание виртуального окружения

Виртуальное окружение изолирует зависимости проекта. Создайте его командой: python -m venv venv. Активируйте: на Windows — venv\Scripts\activate, на Mac/Linux — source venv/bin/activate. После активации в терминале появится префикс (venv).

Установка библиотек

Установите aiogram — самый популярный асинхронный фреймворк для Telegram-ботов: pip install aiogram. Для работы с базой данных: pip install sqlalchemy asyncpg (PostgreSQL) или aiosqlite (SQLite). Для переменных окружения: pip install python-dotenv.

Структура проекта

Создайте следующую структуру каталогов:

bot/ ├── main.py — точка входа ├── config.py — конфигурация ├── handlers/ — обработчики команд │ ├── __init__.py │ └── start.py ├── keyboards/ — клавиатуры │ ├── __init__.py │ └── inline.py ├── database/ — работа с БД │ ├── __init__.py │ └── models.py └── .env — переменные окружения

Такая структура позволяет масштабировать проект без хаоса в коде.

Регистрация бота в BotFather: получение токена

Каждый Telegram-бот проходит через BotFather — официальный бот Telegram для создания и управления ботами.

Шаг 1: Откройте Telegram и найдите @BotFather. Нажмите «Start».

Шаг 2: Отправьте команду /newbot. BotFather спросит имя бота — это отображаемое имя, которое увидят пользователи. Например: «Мой Магазин Бот».

Шаг 3: BotFather спросит username бота — это уникальный идентификатор, который заканчивается на «bot». Например: my_shop_2026_bot.

Шаг 4: BotFather выдаст токен — длинную строку вида 123456789:ABCdefGHIjklMNOpqrsTUVwxyz. Это ключ доступа к вашему боту. НИКОМУ его не показывайте и не публикуйте в открытом доступе.

Шаг 5: Сохраните токен в файл .env в корне проекта: BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz

Через BotFather также можно: установить аватар (/setuserpic), описание (/setdescription), команды бота (/setcommands), включить inline-режим (/setinline).

🔧 Хотите бота, который работает? Доверьте разработку профессионалу — напишите мне.

Ваш первый Telegram-бот на Python: Hello World

Начнём с самого простого бота, который отвечает на команду /start. Создайте файл main.py.

Минимальный код бота

import asyncio from aiogram import Bot, Dispatcher, Router, F from aiogram.types import Message

BOT_TOKEN = "ВАШ_ТОКЕН"

bot = Bot(token=BOT_TOKEN) dp = Dispatcher() router = Router()

@router.message(F.text == "/start") async def cmd_start(message: Message): await message.answer("Привет! Я ваш первый бот! 🤖")

dp.include_router(router)

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

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

Запустите: python main.py. Откройте Telegram, найдите своего бота и отправьте /start. Бот ответит!

❌ Без бота

  • Ручные ответы на сообщения 24/7
  • Теряете клиентов в нерабочее время
  • Тратите часы на рутину

✅ С Telegram-ботом

  • Автоматические ответы 24/7
  • Ни один клиент не потерян
  • Вы занимаетесь бизнесом, а не перепиской

Хотите бота, но не хотите разбираться сами?

Я разработаю бота на Python под ваш бизнес с бесплатной поддержкой 30 дней.

Стоимость от 15 000 ₽. Сроки от 3 дней.

Обсудить проект →

Разбор кода

Bot — объект, представляющий вашего бота. Принимает токен от BotFather.

Dispatcher — диспетчер, который маршрутизирует входящие сообщения к нужным обработчикам.

Router — группирует хендлеры. Можно создать несколько роутеров для разных модулей (start, help, admin).

@router.message — декоратор, который регистрирует функцию-обработчик для текстовых сообщений.

F.text == "/start" — фильтр. Хендлер сработает только если текст сообщения равен "/start".

start_polling — запускает бота в режиме polling (постоянно опрашивает сервер Telegram на наличие новых сообщений).

Обзор фреймворков: какой выбрать для Telegram-бота

В экосистеме Python для Telegram есть три основных фреймворка. Каждый имеет свои сильные стороны.

Aiogram 3 (рекомендуемый)

Асинхронный фреймворк, самый популярный в 2026 году. Поддерживает FSM (машину состояний), middleware, роутеры, inline-кнопки, медиа-группы. Быстрый, хорошо документированный, активное сообщество. Идеален для ботов любой сложности — от простых до enterprise-уровня. Работает на asyncio.

python-telegram-bot

Один из старейших фреймворков. С версии 20+ стал полностью асинхронным. Хорошая документация, стабильный API. Подходит для тех, кто предпочитает классический ООП-подход. Менее популярен в русскоязычном сообществе, чем aiogram.

Telebot (pyTelegramBotAPI)

Самый простой фреймворк для начинающих. Синхронный, декоративный API. Минимум boilerplate кода. Но не подходит для сложных проектов: нет FSM, слабая поддержка middleware, медленнее асинхронных аналогов. Хорош для прототипов и учебных проектов.

Полноценный бот на Aiogram 3: пошаговая разработка

Теперь создадим бота с реальной функциональностью: приветствие, меню, обработка команд, работа с базой данных. Используем Aiogram 3 — самый мощный и гибкий фреймворк.

Структура проекта:

bot/ ├── main.py — запуск бота ├── config.py — настройки из .env ├── handlers/ │ ├── __init__.py │ ├── start.py — команда /start │ ├── help.py — команда /help │ └── echo.py — эхо-ответ ├── keyboards/ │ ├── __init__.py │ └── main_menu.py — главное меню ├── database/ │ ├── __init__.py │ ├── engine.py — подключение к БД │ └── models.py — модели таблиц ├── middlewares/ │ └── db.py — middleware для сессий ├── .env — токен и настройки └── requirements.txt — зависимости

Такая структура позволяет разрабатывать бота в команде и легко добавлять новые функции.

Хендлеры: обработка команд и сообщений

Хендлеры — это функции, которые реагируют на действия пользователя. В Aiogram 3 хендлеры регистрируются через роутеры.

Не хотите разбираться в коде?

Я разработаю профессионального Telegram-бота на Python с полным исходным кодом.

Стоимость от 15 000 ₽. Сроки от 3 дней.

Обсудить проект →

Обработка команд

Команды — это сообщения, начинающиеся с /. Примеры: /start, /help, /menu, /order. Обработчик команды:

@router.message(Command("start")) async def cmd_start(message: Message): await message.answer("Добро пожаловать!", reply_markup=main_menu_kb())

@router.message(Command("help")) async def cmd_help(message: Message): await message.answer("Доступные команды:\n/start — начать\n/menu — меню\n/help — помощь")

Обработка текстовых сообщений

Для обработки обычного текста используйте фильтры:

@router.message(F.text == "📋 Меню") async def show_menu(message: Message): await message.answer("Выберите категорию:", reply_markup=categories_kb())

@router.message(F.text) async def echo(message: Message): await message.answer(f"Вы написали: {message.text}")

Важно: хендлеры обрабатываются сверху вниз. Ставьте более специфичные фильтры выше общих, иначе общий хендлер «съест» все сообщения.

Callback-хендлеры (кнопки)

Когда пользователь нажимает инлайн-кнопку, генерируется callback_query:

@router.callback_query(F.data.startswith("category_")) async def show_category(callback: CallbackQuery): category_id = callback.data.split("_")[1] # Получаем товары из БД products = await get_products_by_category(category_id) await callback.message.answer(f"Товары категории {category_id}:") await callback.answer() # Обязательно! Убирает «часики» на кнопке

Клавиатуры и кнопки в Telegram-боте

Клавиатуры — основной способ взаимодействия с пользователем. В Telegram есть два типа клавиатур.

Reply-клавиатуры (обычные кнопки)

Reply-клавиатура появляется вместо стандартной клавиатуры ввода. Кнопки отправляют текст как обычное сообщение.

from aiogram.types import ReplyKeyboardMarkup, KeyboardButton

main_menu_kb = ReplyKeyboardMarkup( keyboard=[ [KeyboardButton(text="📋 Меню"), KeyboardButton(text="📞 Контакты")], [KeyboardButton(text="🛒 Корзина"), KeyboardButton(text="❓ Помощь")], ], resize_keyboard=True, # Автоматический размер )

await message.answer("Выберите действие:", reply_markup=main_menu_kb)

Inline-клавиатуры

Inline-клавиатура прикрепляется к сообщению. Кнопки не отправляют текст, а генерируют callback-запрос.

from aiogram.types import InlineKeyboardMarkup, InlineKeyboardButton

products_kb = InlineKeyboardMarkup( inline_keyboard=[ [InlineKeyboardButton(text="Товар 1 — 1000₽", callback_data="product_1")], [InlineKeyboardButton(text="Товар 2 — 2000₽", callback_data="product_2")], [InlineKeyboardButton(text="🛒 В корзину", callback_data="add_to_cart")], ] )

await message.answer("Выберите товар:", reply_markup=products_kb)

Подключение базы данных: SQLAlchemy + PostgreSQL

Любой серьёзный бот работает с базой данных. Без неё вы не сможете хранить пользователей, заказы, товары и настройки.

Для работы с БД используем SQLAlchemy — самый популярный ORM для Python. Он позволяет работать с таблицами через Python-объекты, без написания SQL-запросов.

Установка: pip install sqlalchemy asyncpg

Модель пользователя:

from sqlalchemy import Column, Integer, BigInteger, String, DateTime from sqlalchemy.ext.declarative import declarative_base from datetime import datetime

Base = declarative_base()

class User(Base): __tablename__ = "users" id = Column(Integer, primary_key=True) telegram_id = Column(BigInteger, unique=True, nullable=False) username = Column(String, nullable=True) full_name = Column(String, nullable=True) created_at = Column(DateTime, default=datetime.utcnow)

Подключение к базе:

from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession from sqlalchemy.orm import sessionmaker

DATABASE_URL = "postgresql+asyncpg://user:password@localhost:5432/bot_db"

engine = create_async_engine(DATABASE_URL) async_session = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)

В middleware создаём сессию для каждого сообщения и передаём её в хендлер. Таким образом хендлер может обращаться к базе данных без глобальных переменных.

💰 Хотите точную смету? Расскажите о задаче — подготовлю оценку за 24 часа. Заказать оценку.

Машина состояний (FSM): сбор данных пошагово

FSM (Finite State Machine) — это механизм, который позволяет собирать данные от пользователя пошагово. Например: «Введите имя» → «Введите телефон» → «Выберите услугу» → «Подтвердите заказ».

В Aiogram 3 FSM реализован через классы состояний:

from aiogram.fsm.state import State, StatesGroup

class OrderStates(StatesGroup): waiting_for_name = State() waiting_for_phone = State() waiting_for_address = State() confirmation = State()

Хендлер, запускающий FSM:

@router.message(F.text == "🛒 Оформить заказ") async def start_order(message: Message, state: FSMContext): await state.set_state(OrderStates.waiting_for_name) await message.answer("Как вас зовут?")

Хендлер для следующего шага:

@router.message(OrderStates.waiting_for_name) async def process_name(message: Message, state: FSMContext): await state.update_data(name=message.text) await state.set_state(OrderStates.waiting_for_phone) await message.answer("Введите номер телефона:")

Получение данных:

@router.message(OrderStates.waiting_for_phone) async def process_phone(message: Message, state: FSMContext): data = await state.get_data() name = data["name"] phone = message.text await state.clear() # Очищаем состояние await message.answer(f"Заказ оформлен!\nИмя: {name}\nТелефон: {phone}")

Webhook vs Polling: какой режим запуска выбрать

Telegram-бот может работать в двух режимах: polling и webhook. Выбор зависит от задач.

Polling (опрос)

Бот периодически опрашивает сервер Telegram: «Есть новые сообщения?». Прост в настройке, не требует сервера с публичным IP. Идеален для разработки и небольших ботов. Минус: небольшая задержка (1-2 секунды), нагрузка на сервер при большом количестве пользователей.

Запуск: await dp.start_polling(bot)

Webhook (вебхук)

Telegram отправляет сообщения на ваш сервер сразу при их поступлении. Мгновенная реакция, меньше нагрузки. Требует сервер с публичным IP и HTTPS-сертификатом. Идеален для продакшена и ботов с большой нагрузкой.

Настройка webhook в Aiogram 3:

from aiogram.webhook.aiohttp_server import setup_application from aiohttp import web

app = web.Application() dp.startup.register(on_startup) setup_application(app, dp, path="/webhook") web.run_app(app, host="0.0.0.0", port=8443)

Telegram отправит POST-запрос на https://your-server.com/webhook при каждом сообщении.

Деплой Telegram-бота на сервер

После разработки бота нужно разместить его на сервере, чтобы он работал 24/7.

VPS (рекомендуемый способ)

Арендуйте VPS: Timeweb от 149₽/мес, Selectel от 200₽/мес, Hetzner от 4€/мес. Установите Ubuntu 22.04, Python 3.10+, создайте systemd-сервис для автозапуска бота при перезагрузке сервера.

Пример systemd-сервиса: [Unit] Description=Telegram Bot After=network.target

[Service] User=botuser WorkingDirectory=/home/botuser/bot ExecStart=/home/botuser/bot/venv/bin/python main.py Restart=always

[Install] WantedBy=multi-user.target

Команды: sudo systemctl enable bot && sudo systemctl start bot

Railway / Render

Бесплатные платформы для деплоя. Подключаете GitHub-репозиторий — бот деплоится автоматически. Не нужно настраивать сервер вручную. Ограничения: бесплатный тариф имеет лимит часов работы (500 часов/мес на Railway). Хорошо для прототипов и учебных проектов.

Docker

Docker контейнеризирует приложение: бот работает одинаково на любом сервере. Создайте Dockerfile:

FROM python:3.11-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . CMD ["python", "main.py"]

Соберите образ: docker build -t mybot . Запустите: docker run -d --name mybot mybot

Обработка ошибок и логирование

Продакшен-бот должен gracefully обрабатывать ошибки. Вот основные практики.

Логирование: используйте модуль logging вместо print(). Логи записываются в файл и помогают отладить проблемы в продакшене.

import logging logging.basicConfig(level=logging.INFO, filename="bot.log") logger = logging.getLogger(__name__)

@router.message() async def handle_all(message: Message): try: # Логика обработки pass except Exception as e: logger.error(f"Ошибка: {e}", exc_info=True) await message.answer("Произошла ошибка. Попробуйте позже.")

Глобальный обработчик ошибок:

@dp.error() async def error_handler(event: ErrorEvent): logger.critical(f"Критическая ошибка: {event.exception}") return True # Подавить ошибку

Retry при сетевых ошибках: используйте aiohttp с автоматическим retry для запросов к внешним API. Не позволяйте временному сбою сети сломать весь диалог.

Готовы заказать Telegram-бота?

✅ Бесплатная консультация

✅ Бесплатная поддержка 30 дней

✅ Полный исходный код на Python

Написать мне в Telegram прямо сейчас →

Частые вопросы

Ответы на самые популярные вопросы о как сделать telegram бота на python

Нужен Telegram-бот на Python от 7 000 ₽?

Создам бота на Python с базой данных, CRM-интеграцией и деплоем на сервер. Бесплатная оценка проекта.

Или посмотрите наши услуги по разработке ботов

Примеры реализованных проектов

Посмотрите мои работы: Telegram-боты, сервисы, CRM и автоматизация для бизнеса

Похожие статьи

Telegram бот для приёма заявок

Telegram бот для приёма заявок от 7 000 ₽. Автоматическая обработка заявок 24/7, уведомления, интеграция с CRM. ROI 300%...

Читать далее

Telegram бот для интернет-магазина

Telegram бот для интернет-магазина от 50 000 ₽. Каталог, корзина, оплата, интеграция с 1С и складом. Бесплатная оценка з...

Читать далее

AI Telegram бот для бизнеса

AI Telegram бот от 30 000 ₽. Внедрение ChatGPT и нейросетей, автоматизация поддержки и продаж, от 7 дней. Бесплатная оце...

Читать далее