Бот для приёма заказов — одна из самых востребованных задач в разработке Telegram-ботов. Такой бот заменяет call-центр, работает 24/7 и увеличивает средний чек за счёт грамотного UX. В этом гайде мы пошагово разберём, как спроектировать и построить такого бота: от выбора технологического стека до интеграции с платёжными системами и CRM.
Статья будет полезна как разработчикам, которые хотят построить бота самостоятельно, так и предпринимателям, которым важно понимать техническую сторону, чтобы грамотно ставить ТЗ подрядчику. Если вас интересуют реальные результаты внедрения таких ботов, загляните в нашу подборку бизнес-кейсов с ROI 300%+.
Шаг 1: Выбор технологического стека
Язык программирования
Для разработки Telegram-ботов наиболее популярны три языка: Python, Node.js и Go. Каждый имеет свои преимущества, но для бота приёма заказов мы рекомендуем Python. Причины:
- Богатая экосистема библиотек. aiogram 3.x — зрелый асинхронный фреймворк для работы с Telegram Bot API, который активно развивается и поддерживается сообществом.
- Простота интеграций. Для Python существуют готовые SDK практически для любой внешней системы: CRM, платёжные шлюзы, базы данных, системы аналитики.
- Скорость разработки. На Python прототип бота собирается за 1–2 дня, а полноценный MVP — за 1–2 недели.
- Низкий порог входа. Если у вас в команде нет узкого специалиста по ботам, любой Python-разработчик быстро разберётся в aiogram.
Фреймворк: aiogram 3.x
aiogram — это асинхронный фреймворк для Telegram Bot API на Python. Версия 3.x принесла существенные улучшения: роутеры, middleware-систему, встроенную поддержку FSM (конечных автоматов), улучшенную типизацию. Для бота приёма заказов это критически важно, потому что пользовательский сценарий — это цепочка состояний: выбор категории, выбор товара, корзина, адрес, оплата.
База данных
Для бота заказов рекомендуем PostgreSQL. Почему не SQLite или MongoDB:
- PostgreSQL обеспечивает целостность данных через транзакции — это критично для работы с заказами и платежами. Нельзя допустить ситуацию, когда деньги списались, а заказ не создался.
- Масштабируемость. PostgreSQL спокойно обрабатывает тысячи одновременных подключений. SQLite блокируется при записи, что при 100+ активных пользователях создаст проблемы.
- JSON-поля. PostgreSQL поддерживает JSONB, что позволяет хранить структурированные данные (состав заказа, параметры товара) без необходимости создавать десятки таблиц.
Для взаимодействия с базой используйте SQLAlchemy 2.0 с асинхронным драйвером asyncpg — это обеспечит и производительность, и удобство работы.
Инфраструктура
- Redis — для хранения состояний FSM и кэширования каталога. Состояния конечного автомата (в какой точке сценария находится пользователь) должны храниться в Redis, а не в памяти процесса, иначе при перезапуске бота все пользователи потеряют прогресс.
- Docker — для контейнеризации и единообразия окружения.
- Nginx — как reverse proxy для webhook-режима работы бота.
Шаг 2: Архитектура бота
Правильная архитектура — основа поддерживаемого и масштабируемого бота. Вот структура проекта, которую мы используем:
Структура каталогов
Проект делится на несколько ключевых модулей. Модуль handlers содержит обработчики команд и сообщений, разделённые по функциональности: start, catalog, cart, order, payment, admin. Модуль states описывает конечные автоматы для каждого пользовательского сценария. Модуль keyboards содержит фабрики клавиатур (inline и reply). Модуль services — бизнес-логика: работа с заказами, каталогом, оплатой. Модуль models — ORM-модели для базы данных. Модуль integrations — клиенты для внешних систем (CRM, платёжный шлюз). Модуль middlewares — промежуточные обработчики (авторизация, логирование, rate limiting).
Конечный автомат (FSM)
Сценарий оформления заказа — это цепочка состояний. Проектирование FSM — один из самых важных этапов. Вот основные состояния для бота заказов:
- Главное меню — пользователь выбирает действие: каталог, корзина, мои заказы, помощь.
- Просмотр категорий — список категорий товаров с inline-кнопками.
- Просмотр товаров — товары внутри категории с фото, описанием и ценой.
- Детали товара — подробная карточка с кнопками «В корзину» и «Назад».
- Корзина — список добавленных товаров с возможностью изменить количество или удалить.
- Ввод адреса — пользователь отправляет адрес доставки (текстом или геолокацией).
- Подтверждение заказа — итоговая сумма, адрес, состав. Кнопки: «Оплатить», «Изменить», «Отменить».
- Оплата — переход к оплате через ЮKassa или Telegram Payments.
- Заказ создан — подтверждение с номером заказа и ожидаемым временем доставки.
Важно: каждый переход между состояниями должен иметь обработку ошибок и возможность вернуться назад. Это одна из частых ошибок при разработке ботов — отсутствие навигации «назад».
Шаг 3: Проектирование базы данных
Основные таблицы
Для бота заказов необходим следующий минимальный набор таблиц:
Таблица users. Хранит данные пользователей Telegram: telegram_id (уникальный идентификатор), username, first_name, phone, адрес по умолчанию, дата регистрации, дата последней активности. Telegram_id — это первичный способ идентификации пользователя.
Таблица categories. Категории товаров: id, название, описание, изображение, порядок сортировки, флаг активности. Поддерживайте вложенность категорий через parent_id, если ассортимент большой.
Таблица products. Товары: id, category_id, название, описание, цена, изображение, наличие, порядок сортировки, флаг активности. Храните описание и короткое описание отдельно — короткое показывайте в списке, полное — в карточке товара.
Таблица orders. Заказы: id, user_id, статус (new, confirmed, cooking, delivery, delivered, cancelled), адрес доставки, общая сумма, дата создания, дата обновления, внешний ID платежа.
Таблица order_items. Позиции заказа: id, order_id, product_id, quantity, цена на момент заказа. Важно: храните цену на момент заказа, а не ссылку на текущую цену товара, потому что цены могут измениться.
Таблица cart_items. Корзина: id, user_id, product_id, quantity. Корзину можно хранить и в Redis для скорости, но если вы хотите, чтобы корзина сохранялась между сессиями — используйте PostgreSQL.
Индексы
Обязательные индексы: по telegram_id в таблице users (уникальный), по category_id в products, по user_id в orders, по order_id в order_items. Без этих индексов при росте данных бот начнёт тормозить.
Шаг 4: Каталог и корзина
Отображение каталога
Каталог показывается через inline-клавиатуры. Для каждой категории создаётся кнопка с callback_data в формате category:{id}. При нажатии бот загружает товары этой категории и показывает их по одному (карусельный режим) или списком.
Рекомендуем карусельный режим для товаров с фото: одно сообщение с фотографией, названием, ценой и кнопками «В корзину» и навигацией «Назад / Далее». Это создаёт опыт, похожий на листание карточек в интернет-магазине.
Для оптимизации кэшируйте каталог в Redis с TTL 5–15 минут. Изменения в каталоге через админ-панель должны инвалидировать кэш.
Работа с корзиной
Корзина — критический элемент UX. Ошибки в реализации корзины напрямую влияют на конверсию. Вот принципы, которые мы соблюдаем:
- Мгновенная обратная связь. При добавлении товара в корзину — уведомление с текущим составом и суммой.
- Изменение количества — inline-кнопками «+» и «−», без необходимости вводить число.
- Удаление — свайп или кнопка «Удалить» рядом с каждой позицией.
- Пустая корзина — не просто «Корзина пуста», а кнопка «Перейти в каталог».
- Сохранение между сессиями — клиент вернётся через день и увидит свою корзину.
Шаг 5: Интеграция с оплатой
ЮKassa (ранее Яндекс.Касса)
ЮKassa — наиболее популярный платёжный шлюз для российского рынка. Интеграция с Telegram-ботом происходит одним из двух способов:
Способ 1: Telegram Payments API. Telegram имеет встроенный механизм оплаты. Вы регистрируете ЮKassa как платёжного провайдера через @BotFather, и бот отправляет пользователю «invoice» — встроенную форму оплаты прямо внутри Telegram. Преимущество: пользователь не покидает мессенджер. Недостаток: ограниченные возможности кастомизации.
Способ 2: Ссылка на оплату. Бот формирует платёж через API ЮKassa и отправляет пользователю кнопку со ссылкой на оплату. Пользователь переходит на страницу ЮKassa, оплачивает и возвращается в бота. Преимущество: полный контроль над процессом, поддержка всех способов оплаты. Недостаток: пользователь покидает Telegram.
Мы рекомендуем способ 1 для простых заказов и способ 2, если вам нужна рассрочка, рекуррентные платежи или специфические способы оплаты.
Обработка вебхуков оплаты
После успешной оплаты ЮKassa отправляет webhook на ваш сервер. Критически важно:
- Проверять подпись webhook, чтобы исключить подделку.
- Обрабатывать идемпотентно — один и тот же webhook может прийти несколько раз.
- Менять статус заказа атомарно внутри транзакции базы данных.
- Отправлять пользователю подтверждение только после успешного обновления статуса в базе.
Шаг 6: Интеграция с CRM
Зачем нужна CRM-интеграция
Бот собирает заказы, но обработкой занимаются люди. CRM-интеграция позволяет: автоматически создавать сделку или заявку при новом заказе, прикреплять историю переписки, триггерить автоматизации (например, отправку SMS при смене статуса), строить аналитику по источникам заказов.
Популярные CRM для интеграции
amoCRM. Хорошо подходит для малого и среднего бизнеса. Имеет открытый REST API, SDK для Python. Интеграция занимает 1–2 дня.
Битрикс24. Популярна в сегменте среднего бизнеса. REST API с широкими возможностями, но более сложная структура данных. Интеграция — 2–4 дня.
1С. Для крупного бизнеса, особенно если заказы должны сразу попадать в учётную систему. Интеграция через HTTP-сервисы 1С или промежуточный API. Интеграция — 3–7 дней.
При проектировании интеграции используйте паттерн «очередь сообщений»: бот отправляет событие о новом заказе в очередь (Redis, RabbitMQ), а отдельный воркер обрабатывает его и отправляет в CRM. Это обеспечивает устойчивость: если CRM недоступна, заказ не потеряется.
Шаг 7: Админ-панель
Без админ-панели бот бесполезен для бизнеса. Владелец должен иметь возможность:
- Управлять каталогом. Добавлять, редактировать, удалять категории и товары. Менять цены, описания, фото. Включать/выключать позиции.
- Управлять заказами. Видеть новые заказы, менять статусы, связываться с клиентом.
- Видеть аналитику. Количество заказов за период, средний чек, популярные товары, конверсия по этапам воронки.
- Настраивать бота. Тексты приветствия, время работы, минимальная сумма заказа, зоны доставки.
Админ-панель можно реализовать двумя способами: как отдельного Telegram-бота (быстрее в разработке, но ограничен по UX) или как веб-панель (красивее и функциональнее, но дороже). Для MVP рекомендуем Telegram-бота для администратора, а по мере роста — переход на веб-панель.
Шаг 8: Деплой и мониторинг
Polling vs Webhook
Telegram Bot API поддерживает два режима получения обновлений:
Long Polling — бот постоянно опрашивает серверы Telegram. Проще в настройке, не требует SSL-сертификата и белого IP. Подходит для разработки и небольших нагрузок.
Webhook — Telegram отправляет обновления на ваш сервер. Быстрее реагирует, меньше нагрузка на сервер. Требует SSL-сертификат и доменное имя. Рекомендуется для продакшена.
Минимальная конфигурация сервера
Для бота с нагрузкой до 1 000 пользователей в день достаточно VPS с 1 vCPU, 2 ГБ RAM и 20 ГБ SSD. Стоимость — от 500 рублей в месяц. Для более высоких нагрузок масштабируйте горизонтально: несколько воркеров бота за балансировщиком.
Мониторинг
Обязательно настройте: логирование всех ошибок в Sentry, мониторинг доступности через UptimeRobot, метрики бота (количество активных пользователей, заказов, ошибок) через Prometheus + Grafana, алерты в Telegram-чат администратора при критических ошибках.
Сколько времени занимает разработка
| Этап |
Срок |
| Проектирование и ТЗ |
2–3 дня |
| Каталог и корзина |
3–5 дней |
| Оформление заказа и FSM |
2–3 дня |
| Интеграция с оплатой |
2–3 дня |
| Интеграция с CRM |
2–4 дня |
| Админ-панель |
3–5 дней |
| Тестирование и деплой |
2–3 дня |
| Итого |
16–26 дней |
Это сроки для одного разработчика. При командной работе можно уложиться в 10–14 дней. MVP без CRM-интеграции и расширенной админки — за 7–10 дней.
Что дальше
После запуска MVP важно не останавливаться. Собирайте обратную связь от пользователей, анализируйте метрики и итерируйте. Типичные направления развития:
- Рекомендации. На основе истории заказов предлагайте сопутствующие товары.
- Программа лояльности. Баллы за заказы, промокоды, реферальная программа.
- Push-уведомления. Напоминания о незавершённых заказах, акции, новинки.
- Аналитика. A/B-тесты текстов и UX, воронки конверсии, когортный анализ.
Также рекомендуем изучить новые возможности Telegram Bot API 2026 — они открывают много интересных сценариев, таких как платежи через Telegram Stars и Mini Apps.
Если вы хотите получить бота для приёма заказов «под ключ» — с интеграциями, админкой и поддержкой — обращайтесь к нам. Мы разрабатываем Telegram-ботов с 2020 года и знаем, как сделать бота, который приносит деньги, а не головную боль.