История, которую рассказывают в каждом втором заведении, поставившем QR. Компания посидела, рассчиталась, ушла. Через час на тот же стол приходит заказ: два кофе и чизкейк. Стол пустой. Официант идёт разбираться, а разбираться не с кем — кто-то из ушедшей компании сфотографировал код и показал ссылку друзьям в чате.
Обычно после такого случая владелец приходит с вопросом «как сделать, чтобы это было невозможно». Правильный ответ неприятный: полностью — никак. Но сузить окно до состояния, когда шалость перестаёт окупаться, вполне реально. Разберём, что именно делает система, а что приходится делать залу.
Что такое код на столе с технической стороны
Начнём с частого заблуждения. Код на столе — это не картинка со ссылкой на меню. Точнее, так делать можно, но тогда вы получаете просто электронное меню, а не рабочий инструмент.
В нормальной реализации в коде зашит длинный случайный токен, привязанный к конкретному столу. Из него сервер понимает три вещи: какое заведение, какая зона, какой стол. Именно поэтому вызов приходит команде с адресом, а не безымянным сигналом.
Токен должен быть достаточно длинным, чтобы его нельзя было подобрать перебором, и храниться на сервере не в открытом виде. Это не паранойя: если коды выдаются по порядку — стол один, стол два, стол три, — угадать соседний сможет любой любопытный подросток за минуту.
Второе обязательное свойство — перевыпуск. Код должен отзываться по кнопке. Печатаете новую наклейку, старая перестаёт работать в тот же момент вместе со всеми сессиями, которые через неё открыли. Это главный инструмент на случай, когда что-то пошло не так.
Гостевая сессия живёт недолго, и это правильно
Когда гость сканирует код, открывается не вечный доступ, а сеанс с двумя сроками.
Первый — абсолютный предел. Даже если человек всё время что-то нажимает, сеанс закончится: разумная граница — около двух часов, столько длится типичный визит с запасом. Второй — простой: если полтора часа ничего не происходит, сеанс закрывается раньше.
Важная тонкость, которую стоит уточнять у поставщика: продлевает ли сеанс автоматический опрос статуса. Если страница гостя раз в несколько секунд спрашивает сервер «что там с моим заказом» и каждый такой запрос считается активностью, никакой предел по простою не сработает — вкладка, забытая открытой, будет жить вечно.
Заканчивается сеанс — гость просто сканирует код заново. Для человека за столом это полсекунды, для чужого человека с фотографией — лишний барьер.
Чего QR не умеет
Теперь неприятная часть, о которой не пишут в рекламных материалах.
Действующий код, снятый на телефон, работает откуда угодно. Сессия закончится через два часа, но новое сканирование сохранённой картинки создаст новую сессию — хоть на следующий день. Пока код на столе не перевыпущен, фотография остаётся рабочим ключом.
Напрашивается решение «проверять геолокацию». На практике оно не работает и не стоит потраченного времени:
- Запрос геопозиции в браузере требует явного разрешения, и половина гостей его не даст. Вы потеряете больше заказов, чем предотвратите.
- Точность в помещении — десятки метров. Отличить столик от тротуара напротив она не позволит.
- Геопозицию на телефоне подменяют без особого труда. Барьер получается неудобным для честных и прозрачным для остальных.
Ограничения частоты помогают против массового спама: с одного стола нельзя отправить десяток вызовов подряд, с одного адреса — сотню открытий в минуту. Но человека, который присылает один вежливый заказ раз в полчаса, никакие лимиты не поймают. Это ловится не техникой.
Вывод, который стоит принять сразу: QR-код подтверждает, что у человека есть код. Он не подтверждает, что человек сидит за столом. Любой, кто утверждает обратное, либо не разобрался, либо продаёт.
Подмена наклейки — риск, о котором думают меньше всего
Пока все обсуждают шалости гостей, существует сценарий гораздо неприятнее: поверх вашего кода наклеивают чужой. Гость сканирует, попадает на постороннюю страницу, вводит там что-нибудь и остаётся с проблемой, а претензии приносит вам.
Против этого техника бессильна полностью — наклейка физическая. Работает только зал.
- Осмотр столов на открытии смены наравне с солонками и салфетками. Пять минут на сорок столов.
- Носитель, который трудно переклеить незаметно: подставка с гравировкой, код под стеклом, вклейка в меню-холдер. Бумажный стикер на скотче — худший вариант из возможных.
- Короткий и узнаваемый домен. Гость, увидев в адресной строке название заведения или знакомый сервис, заметит подмену. Если ваш обычный адрес выглядит как случайный набор символов, отличить его от поддельного невозможно в принципе.
- Приучить команду реагировать на фразу «а у вас код не открывается» не пожатием плеч, а проверкой стола.
Что реально снижает риск
Свод того, что работает, по убыванию эффекта.
Перевыпуск кода при любом подозрении. Сомнительный заказ с пустого стола, конфликт с компанией, увольнение сотрудника со скандалом — печатаете новую наклейку, прежняя ссылка мертва. Это дешевле и быстрее любых настроек.
Подтверждение заказа человеком. Официант перед принятием видит стол и знает, сидит там кто-нибудь или нет. Заказ с пустого стола отсеивается за секунду, и никакая техника этого не заменит.
Отключение стола на время, когда он не работает. Убрали веранду до весны — архивируйте её столы, а не оставляйте коды действующими «на всякий случай».
Остановка приёма новых заказов вне часов кухни. Ночной заказ из дома не пройдёт просто потому, что кухня закрыта, а вызов официанта при этом останется доступным для тех, кто реально сидит в зале.
И спокойное отношение к единичным случаям. Один розыгрыш за полгода — это не повод перестраивать процессы. Повод — если такое происходит регулярно с одного и того же стола.
Где заканчивается техника
Любая система защиты в общепите упирается в одно и то же: зал видит больше, чем сервер. Сервер знает про токен, время и лимиты. Официант знает, что за восьмым столом никого нет уже двадцать минут.
Поэтому здравая конструкция выглядит так: техника снимает массовые и автоматические злоупотребления, а решения в спорных ситуациях остаётся принимать человеку, и у него для этого должны быть кнопки — перевыпустить код, отключить стол, отменить заказ с причиной.
Если поставщик обещает, что после внедрения думать об этом не придётся вообще, стоит задать ровно один вопрос: что произойдёт, если гость сфотографирует код. Внятный ответ на него говорит о системе больше, чем весь остальной рекламный текст.