259 lines
5.1 KiB
Plaintext
259 lines
5.1 KiB
Plaintext
---
|
|
title: Visual Workflow Builder
|
|
description: Build workflows with drag-and-drop
|
|
icon: Workflow
|
|
---
|
|
|
|
## Overview
|
|
|
|
The workflow builder is a node-based visual editor for creating email automation. Each node is a step (send email, delay, condition, etc.) and connections define the flow.
|
|
|
|
## Canvas controls
|
|
|
|
- **-** / **+** - Zoom out/in
|
|
- **Fit** - Center and zoom to show entire workflow
|
|
- **Auto-Layout** - Automatically arrange nodes
|
|
- **Minimap** - Toggle overview map (bottom right)
|
|
|
|
## Step types
|
|
|
|
### Trigger
|
|
|
|
The starting point. Every workflow has one trigger.
|
|
|
|
**Types:**
|
|
- Event (e.g., `user_signed_up`)
|
|
- Segment entry/exit
|
|
- Schedule (cron)
|
|
|
|
Cannot be deleted.
|
|
|
|
### Send Email
|
|
|
|
Sends an email to the contact.
|
|
|
|
**Configuration:**
|
|
- Template (required)
|
|
- Variables (optional overrides)
|
|
|
|
Contact must be subscribed for marketing templates. Transactional templates send regardless.
|
|
|
|
### Delay
|
|
|
|
Pauses execution for a specified time.
|
|
|
|
**Configuration:**
|
|
- Duration: Number
|
|
- Unit: Minutes, Hours, or Days
|
|
|
|
**Example:** Delay 24 hours before next email.
|
|
|
|
### Wait for Event
|
|
|
|
Pauses until an event occurs or timeout is reached.
|
|
|
|
**Configuration:**
|
|
- Event name
|
|
- Timeout duration (optional)
|
|
|
|
**Requires two outgoing connections:**
|
|
- Event triggered path
|
|
- Timeout path
|
|
|
|
**Example:**
|
|
```
|
|
[Wait for: purchase_completed, timeout: 48h]
|
|
├─ Purchased → Send thank you
|
|
└─ Timeout → Send discount reminder
|
|
```
|
|
|
|
### Condition
|
|
|
|
Branches workflow based on contact data.
|
|
|
|
**Configuration:**
|
|
- Field to check
|
|
- Operator (equals, contains, greaterThan, etc.)
|
|
- Value to compare
|
|
|
|
**Requires two outgoing connections:**
|
|
- True path
|
|
- False path
|
|
|
|
**Example:**
|
|
```
|
|
[Condition: plan equals "premium"]
|
|
├─ True → Send premium features
|
|
└─ False → Send upgrade offer
|
|
```
|
|
|
|
### Webhook
|
|
|
|
Sends HTTP request to external URL.
|
|
|
|
**Configuration:**
|
|
- URL
|
|
- Method (GET, POST, PUT, DELETE)
|
|
- Headers (optional)
|
|
- Body (JSON, optional)
|
|
|
|
**Example:** Update CRM when workflow completes.
|
|
|
|
### Update Contact
|
|
|
|
Updates contact data fields.
|
|
|
|
**Configuration:**
|
|
- Fields: Key-value pairs
|
|
|
|
**Example:**
|
|
```
|
|
Fields:
|
|
onboardingCompleted: true
|
|
lastWorkflowStep: "welcome_series_done"
|
|
```
|
|
|
|
### Exit
|
|
|
|
Ends workflow execution. Can have multiple exit points for different paths.
|
|
|
|
## Building a workflow
|
|
|
|
### Add a step
|
|
|
|
**Method 1:** Click **+** button below any node
|
|
|
|
**Method 2:** Drag step type from sidebar onto canvas
|
|
|
|
### Configure a step
|
|
|
|
1. Click node to select
|
|
2. Right panel opens
|
|
3. Fill required fields
|
|
4. Save
|
|
|
|
### Connect steps
|
|
|
|
Connections auto-create when using + button. To manually connect:
|
|
1. Drag from node's bottom handle
|
|
2. Drop on another node's top handle
|
|
|
|
### Arrange layout
|
|
|
|
Click **Auto-Layout** for automatic top-to-bottom arrangement.
|
|
|
|
## Example workflows
|
|
|
|
### Linear sequence
|
|
|
|
```
|
|
[Trigger: user_signed_up]
|
|
↓
|
|
[Send: Welcome]
|
|
↓
|
|
[Delay: 24h]
|
|
↓
|
|
[Send: Feature tour]
|
|
↓
|
|
[Exit]
|
|
```
|
|
|
|
### With condition
|
|
|
|
```
|
|
[Trigger: trial_started]
|
|
↓
|
|
[Send: Welcome]
|
|
↓
|
|
[Condition: plan equals "enterprise"]
|
|
├─ True → [Send: Enterprise onboarding]
|
|
└─ False → [Send: Standard onboarding]
|
|
```
|
|
|
|
### With event wait
|
|
|
|
```
|
|
[Trigger: cart_abandoned]
|
|
↓
|
|
[Delay: 1h]
|
|
↓
|
|
[Send: First reminder]
|
|
↓
|
|
[Wait for: purchase_completed, timeout: 23h]
|
|
├─ Purchased → [Exit]
|
|
└─ Timeout → [Send: Discount offer] → [Exit]
|
|
```
|
|
|
|
## Validation
|
|
|
|
The builder validates in real-time. Red border = error.
|
|
|
|
**Common errors:**
|
|
- "No outgoing connections" → Add connection to next step
|
|
- "Wait for Event requires two paths" → Add event + timeout paths
|
|
- "Condition requires true and false paths" → Add both paths
|
|
- "Template not found" → Select valid template
|
|
|
|
## Testing
|
|
|
|
### Manual execution
|
|
|
|
1. **Workflows** → Your workflow → **Executions**
|
|
2. **Create Execution**
|
|
3. Select test contact
|
|
4. Provide test data (JSON)
|
|
5. **Start**
|
|
|
|
Watch execution progress in real-time.
|
|
|
|
### Faster testing
|
|
|
|
For testing delays:
|
|
- Temporarily change to 5 minutes instead of days
|
|
- Test the flow
|
|
- Change back to real durations
|
|
|
|
## Keyboard shortcuts
|
|
|
|
| Key | Action |
|
|
|-----|--------|
|
|
| Delete | Delete selected node |
|
|
| Cmd/Ctrl + Z | Undo |
|
|
| Cmd/Ctrl + Shift + Z | Redo |
|
|
| + / - | Zoom |
|
|
| F | Fit to screen |
|
|
| Esc | Deselect |
|
|
|
|
## Troubleshooting
|
|
|
|
**Workflow not triggering**
|
|
- Workflow is enabled (toggle ON)
|
|
- Event name matches exactly (case-sensitive)
|
|
- Contact exists and is subscribed
|
|
|
|
**Execution stuck**
|
|
- Check delay configuration
|
|
- Verify wait timeout hasn't expired
|
|
- No circular references
|
|
|
|
**Email not sending**
|
|
- Template exists
|
|
- Contact is subscribed
|
|
- Variables in data match template
|
|
|
|
## Best practices
|
|
|
|
**Keep it simple** - 5-10 steps per workflow. Break complex flows into multiple workflows.
|
|
|
|
**Descriptive names** - "Send Welcome Email - Day 0" not "Email 1"
|
|
|
|
**Test first** - Always test with a test contact before enabling.
|
|
|
|
**Space emails** - Minimum 12-24 hours between emails to avoid fatigue.
|
|
|
|
## Next steps
|
|
|
|
- [Build your first workflow](/tutorials/welcome-series-workflow)
|
|
- [Workflow patterns](/automation-patterns/workflow-patterns)
|
|
- [Conditional branching](/automation-patterns/conditional-branching)
|