212 lines
4.5 KiB
Plaintext
212 lines
4.5 KiB
Plaintext
---
|
|
title: Advanced Workflow Automation
|
|
description: Control workflow re-entry and pass execution context data
|
|
---
|
|
|
|
## Workflow Re-Entry Control
|
|
|
|
Control whether contacts can enter the same workflow multiple times.
|
|
|
|
### Allow Re-Entry
|
|
|
|
Use when the workflow represents a repeating process:
|
|
|
|
```javascript
|
|
{
|
|
"name": "Weekly Newsletter",
|
|
"triggerType": "EVENT",
|
|
"triggerConfig": { "eventName": "newsletter.send" },
|
|
"allowReentry": true // Contacts can re-enter
|
|
}
|
|
```
|
|
|
|
**When to use**:
|
|
- Recurring campaigns (weekly newsletters)
|
|
- Event-based sequences (cart abandoned)
|
|
- Behavior triggers that can happen multiple times
|
|
|
|
**What happens**: Contact can have multiple active executions of the same workflow.
|
|
|
|
### Prevent Re-Entry (Default)
|
|
|
|
Use for one-time journeys:
|
|
|
|
```javascript
|
|
{
|
|
"name": "Onboarding Series",
|
|
"triggerType": "EVENT",
|
|
"triggerConfig": { "eventName": "user.signup" },
|
|
"allowReentry": false // One-time only (default)
|
|
}
|
|
```
|
|
|
|
**When to use**:
|
|
- User onboarding
|
|
- Trial expiration
|
|
- Welcome sequences
|
|
|
|
**What happens**: Contact can only enter once, even if the trigger fires again.
|
|
|
|
## Execution Context
|
|
|
|
Pass event-specific data when starting a workflow execution.
|
|
|
|
### Basic Example
|
|
|
|
```javascript
|
|
// Start workflow with order-specific context
|
|
fetch('/workflows/workflow_id/executions', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
contactId: 'contact_id',
|
|
context: {
|
|
orderNumber: 'ORD-12345',
|
|
orderTotal: 299.99,
|
|
deliveryDate: '2024-03-30'
|
|
}
|
|
})
|
|
});
|
|
```
|
|
|
|
In your workflow email templates:
|
|
|
|
```html
|
|
<p>Hi {'{{firstName}}'}!</p>
|
|
<p>Order #{'{{orderNumber}}'}: ${'{{orderTotal}}'}</p>
|
|
<p>Delivery: {'{{deliveryDate}}'}</p>
|
|
```
|
|
|
|
The template accesses both contact data (`firstName`) and context data (`orderNumber`, `orderTotal`, `deliveryDate`).
|
|
|
|
### When to Use Context
|
|
|
|
**Use execution context for**:
|
|
- Order-specific details
|
|
- Event registration info
|
|
- Session data
|
|
- Campaign-specific values
|
|
|
|
**Update contact data for**:
|
|
- Persistent user attributes
|
|
- Cumulative metrics (total orders, lifetime value)
|
|
- Segment-able fields
|
|
|
|
### Example: Order Confirmation Workflow
|
|
|
|
```javascript
|
|
// Trigger workflow on purchase
|
|
{
|
|
"name": "Order Confirmation",
|
|
"triggerType": "EVENT",
|
|
"triggerConfig": { "eventName": "purchase.completed" },
|
|
"allowReentry": true // Can purchase multiple times
|
|
}
|
|
|
|
// Start execution with order context
|
|
fetch('/workflows/order_workflow_id/executions', {
|
|
method: 'POST',
|
|
body: JSON.stringify({
|
|
contactId: 'contact_id',
|
|
context: {
|
|
orderNumber: 'ORD-456',
|
|
total: 199.99,
|
|
trackingUrl: 'https://track.example.com/456'
|
|
}
|
|
})
|
|
});
|
|
```
|
|
|
|
Workflow sends emails with order-specific details while tracking cumulative purchase data on the contact.
|
|
|
|
## Real-World Patterns
|
|
|
|
### Pattern 1: Trial Workflow
|
|
|
|
```javascript
|
|
{
|
|
"name": "14-Day Trial",
|
|
"triggerType": "EVENT",
|
|
"triggerConfig": { "eventName": "trial.started" },
|
|
"allowReentry": false // Only trial once
|
|
}
|
|
|
|
// Workflow steps:
|
|
// Day 0: Welcome email
|
|
// Day 7: Mid-trial check-in
|
|
// Day 13: Upgrade reminder
|
|
```
|
|
|
|
### Pattern 2: Cart Abandonment
|
|
|
|
```javascript
|
|
{
|
|
"name": "Cart Abandoned",
|
|
"triggerType": "EVENT",
|
|
"triggerConfig": { "eventName": "cart.abandoned" },
|
|
"allowReentry": true // Can abandon multiple times
|
|
}
|
|
|
|
// Pass cart data as context
|
|
context: {
|
|
cartTotal: 99.99,
|
|
cartUrl: 'https://app.example.com/cart/abc'
|
|
}
|
|
```
|
|
|
|
### Pattern 3: Event Reminders
|
|
|
|
```javascript
|
|
{
|
|
"name": "Webinar Reminders",
|
|
"triggerType": "EVENT",
|
|
"triggerConfig": { "eventName": "webinar.registered" },
|
|
"allowReentry": true // Can register for multiple webinars
|
|
}
|
|
|
|
// Pass webinar details as context
|
|
context: {
|
|
webinarTitle: 'Email Automation Masterclass',
|
|
webinarDate: '2024-04-10',
|
|
webinarLink: 'https://zoom.us/j/12345'
|
|
}
|
|
```
|
|
|
|
## Monitoring Executions
|
|
|
|
Check workflow execution status:
|
|
|
|
```bash
|
|
curl -X GET "/workflows/workflow_id/executions/execution_id" \
|
|
-H "Authorization: Bearer sk_your_secret_key"
|
|
```
|
|
|
|
Response shows step progress:
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"data": {
|
|
"id": "execution_id",
|
|
"status": "active",
|
|
"steps": [
|
|
{
|
|
"stepId": "step_1",
|
|
"status": "completed",
|
|
"completedAt": "2024-03-15T10:00:00Z"
|
|
},
|
|
{
|
|
"stepId": "step_2",
|
|
"status": "waiting",
|
|
"waitingUntil": "2024-03-16T10:00:00Z"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
```
|
|
|
|
## Next Steps
|
|
|
|
- [Create workflows](/guides/workflows) to automate sequences
|
|
- [Track events](/guides/events) to trigger workflows
|
|
- [Set up segments](/guides/segments) for segment-based triggers
|