Personalise messages with variables
Variables use double braces: {{name}}, {{phone}}, {{email}}, {{city}}, {{company}}, plus {{date}} and {{time}} which are built in, and any custom field from your import. Names are case-insensitive, so {{Name}} and {{name}} are the same. A variable BuzzRelay cannot resolve is left visible in the message rather than replaced with a blank, so a typo shows up in a test send instead of going out silently.
The syntax
Personalisation variables use double braces:
Hi {{name}}, your order ships to {{city}} tomorrow.
Double braces, not single. {{name}} is a variable. {name} is not — it is left untouched and sends literally, because single braces are reserved for spin text. This is the most common templating mistake, and it is silent: the message goes out reading "Hi {name},".
The two syntaxes are deliberately different so they never collide:
| You write | Recipient sees | Why |
|---|---|---|
{{name}} | Priya | Double braces — a variable |
{Hi|Hello} | Hi or Hello | Single braces with a pipe — spin text |
{name} | {name} | Single braces, no pipe — left alone |
Built-in variables
| Variable | Fills with |
|---|---|
{{name}} | The contact's name |
{{phone}} | The contact's number |
{{email}} | The contact's email |
{{city}} | The contact's city |
{{company}} | The contact's company |
{{date}} | Today's date at send time |
{{time}} | The time at send time |
{{date}} and {{time}} are resolved when the message is sent, not when the template is written — which matters for scheduled campaigns.
Custom fields
Every extra column in your imported spreadsheet becomes a variable, named after the column heading. A column Tier becomes {{tier}}; Renewal becomes {{renewal}}. See Import contacts from Excel.
Variable names are case-insensitive, so {{Tier}}, {{tier}} and {{TIER}} all resolve to the same field. Whitespace inside the braces is tolerated too: {{ name }} works.
What happens when a variable is missing
If BuzzRelay cannot resolve a variable — the field is empty for that contact, or you mistyped the name — it leaves the placeholder visible in the message rather than replacing it with a blank.
This is deliberate. A blank would produce "Hi , your order ships" and go out unnoticed; a visible {{naem}} is obvious the moment you send one test message. Always send a test to yourself before running a campaign — it is the fastest way to catch a typo.
The practical consequence is that you should not use a variable that is only populated for part of your list. If half your contacts have no company recorded, a message built around {{company}} will look broken for half of them. Either segment the list into a group where the field is filled in, or keep the variable out of that message.
Writing personalisation that reads naturally
- Front-load the name. "Hi {{name}}," in the first line does more than the same name buried in paragraph three.
- One or two variables is enough. A message stuffed with fields reads like a mail merge, which is precisely the impression you are trying to avoid.
- Use a field that proves you know them.
{{product}}or{{renewal}}demonstrates a real relationship in a way that{{city}}does not. - Check the capitalisation of your data. If names imported as
PRIYA, every message will shout. Fix it in the spreadsheet. - Mind the punctuation. "Hi {{name}}!" is fine; "Hi {{name}} !" is not, and it is the kind of thing only a test send reveals.
Combining with spin text
Variables make each message different by data; spin text makes them different by wording. Used together they mean no two sends are byte-identical:
{Hi|Hello|Hey} {{name}}, {quick note|just checking in} —
your {{product}} renews on {{renewal}}.
{Any questions?|Want to review it first?}
See Use spin text to vary your wording, and How to avoid a WhatsApp ban for why identical content is a risk in the first place.
Frequently asked questions
What is the correct variable syntax in BuzzRelay?
Double braces: {{name}}, {{phone}}, {{email}}, {{city}}, {{company}}, plus the built-in {{date}} and {{time}} and any custom field from your import. Single braces are reserved for spin text, so {name} is not a variable and will send literally.
What happens if a variable has no value for a contact?
BuzzRelay leaves the placeholder visible in the message instead of substituting a blank. That is deliberate — an empty substitution would go out unnoticed, whereas a visible placeholder is caught immediately in a test send.
Are variable names case-sensitive?
No. {{Name}}, {{name}} and {{NAME}} all resolve to the same field, and whitespace inside the braces such as {{ name }} is also tolerated.
How do I create my own variables?
Add extra columns to the spreadsheet you import. The column heading becomes the variable name, so a column called Tier is available as {{tier}} in any message template.
Last updated: