Все статьи
Интеграции30 июля 2026 11 мин

Одна бонусная программа для магазина и сайта: как связать офлайн и онлайн

Типичная картина в рознице: в магазине работает бонусная программа на кассе, а на сайте — отдельные промокоды из таблицы. Клиент копит бонусы офлайн, заходит оформить заказ онлайн, вводит телефон — и не видит ни баланса, ни истории. Для него это выглядит однозначно: «программа не работает». И он прав — двух программ лояльности не бывает, бывает ноль.

Разберём, как собрать единую бонусную программу для интернет-магазина и офлайн-точек: что должно быть общим, почему ключом клиента должен быть телефон, где ломается списание бонусов на сайте и в каком порядке всё это подключать, чтобы не собирать базу заново.

Единая бонусная программа для офлайн-магазина и сайта

Почему две программы лояльности — это ноль программ

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

Клиент не понимает, где его бонусы. Продавец на кассе не видит онлайн-заказов и не может ответить на вопрос. Маркетолог считает средний чек по двум несводимым отчётам. А бухгалтерия получает начисления, которые невозможно сверить с реальными продажами. Программа лояльности превращается в источник конфликтов вместо инструмента возврата.

×1,5

LTV клиента, который покупает и офлайн, и онлайн

1 номер

единый ключ клиента во всех каналах продаж

0 дублей

одна карточка клиента вместо двух несводимых баз

Что значит «единая программа» на практике

Единая — не значит «в обеих системах включены бонусы». Это четыре конкретных требования. Если хотя бы одно не выполняется, клиент рано или поздно упрётся в расхождение.

💳

Один баланс

Бонусы, начисленные на кассе, списываются на сайте и наоборот. Никаких «онлайн-бонусов» и «офлайн-бонусов» — это один счёт.

👤

Одна карточка

История покупок, уровень лояльности, дата рождения и согласия — в одном профиле, независимо от того, где клиент купил.

⚙️

Одни правила

Процент начисления, лимит списания, сгорание и исключённые категории задаются один раз и действуют во всех каналах.

📱

Один кабинет

Клиент проверяет баланс в одном месте — в мессенджере, — и видит там покупки из магазина и заказы с сайта вместе.

Телефон как единый ключ клиента

Главный технический вопрос омниканальной программы: по какому признаку система понимает, что покупатель на кассе и покупатель на сайте — это один человек. Email не подходит: на кассе его никто не диктует. Номер карты не подходит: онлайн его вводить неудобно. Остаётся телефон — единственный идентификатор, который клиент называет и в магазине, и в форме заказа.

Но здесь есть подвох, о который спотыкается большинство самописных решений. Один и тот же номер приходит в разных форматах: +7 999 123-45-67, 8(999)1234567, 79991234567. Если система не приводит их к одному виду, у клиента появится три карточки и три баланса — ровно та проблема, которую вы пытались решить.

Важно. Проверьте это до запуска: заведите тестового клиента с номером в формате «8...» на кассе и оформите заказ на сайте с тем же номером в формате «+7...». Если в базе появились две карточки — программа не единая, и любые бонусы будут расходиться.

Учётная система как единственный источник правды

Вторая типовая ошибка — держать базу клиентов в сервисе лояльности отдельно от учётной системы. Тогда возвраты, отмены заказов и корректировки чеков в неё не попадают, и бонусы начисляются за продажи, которых не было.

Правильная схема — когда контрагенты и документы живут в учётной системе, а программа лояльности подключается к ней и реагирует на реальные документы: розничную продажу с кассы, отгрузку, заказ покупателя. Тогда любой канал продаж — касса, сайт, маркетплейс, менеджер по телефону — автоматически попадает в одну карточку клиента, потому что все они и так сводятся в учёт.

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

Путь клиента между каналами

Так выглядит сценарий, ради которого всё и делается. Обратите внимание: клиент ни разу не устанавливает приложение и ни разу не вводит пароль.

Путь покупателя
1
Покупка в магазине

Кассир пробивает чек и называет телефон клиента. Начисляется 5% бонусами, клиент получает сообщение в мессенджере.

2
Заказ на сайте через две недели

В корзине виджет находит клиента по телефону и показывает: «Доступно 480 бонусов, можно списать до 30% заказа».

3
Подтверждение списания

Клиент запрашивает код, получает его в бот или SMS, вводит — скидка применяется к заказу.

4
Начисление за онлайн-заказ

После оформления заказ уходит в учётную систему, бонусы начисляются по тем же правилам, что и на кассе.

Возврат в офлайн

За месяц до сгорания приходит напоминание — клиент приходит в магазин и тратит бонусы, накопленные онлайн.

Где живёт витрина: варианты подключения сайта

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

T

Tilda

Скрипт вставляется в HTML-блок на странице корзины, заказ передаётся вебхуком формы. Разработчик не нужен — всё делается из настроек.

W

WordPress и WooCommerce

Плагин добавляет блок бонусов прямо в оформление заказа WooCommerce: баланс, поле списания, ввод кода подтверждения.

O

OpenCart

Модуль для классических интернет-магазинов на OpenCart: списание бонусов в корзине и начисление после оформления заказа.

Б

Битрикс24

Если продажи ведут менеджеры в CRM, бонусы видны прямо в карточке сделки — телефонный канал тоже становится частью программы.

{ }

Самописный сайт — через API

Для нестандартной витрины остаётся API: получить баланс по телефону, запросить код, списать бонусы, передать заказ на начисление.

Списание бонусов на сайте: главный риск

В магазине списание защищено физически: клиент стоит перед кассиром. На сайте такой защиты нет — чужой номер телефона может ввести кто угодно, и если система просто спишет бонусы, вы получите массовое воровство балансов уже на второй неделе.

Поэтому онлайн-списание всегда должно проходить через подтверждение. Клиент вводит телефон, запрашивает код и получает его туда, куда доступ есть только у него: в бот мессенджера, SMS, email, звонком с кодом или голосовым звонком. Без кода бонусы не спишутся — даже если номер угадали.

Обязательный минимум защиты онлайн-списания
🔐
Код подтверждения списания
Бот, SMS, email или звонок — на выбор клиента
📊
Лимит списания в процентах от заказа
Обычно 20-50%, чтобы заказ не оплачивался бонусами целиком
💵
Подтверждение заказов с оплатой при получении
Бонусы начисляются после фактического выкупа, а не после оформления
🚫
Исключения по категориям
Товары с минимальной маржой и распродажи — без начисления и списания

Отдельно про доставку и наложенный платёж. Заказ, оформленный на сайте, — ещё не продажа. Если начислять бонусы в момент оформления, недобросовестный покупатель наберёт бонусов на невыкупленных заказах. Привязывайте начисление к отгрузке или выкупу.

Один личный кабинет вместо двух

Если у магазина есть личный кабинет на сайте, а у программы лояльности — свой, клиент не будет пользоваться ни тем, ни другим. Пароли забываются, приложения удаляются, карточки теряются.

Рабочее решение — кабинет в мессенджере, которым покупатель пользуется каждый день: Telegram, MAX или ВКонтакте. Открыл бота — увидел баланс, историю покупок из всех каналов, срок сгорания бонусов, акции и адреса точек. Ни установки, ни регистрации.

Побочный эффект важнее основного: получив клиента в мессенджер, вы получаете бесплатный канал уведомлений. Начисление, сгорание, день рождения, статус заказа — всё приходит туда, где сообщение действительно прочитают.

5 ошибок при объединении онлайн и офлайн

1

Разные проценты онлайн и офлайн

«На сайте 7%, в магазине 3%» звучит логично для маркетолога и как обман — для покупателя. Если каналы нужно стимулировать по-разному, делайте это акциями с ограниченным сроком, а не разной базовой ставкой.

2

Импорт базы из сайта поверх базы из кассы

Массовая загрузка клиентов без сверки телефонов создаёт дубли, которые потом придётся склеивать вручную. Сначала приведите номера к единому формату, потом импортируйте.

3

Списание на сайте без подтверждения

Экономия на SMS и кодах оборачивается списанием чужих балансов и разбирательствами с клиентами. Код подтверждения — не опция, а обязательная часть онлайн-списания.

4

Бонусы за неоплаченные заказы

Начисление в момент оформления, а не выкупа — прямая дыра в экономике программы. Особенно на доставке с оплатой при получении.

5

Кассиры не в курсе, что программа теперь общая

Технически всё связано, но продавец отвечает «это бонусы с сайта, тут они не действуют» — и вся работа обнуляется. Инструктаж персонала важен не меньше настроек.

Порядок подключения

Объединять каналы нужно последовательно — от учёта к витрине, а не наоборот. Иначе вы будете переносить данные дважды.

1
Шаг 1. Единая база клиентов в учётной системе

Свести контрагентов, привести телефоны к одному формату, убрать дубли. Это фундамент — пока он кривой, каналы связывать бессмысленно.

2
Шаг 2. Правила начисления и списания

Процент, лимит списания, срок сгорания, исключённые категории. Настраиваются один раз и действуют на кассе и на сайте одинаково.

3
Шаг 3. Офлайн-канал и кабинет клиента

Запустить бонусы на кассе и подключить бота с личным кабинетом. К моменту выхода на сайт у вас уже будет живая база с подписками на уведомления.

4
Шаг 4. Виджет на сайте

Поставить виджет в корзину, включить коды подтверждения, передать заказы на начисление. Обязательно — тестовый заказ до публикации.

Шаг 5. Сквозная аналитика

Только когда оба канала пишут в одну базу, отчёты начинают показывать реальную картину: где клиент нашёлся, где вернулся, где потратил.

Что отслеживать после запуска

Смысл объединения каналов в том, что клиент начинает переходить между ними. Именно это и нужно измерять — обычных продаж по каналам здесь недостаточно.

  • Доля мультиканальных клиентов — сколько покупателей купили и офлайн, и онлайн
  • Перетоки между каналами — начислено на кассе, списано на сайте и наоборот
  • Средний чек мультиканального клиента в сравнении с одноканальным
  • Конверсия виджета в корзине — сколько клиентов нашли себя и применили бонусы
  • Доля клиентов в мессенджере — какая часть базы получает уведомления бесплатно
  • Количество дублей карточек — должно стремиться к нулю и не расти со временем

Итого

Единая бонусная программа для магазина и сайта — это не про модное слово «омниканальность», а про очень простую вещь: клиент должен видеть один баланс, где бы он ни покупал. Всё остальное — следствие. Один ключ (телефон), одна база (учётная система), одни правила, один кабинет в мессенджере.

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

Один баланс для кассы и сайта — в МСБонус

Бонусы на кассе МойСклад, виджеты для Tilda, WordPress, OpenCart и Битрикс24, коды подтверждения списания, Mini App в Telegram, MAX и ВКонтакте. Единая база клиентов в учётной системе — без разработчика и без переноса данных.

Установить из маркетплейса