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

Почему две программы лояльности — это ноль программ
Когда касса и сайт живут отдельно, у одного и того же покупателя появляются две карточки, два баланса и две истории. Дальше начинается то, что убивает доверие к программе быстрее любой скидки у конкурента.
Клиент не понимает, где его бонусы. Продавец на кассе не видит онлайн-заказов и не может ответить на вопрос. Маркетолог считает средний чек по двум несводимым отчётам. А бухгалтерия получает начисления, которые невозможно сверить с реальными продажами. Программа лояльности превращается в источник конфликтов вместо инструмента возврата.
LTV клиента, который покупает и офлайн, и онлайн
единый ключ клиента во всех каналах продаж
одна карточка клиента вместо двух несводимых баз
Что значит «единая программа» на практике
Единая — не значит «в обеих системах включены бонусы». Это четыре конкретных требования. Если хотя бы одно не выполняется, клиент рано или поздно упрётся в расхождение.
Один баланс
Бонусы, начисленные на кассе, списываются на сайте и наоборот. Никаких «онлайн-бонусов» и «офлайн-бонусов» — это один счёт.
Одна карточка
История покупок, уровень лояльности, дата рождения и согласия — в одном профиле, независимо от того, где клиент купил.
Одни правила
Процент начисления, лимит списания, сгорание и исключённые категории задаются один раз и действуют во всех каналах.
Один кабинет
Клиент проверяет баланс в одном месте — в мессенджере, — и видит там покупки из магазина и заказы с сайта вместе.
Телефон как единый ключ клиента
Главный технический вопрос омниканальной программы: по какому признаку система понимает, что покупатель на кассе и покупатель на сайте — это один человек. Email не подходит: на кассе его никто не диктует. Номер карты не подходит: онлайн его вводить неудобно. Остаётся телефон — единственный идентификатор, который клиент называет и в магазине, и в форме заказа.
Но здесь есть подвох, о который спотыкается большинство самописных решений. Один и тот же номер приходит в разных форматах: +7 999 123-45-67, 8(999)1234567, 79991234567. Если система не приводит их к одному виду, у клиента появится три карточки и три баланса — ровно та проблема, которую вы пытались решить.
Важно. Проверьте это до запуска: заведите тестового клиента с номером в формате «8...» на кассе и оформите заказ на сайте с тем же номером в формате «+7...». Если в базе появились две карточки — программа не единая, и любые бонусы будут расходиться.
Учётная система как единственный источник правды
Вторая типовая ошибка — держать базу клиентов в сервисе лояльности отдельно от учётной системы. Тогда возвраты, отмены заказов и корректировки чеков в неё не попадают, и бонусы начисляются за продажи, которых не было.
Правильная схема — когда контрагенты и документы живут в учётной системе, а программа лояльности подключается к ней и реагирует на реальные документы: розничную продажу с кассы, отгрузку, заказ покупателя. Тогда любой канал продаж — касса, сайт, маркетплейс, менеджер по телефону — автоматически попадает в одну карточку клиента, потому что все они и так сводятся в учёт.
Для магазинов на МойСклад это означает, что интегрировать сайт с программой лояльности отдельно не нужно: заказ с сайта создаёт документ, документ запускает начисление по общим правилам, и баланс обновляется одинаково для всех каналов.
Путь клиента между каналами
Так выглядит сценарий, ради которого всё и делается. Обратите внимание: клиент ни разу не устанавливает приложение и ни разу не вводит пароль.
Кассир пробивает чек и называет телефон клиента. Начисляется 5% бонусами, клиент получает сообщение в мессенджере.
В корзине виджет находит клиента по телефону и показывает: «Доступно 480 бонусов, можно списать до 30% заказа».
Клиент запрашивает код, получает его в бот или SMS, вводит — скидка применяется к заказу.
После оформления заказ уходит в учётную систему, бонусы начисляются по тем же правилам, что и на кассе.
За месяц до сгорания приходит напоминание — клиент приходит в магазин и тратит бонусы, накопленные онлайн.
Где живёт витрина: варианты подключения сайта
Сайт может быть на чём угодно — принцип подключения один: на страницу корзины ставится виджет, который показывает баланс и применяет бонусы, а оформленный заказ передаётся в программу лояльности для начисления.
Tilda
Скрипт вставляется в HTML-блок на странице корзины, заказ передаётся вебхуком формы. Разработчик не нужен — всё делается из настроек.
WordPress и WooCommerce
Плагин добавляет блок бонусов прямо в оформление заказа WooCommerce: баланс, поле списания, ввод кода подтверждения.
OpenCart
Модуль для классических интернет-магазинов на OpenCart: списание бонусов в корзине и начисление после оформления заказа.
Битрикс24
Если продажи ведут менеджеры в CRM, бонусы видны прямо в карточке сделки — телефонный канал тоже становится частью программы.
Самописный сайт — через API
Для нестандартной витрины остаётся API: получить баланс по телефону, запросить код, списать бонусы, передать заказ на начисление.
Списание бонусов на сайте: главный риск
В магазине списание защищено физически: клиент стоит перед кассиром. На сайте такой защиты нет — чужой номер телефона может ввести кто угодно, и если система просто спишет бонусы, вы получите массовое воровство балансов уже на второй неделе.
Поэтому онлайн-списание всегда должно проходить через подтверждение. Клиент вводит телефон, запрашивает код и получает его туда, куда доступ есть только у него: в бот мессенджера, SMS, email, звонком с кодом или голосовым звонком. Без кода бонусы не спишутся — даже если номер угадали.
Отдельно про доставку и наложенный платёж. Заказ, оформленный на сайте, — ещё не продажа. Если начислять бонусы в момент оформления, недобросовестный покупатель наберёт бонусов на невыкупленных заказах. Привязывайте начисление к отгрузке или выкупу.
Один личный кабинет вместо двух
Если у магазина есть личный кабинет на сайте, а у программы лояльности — свой, клиент не будет пользоваться ни тем, ни другим. Пароли забываются, приложения удаляются, карточки теряются.
Рабочее решение — кабинет в мессенджере, которым покупатель пользуется каждый день: Telegram, MAX или ВКонтакте. Открыл бота — увидел баланс, историю покупок из всех каналов, срок сгорания бонусов, акции и адреса точек. Ни установки, ни регистрации.
Побочный эффект важнее основного: получив клиента в мессенджер, вы получаете бесплатный канал уведомлений. Начисление, сгорание, день рождения, статус заказа — всё приходит туда, где сообщение действительно прочитают.
5 ошибок при объединении онлайн и офлайн
Разные проценты онлайн и офлайн
«На сайте 7%, в магазине 3%» звучит логично для маркетолога и как обман — для покупателя. Если каналы нужно стимулировать по-разному, делайте это акциями с ограниченным сроком, а не разной базовой ставкой.
Импорт базы из сайта поверх базы из кассы
Массовая загрузка клиентов без сверки телефонов создаёт дубли, которые потом придётся склеивать вручную. Сначала приведите номера к единому формату, потом импортируйте.
Списание на сайте без подтверждения
Экономия на SMS и кодах оборачивается списанием чужих балансов и разбирательствами с клиентами. Код подтверждения — не опция, а обязательная часть онлайн-списания.
Бонусы за неоплаченные заказы
Начисление в момент оформления, а не выкупа — прямая дыра в экономике программы. Особенно на доставке с оплатой при получении.
Кассиры не в курсе, что программа теперь общая
Технически всё связано, но продавец отвечает «это бонусы с сайта, тут они не действуют» — и вся работа обнуляется. Инструктаж персонала важен не меньше настроек.
Порядок подключения
Объединять каналы нужно последовательно — от учёта к витрине, а не наоборот. Иначе вы будете переносить данные дважды.
Свести контрагентов, привести телефоны к одному формату, убрать дубли. Это фундамент — пока он кривой, каналы связывать бессмысленно.
Процент, лимит списания, срок сгорания, исключённые категории. Настраиваются один раз и действуют на кассе и на сайте одинаково.
Запустить бонусы на кассе и подключить бота с личным кабинетом. К моменту выхода на сайт у вас уже будет живая база с подписками на уведомления.
Поставить виджет в корзину, включить коды подтверждения, передать заказы на начисление. Обязательно — тестовый заказ до публикации.
Только когда оба канала пишут в одну базу, отчёты начинают показывать реальную картину: где клиент нашёлся, где вернулся, где потратил.
Что отслеживать после запуска
Смысл объединения каналов в том, что клиент начинает переходить между ними. Именно это и нужно измерять — обычных продаж по каналам здесь недостаточно.
- Доля мультиканальных клиентов — сколько покупателей купили и офлайн, и онлайн
- Перетоки между каналами — начислено на кассе, списано на сайте и наоборот
- Средний чек мультиканального клиента в сравнении с одноканальным
- Конверсия виджета в корзине — сколько клиентов нашли себя и применили бонусы
- Доля клиентов в мессенджере — какая часть базы получает уведомления бесплатно
- Количество дублей карточек — должно стремиться к нулю и не расти со временем
Итого
Единая бонусная программа для магазина и сайта — это не про модное слово «омниканальность», а про очень простую вещь: клиент должен видеть один баланс, где бы он ни покупал. Всё остальное — следствие. Один ключ (телефон), одна база (учётная система), одни правила, один кабинет в мессенджере.
Технически это давно не проект на месяцы: если магазин работает в учётной системе, к которой подключён сервис лояльности, сайт добавляется виджетом, а офлайн уже работает через кассу. Главные риски — не в интеграции, а в мелочах: формат телефонов, защита онлайн-списания, начисление за невыкупленные заказы и продавцы, которые не знают, что программа теперь общая.
Один баланс для кассы и сайта — в МСБонус
Бонусы на кассе МойСклад, виджеты для Tilda, WordPress, OpenCart и Битрикс24, коды подтверждения списания, Mini App в Telegram, MAX и ВКонтакте. Единая база клиентов в учётной системе — без разработчика и без переноса данных.
Установить из маркетплейса