Skip to content

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.

  1. Trigger event — something happens (lead added, status changed, appointment booked, etc.)
  2. Flow matching — the system finds all enabled, published flows with a matching trigger
  3. Run creation — a FlowRun is created with status scheduled and linked to the published VersionedFlow
  4. Step execution — each node is executed in order, following edges. Steps are processed via Cloud Tasks, allowing delays and retries.
  5. Completion — when all reachable nodes have executed, the run is marked completed (or failed if any step fails)
StatusMeaning
scheduledRun created, first step queued
runningAt least one step is executing
completedAll steps finished successfully
failedA step failed without recovery
retryingA step is being retried
interruptedRun was cancelled while a step was pending
cancelledRun was manually cancelled

Each step goes through:

  1. Load the step and its parent run
  2. Check if the run is cancelled/interrupted — if so, mark step as interrupted
  3. Mark step as running
  4. Resolve the node type and load its handler
  5. Replace placeholder variables in node fields (see Variables below)
  6. Execute the handler
  7. Evaluate outgoing edge conditions
  8. Queue the next step(s) via Cloud Tasks

Flows can trigger other flows (e.g., a lead status change triggers a second automation). The flowChainDepth tracks nesting to prevent infinite loops.

Triggers start a flow. Each flow has exactly one trigger node.

TypeLabelFires WhenConfig Fields
table.entry.addedNeuer Lead hinzugefügtA new lead is added to a table (via webhook, form, or API)tableIds[], execution timing
table.entry.leadState.changedLeadstatus geändertA lead’s status changestableIds[], oldLeadStateId, newLeadStateId, triggerOnCreation, execution timing
calendar.appointment.bookedNeuer Termin gebuchtAn appointment is bookedcalendarIds[], originTableId, execution timing
calendar.appointment.hasStartedTermin beginntAn appointment’s start time is reachedcalendarIds[], originTableId, execution timing (supports negative = before event)
calendar.appointment.hasEndedTermin endetAn appointment’s end time is reachedcalendarIds[], originTableId, execution timing (supports negative)
calendar.appointment.deletedTermin gelöschtAn appointment is deletedcalendarIds[], originTableId

Execution timing allows offsetting when the flow runs relative to the event (e.g., “1 day before appointment starts”).

TypeLabelWhat It DoesConfig Fields
email.sendE-Mail sendenSends an email via configured providerfrom (email selector), to (comma-separated, supports variables), subject, body (rich text)
sendgrid.template.sendSendgrid Vorlage versendenSends a SendGrid template emailfrom (sendgrid account), fromName, to, templateId, payload (JSON), attachmentUrl
sms.sendSMS sendenSends an SMS via ReachidentityId, to (phone, supports variables), message
TypeLabelWhat It DoesConfig Fields
followUpDate.setFollow-Up terminierenSets a follow-up date on a leadtableEntryId, referenceDate, offset (value + unit + direction)
webhook.postPOST RequestPOSTs JSON to a URLurl, body (JSON)
table.entry.leadState.setLeadstatus setzenChanges a lead’s statustableEntryId, tableId, leadStateId
httpRequestHTTP RequestSends a configurable HTTP requestmethod (GET/POST/PUT/PATCH/DELETE/HEAD/OPTIONS), url, headers (JSON), body, rawTimestamps (boolean)
TypeLabelWhat It DoesConfig Fields
variable.setVariable setzenDefines variables for downstream nodesKey-value pairs (min 1)
waitWarteDelays executionduration (value + unit: minutes/hours/days)
routerRouterBranches the flow based on edge conditionsNo config fields — conditions are on the edges

Variables let you pass data between nodes. They use the {{placeholder}} syntax in text fields.

  1. Trigger context — data from the triggering event:

    • {{tableEntry.data.firstName}} — lead data fields
    • {{tableEntry.customFieldData.<id>}} — custom field values
    • {{booking.startDateTime}} — booking details
  2. Studio variables — always available:

    • $studio.name, $studio.address, $studio.zip, $studio.city, $studio.country
    • $studio.phone, $studio.email, $studio.website
  3. Global variables — set by variable.set nodes:

    • $global.<key> — accessible by all downstream nodes
  4. Node output variables — output from upstream nodes (e.g., HTTP response data)

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.

Connections between nodes can have conditions that control flow:

OperatorLabelDescription
equalsist gleichExact match
not_equalsist nicht gleichNo match
containsenthältText contains value
not_containsenthält nichtText doesn’t contain value
starts_withbeginnt mitText starts with value
ends_withendet mitText ends with value
is_emptyist leerField is empty or undefined
is_not_emptyist nicht leerField has a value
greater_thangrößer alsNumeric comparison
less_thankleiner alsNumeric 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.

EntityDescription
FlowThe automation definition: id, name, enabled, status
FlowNodeA block in the flow: type, fields (config), position (x/y)
FlowEdgeA connection: sourceNodeIdtargetNodeId, optional condition and label
VersionedFlowAn immutable snapshot created on publish, with versionNumber
FlowRunAn execution instance linked to a VersionedFlow, with status, context, executeAt, completedAt
FlowRunStepPer-node execution record with status, executeAt, completedAt, cloudTaskId