Чат-боты давно перестали быть игрушкой энтузиастов. Сегодня они принимают заказы, отвечают на вопросы клиентов, напоминают о встречах и собирают статистику. И самое приятное: чтобы создать собственного бота, не нужны годы опыта — достаточно Python, свободного вечера и этого руководства.

🤖 Что будет в этом руководстве

Полный цикл разработки Telegram-бота на Python: выбор библиотеки, написание кода, добавление кнопок и публикация бота на сервере — с примерами, которые работают.

Почему для ботов выбирают Python

Python занимает первые места в рейтингах популярности языков программирования, и для разработки ботов у него есть три весомых преимущества: простой синтаксис, богатая экосистема библиотек и огромное сообщество. Даже человек, впервые открывший редактор кода, способен за один вечер написать бота, который отвечает на сообщения.

📖
Простой синтаксис
Код читается почти как обычный текст. Логика бота умещается в несколько строк.
🧩
Готовые библиотеки
Aiogram, Telebot и десятки других — не нужно изобретать велосипед.
🌍
Сообщество
Любая ошибка уже кем-то решена — ответ находится за пару минут поиска.

Шаг 1. Регистрация бота в BotFather

Любой Telegram-бот начинается с официального бота-конструктора @BotFather. Процедура занимает не больше двух минут:

  1. Откройте Telegram и найдите @BotFather (у него синяя галочка верификации).
  2. Отправьте команду /newbot.
  3. Придумайте имя бота — оно будет отображаться в чатах.
  4. Придумайте юзернейм — он обязательно должен заканчиваться на bot.
  5. Скопируйте токен — длинную строку вида 123456:ABC-DEF.... Это ключ доступа к вашему боту.
⚠️ Важно: токен — это пароль от бота. Никому не показывайте его и не публикуйте в открытом коде. Если токен утёк, отзовите его командой /revoke у BotFather.

Шаг 2. Выбор библиотеки

Для Telegram Bot API существует несколько Python-библиотек. Две самые популярные сравним в таблице:

Критерий Aiogram 3.x python-telegram-bot
Порог входа Низкий, понятная документация на русском Средний, больше формальностей
Асинхронность Полная поддержка asyncio «из коробки» Поддерживается с версии 20.x
Машина состояний (FSM) Встроенная, удобная Через ConversationHandler
Для кого подходит Новички и быстрые проекты Корпоративные решения, сложная логика

В этом руководстве используется Aiogram 3 — самый популярный выбор среди русскоязычных разработчиков.

Шаг 3. Установка окружения

Перед написанием кода нужно подготовить рабочее окружение. Откройте терминал и выполните команды по очереди:

# Создаём папку проекта
mkdir my_bot && cd my_bot

# Создаём виртуальное окружение
python -m venv venv

# Активируем его
venv\Scripts\activate      # Windows
source venv/bin/activate   # macOS / Linux

# Устанавливаем aiogram
pip install aiogram

Шаг 4. Первый работающий бот

Создайте файл bot.py и вставьте в него следующий код. Это классический «эхо-бот»: он отвечает на команду /start и повторяет любое присланное сообщение.

import asyncio
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message

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

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

@dp.message(CommandStart())
async def cmd_start(message: Message):
    await message.answer(
        "Привет! Я ваш первый бот на Python 🤖"
    )

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

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

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

Замените строку ВАШ_ТОКЕН_ОТ_BOTFATHER на реальный токен и запустите бота командой:

python bot.py
✅ Если в консоли нет ошибок — бот уже работает. Найдите его в Telegram по юзернейму и отправьте /start.

Шаг 5. Добавляем кнопки

Текстовые ответы — это только начало. Реальные боты общаются с пользователем через клавиатуры. Вот как добавить встроенные (inline) кнопки:

from aiogram.types import (
    InlineKeyboardMarkup,
    InlineKeyboardButton,
    CallbackQuery
)
from aiogram import F

keyboard = InlineKeyboardMarkup(inline_keyboard=[
    [InlineKeyboardButton(text="📋 Каталог", callback_data="catalog")],
    [InlineKeyboardButton(text="ℹ️ О нас", callback_data="about")]
])

@dp.message(CommandStart())
async def cmd_start(message: Message):
    await message.answer("Выберите раздел:", reply_markup=keyboard)

@dp.callback_query(F.data == "catalog")
async def show_catalog(callback: CallbackQuery):
    await callback.message.answer("Здесь будет каталог товаров")
    await callback.answer()

Шаг 6. Публикация на сервере

Бот, запущенный на домашнем компьютере, работает только пока открыт терминал. Для круглосуточной работы его нужно разместить на сервере. Существует два подхода:

Polling (опрос)
Бот сам регулярно спрашивает у Telegram, есть ли новые сообщения. Проще в настройке, идеален для старта и небольших проектов. Не требует домена и SSL-сертификата.
Webhook (вебхук)
Telegram сам отправляет сообщения на ваш сервер. Быстрее и экономнее под нагрузкой, но требует домен с HTTPS. Выбор для серьёзных проектов.

Для первого бота достаточно недорогого VPS (виртуального сервера). Алгоритм деплоя выглядит так:

  1. Арендуйте VPS с Ubuntu и подключитесь по SSH.
  2. Установите Python 3.10+ и скопируйте файлы проекта (например, через git).
  3. Создайте виртуальное окружение и установите зависимости.
  4. Настройте автозапуск через systemd, чтобы бот перезапускался после сбоев.

Типичные ошибки новичков

❌ Токен прямо в коде
Храните токен в переменных окружения или файле .env, добавленном в .gitignore.
❌ Один файл на тысячи строк
С ростом проекта разделяйте код: handlers, keyboards, config и логику — по отдельным модулям.
❌ Отсутствие обработки ошибок
Сеть нестабильна. Оборачивайте запросы к API в try/except и добавьте логирование.
❌ Игнорирование лимитов Telegram
Не отправляйте больше ~30 сообщений в секунду разным пользователям — иначе бот получит ограничение.

Куда двигаться дальше

Базовый бот готов, но это только фундамент. Следующие шаги в развитии проекта:

Уровень 1 — Эхо-бот и кнопки
Уровень 2 — FSM и сценарии диалога
Уровень 3 — База данных и платежи
Уровень 4 — Webhook, нагрузка, продакшен
🚀 Главное — начать

Разработка бота на Python — навык, который осваивается практикой. Напишите простого эхо-бота сегодня, добавьте кнопки завтра — и через неделю у вас будет полноценный помощник, которым пользуются реальные люди.