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.

[SCREENSHOT] 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.

[SCREENSHOT] 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