Communications

Per-property message templates

← Back to Communications

Architectural shift in gh#774: message templates are now per-property, not global/tenant-wide. Each property has its own templates; the legacy /operations/messageTemplates global surface is being retired.

Why per-property

Properties differ enough that one global template doesn't fit:

  • Different door-PIN-delivery format per property
  • Different parking instructions (some have garage, some street, some both)
  • Different WiFi sign-on details
  • Different building-entry quirks (intercom code, lift card, gate ringer)

A global template forced operators to either (a) handle these via placeholders (which got long and brittle) or (b) accept generic copy that's wrong for half the properties.

After gh#774, each property has its own template set; operator edits per-property without spillover.

Where the editor lives

V28 → Properties → pick property → Message Templates tab.

Per-property mode:

  • Each template slug carries a per-language body.
  • Edit one property's checkin_instructions without touching the others.
  • Diff view: "show me what's different between Vydrica and Prístavná" → highlights divergent placeholders.

Inheritance

For templates an operator hasn't customized per-property, the platform falls back to the global template (still present, accessible via the V28 Message Templates editor). So operator can:

  1. Author a sensible default at the global level.
  2. Override per-property only where needed.

When you open the per-property editor, templates fall into two groups:

  • Overridden (per-property body in effect)
  • Inherited (using global default — listed with an Override button)

Picker shows the right templates (gh#775)

The V28 Inbox REPLY WITH TEMPLATE dropdown previously showed templates with property scope NO TEMPLATES · N OTHER because propertyFkId was a string vs the filter expected number (gh#775). Fixed; the picker now shows the right per-property templates.

If a property has no per-property templates AND no global default for a slug, the picker shows the inherited fallbacks marked (inherited).

Removing from Operations (gh#774)

The legacy /operations/messageTemplates global table is removed post-gh#774. The single per-tenant table is replaced by per-property tables; the global default lives in V28 → Properties → All Properties → Message Templates (where "All Properties" is a virtual property representing tenant-wide defaults).

If you used to bounce to legacy /operations/messageTemplates, that surface no longer exists in V28 navigation. Use Properties → pick property OR Properties → All Properties.


Implements: gh#774 (per-property message templates), gh#775 (V28 Inbox template picker shows the right templates). Related: V28 Message Templates editor.

Source: the FlatsBratislava operator manual.