Программа для терминалов самообслуживания


О проекте
Крупнейшая российская торговая сеть ОБИ в 2019 году решила организовать специальную маркетинговую акцию — «Выгодный сезон». Цель акции заключалась в стимулировании повторных покупок клиентов сети путем выдачи специальных купонов на скидку при следующей покупке. За время сотрудничества мы перезапускали акцию 3 раза, каждый раз меняя условия участия и функциональность нашего ПО.
Акция проходила в Москве и Московской области, охватывая около 25 магазинов сети. Основная задача — разработка системы, позволяющей выдавать покупателям специальные купоны, при этом обеспечив полную защиту от мошенничества и исключив возможность повторного использования одного купона в нескольких магазинах, с учетом того, что терминалы работали в условиях нестабильной сети на мобильном интернете.
Проект завершился в 2021-м, успев пройти три крупных итерации развития — от простого бумажного купона до мобильного приложения с полной синхронизацией.
Цели
Создать программу для системы выдачи купонов.
Избежать мошенничества с использованием одного купона несколько раз.
Обеспечить интеграцию системы с кассовыми аппаратами и оборудованием магазинов.
Создать простой способ проверки и активации купонов для сотрудников и покупателей.
Решение
Нашей команде предстояло решить сложную техническую задачу — обеспечить выдачу уникальных купонов, которые невозможно было бы подделать или повторно использовать в другой торговой точке. Проект реализовывался в несколько этапов:
Первый этап: Стационарные терминалы самообслуживания
В первом запуске все было достаточно просто: за покупку клиент получал чек, который нужно было поднести к терминалу самообслуживания. Терминал считывал данные и распечатывал купон на скидку. Но были и некоторые нюансы:
- Условия акции менялись — например, скидка 1% за каждые 500 рублей, или фиксированная сумма. Мы настроили систему так, чтобы легко адаптироваться под разные сценарии.
- Подключение к корпоративному каналу интернета было невозможным — политика безопасности ОБИ запрещала встраивать терминалы в локальную сеть. Поэтому мы использовали мобильный 3G-интернет через отдельные роутеры.
- Для работы без сбоев внедрили систему офлайн-резервирования: если соединение временно терялось, терминал сохранял данные и отправлял их позже.
- База купонов хранилась у нас, что обеспечивало централизованную проверку и контроль.
- Сделали механизм защиты от многократного использования купонов в разных магазинах.
Параллельно с этим нам нужно было:
- Настроить взаимодействие с кассовым ПО, чтобы купоны проходили проверку.
- Поддержать печать чеков на принтерах терминала, которые работали автономно.
Вторая итерация: Мобильность и удобство
Во втором цикле мы усовершенствовали систему заменили терминалы на новые с экраном — теперь пользователь видел интерфейс и инструкции. А также запустили небольшой личный кабинет, где можно было отслеживать активные купоны, статус их использования.
Теперь появилась задача добавить интеграцию с официальным мобильным приложением:
- Пользователь мог сканировать чек через камеру смартфона.
- Система делала валидацию по базе, чтобы исключить подделки и повторное использование.
Синхронизация стала более сложной: теперь данные поступали с терминалов, с касс и с мобильных устройств, и все это нужно было сводить в единую базу в режиме реального времени.
Третья версия: Купоны на кассе
К третьей итерации решение стало еще удобнее и технологичнее — вместо терминалов использовали планшеты с фронтальной камерой и Bluetooth-принтеры. Планшет закреплялся на кассе в металлический держатель — нельзя было снять или использовать его в личных целях. А купоны теперь печатались сразу у кассира, что сократило время и улучшило контроль.
Каждый кассовый модуль стал полноценной частью системы — терминалы были интегрированы на каждую кассу. Кроме того, разработали визуальный интерфейс и систему контроля для персонала: дашборды, отчеты, доступность устройств.
В дополнение к этому:
- Внедрили гибридную схему: где-то работали планшеты, где-то старые терминалы, и все это вместе с мобильным приложением.
- Софт разрабатывали с нуля.
- Все устройства, независимо от формата, работали с единой базой, с учетом возможных задержек из-за мобильного интернета.

Вызовы
Нестабильный интернет
Терминалы не могли подключаться к локальной сети — только 3G-роутеры. Мы реализовали офлайн-хранилище и механизм отложенной отправки данных.
Сложная синхронизация
Потоки данных из магазинов, приложений и терминалов нужно было свести в единую систему — мы создали распределенную архитектуру с резервированием и минимальной задержкой.
Меняющиеся условия
Сезонные акции требовали гибкости: мы предусмотрели параметризацию скидок, сроков и правил.
Мелкие, но важные нюансы
- Когда заканчивалась бумага, система автоматически сигнализировала, печатая купон с предупреждением о замене. добавить почему так сделали
- После окончания акции в течение месяца покупатели могли получать купоны за покупки по чекам, осуществленные в период действия акции, а также использовать купоны при покупке
- Для персонала были панели мониторинга доступности и ошибок — все под контролем.

Технологии
- C#, Kotlin, Delphi, PHP, ELK, Elasticsearch, PostgreSQL
Годы работы
2019 — 2021