Skip to content
English
  • There are no suggestions because the search field is empty.

References and templates

Every field in a trigger, condition, or action can pull in live data from earlier in the workflow — either by referencing one specific upstream field, or by running a template expression. This page is the map. For anyone past the first-workflow tutorial and wiring up real workflows.

The three modes

Every configurable field has a small mode button on its left with three options:

  • Fixed value — what you type is used literally. Default. Fine for channel names, fixed text, toggles.
  • Data reference ($dataRef) — pull one upstream value into this field. Opens a picker.
  • Template ($tpl) — a Go template expression. Use when you need to combine fields, convert types, or mix dynamic text with fixed text.

Pick whichever fits what you want to say.

An action's inspector panel with one configuration field open. The mode button on the left of the field is expanded, showing the three options: Fixed value, Data reference ($dataRef), Template ($tpl).

Data reference

Pick Data reference ($dataRef) and the Select input dialog opens.

  • One section per upstream node, headed by the node's name (e.g. Booking No-Show).
  • Each section shows the node's output schema as a tree with type badges.
  • Click any leaf field — a string, number, boolean, or enum — to insert it. Objects and arrays aren't directly selectable; drill into their fields.

Once inserted, the field shows a chip with the dotted path — bookingTriggerId.organizer.email. The first segment is the node's internal id, not the word trigger.

The Select input dialog with two expanded sections: the trigger's output schema showing organizer.email nested under organizer, and a downstream Slack action's output showing channel and ts.

Watch out

  • No type coercion. If the upstream field is a number and this field expects a string, the run fails with a validation error. Use a template instead to stringify.
  • No edit-time check. If the referenced path doesn't exist at run time, the task fails with "value not found". Always test before enabling.

Template

Pick Template ($tpl) and a text editor appears. Templates use Go's text/template language plus a hermetic subset of Sprig helpers. You don't need to know either library — the quickstart below covers 90% of cases.

Quickstart

Anything inside is an expression; everything else is literal text.

Insert an upstream field — start with .<nodeId> and dot-walk:

Hey {{ .triggerId.organizer.firstName }}, your meeting just ended.

Pipe through functions:

{{ .triggerId.space.name | upper }}
{{ .triggerId.organizer.firstName | default "there" }}

If / else:

{{ if .triggerId.isAutoBooked }}auto-booked{{ else }}manual{{ end }}

Useful helpers: default, upper, lower, title, trim, replace, printf, add, sub, mul, date. Unsafe helpers (env, filesystem, DNS) are disabled on purpose.

The context

The root is a map keyed by node id — every path starts with the node that produced the data. There's no shorter alias for the trigger; it's just another node. Tip: click a field in the Logs panel's INPUT pane during a test run to copy the exact path.

Type selector

Template results default to strings. If the field expects a non-string, use the dropdown next to the editor to pick one of string, number, integer, boolean, or json. Use json when the expression should produce a parsed object or array.

Go deeper

For cases beyond the quickstart:

Watch out

  • Missing path renders as <no value>. Unlike data references, a missing path in a template doesn't fail — it prints the literal string. Spot it in execution logs.
  • No edit-time syntax check. A broken template (unclosed , switch to a data reference — simpler, and picks up the upstream schema.

    Worked example: DM the organizer on a no-show

    1. Wire a Booking No-Show trigger into a Send Direct Message Slack action.
    2. On the Email field, switch to Data reference and pick organizer → email from the trigger
    3. On the Content field, switch to Template and write:

      Hey, your meeting "{{ .<triggerNodeId>.subject }}" was marked a no-show.

    4. Save and test — see Testing your workflow.

    Related