Потоки заказов — Pay-First и Pay-Later
Когда использовать Pay-First и Pay-Later, как каждый из них работает от начала до конца, какие статусы заказов видят операторы в панели администратора и какие фоновые задания поддерживают синхронизацию заказов с POS.
Fooodo поддерживает два различных потока заказов. Они отличаются тем, когда кухня видит заказ, и тем, когда происходит оплата. Выбор зависит от стиля обслуживания, а не от ресторана — один ресторан может использовать разные потоки на разных столах.
- Guest scans QR, builds cart
- Guest pays
- Order is exported to R-Keeper
- Kitchen prepares
- Guest receives or collects
- Guest scans QR, builds cart
- Items go to R-Keeper kitchen immediately
- Guest adds more rounds (each one syncs)
- Guest asks to pay
- Order locked → marked paid in R-Keeper
Потоки заказов Fooodo взаимодействуют с вашим POS через контракт коннектора. R-Keeper — это действующий эталонный коннектор на сегодняшний день; описанная ниже механика отражает требования, которым должна соответствовать каждая реализация коннектора.
Pay-First
Используйте Pay-First, когда гости должны оплатить заказ до начала обслуживания: навынос, быстрое обслуживание, фудкорты. Кухня никогда не видит неоплаченный заказ; POS получает один экспорт заказа на корзину; если гость бросает корзину, ничего не попадает на линию.
Pay-Later
Используйте Pay-Later для обслуживания за столиками и многораундового обслуживания. Первый раунд поступает в POS в момент отправки; последующие раунды добавляются к тому же заказу в POS по одному. Заказ остаётся открытым в POS с первого раунда до момента оплаты. Внутри системы Fooodo отслеживает, какие позиции уже были отправлены, чтобы каждый раунд синхронизировался только один раз.
Почему потоки различаются
Механическое различие невелико — Pay-First делает один экспорт в POS, Pay-Later делает несколько. Операционное различие важнее:
- В Pay-First кухня не выполняет лишней работы, если гость бросает корзину. Однако такой сценарий неудобен для обслуживания за столиками: люди ожидают оплатить в конце; просьба оплатить заранее воспринимается как транзакционный, а не гостеприимный подход.
- В Pay-Later опыт гостя соответствует обычному ресторану. Оператор принимает небольшой риск того, что заказ может остаться неоплаченным (гость ушёл, карта не прошла) — тот же риск, который существует при любом обслуживании с бумажным счётом сегодня.
Многие сети начинают с Pay-First на стойках навынос, а затем добавляют Pay-Later на столики для обслуживания, когда персонал освоился с панелью администратора.
Настройка потока
Поток задаётся для каждого стола или как настройка ресторана по умолчанию в панели администратора. Ресторан может совмещать потоки — например, столики для обслуживания работают на Pay-Later, стойка навынос — на Pay-First, и оба варианта работают через одну установку Fooodo.
Статусы на практике
Заказы проходят через конечный автомат состояний. Приведённые ниже названия — это именно то, что отображается в панели администратора; они полезны как для операторов, просматривающих собственные заказы, так и для интеграторов, обрабатывающих события заказов.
Статусы, которые важны большинству операторов:
| Статус | Что означает |
|---|---|
Created | Корзина создана, позиции ещё не отправлены |
InProgress | Позиции отправлены в POS, ожидается продолжение или оплата |
ReadyToBePaid | Гость завершил заказ, ожидается оплата |
Paid | Оплата прошла успешно, POS отметил заказ оплаченным |
Finished | Заказ закрыт, финальный успешный статус |
Статусы, связанные со сбоями:
| Статус | Что означает |
|---|---|
Locked | POS держит заказ открытым (официант редактирует его). Автоматические повторные попытки с задержкой. |
Error | Экспорт в POS завершился ошибкой после всех повторных попыток. Требуется ручное вмешательство. |
Cancelled | Заказ был отменён или истекло время ожидания оплаты |
Большинство статусов Locked разрешаются за секунды. Устойчивый Locked обычно означает, что официант открыл заказ в POS и забыл его закрыть.
Error — единственный статус, требующий вмешательства человека. Журналы сбоев коннектора фиксируют причину ошибки; типичное решение — пересоздать заказ на терминале POS.
Что выполняется в фоновом режиме
Небольшой набор запланированных заданий поддерживает синхронизацию слоя заказов — операторам не нужно их запоминать, однако интеграторы, работающие с данными Fooodo, должны знать периодичность их выполнения:
| Периодичность | Задание |
|---|---|
| Каждую минуту | Проверка доступности ресторана |
| Каждую минуту | Отмена заказов, у которых истекло время ожидания оплаты |
| Каждые 2 мин | Получение обновлений заказов из POS |
| Каждые 4 мин | Получение статуса столов из POS |
| Каждые 5 мин | Синхронизация доступности позиций меню |
| Ежедневно в 09:00 | Полная синхронизация меню |
Если POS недоступен, задания повторяются с экспоненциальной задержкой; заказы остаются в текущем статусе и согласовываются после восстановления коннектора.
Архитектура Fooodo
Как устроен Fooodo — разделение на два сервиса (приложение меню и платёжный сервис), модель мультиарендности компания/ресторан/стол, POS-агностический контракт коннектора и место UVS в системе.
R-Keeper коннектор
Живая эталонная реализация контракта POS-коннектора Fooodo — какие данные пересекают границу, расписание синхронизации, лояльное ценообразование и механизм повторных попыток при сбоях в продакшене.