A severe allergy was spoken aloud and the ticket carries no trace
In short
If an allergy is audible in the recording and absent from the kitchen ticket, the cause is almost never transcription. It is that allergy has no field in the order model, so the words land in a free-text note that the injection payload truncates, or that prints on the customer receipt and not on the prep ticket. The repair is a typed allergy object the order cannot close without resolving.
Key takeaways
- Count 30 days of transcripts against the tickets they produced: structured field, free text, or nothing at all.
- If the order schema has no allergy field, the agent is not the defect and no prompt change will fix it.
- An allergy is not a modifier: it can bind the whole order, including items nobody flagged.
- Place a test order with a distinctive token and physically read every artefact it prints, not just the receipt.
- The allergy object must fail closed — no silent degradation to a note, and a person on the call when unresolved.
- We build the workflow that enforces a rule; the operator and their advisers own the rule itself.
The words were heard. Pull the transcript and you will usually find the allergy stated clearly, which means the failure happened after transcription — in a model that has nowhere to put it. Confirm that across 30 days of calls rather than 1 recording: match transcripts against a term list, then for every match fetch the order payload sent to the point of sale and the text that actually printed at the station. Classify each into 4 buckets — a structured allergen field, free text that printed on the prep ticket, free text that did not, and nothing at all. Those 4 counts are the diagnosis, and they are the number the operator needs before deciding anything.
Build the term list from how guests actually speak, not from a dictionary. People rarely say 'nut allergy'. They say she can't have nuts, he's coeliac, no dairy at all, it makes her really ill, is there gluten in that. The alias work is the same discipline as teaching an agent the menu, described in teaching an ordering agent to hear your menu, and it has to cover the languages your guests call in.
Where the words go after they are heard
| Stage | What it can hold | How it loses the allergy |
|---|---|---|
| Transcription | The full utterance | Room noise at 19:30 swallows the clause; the rest of the order transcribes fine |
| The agent's order state | Whatever the schema defines | No allergy field exists, so the words go into a generic note or nowhere |
| The injection payload to the POS | A notes string, often per-order rather than per-item | Character limits truncate it, and a per-order note never reaches the station making that dish |
| The POS order object | Its own notes fields, with its own print routing | The note is configured to print on the customer receipt and not the kitchen ticket |
| The prep ticket or KDS tile | A short line of text per item | The line wraps or truncates, and the note lands below the fold on a KDS tile |
Count the characters your own thermal ticket prints on 1 line before assuming a sentence fits, and stand at a KDS screen to see how much of a note is visible without scrolling. Most operators have never checked either. Note limits also differ per platform — Toast, Square, Lightspeed and every delivery aggregator define their own note fields and their own lengths, so read the documentation for the one you inject into rather than assuming a shared behaviour. If the transcript itself is missing the words, this is a different problem and it is diagnosed in the agent is accurate at three in the afternoon and useless at seven.
Four causes, in the order they are usually true
- There is no typed field anywhere in the model. By a wide margin the most common cause, and the one people investigate last because it feels too simple. Every layer is doing exactly what it was built to do; the concept does not exist in any of them. Read the order schema first. If there is no allergen field, stop investigating the agent — no prompt, model or voice provider fixes a field that was never defined.
- The free text is truncated or misplaced by the injection path. Compare the notes string your system sent against the notes string the point of sale stored. Missing characters means a length limit. Present but attached to the order rather than the line item means it will not travel to the station that cooks the dish, which looks identical from the dining room and is a different fix.
- Notes print on the receipt and not on the prep ticket. Place a live test order containing a distinctive token — a nonsense word nobody would type by accident — then physically collect all 6 artefacts it produces: customer receipt, expo ticket, station ticket, KDS tile, packing label, delivery-partner copy. Read them. The token will be missing from at least 1, and that is your answer.
- The read-back summarised instead of repeating. An agent that says 'and I've noted an allergy' has confirmed nothing: the guest cannot correct an allergen they never heard repeated, and the transcript gives you no evidence of what was captured. Read-back is the commit boundary of a phone order, argued in the read-back is where a spoken order becomes a ticket, and allergens are the one field that must be spoken back in full.
A 5th pattern hides inside the others. Guests very often state the allergy at the start of the call, before any item exists, then order 3 dishes. If the agent binds the allergy to the current item rather than to the order, it attaches to nothing and disappears. That is a state-tracking failure of the same family as the one traced in three modifiers in one breath and two land.
An allergy is not a modifier
Modelling allergens as modifiers is the mistake that produces most of the rest. A modifier changes a dish — no onions, extra cheese — and its scope is 1 line item. An allergy changes whether a dish may be made at all, and its scope is frequently the whole order: a shared fryer, a shared grill surface, a garnish added at the pass. A guest saying 1 person at a table of 6 cannot have nuts is not modifying 1 line; they are placing a condition over everything the kitchen is about to prepare. A catalog that can only express per-item modifiers cannot represent that, and no amount of prompt engineering makes it able to.
The allergy object, and why it fails closed
- Allergen, from a controlled list the operator maintains to match whatever the local labelling regime names, plus an other option carrying free text. Confirm that list against your own regulator rather than copying somebody else's. A controlled list is what makes the field reportable and lets the catalog answer whether a dish contains it.
- Scope. Which line items it binds, with whole-order as a legitimate and common value. This is the field that separates an allergy from a modifier.
- Severity as the guest stated it. An enum, not prose, and explicitly a record of what was said rather than an assessment of anything.
- Stated-at. Which turn of the call it appeared in, so the review process can find cases where it was heard early and bound late.
- Confirmed-by-read-back. A boolean that must be true, set only when the agent spoke the allergen and the affected items back and the guest agreed.
- Resolution. Accepted by the kitchen, refused, or escalated to a person — with the person's identity recorded when it is the third.
Then make the order refuse to close while any of those are unresolved. This is the one field where the correct fallback is a human rather than a retry: if the agent cannot confirm the allergen, the scope and the read-back, it hands the call to a member of staff. That only works if the transfer itself is reliable, which is a separate and frequently broken piece of machinery covered in the handoff works and the call still dies. And if the point-of-sale integration cannot carry a structured allergen field at all, the order must not be injected silently as a note — it goes to a person, every time, until the integration can hold it.
An allergy that degrades quietly into a free-text note has not been recorded. It has been stored somewhere nobody is required to look.
After the fix: proving it stays fixed
- Re-run the 4-bucket count every 30 days. Same query, minutes to run once written, and it catches the day a POS update changes note routing.
- Alert on any order carrying allergy language in the transcript with no allergy object attached. That 1 check is worth more than any dashboard, because it fires on the case that matters, and 90 days of it tells you whether the fix held.
- Add allergen calls to the weekly review sample deliberately rather than at random, using the ritual described in the weekly listen-back on orders that went wrong.
- Give the agent a read path into placed orders, so a guest ringing back to check the allergy was recorded gets an answer instead of a transfer — the missing capability behind half the calls are people asking where their food is.
- Fix the same field on the other ordering surfaces. Whether guests order through a native app or a table QR code, allergens live in the order model rather than in a screen, which is one of the less obvious consequences of the choice weighed in installed app versus scan to order at the table.
None of this is a large build. It is a field, a constraint, a read-back rule and a refusal to degrade — the kind of narrow, high-consequence scope we treat as core in MVP and product builds rather than as something to add after launch. The rest of this silo sits under voice and phone ordering agents, and the wider practice is described under restaurants and food service.
Frequently asked questions
Short answers to the follow-ups this page tends to raise.
Why did the allergy the guest mentioned never appear on the kitchen ticket?
Usually because the order model has no allergen field, so the words were written into a generic note that something downstream truncated, misrouted or never printed. Check in this order: does the schema have an allergy field, did the payload sent to the point of sale contain the text intact, was the note attached to the item or to the order, and does that note type print on the prep ticket rather than only on the customer receipt.
Can an allergy be handled as a modifier on the item?
No, because the scopes are different. A modifier changes one dish; an allergy can bind the entire order, including items nobody flagged, because of shared equipment and shared preparation surfaces. Modelled as a modifier, an allergy stated once at the start of a call attaches to one line and vanishes from the rest, which is exactly the failure that produces a ticket with no trace of it.
Should a voice agent be allowed to complete an order that involves an allergy?
Only if it can carry the allergy as a structured field, speak it back in full and record the guest's confirmation. Where any of those is missing, the order should not close and the call should go to a person. The rule that matters is no silent degradation: an allergy must never be quietly written into a free-text note because the structured path was unavailable.
How do we test that allergy notes actually reach the line?
Place a real order containing a distinctive nonsense token and then physically collect everything it prints — customer receipt, expo ticket, each station ticket, the kitchen display tile, the packing label and the delivery partner's copy. Read all of them. The artefact missing the token is the one that has been missing every allergy note, and most operators have never run this end to end.
- voice ordering
- allergens
- POS integration
- order modelling
The work behind this page
Builds from our portfolio that this page draws on.
Read next
- Read-back: the moment a spoken order becomes a kitchen ticketRead-back is the commit boundary of a phone order — the last moment a wrong item is still free to fix. Everything the kitchen will act on differently has to be spoken before anything is written.definition
- Three modifiers in one breath and only two reach the ticketThe recording contains three customisations and the printed chit carries two. Which one goes missing tells you which layer dropped it — and transcription is the least likely answer.diagnostic
- The handoff fires correctly and the call still dies at the counterEscalation logs show the transfer firing and the guest still reaches nobody. The trigger is rarely the fault — the destination is, and it fails hardest during exactly the hours escalation happens.diagnostic
- Half pepperoni, half veggie, and the kitchen makes it wholeA topping asked for on one half arrives on the whole pizza, or vanishes. Before blaming the agent, check whether the item can express a half at all — most catalogs cannot, and no prompt fixes that.diagnostic
- Off-menu: the requests an agent must never improvise onOff-menu is not a property of the request. It is a property of your catalog on the day the call arrives — and only one of the three requests that sound off-menu actually is.definition
- The agent is accurate at three in the afternoon and useless at sevenAccuracy that tracks the clock rather than the order is an audio problem. Caller-side noise, the room behind the handset and a degraded audio path fail the same way and need three different fixes.diagnostic
Working on something in this space?
Tell us where you are in a sentence or two. We'll tell you honestly whether we're the right team, and what a sensible first slice of the work looks like.
Start the conversation