Working with prompts
“Prompt” in Voxa means the message a Question or Message node sends to a contact. This guide is about writing them well — it is not about LLM prompt engineering. Voxa does not ship a built-in LLM; if you connect one (see LLM providers) the same principles apply inside the model’s system prompt.
Variable interpolation
Section titled “Variable interpolation”Any stored variable can be dropped into a prompt body with double curly braces:
Thanks {{full_name}}! We'll send the voucher to the number you messaged us from.Variables that don’t exist render as empty strings — they do not throw and they do not block the flow. That’s deliberate: an empty greeting is better than a crash. It also means you must defensively name variables — a typo fails silently.
Ask one thing at a time
Section titled “Ask one thing at a time”WhatsApp is a texting surface. Walls of text get ignored; multi-part questions get half-answered. One prompt, one question, one variable:
✅ What's your full name?✅ What city do you live in?
❌ What's your full name, city, and contact number?Break compound questions into several Question nodes. Voxa’s flow builder makes this cheap.
Constrain where possible
Section titled “Constrain where possible”Free-text input is the biggest source of data-quality problems. Where the universe of valid answers is small, say so:
Which size?1. Small2. Medium3. LargeThen use a Validation node (or condition) to check the answer is
one of 1, 2, 3, small, medium, large. Trim whitespace,
lowercase, and normalise before storing.
Never promise what you can’t deliver
Section titled “Never promise what you can’t deliver”If your flow says “We’ll send your voucher in 5 minutes” — make sure the downstream system actually can. WhatsApp reads feel intimate; a broken promise lands harder than it would in email.
Handle the wrong answer gracefully
Section titled “Handle the wrong answer gracefully”When a validation fails, reply with something short and specific:
Hmm, that doesn't look like a South African ID. Please try again.Don’t say “Invalid input”. Don’t dump the regex. And give the contact a way out — either a retry limit (so they don’t loop forever) or an explicit exit keyword.
Use WhatsApp formatting sparingly
Section titled “Use WhatsApp formatting sparingly”WhatsApp supports a small subset of markdown-ish formatting:
*bold*renders bold._italic_renders italic.~strikethrough~renders strikethrough.- Triple backticks render monospace.
Everything else is literal. No headings, no links with labels, no tables. Paste a raw URL and WhatsApp will auto-link and sometimes auto-preview it.
Opt-in and opt-out language
Section titled “Opt-in and opt-out language”For any campaign that collects personal information, the first prompt should make consent explicit:
Hi! This is the 2026 Voxa launch competition. By replying, you agreeto our terms and privacy policy:- https://voxa.software/terms- https://voxa.software/privacy
Reply STOP at any time to exit.Keep the tone consistent
Section titled “Keep the tone consistent”Decide once, per tenant, whether you write like a friendly person or a brand. Mixing breaks the illusion and surfaces the automation. Example pair:
✅ Welcome! Drop your name below and we'll get you sorted.✅ Welcome to the ACME Corp 2026 promotional campaign. Please provide your full name.
❌ Welcome to the ACME Corp 2026 promotional campaign. Drop your name below and we'll get you sorted.Version your flows, not your prompts
Section titled “Version your flows, not your prompts”Don’t create question_name_v2, question_name_v3 nodes inside the
same flow. Voxa already gives you flow-level versioning — cut a new
flow version when the copy changes materially.
Anti-patterns
Section titled “Anti-patterns”- Greeting + ask in the same message (“Hi Sarah, what’s your email?”). Split them. Or don’t greet at all — the Message node before the first Question does that job.
- Over-personalising with uninferred variables. Don’t write
"Welcome back, {{last_campaign_name}}!"unless you’re certain the variable is set. - Asking confirmation after every step. One confirmation at the end of the flow is enough.