Legan Studio
Все статьи
~ 13 мин чтения

Telegram-бот для интернет-магазина: архитектура и фишки

Разбираем архитектуру e-commerce бота в Telegram: каталог, корзина, оплата, синхронизация с 1С и интеграция с CRM.

  • Telegram
  • e-commerce
  • архитектура
  • интеграции

Telegram-бот для интернет-магазина — это не просто «список товаров с кнопками», а отдельный канал продаж со своей воронкой, корзиной, оплатой и синхронизацией с учётной системой. От правильно собранной архитектуры зависит, выдержит ли бот распродажу и насколько быстро его можно расширять. Ниже — разбор всех модулей: от каталога до возвратов, с цифрами конверсии, таблицами по платежам и CMS, чек-листом запуска и примерами кода.

Какой формат выбрать: бот или Mini App

Если каталог небольшой (до 30 SKU) и сценарий простой — выбрать → добавить в заявку → менеджер свяжется — хватит классического бота с inline-клавиатурами. Как только появляется фильтрация, поиск, варианты товара, корзина и личный кабинет — нужен Mini App. Это полноценный фронтенд внутри Telegram, где можно собрать каталог уровня обычного интернет-магазина.

На практике крупные магазины делают гибрид: бот ловит заявку и общается, Mini App открывает каталог и оформление заказа. Сравнение по конверсии:

ФорматВремя до 1-го экранаГлубина каталогаКонверсия в чек-аутСложность
Inline-каталог300–600 мсдо 200–300 SKU8–14%
Mini App1.5–3 с10 000+ SKU6–11%2.5–3×
Гибридзависит от точки входабез ограничений9–13%

Если SKU меньше 300 и каталог плоский — берите inline. Если больше 1000 позиций и нужны фасетные фильтры — Mini App.

Каталог: структура, фильтры, карточка товара

Каталог в Telegram-боте редко повторяет каталог сайта один в один. Глубокая иерархия из 4–5 уровней утомляет в чате — лучше плоская витрина с поиском и фильтрами через inline-клавиатуру.

Карточка товара — это фото-карусель (1–5 изображений), название, цена, бейдж наличия, краткое описание, кнопки действий:

  • «В корзину» (с выбором количества/варианта),
  • «Подробнее» (раскрывает характеристики),
  • «Похожие» (подбор по категории),
  • «Поделиться» (deep-link на товар).

Минимальный JSON товара, с которым удобно работать:

{
  "sku": "TWK-3A013",
  "title": "Чайник Bosch TWK-3A013",
  "price": 2850,
  "old_price": 3490,
  "currency": "RUB",
  "stock": 14,
  "images": [
    "https://cdn.shop.ru/p/twk3a013-1.jpg",
    "https://cdn.shop.ru/p/twk3a013-2.jpg"
  ],
  "variants": [
    { "id": "white", "label": "Белый", "stock": 9 },
    { "id": "black", "label": "Чёрный", "stock": 5 }
  ],
  "categories": ["kitchen", "kettles"],
  "rating": 4.6,
  "reviews_count": 128
}

Поиск по каталогу обычно делается через pg_trgm в Postgres до 30 000 SKU. Дальше — Meilisearch или Typesense с морфологией и опечатками.

Mini App: когда и зачем

Mini App (Telegram Web App) — это полноценный SPA, который открывается прямо в Telegram. Плюсы: знакомый UX, фасетные фильтры, корзина с пересчётом скидок «на лету», готовые компоненты Telegram UI Kit. Минусы: дольше первый экран, сложнее аналитика, нет SEO.

Что точно делается в Mini App, а не в чате:

  • сравнение товаров,
  • большие каталоги с фильтрами по бренду/цвету/размеру,
  • личный кабинет с историей и бонусами,
  • конструкторы (например, букета или ПК),
  • карта пунктов самовывоза.

Авторизация в Mini App — через initData, который Telegram подписывает HMAC-SHA256 секретом бота. На бэкенде валидируем подпись и доверяем user_id.

Корзина и состояние

Корзина — самое чувствительное место. Если пользователь добавил товары и закрыл Telegram, он должен вернуться и увидеть их же. Это значит:

  • хранить корзину на сервере, а не в localStorage Mini App;
  • проверять остатки на каждом шаге чек-аута, а не при добавлении;
  • блокировать остаток при создании заказа на короткий TTL (например, 10 минут), чтобы товар не «улетел» на оплате;
  • разрешать изменить количество, удалить позицию, очистить корзину одной кнопкой.

Пример callback-обработки кнопки «+1» в корзине:

@router.callback_query(F.data.startswith("cart:inc:"))
async def cart_increment(cb: CallbackQuery, session: Session):
    sku = cb.data.split(":")[2]
    cart = await cart_repo.get_or_create(cb.from_user.id)
    item = cart.find(sku)
    stock = await stock_repo.available(sku)
    if item.qty + 1 > stock:
        await cb.answer("Больше нет в наличии", show_alert=True)
        return
    item.qty += 1
    await cart_repo.save(cart)
    await cb.message.edit_text(
        render_cart(cart),
        reply_markup=cart_keyboard(cart),
    )
    await cb.answer()

Для синхронизации остатков с 1С обычно достаточно периодической задачи раз в 5–15 минут плюс инвалидация по событию заказа.

Оплата: способы и тарифы

В России в 2026 году эквайринг для Telegram-ботов выглядит так:

СпособКомиссияЗачислениеОсобенности
СБП (QR / номер телефона)0.4–0.7%мгновеннолучшая конверсия на мобильных
Карта (3-D Secure)1.8–2.5%T+1привычно для аудитории 35+
ЮKassa2.8%T+1агрегатор «всё в одном»
CloudPayments2.3–2.8%T+1удобный API, рекуррент
Telegram Payments (через провайдера)как у провайдеракак у провайдеранативная кнопка «Pay» в чате
Telegram Stars~30% (комиссия Telegram)в Starsтолько для цифровых товаров, физические запрещены
Долями / Подели4–6%T+1повышает AOV на 15–25%
Наличные при получении0%при выдачеконверсия в выкуп −20…40%

Важно: Telegram Stars нельзя использовать для физических товаров — это нарушение правил платформы и риск блокировки бота. Звёздами оплачиваются подписки, доступ к контенту, цифровые услуги.

Webhook от платёжной системы должен быть идемпотентным: один и тот же payment_id не должен дважды списать товар или дважды отправить чек. Простая защита — уникальный индекс на (payment_id, event_type) в таблице payment_events.

Доставка: расчёт и ПВЗ

Расчёт доставки в боте делается на лету по API курьерских служб:

  • СДЭК — REST /v2/calculator/tariff, кэш на 1 час по ключу (from, to, weight, dims).
  • Boxberry — XML API, шире сеть ПВЗ в малых городах.
  • Почта Россииtariff.russianpost.ru, нестабильный, дублируем своим справочником.
  • Boxberry/СДЭК ПВЗ — отдельная ручка на список точек по городу с координатами для карты.
  • Курьер собственный — зональная сетка (район → цена).

Выбор пункта самовывоза удобнее всего делать через Mini App с картой (Яндекс.Карты, 2GIS). В чистом чате — список ближайших с адресом и расписанием.

Адрес курьерской доставки собираем минимум через DaData suggestions, чтобы не вычислять опечатки на этапе сборки.

Статусы заказа и уведомления

Стандартная цепочка статусов:

  1. new — заказ создан, ждёт оплаты.
  2. paid — оплата прошла, чек ушёл.
  3. assembled — собран на складе.
  4. shipped — передан в доставку, есть трек.
  5. delivered — пришёл в ПВЗ или к клиенту.
  6. received — клиент забрал/вручён.
  7. returned / cancelled — терминальные ветки.

На каждый переход бот шлёт сообщение пользователю. Источников статусов несколько (учётка + курьер) — все нормализуем в общий словарь, иначе в чате будет каша из «processed», «оформлен», «передан в обработку».

Программа лояльности, промокоды, кешбек

Минимальный набор инструментов удержания:

  • Промокоды — процент / фикс / подарок / бесплатная доставка / реферальный.
  • Кешбек — 3–10% от суммы оплаченного и полученного заказа (не оплаты, иначе бонусы уйдут на возвраты).
  • Дисконт по уровням — Silver/Gold/Platinum по сумме покупок за 12 месяцев.
  • Закрытые акции для подписчиков канала — связка бот + канал.

Промокоды защищаем от перерасхода атомарной транзакцией: INSERT ... ON CONFLICT DO NOTHING в promo_usage плюс UPDATE promo SET used_count = used_count + 1 WHERE used_count < max_uses. Если апдейт затронул 0 строк — лимит исчерпан, откатываем.

Брошенная корзина и реферальная программа

Брошенная корзина — корзина без активности и оплаты больше суток. Простая механика возврата:

  • через 2 часа — мягкое напоминание («ваш чайник ждёт»);
  • через 24 часа — промокод −5% или бесплатная доставка;
  • через 72 часа — финальное напоминание и снятие из активных.

Метрика — recovery rate. У качественно настроенного бота это 10–20%, что заметно выше email-рассылок (3–5%).

Реферальная программа в Telegram реализуется через start с параметром: t.me/shop_bot?start=ref_123456. Приглашающий получает бонус (фикс или % от первой покупки реферала), приглашённый — приветственную скидку. Двусторонняя механика даёт виральный коэффициент 1.2–1.6 в первом цикле.

Отзывы, NPS и возвраты

После статуса received через 3–7 дней бот спрашивает оценку. Минимальный сценарий:

  1. «Как вам {title}?» — 5 звёзд кнопками.
  2. Оценка 4–5 → «Спасибо! Оставите отзыв на сайте?» (deep-link на карточку).
  3. Оценка 1–3 → «Что пошло не так?» с вариантами + свободный текст → задача менеджеру.

NPS («порекомендуете нас друзьям от 0 до 10?») считаем раз в квартал по активным клиентам. Промоутеры (9–10) — основа реферальной программы.

Возврат оформляется в боте: кнопка «Оформить возврат» в карточке заказа доступна 14 дней (по 26-ФЗ ЗоЗПП — 7 дней для дистанционной торговли с момента получения для товара надлежащего качества). Пользователь выбирает позиции, причину, при браке прикладывает фото. Деньги возвращаются тем же способом, которым оплачивали (по 161-ФЗ).

Интеграции с CMS и учётными системами

Telegram-бот сам по себе не источник правды. Реальные остатки, цены, заказы живут в CMS или товароучётной системе. Сравнение популярных в РФ платформ:

ПлатформаAPIWebhooksТипичная задача
1С-БитриксREST + CommerceMLдабольшие магазины, B2C/B2B
InSalesREST JSONдасредний e-commerce, быстрый старт
OpenCartREST через модуличерез расширениямалый бизнес, кастом
TildaAPI товаров + Webhook заказабазоволендинг + витрина
ShopifyGraphQL/RESTдамеждународные магазины
МойСкладREST JSONдасклад + продажи
1С:Розница / УТCommerceML 2.x (XML)через регламентклассика розницы РФ
RetailCRMRESTдамаркетинговые триггеры

Универсальное правило: всегда есть внутренняя БД заказов в боте, и обмен с учёткой — асинхронный (очередь + ретраи). Если 1С упала на час, магазин продолжает принимать заказы и копит их в очереди, синхронизация догоняется потом.

Грабли 1С:CommerceML:

  • большой архив каталога ломает онлайн-обновления;
  • кодировка windows-1251 в старых конфигурациях;
  • конфликты префиксов нумерации заказов;
  • расхождения справочников единиц измерения (шт vs штук vs pcs).

Аналитика: воронка, AOV, retention

Минимум, который стоит снимать с бота:

  • открытие каталога,
  • открытие карточки товара,
  • добавление в корзину,
  • начало чек-аута,
  • выбор оплаты,
  • успешная оплата,
  • отказ на каждом шаге.

Базовые метрики магазина в Telegram:

МетрикаНормаХорошо
CR каталог → корзина6–12%15%+
CR корзина → оплата35–55%60%+
AOV (средний чек)зависит от ниши+15–25% к сайту с BNPL
Recovery rate (брошенные)10–15%20%+
Repeat purchase rate (90 дн)18–25%30%+
NPS40–5560+

Стандартный стек — таблица событий в Postgres + Metabase, либо Amplitude/Mixpanel для продуктовой аналитики Mini App.

Фискализация по 54-ФЗ

Каждая оплата в Telegram-боте — это расчёт по 54-ФЗ, чек обязателен. Типовые пути:

  • Атол Онлайн — облачная касса, REST API, чек уходит за 1–3 секунды.
  • OFD.ru / Первый ОФД — оператор фискальных данных, печать через облачную кассу.
  • YooKassa / CloudPayments со встроенной фискализацией — провайдер сам пробивает чек.
  • Чек коррекции — отдельный сценарий при возврате/частичном возврате.

Чек должен уйти даже при задержке ответа банка — это решается фоновой очередью с ретраями. Email/телефон для отправки чека собираем на этапе чек-аута (без них чек невалиден).

Чек-лист готовности магазина к запуску

  • Каталог отдаёт карточку быстрее 1–2 секунд (95-й перцентиль).
  • Поиск по названию работает с опечатками (pg_trgm или Meilisearch).
  • Корзина переживает перезапуск бота (Redis с AOF/RDB).
  • Soft-reserve остатков с TTL и фоновой очисткой.
  • Идемпотентные webhook оплаты (уникальный индекс по payment_id).
  • Чек по 54-ФЗ уходит в ОФД даже при задержке банка.
  • Промокоды защищены от двойного применения транзакцией.
  • Брошенные корзины догоняются через 2 / 24 / 72 часа.
  • Реферальная программа работает через deep-link ?start=ref_*.
  • Расчёт доставки кэшируется и не падает при недоступности API курьера.
  • Региональные ограничения проверяются ДО формы оплаты.
  • Синхронизация с CMS/учёткой асинхронная, с очередью и ретраями.
  • Возврат оформляется в боте без звонка менеджеру для типовых случаев.
  • Подключены метрики: CR воронки, AOV, recovery rate, NPS.
  • Юридические документы: оферта, согласие на ПДн, политика возвратов.
  • Нагрузочное тестирование под 3× ожидаемый пик (Чёрная пятница).

Производительность и пики

В распродажу нагрузка вырастает в 5–20 раз. Что закладывают заранее:

  • очередь между Telegram и обработчиком (Redis Streams, RabbitMQ);
  • горизонтальное масштабирование воркеров;
  • отдельный пул соединений к 1С (с лимитами и таймаутами);
  • кэш каталога с инвалидацией по событию;
  • алерты по очередям и времени отклика Bot API.

Типичная архитектура «Postgres + Redis + Go/Python бот + 1 worker» комфортно держит 5 000–20 000 SKU, 300–500 одновременных пользователей и 30 000–50 000 заказов в месяц без шардинга.

Итого

Telegram-бот для интернет-магазина — это связка фронта (Mini App или inline), бота, middleware к учётной системе и CRM. Сильная сторона — удержание и сервис: корзина, оплата, статусы, повторные продажи в одном окне без переключений. Узкие места — синхронизация с учёткой, аккуратная работа с уведомлениями (чтобы не превратить бот в спам) и фискализация по 54-ФЗ. Бюджет полноценного e-commerce бота — обычно 400 000–1 500 000 ₽, сроки — 4–10 недель в зависимости от глубины интеграций. При правильной архитектуре конверсия из карточки в оплату стабильно выше, чем у мобильного веба того же магазина.

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

Бот или Mini App для интернет-магазина в Telegram?

Зависит от размера каталога и сложности воронки. Если каталог небольшой (до 30 SKU) и сценарий простой (выбрать → добавить в заявку → менеджер свяжется) — хватит классического бота с inline-клавиатурами. Как только появляется фильтрация, поиск, варианты товара, корзина и личный кабинет — нужен Mini App, полноценный фронтенд внутри Telegram уровня обычного интернет-магазина. На практике крупные магазины делают гибрид: бот ловит заявку и общается, Mini App открывает каталог и оформление заказа.

Какие способы оплаты подключают в Telegram-боте магазина?

В России в 2026 году стандартный набор — СБП (комиссия 0.4–0.7%, моментальное зачисление), карты через ЮKassa или CloudPayments (2.3–2.8%), Telegram Payments как нативная кнопка Pay в чате, BNPL Долями/Подели для повышения среднего чека. Telegram Stars использовать для физических товаров нельзя — это нарушение правил платформы, звёздами оплачиваются только цифровые товары и услуги. Webhook платёжной системы обязательно делается идемпотентным через уникальный индекс по payment_id, иначе при ретрансляции вы дважды спишете товар или дважды отправите чек.

С какими CMS и учётными системами интегрируется Telegram-бот магазина?

Самые частые в РФ — 1С-Битрикс (REST + CommerceML), InSales (REST JSON, быстрый старт), OpenCart, Tilda (API товаров + webhook заказа), Shopify для международных проектов, МойСклад (REST JSON, лимит 45 запросов/3 секунды), 1С:Розница и 1С:УТ через CommerceML 2.x, RetailCRM для маркетинговых триггеров. Универсальное правило — обмен асинхронный, через очередь с ретраями, у бота всегда своя БД заказов. Прямой синхронный «создать заказ в 1С при оплате» — гарантированный downtime магазина при любой проблеме у бухгалтерии.

Как считать доставку и выбирать пункт самовывоза в боте?

Расчёт делается на лету по REST API курьерских служб: СДЭК (/v2/calculator/tariff), Boxberry (XML API, широкая сеть ПВЗ в малых городах), Почта России (tariff.russianpost.ru, нестабильный — дублируем своим справочником). Результат кэшируется на 1 час по ключу (откуда, куда, вес, габариты). Выбор пункта самовывоза удобнее в Mini App с картой Яндекс.Карты или 2GIS. В чистом чате — список ближайших ПВЗ с адресом и расписанием. Адрес курьерской доставки собирается через DaData suggestions, чтобы избежать опечаток на этапе сборки заказа.

Как работает программа лояльности и возврат брошенных корзин?

Минимальный набор удержания: промокоды (процент/фикс/подарок/бесплатная доставка/реферальный), кешбек 3–10% от полученного заказа (не от оплаты, иначе бонусы уйдут на возвраты), уровни Silver/Gold/Platinum по сумме за 12 месяцев. Брошенная корзина догоняется через 2 часа мягким напоминанием, через 24 часа — промокодом −5% или бесплатной доставкой, через 72 часа — финальным напоминанием. Recovery rate качественного бота — 10–20% против 3–5% у email. Реферальная программа реализуется через deep-link ?start=ref_* с двусторонним бонусом — приглашающему фикс или процент от первой покупки реферала, приглашённому скидка.

Как соблюдать 54-ФЗ и фискализировать оплаты в Telegram-боте?

Каждая оплата в боте — расчёт по 54-ФЗ, чек обязателен. Типовые пути: облачная касса Атол Онлайн с REST API (чек уходит за 1–3 секунды), интеграция с ОФД (OFD.ru, Первый ОФД), либо YooKassa и CloudPayments со встроенной фискализацией, когда провайдер сам пробивает чек. Email или телефон для отправки чека собираем на этапе чек-аута, без них чек невалиден. Чек коррекции при возврате или частичном возврате — отдельный сценарий. Чек должен уйти в ОФД даже при задержке ответа банка, поэтому отправка делается фоновой очередью с ретраями, а не синхронно в момент оплаты.

Сколько стоит и сколько времени занимает разработка Telegram-бота для магазина?

Полноценный e-commerce бот с каталогом, корзиной, оплатой, доставкой, статусами, программой лояльности и интеграцией с учёткой — 400 000–1 500 000 ₽, сроки 4–10 недель в зависимости от глубины интеграций. Простой каталог-витрина с заявкой менеджеру — от 80 000–150 000 ₽ за 2–3 недели. Mini App добавляет 1.5–2× к стоимости и срокам. Самые ёмкие части — интеграция с 1С (CommerceML, нумерация, кодировки), фискализация, обработка возвратов и нагрузочное тестирование под пики распродаж. Архитектурно правильный бот выдерживает 5–20× рост трафика на Чёрной пятнице, кривой — падает на 200 заказах в час.