Skip to content
Alerts · Admin Intermediate

Notification templates

Customize the email and Slack messages your alerts send with Liquid templates — an org-wide default, per-team overrides, and per-rule exceptions, resolved field by field.

SLSluicio team 7 min read Updated Jul 2026

Alert routing already resolves most-specific-first: a rule delivers to its integration’s channels, else its owning team’s, else the org default. Since v0.11.38, the message format follows the same ladder. You write Liquid templates for email and Slack once at the org level, teams override only the fields they care about, and individual rules can make exceptions — without any team having to restate the parts it doesn’t want to change.

Webhook payloads and PagerDuty events are deliberately not templatable: they are structured payloads that downstream consumers parse, so their shape stays fixed.

A message template set exists at two scopes:

  • Org defaultSettings → System → Notification templates.
  • Per-team override — each group’s drawer in Settings → Groups gains the same card.

A set has four fields, all Liquid, all optional:

FieldFormat
Email subjectPlain text
Email bodyHTML
Slack titlemrkdwn
Slack bodymrkdwn

An empty field means inherit — leaving a field blank is how you say “use whatever the next rung up says”, not “send nothing”.

Resolution is per field, not per set. For each of the four fields independently, Sluicio walks down this ladder and uses the first non-empty value:

  1. The rule’s inline override (see Per-rule overrides).
  2. The owning team’s template set.
  3. The org template set.
  4. The built-in defaults.

Because each field resolves on its own, a team that sets only the Slack body still gets the org’s email subject and body — it doesn’t have to copy them into its own set to keep them.

The ladder covers everything alerting sends over email and Slack — stuck-message (flow-completion) notifications included, so an org template restyles those too. For stuck messages the top two rungs simply never apply: flow-completion rules aren’t team-owned and their editor has no inline template fields, so resolution starts at the org set.

A templated Slack notification is posted as:

*title*
body

The title line is optional — if the title field resolves to empty, only the body is posted.

If nothing is configured anywhere on the ladder, the built-in Slack line — severity icon + [FIRING/RESOLVED] + summary — is exactly what it was before v0.11.38. Existing installs see no change until someone writes a template.

The rule editor’s Notification content section now has a collapsed Customize Slack message panel next to the existing email one. A rule’s inline template is the top rung of the ladder and beats every set.

The template editors show a variable palette served by the backend — it’s reflected from the actual alert context, so it always matches what your version renders. The namespaces:

  • alert.* — state, summary, severity, alert.state_emoji, …
  • rule.* — the alert rule’s name and configuration
  • check.* — metric-check details
  • service.* — the affected service, including service.metadata.<key> for your own metadata fields
  • integration.* — the affected integration
  • org.* — organization info
  • sent_at — when the notification was sent

The palette marks per-variable availability: not every variable exists in every context — check.*, for example, is only available on metric-check rules. Variables are a stable contract: new ones are added over releases, but existing ones are never renamed or removed, so a template you write today keeps rendering.

An org-wide Slack body that gives every team the same compact one-liner (Slack title left empty):

{{ alert.state_emoji }} *{{ rule.name }}* — {{ alert.summary }}

The payments team wants their service and runbook in the line, so in their group’s drawer they set only the Slack body:

{{ alert.state_emoji }} *{{ rule.name }}* on `{{ service.name }}` — {{ alert.summary }}
Runbook: {{ service.metadata.runbook_url }}

Alerts owned by the payments team now post the two-line Slack message — but their emails still look like the org’s, because the team’s email subject and body are empty and resolve up the ladder to the org set. Every other team’s alerts are untouched.

  • Malformed Liquid is rejected at save — you see the parse error and the template isn’t stored.
  • A saved template that later fails to render (say, mid-render on missing data) falls through to the next rung of the ladder. A bad template never blocks an alert — the notification always goes out with some rendering.
  • The org default set requires an org admin.
  • A team’s override requires an org editor — or, on Enterprise with advanced RBAC, an editor of that team.

Rule inline overrides follow the normal permissions for editing the rule.