Templates
Templates are reusable message bodies. One template per channel (email, sms, push, telegram). Variables are Mustache-rendered against the player's traits + the journey/campaign context.
Channels + fields
| Channel | Required | Optional |
|---|---|---|
body (HTML), subject | preheader (preview text) | |
| sms | body (plain text, ≤1600 chars) | — |
| push | body (notification body), subject (title) | data (key-value payload for in-app handling) |
| telegram | body (Markdown / HTML) | — |
Variables
Mustache syntax:
<p>Welcome, {{first_name | default: "player"}}!</p>
<p>Your bonus code: <strong>{{bonus.code}}</strong></p>
{{#has_unfinished_bet}}
<p>You have a bet still pending — open the app to follow.</p>
{{/has_unfinished_bet}}
Available context:
{{external_id}}{{email}}{{phone}}{{first_name}}{{last_name}}{{total_deposited}}{{total_wagered}}{{ggr}}{{current_tier_code}}{{kyc_status}}- Journey context:
{{journey.run_id}}{{journey.context.<key>}} - Bonus context (when called from
grant_bonus):{{bonus.code}}{{bonus.amount}}{{bonus.currency}}
For JSON bodies in webhook nodes, use triple-stache {{{var}}} to skip HTML escaping.
Live preview + send-test
Editor previews the rendered output against a synthetic player. Click Send test to dispatch one message to your own email/phone (bypasses frequency caps + quiet hours; admin-only).
Versioning
Templates are mutable but bonus_grants takes a frozen snapshot of the template at issue time (so editing a template later doesn't retroactively change historical sends). Campaign sends use the live template at fan-out time.