iVendNextDevelopers Request a sandbox

Guest ordering: a QR code at the table and a self-order kiosk — the recipe

Guests in quick service and full service expect to order from their phone at the table, or from a kiosk at the counter. The till already keeps a table's running order (the open check), the register's menu (its item groups, price list and the dishes' choices) and the floor's tables; what it does not have is a door for the guest. This recipe gives each table a printed QR code and each kiosk a link: the guest reads the register's own menu on their phone and sends an order, which lands as lines on that table's check through the till's open-check door, unsent, for the server to read and send to the kitchen. A kiosk order opens a tab named by an order code, paid at the counter.

Reference implementation: samples/s56_guest_ordering/.

When to use it. A store with Table Service on its register: full service, a café or bar with table ordering, a hotel's restaurant; a quick-service counter with a kiosk. The tables are the till's own floor (Retail Floor Section and Retail Floor Place); the menu is the register's item groups and price list; a dish's choices are its Retail Option Groups. Payment in the app, delivery and collection come on top (Make it your own, below).

The four rules, here. No code runs inside the retailer's iVendNext. One address is called, your service: by the Make code button, and by the guest's phone. The service writes to a check only through the till's door (check_open, check_add_lines), as the app's own user, with the three rights guest ordering asks for: open a check, add to a check and see the checks. ⛔ Never send to the kitchen: a guest's lines wait for a person. The page asks no name, phone or e-mail.

Steps

Settings

  1. Install the manifest. It adds the settings (one per company, with a row per store), the code record, the print format Table card, the roles PP GOR Manager and PP GOR Integration, the button Make code and its service (off), and the feed registration that makes the app's own user (pp_gor@integration.invalid; leave the feed off).
  2. Give the app's user its store and its key, in this order, on its User record: keep Is Desk User, tick Is POS User, choose a Shift Profile, link a Retail Permission with Open Checks: open a check, add to a check and see the checks only; add one row for each store to the store access table (each store once, with its register there, Table Service on); Save; then Generate Keys. Without Is POS User the save drops the store row and the till answers "You are not assigned to this outlet." Never give it write on Floor Section: that is every check verb, a comp included.
  3. In Role Permissions Manager, give PP GOR Integration Read on Item, POS Profile and Retail Option Group; give PP GOR Manager to the people who make the codes, with Read and Select on Retail Floor Place and Select on Warehouse.
  4. On PP GOR Settings, one row per store: the same register the app's user holds there (its Item Groups are the menu: list each group, a group's sub-groups are not read), Orders from the tables, Orders from the kiosk, the course word (Guest order to start), the most lines one order holds and the most of one dish (10 and 10 to start). Consent to the service and switch the button on; press Connect again on the app's package record if the site could not reach the app.

Codes

  1. The manager makes a PP GOR Code for each table (kind Table, the store, the table) and for each kiosk (kind Kiosk, the store, a name) and presses Make code (on one record, or on many ticked in the list). The service writes the code's number, its link and its QR picture; Print, Table card, prints the table's name, the QR code and Scan to order.
  2. A code that leaked is replaced by pressing Make code again on that record: its number goes up by one and the old card stops working (within 15 seconds). Changing a code's kind, store, table or kiosk name stops it working until Make code is pressed again, so a card never orders for another table.

An order at the table

  1. The guest scans the card: the page shows the register's menu, each dish with its price (prices before any offer), Choose for a dish's choice groups, a note for the kitchen on each line, and Send order.
  2. The service checks the order against the menu and the store's limits (a dish on the menu, a whole quantity up to the store's most, each choice the dish's own, each group's least and most picks), then, one order a table at a time (whichever of the table's cards it came from): no check open at the table, it opens one and adds the lines; one open, it adds the lines to it, unless a till is taking its payment (please ask your server: lines added then would keep the check open after the party leaves); more than one, it refuses (please ask your server to take your order).
  3. The lines wait unsent under the course word. When the server's own lines wait too, the till's Send asks which course to send; when only the guest's wait, Send sends them as usual, so the server reads the check first. The table pays at a till as any check.

An order at the kiosk

  1. The kiosk's tablet opens the kiosk's link in a full-screen kiosk browser, so its address is not on show. The guest orders the same way; the service opens a tab named Kiosk and a five-character code (letters and digits that cannot be misread), adds the lines, and shows Your order is 7KQ2M. Please pay at the counter and keep your receipt. The counter finds the tab on the till's floor under Tabs and pays it; staff call the order by its code, or by the receipt's call number where the counter register prints call numbers. The counter's register that takes the payment has Table Service ticked too (a tab is claimed only there) and rings the app's register's service mode.

What the retailer does

Day to day the guests order and the servers work the checks at the till as before. The app never sends to the kitchen, prices, moves, merges, closes, voids, comps or prints a check, and never takes a payment: those are a person's decisions, at a till.

Limits

Technical notes

Make it your own

A partner usually adds the page's own look and languages, pictures and allergens from the retailer's records, payment at the kiosk or at the table through the retailer's gateway, and delivery or collection. Start with python3 tools/manifest/start.py s56_guest_ordering --prefix "ACME GOR".

Needs this serves

This page in the kit