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).
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, orDATA - 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:
- Execution flow — which nodes run after which
- 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.
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
| Action | How |
|---|---|
| Pan | Click and drag on empty space |
| Zoom | Mouse scroll wheel |
| Select a node | Click on it |
| Multi-select | Shift + 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.
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
Deleteor use the delete button in the config sidebar. - Delete an edge: Click on the edge → a delete control appears.
Saving & Testing
| Button | Behavior |
|---|---|
| Save | Validates the graph structure and persists it. Shows errors for invalid connections or missing required configs. |
| Validate Graph | Checks the graph for cycles, disconnected nodes, and type mismatches without saving. |
| Run Smoke Test | Runs 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
stringcannot be mapped to an input expectingobjectwithout a Transform
Execution Model
When a trigger fires, the Automation Engine:
- Loads the automation graph definition from the Control Plane.
- Identifies the correct entry node based on the event type (
triggerNodeId). - Traverses the graph in BFS (Breadth-First Search) order.
- Executes each node sequentially along each path.
- Resolves template strings using the outputs of previously executed nodes.
- Calls extension services via HTTP and passes the resolved inputs.
- 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.
If you're seeing extensions from the wrong platform, check your bot's archetype in Configurations → General → Archetype.
