Номер в очереди здесь — не бумажка, которую заведение напечатало и забыло, а строка, которую видят обе стороны одновременно. Одно сканирование выдаёт один номер, привязанный к группе очереди и числу человек. Персонал вызывает следующий номер с той стойки, что освободилась, и каждое изменение статуса проходит через одну и ту же базу данных, а не через доску, которую держит в голове один сотрудник.
Получение номера — самостоятельно или через персонал
Заведение может вести сразу несколько групп очереди (выдача заказов, возвраты, конкретная стойка) и решать для каждой группы отдельно, сканирует ли клиент QR-код сам или номер выдаёт сотрудник. К номеру можно привязать имя, контактный телефон и число человек в группе. Каждый номер относится к собственному дню заведения, а не к часам устройства, которым сканируют — заведение, работающее после полуночи, получило бы две смешанные доски, если бы день угадывался по случайному времени телефона. Если сервер не может определить, какой сегодня день у этого заведения, экран сообщает об ошибке загрузки, а не гадает и показывает пустую доску, пока люди на самом деле стоят в очереди.
Следить за своей позицией
После получения номера клиент видит свой номер, группу и текущий статус. Позиция обновляется каждые 10 секунд, пока экран открыт — это не покадровый live-счётчик. Когда действительно подходит очередь, сразу приходит push-уведомление с указанием, к какой стойке подойти, так что держать экран открытым всё время ожидания не нужно.
Сторона заведения — вызов, изменение статуса и ограничение неявок
Персонал вызывает следующий номер со своей стойки, может повторно вызвать тот же номер, если клиент не услышал, и может мгновенно отменить вызов, если ошибся номером. Каждая группа очереди задаёт, сколько раз номер можно вызвать и пропустить, прежде чем это будет считаться неявкой, чтобы вся очередь не застревала за тем, кто так и не подошёл. Каждая запись — выдача, вызов, изменение статуса, закрытие — проходит через серверные функции, которые сами проверяют право доступа; у самой таблицы номеров нет прямого права на запись, поэтому не может существовать номера, о котором ничего не знает система.
Где очередь встраивается в остальное
Точка, которая обслуживает у стойки, а не за столом, меняет QR стола из модуля еды на номер в очереди, а тот, кто предпочитает фиксированные слоты, берёт онлайн-запись.
Со стороны персонала группы очереди и стойки настраиваются в консоли заведения, на той же панели, что заказы и заявки на отпуск. Паркинг тоже выдаёт талоны по QR, но считает сумму при выезде, а не вызывает к окну: см. парковку.
А билеты на мероприятие сканируют свои QR-коды тем же механизмом, только с другим ответом — в зависимости от того, впустили ли только что или билет уже был отмечен.
Скриншот QR-кода очереди не сработает — нужно сканировать реальную вывеску на месте. Токен привязан к текущему циклу выдачи этой группы, а не к постоянному коду, который можно использовать бесконечно.
Экран номера также открывается по ссылке, напечатанной на самом талоне (koratland.com/queue?...) — приложение не нужно, чтобы проверить свою позицию из браузера.