Интеграция с кассовой системой

ARC.OURBAN Программа лояльности и личный кабинет гостя

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

ОтрасльРесторан, Брянск
ПроектЛояльность на iiko и кабинет гостя
РаботыИнтеграция с iiko, перенос базы, регистрация со звонком, кабинет гостя, ревью, запуск
Сайтarcourban.ru
Блок программы лояльности на главной arcourban.ru: три шага, кнопка «Открыть карту лояльности» и QR-код регистрации
01 · Задача

Бонусы гостей жили в отдельном сервисе, а касса о них не знала

Ресторан платил за лояльность внешнему сервису по подписке, хотя его кассовая система уже умела вести бонусы сама.

На день переезда в прежней программе было 350 карт, у 159 гостей лежали накопленные бонусы. Это обязательство перед людьми: переезжать можно только с полным переносом балансов и ступеней. Владелец решил закрыть внешний сервис и строить лояльность на модуле iikoCard, который входит в тариф его кассовой системы.

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

Так сложилась схема из двух слоёв. Деньги и правила держит iikoCard: балансы, проценты, пороги ступеней, сгорание. Наш слой держит всё гостевое: регистрацию с подтверждением номера, кабинет и код, который гость называет официанту вместо карты.

02 · Решения

Четыре решения, на которых держится система

Каждое можно проверить: регистрация и кабинет открыты на arcourban.ru.

01

Деньги остались в кассе

Балансы, ступени кэшбэка от 3 до 12 % и списание до 30 % счёта считает iikoCard. Кабинет показывает их напрямую, своей копии балансов у нас нет: только кэш на минуту.

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

Карточка бонусов в кабинете гостя: баланс, правило списания до 30 % счёта, кэшбэк 3 % и сколько осталось до следующей ступени
02

Номер подтверждает звонок, а не SMS

Гость вводит номер, страница показывает, куда позвонить. Вызов сбрасывается до соединения, отвечать не нужно, страница сама видит звонок с этого номера.

SMS-код обошёлся бы ресторану в именованного отправителя с договором и абонентской платой операторам. Проверка звонком стоит 0,6 ₽ и не требует ничего оформлять.

Шаг регистрации: страница просит позвонить на выданный номер, звонок бесплатный и сбросится сам
03

Вместо карты — код на сегодня

Гость называет официанту шесть цифр из кабинета, тот вводит их в кассу. Код меняется каждое утро в шесть часов, до открытия зала.

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

Карточка кода в кабинете: шесть цифр крупно и подпись «Назовите код официанту»
04

Вход нужен один раз

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

Код нужен в момент расчёта у кассы. Если бы гость каждый раз проходил проверку заново, очередь у стойки росла бы на нём одном.

Экран входа в кабинет: поле номера телефона, кнопка «Войти» и подпись «Вход нужен один раз»
03 · Кабинет

Экран, который гость поворачивает к официанту

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

Главный экран кабинета гостя: подпись с номером, код на сегодня, карточка бонусов, ссылка на историю операций и кнопка выхода
  1. Код на сегодня

    Шесть цифр крупно. Кабинет запрашивает код сам при открытии, а если кода ещё нет, пробует получить.

  2. Бонусы и что с ними делать

    Баланс и правило списания рядом: оплатить можно до 30 % счёта.

  3. Кэшбэк и следующая ступень

    Процент возврата, уровень и сколько осталось до повышения. Скидочным гостям этот блок не показывается.

  4. Именной, но без лишнего

    Подпись с номером вместо приветствия на весь экран: гость видит, что кабинет его.

  5. Выход с подтверждением

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

04 · История

Начисления гость проверяет сам

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

История операций в кабинете: корректировка бонусов, начисление, визит со счётом и перенос бонусов из прежней программы

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

05 · Основа

Лояльность легла на связь с кассой, которая уже работала

Работа с рестораном началась раньше: бронь стола по живой схеме зала и меню на сайте берут данные из iiko. Тот же канал связи с кассовой системой держит и лояльность.

Страница брони: схема зала с номерами столов, свободные и занятые столы подсвечены

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

06 · Телефон

Всё это живёт в телефоне, а не на компьютере

Гость регистрируется за столом по QR, входит один раз и дальше просто открывает кабинет, когда просят карту.

Блок программы лояльности на главной странице с телефона
ГлавнаяПрограмма объяснена тремя шагами, рядом QR со стола.
Меню сайта на телефоне с пунктом «Кабинет гостя — бонусы и код»
Меню сайтаКабинет вынесен в навигацию: гость возвращается в него как на обычную страницу.
Регистрация в программе лояльности на экране телефона
РегистрацияОдно поле на первом экране, остальное после звонка.
Кабинет гостя на телефоне: код, бонусы и история операций
КабинетКод и бонусы до первой прокрутки, история разворачивается под ними.
07 · Техника

Под капотом: свой слой на PHP поверх кассовой системы

Сайт ресторана статический, хостинг общий. Кабинет собран на PHP и MySQL этого же хостинга, без отдельного сервера и без платных сервисов авторизации.

ЛояльностьiikoCard внутри iiko: пять ступеней кэшбэка, списание до 30 % счёта, сгорание через 180 дней; отдельная программа для скидочных категорий
Стык с кассойiiko Cloud API, один клиент на все модули, токен в файловом кэше. Своей копии балансов нет, только кэш на минуту
Перенос базыСкрипт с самотестом на 16 сценариев, снимки до и после, сверка каждой карточки по API. Карточки заведены заранее без денег, балансы перенесены одним окном по свежей выгрузке
Подтверждение номераЗвонок гостя на выданный номер через провайдера проверок. Одна активная проверка на номер, побеждает первая, отзыв прежних запрещён
Сессия кабинетаПодписанная кука на 90 дней, HttpOnly и Secure, поколение сессий в подписи: выход на всех устройствах одной цифрой в конфиге
Код на сегодняРотация в 06:00 в три прохода: завести новый, убедиться, снять вчерашний. Уборщик просроченных кодов раз в минуту
ЗащитаТокен формы с подписью, приманка для ботов в разметке, строгая проверка Origin, лимиты по номеру и по адресу, замки на гонки в базе
Правило карточкиФорма регистрации не переписывает данные существующего гостя: в базе перенесённые карточки, и знающий чужой номер не должен их править. В кабинете гость правит только свою
РевьюКод каждого модуля прошёл несколько раундов независимого ревью: регистрация, выдача кода, кабинет гостя

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

08 · Замер

Цифры из журналов, а не из презентации

361гость перенесён с балансами и ступенями
45 209бонусов доначислено при переезде, сверка без расхождений
2 мин 14 сутренняя ротация кодов на 362 гостя, ошибок ноль
0,6 ₽стоит проверка номера звонком против 8,4 ₽ за SMS

Перенос: журнал миграции и снимки базы 19 сентября 2026 года. Ротация: журнал задачи 21 сентября 2026 года, с 06:00:02 до 06:02:16. Стоимость проверки: тарифы провайдера на 18 сентября 2026 года. Данных о выручке и заявках здесь нет: программа запущена 19 сентября, выводы делать рано.

Итог

Что ресторан получил

  • Бонусы гостей и правила программы живут в кассе, внешний сервис из цепочки исключён.

  • Гость регистрируется за столом по QR за минуту, без SMS и без пластика.

  • Чужой номер ничего не даёт: касса находит гостя по коду, который гость называет сам.

  • Вход один раз на 90 дней, код на сегодня ждёт в кабинете с шести утра.

  • Начисления и списания видны гостю человеческим языком, со счётом каждого визита.

  • Слой держится на одном стыке с кассой и снимается одной строкой в конфиге.

Другие работы

Первый экран сервиса подбора реабилитационного центра Свой продукт

Выплывем

Наша площадка обкатки: авто-публикация блога и первый живой моушн на проде.

Разбор проекта
Первый экран сайта салона красоты Mari Sharmel Салон красоты · Москва

Mari Sharmel

Переезд с Tilda: у каждой процедуры своя страница с ценой, врачом и онлайн-записью.

Разбор проекта
Первый экран сайта завода лазерной резки «Гефест» Производство · Брянск

Завод «Гефест»

У каждого вида работ своя страница, заявки приходят с данными для расчёта.

Разбор проекта
Первый экран сайта семейной клиники Медицина · Брянск

Клиника «Семейный доктор»

Пациенты считают стоимость анализов сами, без звонка в регистратуру.

Разбор проекта
Первый экран сайта траттории Arco Ресторан · Брянск

Траттория ARC.OURBAN

Меню обновляется из ресторанной системы, без ручной работы.

Разбор проекта
Первый экран сайта БЗМ Групп B2B · оптовые поставки

БЗМ Групп

100+ статей выходят по расписанию без участия владельца.

Разбор проекта
Первый экран сайта бизнес-тренера Образование

Дмитрий Немтюрев

Страницы для риэлтора и руководителя агентства, билеты на тренинг и книга с оплатой на сайте.

Разбор проекта
Первый экран сайта ESQUIRE Международный проект

ESQUIRE Roof Capsules

Англоязычный сайт премиум-продукта, подборка #madeontilda.

Разбор проекта
Первый экран лендинга москитных сеток Производство · Брянск

Москитные сетки 32

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

Разбор проекта
Первый экран сайта ДУБВЕК Деревообработка

ДУБВЕК

Сайт производителя массивной доски: спецификация, открытый прайс, опт.

Разбор проекта
Первый экран сайта БФ Металлоконструкции Металлоконструкции · Брянск

БФ Металлоконструкции

Страница под каждый вид работ плюс ведение Яндекс Директа.

Разбор проекта
Первый экран сайта флебологического центра Медицина · Брянск

Флебологический центр

Врачи, прайс с кодами номенклатуры и запись через медицинскую систему.

Разбор проекта
Первый экран магазина ВНИИКР Магазин · научный институт

ВНИИКР

Каталог ловушек с фильтрами по вредителю и области применения.

Разбор проекта
Первый экран лендинга курса Образование

Курс «Риэлтор за 2 дня»

Лендинг интенсива и онлайн-курс на отдельном поддомене.

Разбор проекта
Первый экран сайта репетитора английского Образование · Брянск

Cheberko English

Сайт репетитора под вопросы родителей: открытые цены и проверка заданий ЕГЭ прямо на сайте.

Разбор проекта
Первый экран сайта детской стоматологии Медицина · Химки

Детская стоматология «Лисёнок»

Услуги разложены по родительским ситуациям, антистресс-лечение вынесено отдельно.

Разбор проекта
Первый экран магазина материалов для реставрации кожи Магазин · опт и розница

BrandKeeper

Каталог собран двумя способами сразу: по типам составов и по сериям.

Разбор проекта
Первый экран сайта типографии Полиграфия · Брянск

Типография «Отпечаток»

Каждый вид печати работает отдельной посадочной под свой запрос.

Разбор проекта
Первый экран сайта санитарной службы Услуги · Рязань

Городская СЭС

Два входа с первого экрана: договорный клиент и разовая заявка не мешают друг другу.

Разбор проекта
Заявка

У вас ресторан на iiko или другой бизнес с постоянными клиентами?

Расскажите, на чём работает касса и что должно происходить с гостем после первого визита. Предложим схему и расчёт.

Не хотите заполнять форму?
Как с вами связаться