Step reference

An automation runs its steps top to bottom, in the order they're stacked in the builder. Click the + between (or after) any step to insert a new one from this list.

The Add step menu open, listing all 13 step types grouped by categoryThe Add step menu open, listing all 13 step types grouped by category
Every step is added from this menu, wherever the + button appears in the list.

Text interpolation

Send Message, Update Contact Field and Send Webhook's body template all support the same small set of {{ }} placeholders: message.text, message.id, message.type, contact.phone, contact.name, and vars.<key>. Anything else inside {{ }} — including a placeholder that merely looks plausible — silently resolves to an empty string rather than erroring, so a typo'd placeholder fails quietly.

Messaging

Send Message

Sends a plain text message to the contact.

Supports {{ message.text }}, {{ message.id }}, {{ message.type }}, {{ contact.phone }} and {{ contact.name }} interpolation in the text — anything else inside {{ }} is left empty rather than an error.

Send Buttons

Sends an interactive message with up to 3 reply buttons.

Uses the same interactive-message payload and Meta limits as a manual reply from the inbox.

Limits

  • 1–3 buttons
  • Button label up to 20 characters
  • Body text up to 1,024 characters

Send List

Sends an interactive list message the contact can pick a row from.

Pair with a Button / List Reply trigger on another automation, matching the row ids here, to react to which row the contact picked.

Limits

  • Up to 10 sections
  • Up to 10 rows total across all sections
  • Row title up to 24 characters, description up to 72

Send Template

Sends an approved WhatsApp message template.

Template variables are substituted in strict {{1}}, {{2}}, … numeric order regardless of the order you enter them in — Meta templates are positional, not named. The template must already be approved for the number this automation sends from, the same as sending one manually.

Contact and conversation

Add Tag

Adds a tag to the triggering contact.

No-ops quietly if the contact already has the tag.

Remove Tag

Removes a tag from the triggering contact.

No-ops quietly if the contact doesn't have the tag.

Assign Conversation

Assigns the conversation to an agent.

Round-robin hands the thread to the next eligible team member (owner, admin or agent) in rotation, using the same account-wide cursor as the rest of Relay's round-robin assignment — it's a real, atomic rotation, not a random pick. Specific agent assigns to the one agent you choose, and requires an agent to be selected before the automation can be activated. Assignment applies to the specific conversation the trigger fired on, not every conversation the contact has across your numbers.

Update Contact Field

Writes a value into a built-in or custom contact field.

The value supports the same {{ }} interpolation as Send Message. Choose a custom field from the picker — under the hood it's stored and validated against the account's own custom fields, so a field from another account can never be targeted.

Create Deal

Creates a deal for the contact in a pipeline.

Links the new deal to the triggering contact. See Pipelines for how deals and stages work.

Limits

  • Pipeline, stage and title are required

Close Conversation

Sets the conversation status to closed. No configuration needed.

There's no confirmation step in the builder — this step's only job is to close the thread it runs against.

Flow control

Wait

Pauses the automation for a set amount of time before continuing.

See Conditions and waits for exactly how a wait suspends and resumes a run — including why it can't check for a reply.

Limits

  • Minutes, hours or days
  • Minimum effective pause is 1 second

Condition (If/Else)

Branches the rest of the automation on Yes/No, based on a subject you choose.

See Conditions and waits for the four subjects a condition can check and exactly how each one is evaluated.

Integrations

Send Webhook

POSTs a JSON payload to a URL you configure.

The request is SSRF-guarded (private/internal addresses are refused), follows no redirects, and times out after 10 seconds. Leave Body template blank to send Relay's default payload — message_id, conversation_id, message_text, message_type, timestamp, and a sender object with contact_id, phone_number and name. If you fill in your own Body template, only the same {{ message.* }}, {{ contact.phone }}, {{ contact.name }} and {{ vars.* }} placeholders as Send Message are interpolated.