Описание
Компания активно развивает онлайн‑канал продаж и программу лояльности для клиентов Ранее вся логика бонусной программы была сосредоточена в 1С, а сайт и бонусы фактически жили раздельно. Клиенты могли копить и списывать бонусы в 1С, приходя в магазин офлайн. Интернет магазин не был полноценно связан с бонусной системой: клиент не видел актуальный баланс бонусов, не мог прозрачно списать их при оформлении заказа на сайте. Заказы с сайта не содержали корректной информации по бонусам, менеджерам приходилось вручную дорабатывать документы в текущей учетной системе 1С:Управление торговлей.
Изначально рассматривался вариант, при котором сумма списанных бонусных баллов на сайте просто передавалась бы в заказ как ручная скидка на позиции. В этом случае доработки со стороны 1С были бы минимальными — заказы загружались бы с уже рассчитанной скидкой.
Также обсуждался вариант переноса бонусной программы на сторонний сервис (типа бонусных платформ по подписке), с последующей интеграцией сайта и 1С с этой системой. От него отказались, тк требуется дополнительная абонентская плата и ожидается сложная миграция и поддержка.
В результате выбрали вариант, когда все бонусы продолжают жить в 1С, а сайт через API в режиме запрос ответ: получает информацию о клиенте и его бонусах, резервирует бонусы при оформлении заказа, передаёт в 1С фактически списанные бонусы при загрузке заказов.
В итоге со стороны 1С: Управление торговлей было создано расширение конфигурации, в котором реализован веб-сервис с тремя основными методами:
- CheckCreateClient: проверяет, существует ли клиент в базе УТ, создает нового контрагента при отсутствии, регистрирует клиента в программе бонусных баллов.
- GetBonus: возвращает текущее количество бонусов, доступных клиенту для списания.
- BookBonus: бронирует указанное количество бонусов под конкретный заказ, фиксирует резерв бонусов, чтобы клиент не мог использовать эти же баллы в другом заказе или при походе в магазин, пока заказ не будет загружен в 1С.
Все вызовы логируются в журнал регистрации 1С: начало и окончание работы методов, результаты, при необходимости — дополнительные события. Это позволило прозрачно отлаживать и сопровождать интеграцию.
После реализации API возник вопрос: как именно заказы с бонусами будут приходить с сайта и как должно происходить списание бонусов при загрузке заказа в 1С.
Изначальную «простую» схему со скидкой на позиции заменили на более корректную с точки зрения учета бонусов. В заказе, передаваемом с сайта, теперь указывается: сумма списанных бонусных баллов; номер телефона клиента (как ключевой идентификатор бонусной карты, даже если он не входит в типовую выгрузку).
При загрузке заказа в 1С:
- По номеру телефона находится бонусная карта клиента и подставляется в соответствующее поле заказа.
- Общая сумма списанных бонусных баллов пропорционально распределяется по позициям заказа в виде скидки бонусными баллами.
Таким образом на момент оформления заказа на сайте бонусы резервируются, после загрузки заказа в 1С резерв отменяется, а бонусы фактически списываются и отражаются в заказе. В результате клиент видит одинаковую картину по бонусам и на сайте, и в 1С.
В процессе разработки функционала команды сталкивались со сложностями. Так как часть работ на стороне сайта (Битрикс) выполнялась другим подрядчиком возникали паузы в ожидании доработок и тестовых данных. Для решения создали общий чат и проводили регулярные созвоны, которые позволили выровнять коммуникацию и двигаться поэтапно.
Заказчик изначально не был готов публиковать базу 1С в интернете (вопросы безопасности, отсутствие нужных специалистов по администрированию). При этом классический сценарий «реального времени» для бонусов требует доступности 1С по веб сервису. Совместно детально разобрали риски и способы защиты при публикации 1С (ограничение по IP, авторизация, проверка сигнатур и др.). Рассмотрели альтернативные подходы (обмен по расписанию, очередь действий на сайте с выборкой из 1С) и в результате выбрали архитектуру, которая обеспечивает баланс между безопасностью и оперативностью обмена, с фокусом на корректность списания бонусов и отсутствие «читерства» (двойное списание).
Важно было, чтобы клиент на сайте видел максимально актуальную доступную сумму бонусов и понимал, сколько он может списать именно сейчас. Нужно было обеспечить идентичную логику списания на сайте и в 1С (проценты, ограничения, исключения по товарам) и отсутствие рассинхронизации при обмене по расписанию. Для этого учли все правила 1С в логике сайта (по группам наценки, ограничениям) и настроили резервирование бонусов в момент оформления заказа, с последующим фактическим списанием при падении заказа в 1С.
Уникальность разработки заключается в том, что настроена глубокая увязка онлайн и офлайн бонусов. Клиент может использовать одну и ту же бонусную карту по номеру телефона как на сайте, так и в розничном магазине, при этом учет ведется централизованно в 1С.
Так же сохранили текущую бонусную программы в 1С без перехода на внешние сервисы. Учитывается уже накопленная большая база клиентов и операций, нет необходимости платить подписку за внешний бонусный сервис.
Проект учитывает ограничения инфраструктуры (нежелание заказчика публиковать базу 1С) и при этом реализует бизнес-логику, максимально приближенную к режиму реального времени, без грубых «костылей».
Реализован полноценный цикл работы с бонусами: проверка, резервирование, списание, отмена резерва, что предотвращает ситуации с повторным использованием одних и тех же бонусов.