Understanding Nodes
Nodes are the building blocks of workflows. Every action, decision, and transformation in your workflow is represented by a node. This guide teaches you everything about nodes.
Time to complete: 15 minutes
What is a Node?
A node is a single unit of work in a workflow. Each node:
- Receives input data
- Processes or transforms it
- Outputs results for the next node
Think of nodes as workers on an assembly line, each doing one specific job.
[INPUT] → [ NODE ] → [OUTPUT]
↑
(config)
Node Anatomy
Every node has the same basic structure:
┌──────────────────────────────────────┐
│ 📧 Email Send ⚙️ │ ← Header (icon + name + settings)
├──────────────────────────────────────┤
│ │
│ ○ ────────────────────────────── ○ │ ← Input (left) and Output (right) handles
│ │
│ emailsend_1 │ ← Alias (unique identifier)
│ │
└──────────────────────────────────────┘
Key Parts
| Part | Description | Example |
|---|---|---|
| Icon | Visual indicator of node type | 📧 for email |
| Name | Node's display name | "Email Send" |
| Alias | Unique identifier for referencing | emailsend_1 |
| Input Handle | Left side - receives data | ○ on left |
| Output Handle | Right side - sends data | ○ on right |
| Settings | Access configuration panel | ⚙️ icon |
Node Categories
Expedify organizes nodes into categories based on what they do:
Triggers (Starting Points)
Start your workflow when events occur.
| Node | Purpose | When to Use |
|---|---|---|
| Webhook Trigger | External HTTP requests | API integrations, Zapier |
| Database Trigger | CRM record changes | Contact created, deal updated |
| Scheduler | Time-based execution | Daily reports, reminders |
| User Message | Chat messages | Chatbots, AI assistants |
| WhatsApp Trigger | WhatsApp messages | Customer support |
| Click Trigger | Manual/button clicks | On-demand workflows |
Logic (Decision Making)
Control the flow of your workflow.
| Node | Purpose | When to Use |
|---|---|---|
| Condition | True/false branching | If email exists, then... |
| Multi-Condition | Multiple branches | Route by category |
| Loop | Iterate over arrays | Process each item |
| Delay | Wait before continuing | Rate limiting, spacing |
| Workflow Switch | Jump to another workflow | Modular design |
| Merge | Combine parallel paths | Rejoin branches |
Data (Transform & Process)
Work with data between steps.
| Node | Purpose | When to Use |
|---|---|---|
| Transform Data | JavaScript transformations | Format, calculate, combine |
| Set Variables | Store values | Save for later use |
| Database Query | Run SQL queries | Get data from DB |
| API Request | Call external APIs | Fetch/send data |
| Code | Custom JavaScript | Complex logic |
AI (Intelligence)
Add AI capabilities to your workflows.
| Node | Purpose | When to Use |
|---|---|---|
| LLM Integration | Generate text with AI | Content, responses |
| KB Search | Search knowledge base | Find documents |
| KB RAG Query | Q&A from documents | Answer questions |
| Core Agent | Multi-tool AI agent | Complex reasoning |
| Prompt Template | Structured prompts | Reusable AI instructions |
Channel (Messaging)
Send messages across channels.
| Node | Purpose | When to Use |
|---|---|---|
| Email Send | Send emails | Notifications, campaigns |
| WhatsApp Send | Send WhatsApp messages | Customer comms |
| SMS Send | Send text messages | Alerts, OTPs |
| Slack Message | Post to Slack | Team notifications |
| Voice Call | Make phone calls | Outbound calls |
CRM (Customer Data)
Work with CRM records.
| Node | Purpose | When to Use |
|---|---|---|
| Contact Create | Add new contacts | Lead capture |
| Contact Update | Modify contacts | Data enrichment |
| Contact Search | Find contacts | Lookup by email |
| Deal Create | Create deals | Sales pipeline |
| Task Create | Create tasks | Follow-up reminders |
Integration (External Services)
Connect to third-party services.
| Node | Purpose | When to Use |
|---|---|---|
| Google Sheets | Read/write spreadsheets | Data sync |
| Salesforce | CRM operations | Enterprise sync |
| Zoho | Zoho CRM operations | Zoho integration |
| Custom Webhook | Send HTTP requests | Any API |
Output (End Points)
Return results from your workflow.
| Node | Purpose | When to Use |
|---|---|---|
| Text Response | Return text | Chat responses |
| JSON Response | Return structured data | API responses |
| Webhook Response | HTTP response | Webhook acknowledgment |
Adding Nodes to Your Workflow
Method 1: Drag and Drop
- Open the node library (left panel)
- Find your node category
- Drag the node onto the canvas
- Drop where you want it
Method 2: Quick Add
- Click the + button on a node's output
- Search for the node you want
- Click to add and auto-connect
Method 3: Search
- Press
Ctrl/Cmd + Kor click search - Type the node name
- Click to add to canvas
Connecting Nodes
Nodes connect through handles - the small circles on their edges.
Connection Rules
| Handle | Position | Purpose |
|---|---|---|
| Input | Left side | Receives data from previous node |
| Output | Right side | Sends data to next node |
How to Connect
- Hover over a node's output handle (right side)
- Click and drag a line
- Drop onto another node's input handle (left side)
- Connection created!
[Node A] ────────────→ [Node B]
output→input
Multiple Outputs
Some nodes have multiple outputs:
[Condition]
├──── True ────→ [Success Path]
└──── False ───→ [Error Path]
Multiple Inputs
Nodes can receive from multiple sources:
[Source A] ───┐
├──→ [Merge] ──→ [Next Step]
[Source B] ───┘
Configuring Nodes
Every node has configuration options accessible via the right panel.
Opening Configuration
- Click on any node
- Right panel shows configuration
- Fill in required fields
- Settings auto-save
Configuration Panel Sections
| Section | Contains |
|---|---|
| Basic | Name, alias, description |
| Configuration | Node-specific settings |
| Advanced | Timeout, error handling |
Field Types
| Field Type | Example | How to Fill |
|---|---|---|
| Text | Subject line | Type directly |
| Dropdown | Select integration | Choose from list |
| Variable | {{contact.email}} | Use variable picker |
| Code | JavaScript | Write in editor |
| Toggle | Enable feature | Click on/off |
Node Aliases
Every node gets a unique alias - an identifier used to reference its outputs.
Alias Format
{nodetype}_{number}
Examples:
webhooktrigger_1- First webhook triggeremailsend_1- First email sendtransformdata_2- Second transform data
Custom Aliases
You can rename aliases for clarity:
- Click on the node
- Find Alias field in config
- Enter a descriptive name
Default: emailsend_1
Custom: send_welcome_email
Using Aliases in Variables
Reference node outputs using their alias:
{{webhooktrigger_1.payload.email}}
{{transformdata_1.formatted_name}}
{{send_welcome_email.success}}
Node States During Execution
When a workflow runs, nodes show their status:
| State | Visual | Meaning |
|---|---|---|
| Pending | Gray | Waiting to execute |
| Running | Blue pulse | Currently executing |
| Completed | Green border | Finished successfully |
| Failed | Red border | Error occurred |
| Skipped | Gray dashed | Path not taken |
Node Input and Output
Input Data
Each node receives input from connected nodes:
// Input automatically includes outputs from all connected upstream nodes
{
"webhooktrigger_1": {
"payload": { "email": "user@example.com" }
},
"transformdata_1": {
"formatted_email": "user@example.com"
}
}
Output Data
Each node produces output for downstream nodes:
// Email Send node output
{
"success": true,
"message_id": "msg_123",
"recipient": "user@example.com"
}
Viewing Input/Output
During testing or execution:
- Click on any node
- View Input tab - what the node received
- View Output tab - what the node produced
Required vs Optional Fields
Required Fields
Marked with * or red indicator. Node won't execute without these.
| Node | Required Fields |
|---|---|
| Email Send | To, Subject, Body |
| LLM Integration | Integration, Prompt |
| Condition | Variable, Operator, Value |
Optional Fields
Enhance functionality but have defaults:
| Node | Optional Fields |
|---|---|
| Email Send | CC, BCC, Attachments |
| LLM Integration | Temperature, Max Tokens |
| API Request | Headers, Timeout |
Common Node Patterns
Pattern 1: Trigger → Action
Simplest workflow - event triggers action.
[Webhook Trigger] → [Send Email]
Pattern 2: Trigger → Transform → Action
Process data before acting.
[Database Trigger] → [Transform Data] → [Update Contact]
Pattern 3: Trigger → Condition → Branches
Route based on conditions.
[Trigger] → [Condition] → True → [Action A]
→ False → [Action B]
Pattern 4: Trigger → Loop → Action
Process arrays.
[Webhook] → [Loop over items] → [Process each item]
Tips and Best Practices
Naming Conventions
Good aliases:
✅ validate_email
✅ send_welcome_email
✅ check_lead_score
Bad aliases:
❌ node1
❌ x
❌ temp
Organization
- Keep related nodes close together
- Align nodes vertically or horizontally
- Use consistent spacing
- Group logical sections
Performance
- Minimize nodes when possible
- Use Transform for multiple operations
- Avoid unnecessary loops
- Cache repeated API calls
Next Steps
Now that you understand nodes, continue with:
- Understanding Variables - Master data flow
- Configuring Nodes - Detailed setup guide
- Node Reference - Complete node documentation
Quick Reference
Node Categories
TRIGGERS → Start workflows (webhook, database, schedule)
LOGIC → Control flow (condition, loop, delay)
DATA → Transform (transform, code, query)
AI → Intelligence (LLM, KB search, agent)
COMMUNICATION → Messaging (email, WhatsApp, SMS)
CRM → Customer data (contact, deal, task)
INTEGRATION → External services (API, sheets)
OUTPUT → Return results (response, webhook)
Node Anatomy
Input Handle (○) ─── [Icon + Name] ─── Output Handle (○)
│
(alias)
│
Configuration
Keyboard Shortcuts
| Action | Shortcut |
|---|---|
| Delete node | Delete or Backspace |
| Duplicate | Ctrl/Cmd + D |
| Copy | Ctrl/Cmd + C |
| Paste | Ctrl/Cmd + V |
| Undo | Ctrl/Cmd + Z |