295 lines
6.3 KiB
Plaintext
295 lines
6.3 KiB
Plaintext
---
|
|
title: Common Workflow Patterns
|
|
description: Reusable workflow templates
|
|
icon: Layers
|
|
---
|
|
|
|
## Linear sequence
|
|
|
|
Send a series of emails with delays between them.
|
|
|
|
```
|
|
[Trigger: event]
|
|
↓
|
|
[Send Email 1]
|
|
↓
|
|
[Delay]
|
|
↓
|
|
[Send Email 2]
|
|
↓
|
|
[Delay]
|
|
↓
|
|
[Send Email 3]
|
|
↓
|
|
[Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Onboarding series
|
|
- Educational drip campaigns
|
|
- Feature introduction sequences
|
|
|
|
**Example timing:**
|
|
- Day 0: Welcome
|
|
- Day 1: Getting started guide
|
|
- Day 3: Tips and tricks
|
|
- Day 7: Feature deep dive
|
|
|
|
## Wait and branch
|
|
|
|
Pause for an event, then branch based on outcome.
|
|
|
|
```
|
|
[Trigger: event]
|
|
↓
|
|
[Wait for Event: timeout X days]
|
|
├─ Event occurred → [Send success email] → [Exit]
|
|
└─ Timeout → [Send reminder email] → [Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Trial conversion (waiting for subscription)
|
|
- Activation campaigns (waiting for key action)
|
|
- Re-engagement (waiting for login)
|
|
|
|
**Example:**
|
|
```
|
|
[Trigger: trial_started]
|
|
↓
|
|
[Send: Welcome to trial]
|
|
↓
|
|
[Wait for: subscription_created, timeout: 7 days]
|
|
├─ Subscribed → [Send: Thanks for subscribing] → [Exit]
|
|
└─ Timeout → [Send: Last chance offer] → [Exit]
|
|
```
|
|
|
|
## Conditional branch
|
|
|
|
Split workflow based on contact data.
|
|
|
|
```
|
|
[Trigger: event]
|
|
↓
|
|
[Condition: check contact field]
|
|
├─ True → [Send email A] → [Exit]
|
|
└─ False → [Send email B] → [Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Personalization by plan/tier
|
|
- Segmented messaging
|
|
- Feature availability checks
|
|
|
|
**Example:**
|
|
```
|
|
[Trigger: signed_up]
|
|
↓
|
|
[Condition: plan equals "enterprise"]
|
|
├─ True → [Send: Enterprise onboarding] → [Exit]
|
|
└─ False → [Send: Standard onboarding] → [Exit]
|
|
```
|
|
|
|
## Multi-condition cascade
|
|
|
|
Chain multiple conditions for complex logic.
|
|
|
|
```
|
|
[Trigger: event]
|
|
↓
|
|
[Condition: is premium?]
|
|
├─ True → [Send: Premium content] → [Exit]
|
|
└─ False ↓
|
|
[Condition: trial active?]
|
|
├─ True → [Send: Trial content] → [Exit]
|
|
└─ False → [Send: Free content] → [Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Tiered content delivery
|
|
- Progressive feature reveals
|
|
- Access-based messaging
|
|
|
|
## Wait chain
|
|
|
|
Multiple wait steps with progressive urgency.
|
|
|
|
```
|
|
[Trigger: cart_abandoned]
|
|
↓
|
|
[Delay: 1 hour]
|
|
↓
|
|
[Send: Gentle reminder]
|
|
↓
|
|
[Wait for: purchase, timeout: 23 hours]
|
|
├─ Purchased → [Exit]
|
|
└─ Timeout ↓
|
|
[Send: Discount offer]
|
|
↓
|
|
[Wait for: purchase, timeout: 48 hours]
|
|
├─ Purchased → [Exit]
|
|
└─ Timeout → [Send: Final reminder] → [Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Cart abandonment
|
|
- Multi-touch re-engagement
|
|
- Escalating incentives
|
|
|
|
## Segment entry drip
|
|
|
|
Triggered when contact joins segment.
|
|
|
|
```
|
|
[Trigger: enters "Inactive Users" segment]
|
|
↓
|
|
[Send: We miss you]
|
|
↓
|
|
[Delay: 3 days]
|
|
↓
|
|
[Condition: still in segment?]
|
|
├─ Yes → [Send: Special offer] → [Exit]
|
|
└─ No → [Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Churn prevention
|
|
- Win-back campaigns
|
|
- Behavior-based sequences
|
|
|
|
**Important:** Segment must have `trackMembership: true` enabled.
|
|
|
|
## Schedule with filter
|
|
|
|
Runs on schedule, filtered by conditions.
|
|
|
|
```
|
|
[Trigger: daily at 9am]
|
|
↓
|
|
[Condition: trial expires in 3 days]
|
|
├─ True → [Send: Trial expiring] → [Exit]
|
|
└─ False → [Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Trial expiration reminders
|
|
- Subscription renewal notices
|
|
- Scheduled checks with conditional sends
|
|
|
|
## Update and continue
|
|
|
|
Modify contact data mid-workflow.
|
|
|
|
```
|
|
[Trigger: signed_up]
|
|
↓
|
|
[Send: Welcome]
|
|
↓
|
|
[Update Contact: onboardingStep = 1]
|
|
↓
|
|
[Delay: 1 day]
|
|
↓
|
|
[Send: Getting started]
|
|
↓
|
|
[Update Contact: onboardingStep = 2]
|
|
↓
|
|
[Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Tracking workflow progress
|
|
- Triggering other systems via segment changes
|
|
- Marking completion milestones
|
|
|
|
## Webhook integration
|
|
|
|
Call external API during workflow.
|
|
|
|
```
|
|
[Trigger: purchase_completed]
|
|
↓
|
|
[Send: Order confirmation]
|
|
↓
|
|
[Delay: 7 days]
|
|
↓
|
|
[Webhook: Create review request in external system]
|
|
↓
|
|
[Send: Review request]
|
|
↓
|
|
[Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Syncing with CRM
|
|
- Triggering other automation tools
|
|
- Logging workflow events
|
|
|
|
## Complex multi-path
|
|
|
|
Combine patterns for sophisticated flows.
|
|
|
|
```
|
|
[Trigger: trial_started]
|
|
↓
|
|
[Send: Welcome]
|
|
↓
|
|
[Delay: 1 day]
|
|
↓
|
|
[Send: Feature tour]
|
|
↓
|
|
[Wait for: feature_used, timeout: 3 days]
|
|
├─ Used ↓
|
|
│ [Send: Great job]
|
|
│ ↓
|
|
│ [Delay: 3 days]
|
|
│ ↓
|
|
│ [Condition: trial ending in 1 day]
|
|
│ ├─ True → [Send: Upgrade reminder] → [Exit]
|
|
│ └─ False → [Exit]
|
|
│
|
|
└─ Timeout ↓
|
|
[Send: Help offer]
|
|
↓
|
|
[Wait for: feature_used, timeout: 3 days]
|
|
├─ Used → [Send: Nice work] → [Exit]
|
|
└─ Timeout → [Update Contact: needs_help = true] → [Exit]
|
|
```
|
|
|
|
**Use for:**
|
|
- Advanced onboarding
|
|
- Complex user journeys
|
|
- Adaptive content delivery
|
|
|
|
## Best practices
|
|
|
|
**Keep it simple** — Start with 3-5 steps. Add complexity only when needed.
|
|
|
|
**Exit explicitly** — Every path should end at an Exit step.
|
|
|
|
**Handle both outcomes** — Conditions and waits need success + failure paths.
|
|
|
|
**Test incrementally** — Build and test each section before adding more.
|
|
|
|
**Use meaningful delays** — Don't spam. Minimum 12-24 hours between emails.
|
|
|
|
**Name clearly** — "Send Welcome Email - Day 0" not "Email 1".
|
|
|
|
**Monitor drop-off** — Check execution stats to see where contacts exit.
|
|
|
|
**Prevent loops** — Never create circular paths. Workflow should always progress forward.
|
|
|
|
## Performance tips
|
|
|
|
**Batch schedule triggers** — If using schedules, run at off-peak hours to spread load.
|
|
|
|
**Limit concurrent waits** — Long waits (weeks/months) keep executions in memory. Use scheduled workflows for very long delays.
|
|
|
|
**Avoid deep nesting** — More than 3-4 condition levels becomes hard to maintain.
|
|
|
|
**Use segments over conditions** — If filtering many contacts, segment-based triggers are more efficient than in-workflow conditions.
|
|
|
|
## Next steps
|
|
|
|
- [Build conditional logic](/automation-patterns/conditional-branching)
|
|
- [Understand execution context](/automation-patterns/advanced-execution-context)
|
|
- [Troubleshoot workflows](/automation-patterns/troubleshooting-workflows)
|