Writing Messages
Each scenario sends a message template — the text of the SMS, with placeholders that Pickpad fills in from the order. This page covers the available variables, some formatting tips, and the built-in helpers for conditional and formatted text.
Message Templates
Templates support variables that get filled in automatically from the order data:
| Variable | What it inserts |
|---|---|
{{name}} | Customer's first name |
{{shortNumber}} | Short order number (e.g. #42) |
{{promiseTime}} | Estimated pickup time (e.g. 2:30 PM) |
{{stationName}} | Name of the kitchen station |
{{locationName}} | Name of the location |
{{pickpadName}} | Name of the Pickpad device |
Example templates
Hi {{name}}, your order #{{shortNumber}} is ready at {{locationName}}! Come grab it 🎉
Your order #{{shortNumber}} is being prepared and will be ready at {{promiseTime}}.
Thanks for your order, {{name}}! Hope you enjoy it. Leave us a review ⭐
Formatting tips
- Keep it short. SMS messages over 160 characters can get split into two messages and billed as two.
- Always include the order number (
{{shortNumber}}) so the customer knows which order you're talking about. - Avoid special characters like
&,<,>— they don't add anything in SMS and can trip up some carriers. - If
{{promiseTime}}is empty (the order has no estimated time), it just shows up blank. Only include it if your POS reliably sends pickup times. - Phone numbers need to be in E.164 format (e.g.
+12025551234). Messages to numbers in any other format are silently skipped.
Helpers & conditionals
Templates come with a small set of built-in helpers for common formatting needs.
Text case helpers
| Helper | What it does | Example |
|---|---|---|
{{upper variable}} | ALL CAPS | {{upper name}} → JOHN |
{{lower variable}} | all lowercase | {{lower name}} → john |
{{capitalize variable}} | First letter capitalised | {{capitalize name}} → John |
Hi {{capitalize name}}, your order #{{shortNumber}} is ready!
Conditional blocks
Use {{#if variable}} to include text only when a value is present:
Hi {{name}}, your order #{{shortNumber}} is ready!{{#if promiseTime}} Pickup time: {{promiseTime}}.{{/if}}
If promiseTime is empty, the pickup-time sentence is left out entirely. Without the #if, you'd end up with a trailing Pickup time: . in the message.
Use {{#unless variable}} for the opposite: include text only when a value is absent:
Hi {{name}}, your order is ready!{{#unless pickpadName}} Ask staff for assistance.{{/unless}}
Comparing values
Use {{#if (eq variable "value")}} to branch on a specific value:
{{#if (eq stationName "Drive-Thru")}}Please pull forward to the pickup window.{{else}}Come inside to collect your order.{{/if}}
Branching on delivery type
You can also vary the wording by delivery type within a single scenario, using these flags:
| Flag | True when the order is |
|---|---|
isPickup | a Pickup order |
isDelivery | a Delivery order |
isInPlace | an In-Store order |
Hi {{name}}, order #{{shortNumber}}!{{#if isDelivery}} It's on the way 🚗{{/if}}{{#if isPickup}} Come grab it at {{locationName}} 🎉{{/if}}
This is an alternative to Delivery Type Targeting: reach for targeting when you want separate scenarios per delivery type, and reach for these flags when you'd rather have one scenario whose wording adapts to the delivery type.
Combining helpers
Helpers can be nested inside each other:
Hi {{upper name}}, ORDER #{{shortNumber}} IS READY!
{{#if name}}Hi {{capitalize name}}! {{/if}}Your order #{{shortNumber}} is ready.