The app itself sends almost nothing. When staff assign a table, settle a tab or close a ticket, the server dispatches a notification through the platform's template engine. This page lists those triggers, so you know which template to edit when the wording is wrong, and sets expectations about push.
What gets sent, and when
| Trigger in the app | Templates | Goes to |
|---|---|---|
| Check-in → Assign, or Notify | reservation-ready, reservation-ready-sms | The guest's email and phone on the task |
| Reservation booked (wizard) | The definition's notificationTemplate, else reservation-confirmation; SMS pass; ICS attached | The customer, plus an owner copy |
| Reservation cancelled | The definition's cancellationTemplate, else reservation-cancelled (email and SMS) | The customer |
| Reservation reminders | Scheduled from the definition's notifications[] offsets, by email, SMS or WhatsApp | The customer |
| Checkout → receipt by email or SMS | pos-receipt, pos-receipt-sms | The address or number entered at checkout, any tender |
| Order lifecycle (storefront orders) | order-confirmation, order-status-update, order-cancellation | The buyer |
| Support ticket created | ticket-created | Reporter |
| Ticket status changed | ticket-status-update | Reporter |
| Ticket assigned | ticket-assigned | Assignee |
| Pipeline task enters a stage (POS fire, check-in queue) | task-assignment / -sms on the first stage, task-status-update / -sms afterwards | The stage's configured recipients |
| Event ticket scanned in | event-checkin-confirmation | Ticket holder |
| Event ticket issued / activated / cancelled / refunded | event-ticket-confirmation, event-ticket-cancelled, event-ticket-refunded | Ticket holder |
| Event participant confirmed / cancelled | event-participant-confirmed, event-participant-cancelled | Participant |
Every one of these is a CreateNotificationCommand with the relevant records in its context — the reservation, the service point, the order — so templates read fields such as data.reservation.customer.name directly.
Where to change the wording
Templates live in Studio Manager under the notification templates for the organization; the names above are the keys. A definition-level override (notificationTemplate, cancellationTemplate on a reservation definition) wins over the org default for that definition only.
Receipts are different: the receipt layout is a print template (posReceiptCustomerTemplate in the org settings, with a factory default), resolved on the server and returned to the app as print primitives. Email and SMS receipts use pos-receipt and pos-receipt-sms.
Copy-to and sender settings
Three base settings decide who else hears and who the message is from:
| Setting | Effect |
|---|---|
notificationCopyTo → reservation.sendCopyTo | Where the owner's copy of a booking confirmation goes. Falls back to the organization email unless explicitly false. |
systemEmail | The from-address for platform emails. |
systemPhone, systemSmsPhone, phones | The numbers SMS and calls are sent from. |
Set these once per organization. An organization with no SMS number configured will send the email half of every pair and silently skip the text.
Push notifications on mobile
Be precise here, because the More tab has a Notifications entry and it does nothing yet.
| Kind | Status |
|---|---|
| Softphone call invites | Real. Android registers with Firebase Cloud Messaging; iOS uses PushKit VoIP through the Twilio SDK. The device registers with POST /phone/voice/register-device and heartbeats every 60 seconds. iPad is excluded — CallKit and PushKit are iPhone-only. |
| General push (new lead, assigned ticket, inbound message) | Not implemented. Firebase is initialized on Android only, and only to wake the app for a call. Nothing subscribes the device to other topics. |
| In-app toasts | Real. Chat messages, queue changes and errors surface as in-app banners while the app is open. |
| More → Notifications | A placeholder tile with no screen behind it. |
If your staff expect to be told about a new lead while the app is closed, that expectation is not met today. Email and SMS to the staff member are the working channels.
Nothing arrived — check in this order
1. Which half is missing? Most triggers are an email/SMS pair. Email arriving without the text almost always means the organization has no SMS number configured — the server sends what it can and skips the rest silently.
2. Does the record carry contact details? A walk-in taken without an email or phone cannot be told anything. Notify on such a task does nothing.
3. Is the template there? A missing template key means nothing is dispatched. The keys are listed above; a definition-level override wins over the org default.
4. Is the sender configured? systemEmail for mail, systemPhone / systemSmsPhone for texts. Without them there is nothing to send from.
5. Was the trigger actually hit? Left does not notify. Clearing a table does not notify. Only Assign and Notify send "table ready".
6. Check the message log. Every dispatch is recorded, so you can tell "never sent" from "sent and not received" — that distinction saves the argument with the guest.
| Symptom | Cause |
|---|---|
| Email arrives, SMS never does | No SMS number on the organization |
| Neither arrives for one definition | A template override pointing at a key that does not exist |
| The owner copy stops | reservation.sendCopyTo set to false, or no organization email |
| Staff expect a phone alert for a new lead | Not implemented — only calls wake the app |
| Reminders fire at the wrong time | Reminder offsets are on the definition, in its timezone |