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

Python — главный язык для создания ботов: простой синтаксис, тысячи готовых библиотек, огромное сообщество. Этот лонгрид проведёт через весь путь: от выбора библиотеки и регистрации бота до написания кода, подключения кнопок и развёртывания на сервере.

0
% типовых вопросов закрывает бот без оператора
0
/7 — бот работает круглосуточно, без отпусков
0
+ строк на Python хватит для полноценного бота

Шаг 1. Выбираем библиотеку

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

Библиотека Сложность Асинхронность Кому подходит
aiogram 3 Средняя ✔ Нативная Серьёзные проекты, высокие нагрузки
python-telegram-bot Средняя ✔ Через asyncio Универсальный выбор, много документации
pyTelegramBotAPI Низкая ✖ Синхронная Первый бот, прототипы, учебные задачи
Рекомендация: для старта возьмите aiogram 3 — это актуальный стандарт индустрии, и дальнейшие примеры построены на нём.

Шаг 2. Регистрируем бота и получаем токен

  1. Откройте Telegram и найдите @BotFather.
  2. Отправьте команду /newbot.
  3. Придумайте имя бота и username (обязательно заканчивается на bot).
  4. Скопируйте токен — строку вида 123456:ABC-DEF...
⚠ Важно: токен — как пароль. Никогда не публикуйте его в открытом коде и храните в переменных окружения (.env-файл).

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

python -m venv venv
source venv/bin/activate   # Windows: venv\Scripts\activate
pip install aiogram python-dotenv

Шаг 4. Пишем первого бота

Минимальный рабочий бот, который отвечает на команду /start и эхом повторяет сообщения:

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

bot = Bot(token="ВАШ_ТОКЕН")
dp = Dispatcher()

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

@dp.message(F.text)
async def echo(message: Message):
    await message.answer(message.text)

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

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

Запустите файл командой python bot.py — и бот уже отвечает в Telegram.

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

Кнопки — то, что превращает чат в удобный интерфейс. Нажмите на вариант ниже, чтобы увидеть пример кода:

from aiogram.utils.keyboard import ReplyKeyboardBuilder

builder = ReplyKeyboardBuilder()
builder.button(text="📦 Каталог")
builder.button(text="📞 Поддержка")
await message.answer("Выберите раздел:",
    reply_markup=builder.as_markup(resize_keyboard=True))

Как бот общается с сервером

Пользователь
Telegram
⇄
API Telegram
очередь сообщений
⇄
Ваш код на Python
aiogram
⇄
База данных
SQLite / PostgreSQL

Шаг 6. Сценарии диалога: конечные автоматы (FSM)

Чтобы бот задавал вопросы по очереди (имя → телефон → заказ), используйте FSM — механизм состояний в aiogram:

from aiogram.fsm.context import FSMContext
from aiogram.fsm.state import State, StatesGroup

class OrderForm(StatesGroup):
    name = State()
    phone = State()

@dp.message(Command("order"))
async def start_order(m: Message, state: FSMContext):
    await state.set_state(OrderForm.name)
    await m.answer("Как вас зовут?")

@dp.message(OrderForm.name)
async def get_name(m: Message, state: FSMContext):
    await state.update_data(name=m.text)
    await state.set_state(OrderForm.phone)
    await m.answer("Оставьте номер телефона")

Частые ошибки новичков

Токен в коде

Загрузили бота на GitHub вместе с токеном — через час его уже угнали. Решение: .env + python-dotenv.

Блокирующие операции

time.sleep() или тяжёлый запрос внутри хэндлера «вешает» бота для всех пользователей. Используйте await и асинхронные библиотеки.

Нет обработки ошибок

Один непойманный exception роняет polling. Оберните запуск в try/except и настройте логирование.

Шаг 7. Запуск на сервере

Бот на домашнем компьютере работает, только пока открыт ноутбук. Для продакшена арендуйте недорогой VPS и запустите бота через systemd или Docker. Проверочный список:

  • ✅ Токен в переменных окружения, а не в коде
  • ✅ Логирование в файл для разбора ошибок
  • ✅ Автоперезапуск при падении (Restart=always в systemd)
  • ✅ База данных с регулярным бэкапом

Первый бот — это один вечер работы

Установите aiogram, скопируйте пример из шага 4 — и через 30 минут ваш бот уже отвечает на сообщения

Вернуться к коду ↑