Message templates editor (V28)
The V28 Message Templates editor lets operators edit guest-facing message bodies without bouncing to the legacy /operations/messageTemplates or /admin/properties pages.
Open from V28 → Operations → Message Templates.
What's a message template
A WhatsApp template body the platform reuses across reservations — checkin_instructions, late_arrival_welcome, parking_directions, thank_you_message, etc. Each carries {{placeholders}} (see Task Templates → Placeholders) and a per-language body.
Editing surface
For each template:
- Slug — the stable identifier (e.g.
checkin_instructions). - Per-language body — English / Slovak / Czech / Hungarian / German / etc., side-by-side textareas.
- Placeholder validator — flags unknown paths inline.
- Preview — pick a sample reservation; the editor shows the rendered body in each language.
Save → live on the next outbound send using that template slug.
Per-property override
For property-specific differences (a specific door code format, a different WiFi hint), per-property overrides live alongside the global template. The editor shows the global body and lets you author an override per property.
When the template is rendered for a reservation, the override (if any for that property) wins; otherwise the global body is used.
Approval (Meta templates)
For templates that ship as Meta-approved WhatsApp templates (the ones with {{1}} placeholders that Meta gates), the editor surface only edits the per-language body for in-app rendering — the Meta-approved template itself is a separate artifact maintained in Meta's Business Manager.
For free-text templates (the ones the platform sends inside the 24h window), the V28 editor IS the source of truth.
Versioning + audit
Every save is audit-logged (user-owned config per gh#321):
- Old → new diff per language
- Actor
- Timestamp
Visible in Admin → Audit Log → Message Templates. Reverting to a prior version is a one-click affordance on the audit log row.
Why this exists
Before gh#313, operators editing a guest-facing message body had to bounce to legacy /operations/messageTemplates (for the global body) or /admin/properties (for per-property overrides) — two surfaces in different styles, no V28 chrome, easy to lose track of which one took precedence. The V28 editor unifies both.
Implements: gh#313 (V28 Message Templates editor). Related: Task Templates → Placeholders, AI Cockpit → Prompts.