Automations (Technical Reference)
This document covers the technical internals of RocketLead’s automation engine — how flows execute, what each node type does, and how variables are threaded between steps.
Execution Model
Section titled “Execution Model”Flow Lifecycle
Section titled “Flow Lifecycle”- Trigger event — something happens (lead added, status changed, appointment booked, etc.)
- Flow matching — the system finds all enabled, published flows with a matching trigger
- Run creation — a
FlowRunis created with statusscheduledand linked to the publishedVersionedFlow - Step execution — each node is executed in order, following edges. Steps are processed via Cloud Tasks, allowing delays and retries.
- Completion — when all reachable nodes have executed, the run is marked
completed(orfailedif any step fails)
Run Statuses
Section titled “Run Statuses”| Status | Meaning |
|---|---|
scheduled | Run created, first step queued |
running | At least one step is executing |
completed | All steps finished successfully |
failed | A step failed without recovery |
retrying | A step is being retried |
interrupted | Run was cancelled while a step was pending |
cancelled | Run was manually cancelled |
Step Processing
Section titled “Step Processing”Each step goes through:
- Load the step and its parent run
- Check if the run is cancelled/interrupted — if so, mark step as interrupted
- Mark step as
running - Resolve the node type and load its handler
- Replace placeholder variables in node fields (see Variables below)
- Execute the handler
- Evaluate outgoing edge conditions
- Queue the next step(s) via Cloud Tasks
Flow Chain Depth
Section titled “Flow Chain Depth”Flows can trigger other flows (e.g., a lead status change triggers a second automation). The flowChainDepth tracks nesting to prevent infinite loops.
Node Type Reference
Section titled “Node Type Reference”Triggers
Section titled “Triggers”Triggers start a flow. Each flow has exactly one trigger node.
| Type | Label | Fires When | Config Fields |
|---|---|---|---|
table.entry.added | Neuer Lead hinzugefügt | A new lead is added to a table (via webhook, form, or API) | tableIds[], execution timing |
table.entry.leadState.changed | Leadstatus geändert | A lead’s status changes | tableIds[], oldLeadStateId, newLeadStateId, triggerOnCreation, execution timing |
calendar.appointment.booked | Neuer Termin gebucht | An appointment is booked | calendarIds[], originTableId, execution timing |
calendar.appointment.hasStarted | Termin beginnt | An appointment’s start time is reached | calendarIds[], originTableId, execution timing (supports negative = before event) |
calendar.appointment.hasEnded | Termin endet | An appointment’s end time is reached | calendarIds[], originTableId, execution timing (supports negative) |
calendar.appointment.deleted | Termin gelöscht | An appointment is deleted | calendarIds[], originTableId |
Execution timing allows offsetting when the flow runs relative to the event (e.g., “1 day before appointment starts”).
Communication
Section titled “Communication”| Type | Label | What It Does | Config Fields |
|---|---|---|---|
email.send | E-Mail senden | Sends an email via configured provider | from (email selector), to (comma-separated, supports variables), subject, body (rich text) |
sendgrid.template.send | Sendgrid Vorlage versenden | Sends a SendGrid template email | from (sendgrid account), fromName, to, templateId, payload (JSON), attachmentUrl |
sms.send | SMS senden | Sends an SMS via Reach | identityId, to (phone, supports variables), message |
Actions
Section titled “Actions”| Type | Label | What It Does | Config Fields |
|---|---|---|---|
followUpDate.set | Follow-Up terminieren | Sets a follow-up date on a lead | tableEntryId, referenceDate, offset (value + unit + direction) |
webhook.post | POST Request | POSTs JSON to a URL | url, body (JSON) |
table.entry.leadState.set | Leadstatus setzen | Changes a lead’s status | tableEntryId, tableId, leadStateId |
httpRequest | HTTP Request | Sends a configurable HTTP request | method (GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS), url, headers (JSON), body, rawTimestamps (boolean) |
Helpers
Section titled “Helpers”| Type | Label | What It Does | Config Fields |
|---|---|---|---|
variable.set | Variable setzen | Defines variables for downstream nodes | Key-value pairs (min 1) |
wait | Warte | Delays execution | duration (value + unit: minutes/hours/days) |
router | Router | Branches the flow based on edge conditions | No config fields — conditions are on the edges |
Variables
Section titled “Variables”Variables let you pass data between nodes. They use the {{placeholder}} syntax in text fields.
Variable Sources
Section titled “Variable Sources”-
Trigger context — data from the triggering event:
{{tableEntry.data.firstName}}— lead data fields{{tableEntry.customFieldData.<id>}}— custom field values{{booking.startDateTime}}— booking details
-
Studio variables — always available:
$studio.name,$studio.address,$studio.zip,$studio.city,$studio.country$studio.phone,$studio.email,$studio.website
-
Global variables — set by
variable.setnodes:$global.<key>— accessible by all downstream nodes
-
Node output variables — output from upstream nodes (e.g., HTTP response data)
Variable Resolution
Section titled “Variable Resolution”Before each step executes, all {{placeholder}} strings in the node’s config fields are replaced with actual values from the run context. Variables that can’t be resolved are left as-is.
Edge Conditions
Section titled “Edge Conditions”Connections between nodes can have conditions that control flow:
| Operator | Label | Description |
|---|---|---|
equals | ist gleich | Exact match |
not_equals | ist nicht gleich | No match |
contains | enthält | Text contains value |
not_contains | enthält nicht | Text doesn’t contain value |
starts_with | beginnt mit | Text starts with value |
ends_with | endet mit | Text ends with value |
is_empty | ist leer | Field is empty or undefined |
is_not_empty | ist nicht leer | Field has a value |
greater_than | größer als | Numeric comparison |
less_than | kleiner als | Numeric comparison |
When a node completes, all outgoing edges are evaluated. Only edges whose conditions pass (or edges with no condition) lead to the next node being executed.
Data Model
Section titled “Data Model”| Entity | Description |
|---|---|
Flow | The automation definition: id, name, enabled, status |
FlowNode | A block in the flow: type, fields (config), position (x/y) |
FlowEdge | A connection: sourceNodeId → targetNodeId, optional condition and label |
VersionedFlow | An immutable snapshot created on publish, with versionNumber |
FlowRun | An execution instance linked to a VersionedFlow, with status, context, executeAt, completedAt |
FlowRunStep | Per-node execution record with status, executeAt, completedAt, cloudTaskId |