Telegram-бот для интернет-магазина — это не просто «список товаров с кнопками», а отдельный канал продаж со своей воронкой, корзиной, оплатой и синхронизацией с учётной системой. От правильно собранной архитектуры зависит, выдержит ли бот распродажу и насколько быстро его можно расширять. Ниже — разбор всех модулей: от каталога до возвратов, с цифрами конверсии, таблицами по платежам и CMS, чек-листом запуска и примерами кода.
Какой формат выбрать: бот или Mini App
Если каталог небольшой (до 30 SKU) и сценарий простой — выбрать → добавить в заявку → менеджер свяжется — хватит классического бота с inline-клавиатурами. Как только появляется фильтрация, поиск, варианты товара, корзина и личный кабинет — нужен Mini App. Это полноценный фронтенд внутри Telegram, где можно собрать каталог уровня обычного интернет-магазина.
На практике крупные магазины делают гибрид: бот ловит заявку и общается, Mini App открывает каталог и оформление заказа. Сравнение по конверсии:
| Формат | Время до 1-го экрана | Глубина каталога | Конверсия в чек-аут | Сложность |
|---|---|---|---|---|
| Inline-каталог | 300–600 мс | до 200–300 SKU | 8–14% | 1× |
| Mini App | 1.5–3 с | 10 000+ SKU | 6–11% | 2.5–3× |
| Гибрид | зависит от точки входа | без ограничений | 9–13% | 3× |
Если 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, он должен вернуться и увидеть их же. Это значит:
- хранить корзину на сервере, а не в
localStorageMini 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+ |
| ЮKassa | 2.8% | T+1 | агрегатор «всё в одном» |
| CloudPayments | 2.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, чтобы не вычислять опечатки на этапе сборки.
Статусы заказа и уведомления
Стандартная цепочка статусов:
new— заказ создан, ждёт оплаты.paid— оплата прошла, чек ушёл.assembled— собран на складе.shipped— передан в доставку, есть трек.delivered— пришёл в ПВЗ или к клиенту.received— клиент забрал/вручён.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 дней бот спрашивает оценку. Минимальный сценарий:
- «Как вам {
title}?» — 5 звёзд кнопками. - Оценка 4–5 → «Спасибо! Оставите отзыв на сайте?» (deep-link на карточку).
- Оценка 1–3 → «Что пошло не так?» с вариантами + свободный текст → задача менеджеру.
NPS («порекомендуете нас друзьям от 0 до 10?») считаем раз в квартал по активным клиентам. Промоутеры (9–10) — основа реферальной программы.
Возврат оформляется в боте: кнопка «Оформить возврат» в карточке заказа доступна 14 дней (по 26-ФЗ ЗоЗПП — 7 дней для дистанционной торговли с момента получения для товара надлежащего качества). Пользователь выбирает позиции, причину, при браке прикладывает фото. Деньги возвращаются тем же способом, которым оплачивали (по 161-ФЗ).
Интеграции с CMS и учётными системами
Telegram-бот сам по себе не источник правды. Реальные остатки, цены, заказы живут в CMS или товароучётной системе. Сравнение популярных в РФ платформ:
| Платформа | API | Webhooks | Типичная задача |
|---|---|---|---|
| 1С-Битрикс | REST + CommerceML | да | большие магазины, B2C/B2B |
| InSales | REST JSON | да | средний e-commerce, быстрый старт |
| OpenCart | REST через модули | через расширения | малый бизнес, кастом |
| Tilda | API товаров + Webhook заказа | базово | лендинг + витрина |
| Shopify | GraphQL/REST | да | международные магазины |
| МойСклад | REST JSON | да | склад + продажи |
| 1С:Розница / УТ | CommerceML 2.x (XML) | через регламент | классика розницы РФ |
| RetailCRM | REST | да | маркетинговые триггеры |
Универсальное правило: всегда есть внутренняя БД заказов в боте, и обмен с учёткой — асинхронный (очередь + ретраи). Если 1С упала на час, магазин продолжает принимать заказы и копит их в очереди, синхронизация догоняется потом.
Грабли 1С:CommerceML:
- большой архив каталога ломает онлайн-обновления;
- кодировка
windows-1251в старых конфигурациях; - конфликты префиксов нумерации заказов;
- расхождения справочников единиц измерения (
штvsштукvspcs).
Аналитика: воронка, 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%+ |
| NPS | 40–55 | 60+ |
Стандартный стек — таблица событий в 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 заказах в час.