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.
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
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.
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
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
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
No-ops quietly if the contact already has the tag.
No-ops quietly if the contact doesn't have the tag.
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.
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.
Links the new deal to the triggering contact. See Pipelines for how deals and stages work.
Limits
- Pipeline, stage and title are required
There's no confirmation step in the builder — this step's only job is to close the thread it runs against.
Flow control
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
See Conditions and waits for the four subjects a condition can check and exactly how each one is evaluated.
Integrations
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.