Skip to main content

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:

VariableWhat 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

HelperWhat it doesExample
{{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:

FlagTrue when the order is
isPickupa Pickup order
isDeliverya Delivery order
isInPlacean 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.