Common Recipes
Practical workflow patterns you can adapt for your use case. Each recipe shows the trigger, node sequence, and key configuration.
1. Lead Routing by Country
Automatically assign new leads to the regional team based on their country.
Trigger: Event — crm.lead.created
Event: crm.lead.created
--> Extract Lead Data
--> Switch: {{leadCountry}}
Case "US" --> Assign Lead to "North America" team
Case "CA" --> Assign Lead to "North America" team
Case "GB" --> Assign Lead to "EMEA" team
Case "DE" --> Assign Lead to "EMEA" team
Case "FR" --> Assign Lead to "EMEA" team
Default --> Assign Lead to "General" team
--> Add Note: "Auto-routed to {{assignedTeam}} team"Key configuration:
- Switch node evaluates
{{trigger.data.lead.country}} - Each Assign Lead node sets the
assignedAgentIdor team - The Add Note node logs the routing decision for audit
2. AI Auto-Reply with Confidence Threshold
Suggest an AI reply and send it automatically if the confidence score is high enough. Otherwise, leave it as a draft for human review.
Trigger: Event — inbox.message.received
Event: inbox.message.received
--> AI Suggest Reply
Input: {{trigger.data.message.text}}
Conversation: {{trigger.data.conversationId}}
--> Condition: {{nodes.aiSuggestReply.output.confidence}} > 0.8
True --> Send Message
Text: {{nodes.aiSuggestReply.output.suggestedReply}}
Conversation: {{trigger.data.conversationId}}
--> Add Note: "Auto-replied with AI (confidence: {{nodes.aiSuggestReply.output.confidence}})"
False --> Add Note: "AI draft ready for review (confidence: {{nodes.aiSuggestReply.output.confidence}})"Key configuration:
- The confidence threshold (0.8) can be adjusted based on your quality requirements
- Lower thresholds mean more auto-replies but higher risk of inaccurate responses
- The Add Note records the AI confidence for monitoring
3. SLA Escalation Ladder
If a conversation is idle for 30 minutes, notify the assigned agent. If still idle after 60 minutes, escalate to the team lead.
Trigger: Conversation Idle — 30 minutes
Conversation Idle: 30 minutes
--> Send Message (internal note): "Reminder: This conversation has been idle for 30 minutes"
--> Notify Slack: #support-alerts "Idle conversation: {{trigger.conversation._id}}"
--> Delay: 30 minutes
--> Condition: {{trigger.conversation.status}} === "open"
True --> Update Conversation Priority: "urgent"
--> Escalate to Team: "Support Leads"
--> Notify Slack: #escalations "Escalated: idle 60+ minutes"
False --> Log: "Conversation resolved before escalation"Key configuration:
- First notification goes to the assigned agent via internal note + Slack
- 30-minute Delay node waits before checking again
- The Condition checks if the conversation is still open (it may have been resolved during the wait)
- If still open, priority is raised and the team lead is notified
4. Data Enrichment Pipeline
When a new lead is created, enrich their profile from multiple sources in parallel, validate their email, and update the lead record.
Trigger: Event — crm.lead.created
Event: crm.lead.created
--> Extract Lead Data
--> Fork
Branch 1: Enrich Person (Apollo)
Email: {{leadEmail}}
First Name: {{leadName}}
Branch 2: Validate Email (ZeroBounce)
Email: {{leadEmail}}
--> Merge (wait for all)
--> Condition: {{nodes.validateEmail.output.status}} === "valid"
True --> Update Lead
Company: {{nodes.enrichPerson.output.company.name}}
Title: {{nodes.enrichPerson.output.title}}
LinkedIn: {{nodes.enrichPerson.output.linkedin_url}}
Email Status: "verified"
--> AI Score Lead
--> Update Lead: score = {{nodes.aiScoreLead.output.score}}
False --> Update Lead: emailStatus = "invalid"
--> Add Note: "Email validation failed: {{nodes.validateEmail.output.sub_status}}"Key configuration:
- Fork runs Apollo enrichment and ZeroBounce validation simultaneously
- Merge waits for both to finish before continuing
- Only updates the lead with enrichment data if the email is valid
- AI lead scoring runs after enrichment to factor in the new data
5. Shopify Order Follow-up
When a Shopify order webhook fires, create a conversation with the customer and send a thank-you message with order details.
Trigger: Webhook — Shopify order/created
Webhook: Shopify order/created
--> Set Variable: customerEmail = {{trigger.body.customer.email}}
--> Set Variable: orderNumber = {{trigger.body.order_number}}
--> Set Variable: totalPrice = {{trigger.body.total_price}}
--> Find Customer: email = {{variables.customerEmail}}
--> Condition: {{nodes.findCustomer.output.found}} === true
True --> (use existing customer)
False --> Create Customer
Email: {{variables.customerEmail}}
Name: {{trigger.body.customer.first_name}} {{trigger.body.customer.last_name}}
--> Find Conversation: customerId + channel = whatsapp
--> Condition: {{nodes.findConversation.output.found}} === true
True --> Send Message to existing conversation
False --> Send WhatsApp Template
Template: "order_confirmation"
Parameters: [{{variables.orderNumber}}, {{variables.totalPrice}}]
--> Create Lead Activity
Type: "purchase"
Notes: "Order #{{variables.orderNumber}} - ${{variables.totalPrice}}"Key configuration:
- The webhook URL is provided to Shopify as the order notification endpoint
- The workflow checks if the customer already exists before creating a new one
- If the customer has an active WhatsApp conversation, it sends a regular message
- If not, it initiates with a WhatsApp template (required for 24-hour window)
- A CRM activity is logged for the purchase
Building Your Own Recipes
When designing workflows:
- Start simple. Get the happy path working first, then add error handling and edge cases.
- Test with manual triggers. Switch to a Manual trigger during development so you can iterate quickly.
- Use the execution log. After each test run, check the execution log to verify data flow between nodes.
- Add notes for debugging. Use Add Note nodes as checkpoints to log intermediate values.
- Handle failures. Wrap external API calls in Try-Catch or Retry nodes before going to production.