Automation Graph

The Automation Graph (also called the automation canvas) is where you define your bot's behavior. It is a Directed Acyclic Graph (DAG) composed of nodes (extension instances) and edges (connections between them).

info

This tab was previously called "Logic". It is now called "Automation" throughout the Studio.

Concepts

Nodes

Every node on the canvas represents an instance of an installed extension. Each node has:

  • A type: TRIGGER, ACTION, LOGIC, or DATA
  • A configuration: Settings specific to the extension (e.g., a Discord channel ID, a cron expression)
  • Input handles: Ports on the left side that accept data from upstream nodes
  • Output handles: Ports on the right side that pass data to downstream nodes

Edges

An edge connects an output handle of one node to an input handle of another. Edges define:

  1. Execution flow — which nodes run after which
  2. Data mappings — how output fields from the source node map to input fields of the target node

The Trigger Node

Every automation must have at least one Trigger node — the entry point that starts execution when an event fires.

info

A single automation can have multiple TRIGGER nodes. Each one listens for its own event independently and starts its own execution branch when that event fires. This is how a Universal bot can listen for Discord messages and Telegram commands on the same graph.

Loop nodes (For Each)

For Each uses special output ports:

  • Loop body — nodes connected here run once per item in the array
  • Completed — nodes connected here run after all iterations finish

Do not connect the main flow through the loop body port for “after the loop” logic — use Completed. See For Each.

Extension requires

Some extensions declare requires: other extension registry keys that must appear on the same graph. Example: JSON API Poller requires Timer Trigger. Save/deploy validation fails if the required companion node is missing (this does not auto-install extensions).


Building on the Canvas

Navigating the Canvas

ActionHow
PanClick and drag on empty space
ZoomMouse scroll wheel
Select a nodeClick on it
Multi-selectShift + Click

Adding Nodes

Open the Node Palette (bottom-left accordion panel on the canvas). Browse or search for an extension, then click it to add it to the canvas.

info

Only extensions installed on this bot will appear in the palette. Go to the Extensions tab to install new ones.

Connecting Nodes

Drag from an output handle (right side of a node) to an input handle (left side of another node). A highlighted edge will appear when the connection is valid.

Configuring Nodes

Click on any node to open the Node Config Sidebar on the right. Configure the extension's settings using the form fields. Most fields support template strings for dynamic data injection — see Template Strings.

Configuring Data Mappings

Click on an edge to open the Mapping Config Panel. This panel shows:

  • Available output fields from the source node
  • Required input fields on the target node
  • A mapping interface to connect them

Deleting

  • Delete a node: Select it → press Delete or use the delete button in the config sidebar.
  • Delete an edge: Click on the edge → a delete control appears.

Saving & Testing

ButtonBehavior
SaveValidates the graph structure and persists it. Shows errors for invalid connections or missing required configs.
Validate GraphChecks the graph for cycles, disconnected nodes, and type mismatches without saving.
Run Smoke TestRuns a simulated test execution with a mock trigger payload. No live events are sent.

Graph Validation Rules

The validation engine checks for:

  • Cycles — A → B → A is not allowed; graphs must be acyclic
  • Missing required configs — A node with unfilled required fields will block validation
  • Type mismatches — An output field of type string cannot be mapped to an input expecting object without a Transform

Execution Model

When a trigger fires, the Automation Engine:

  1. Loads the automation graph definition from the Control Plane.
  2. Identifies the correct entry node based on the event type (triggerNodeId).
  3. Traverses the graph in BFS (Breadth-First Search) order.
  4. Executes each node sequentially along each path.
  5. Resolves template strings using the outputs of previously executed nodes.
  6. Calls extension services via HTTP and passes the resolved inputs.
  7. Reports execution status and logs back to the Control Plane in real time.

Automation & Bot Archetypes

The archetype of your bot filters which nodes appear in the palette:

  • Discord bots show Discord-specific triggers and actions prominently.
  • Telegram bots surface Telegram-specific nodes.
  • Slack bots surface Slack-specific nodes.
  • Universal bots show all platform-specific nodes — you can wire Discord triggers to Telegram actions on the same graph.
info

If you're seeing extensions from the wrong platform, check your bot's archetype in Configurations → General → Archetype.

Was this helpful?
historyLast updated: May 10, 2026