Skip to main content

Overview

Workflows let you automate follow-ups and routing across voice, chat, and external systems. Triggers can fire on call outcomes, Meta lead forms, inbound webhooks, or on a schedule you set—then actions run automatically (calls, SMS, webhooks, chat handoffs, and beyond).

Automated Campaigns

Create multi-step campaigns that automatically follow up based on call results

Smart Routing

Route contacts to different paths based on call status, score, or duration

Multi-Channel Follow-Up

Send SMS, emails, and additional calls based on conversation outcomes

Contact Management

Automatically tag contacts, add them to sequences, or remove them from workflows
Best Practice: Start with simple workflows and gradually add complexity. Test each workflow with a small group before rolling out to all contacts.

How Workflows Work

Workflows consist of triggers and actions:
  1. Trigger: What starts the workflow — either an event (AI call completed, Meta form submitted, inbound webhook) or a moment in time (a schedule)
  2. Filters: Conditions that determine which calls should trigger the workflow
  3. Actions: Steps that execute automatically (send calls, SMS, emails, etc.)
  4. Branches: Conditional logic that routes contacts down different paths, either by testing the contact (If/Else) or at random (Split)
Workflows Overview

Triggers

AI Call Completed

The primary trigger for outbound call workflows. This trigger fires when an AI call finishes, allowing you to respond immediately to call outcomes.
AI Call Completed Trigger

Meta Ad Form Submitted

Trigger a workflow the moment a lead submits a Meta ad lead form (Facebook or Instagram). Ideal for speed-to-lead campaigns where every minute counts. Common Uses:
  • Call new leads within seconds of submission
  • Send an instant SMS or email confirmation
  • Route leads to different workflows based on campaign or form
Requires the Meta Integration to be connected in Settings → Company → Integrations.

Inbound Webhook

Start a workflow when an external system sends an HTTP request to your workflow’s inbound webhook URL. Use this to connect custom apps, landing pages, other SaaS tools, or middleware that can POST JSON payloads into Outbox AI. Common uses:
  • Fire automations from your own backend or a serverless function
  • Chain tools like Zapier, Make, or n8n into Outbox workflows
  • Kick off contact-specific sequences from product or billing events
Configure the webhook URL and authentication in the workflow trigger settings. Payload fields you send can often be mapped into contact data and workflow variables, depending on your setup.

Schedule

Run a workflow because a moment arrived, rather than because something happened. Every other trigger waits to be told; this one fires on a cadence you set — which is what most “run itself” automation actually needs. Common uses:
  • Chase every quote that has been sitting unanswered for three days
  • Review lapsed members every Monday morning
  • Send a summary report on the first of the month
  • Sync or scan a connected system on a schedule
Cadence modes:
  • Interval – Every N minutes, hours or days. Five minutes is the shortest supported interval.
  • Daily – Every day at a set time
  • Weekly – At a set time on chosen days of the week
  • Monthly – At a set time on a chosen day of the month (1–28)
Times are wall-clock times in the business’s own timezone, and they stay that way across daylight saving changes — “9am Monday” keeps meaning 9am. The schedule uses its own timezone if set, otherwise the workflow’s, otherwise the company’s.
What it acts on A schedule has to be told who it runs for. That is the target:
  • Nothing (default) – One run with no contact attached. Use it for anything that acts on the business rather than a person: a report, a sync, an outbound webhook. Contact actions such as Send SMS do nothing here, because there is nobody to send to.
  • Contacts – Enrols everyone matching the filter, one run each. Use it for “chase quotes older than three days”. You can narrow by tag, skip contacts marked Do Not Disturb, and cap how many are enrolled per run.
  • Plugin – Searches a connected plugin (Ascora, Mindbody, …) for records in a given status and age window and enrols the contact on each one.
A schedule targeting contacts is capped at 500 contacts per run by default. The cap exists because a schedule that matches thousands of contacts would place thousands of calls on a single tick — raise it deliberately, not by accident.
Configuration:
A schedule trigger takes no filters — there is no event to filter on. Which contacts it acts on is decided entirely by target and tags in the config. Anything placed under filters is stored but read by nothing, so a schedule that looks filtered will happily run against everyone.
day_of_month stops at 28 so a monthly schedule means the same thing in February as it does in January. Cron expressions are not supported.

Filters

Filters allow you to control which calls trigger your workflow. Only calls that match ALL selected filters will trigger the workflow. Filters apply to event triggers — a Schedule trigger has no event to filter, and decides who it acts on through its own target setting instead.

Call Status Filter

Filter workflows based on the outcome of the call: Available Statuses:
  • Completed – Call finished successfully
  • Forwarded – Call was transferred to a human
  • Voicemail – Agent left a voicemail message
  • No Answer – Contact didn’t pick up
  • Error – Technical failure occurred
  • Unqualified – Contact didn’t meet qualification criteria

Direction Filter

Filter based on the direction of the call: Options:
  • Inbound – Only trigger for calls received by your agents
  • Outbound – Only trigger for calls placed by your agents
  • Web – Only trigger for web-based calls (e.g., browser-based calling)

Score Filter

Filter based on the AI agent’s call score: Options:
  • Minimum Score – Only trigger if score is at least X
  • Maximum Score – Only trigger if score is no more than X
  • Range – Trigger only for scores within a specific range
Score Range: Scores typically range from 0-100, with higher scores indicating better-qualified leads or more successful conversations.

Agent Filter

Filter based on which AI agent handled the call: Options:
  • Select one or more specific agents
  • Useful when different agents handle different types of calls
  • Allows you to create agent-specific follow-up sequences

Actions

Actions are the steps your workflow takes after being triggered. You can chain multiple actions together to create complex automation sequences.

Send AI Call

Place an outbound AI call to a contact using one of your voice agents. Configuration:
  • Agent – Select which voice agent to use for the call
  • From Number – Choose the phone number to call from
  • First Message – Set the opening line for the call
Send AI Call Action
Dynamic Variables: Use {{contact.first_name}} and other contact variables in your first message to personalize each call automatically.

Wait

Add a delay between workflow actions. This allows you to space out follow-up actions and create natural conversation timing. Configuration:
  • Duration – Set how long to wait (seconds, minutes, hours, or days)
  • For call to end - Wait until a call ends so that you can activate different actions based on the results of the call.
Use Cases:
  • Wait 24 hours before sending a follow-up call
  • Space out multi-touch campaigns (call → wait 2 days → SMS)
  • Wait until call ends, if no answer, send SMS
Wait Action
Example Workflow:
  1. AI Call Completed → Status: No Answer
  2. Wait 4 hours
  3. Send AI Call (retry attempt)

Drip Mode

Enable drip mode to automatically space out actions over time, creating a natural follow-up cadence. Configuration:
  • Drip Interval – Time between each action (e.g., every 2 days)
  • Batch Size - The amount of contacts you want to push through at a time
How it works: Drip mode automatically executes actions at set intervals without requiring manual scheduling. Perfect for managing concurrency. Use Cases:
  • Throttling campaigns that run through a few thousand contacts at a time.
Drip Mode Action
Drip vs. Wait: Drip mode is ideal for ongoing sequences, while Wait is better for one-time delays between specific actions.

Send SMS

Send a text message to the contact’s phone number. Configuration:
  • Message Content – Write the SMS message
  • From Number – Select the phone number to send from
Use Cases:
  • Follow up after calls with additional information
  • Send links or resources mentioned during the call
  • Quick check-ins for leads that didn’t answer
Send SMS Action
Example Messages:

Send Email

Send an email to the contact using your configured email provider. Configuration:
  • From Email – Select the email address to send from
  • Subject – Set the email subject line
  • Body – Write the email body content
  • Custom Email List (Optional) – Select a custom email list to send to
Use Cases:
  • Send detailed information after a call
  • Follow up with resources, pricing, or documentation
  • Appointment confirmations with calendar invites
  • Nurture sequences for long-term leads
Send Email Action
Best Practices:
  • Keep subject lines concise and relevant
  • Personalize content using contact variables
  • Include clear call-to-action buttons
  • Test email rendering across different clients

Outbound Webhook

Send an HTTP request to any URL you control—ideal for notifying external systems, Zapier/Make, or your own API when a workflow step runs. Configuration:
  • URL – Endpoint to call (often POST)
  • Method / headers – Match what your receiver expects
  • Body – JSON or text; use contact and workflow variables where supported
Use cases:
  • Push lead or call outcomes into a data warehouse
  • Trigger a process in another product the moment a workflow runs
  • Mirror Outbox events into your internal tools

Assign Chat Agent

Hand the contact’s conversation to a specific chat agent as part of the workflow. Use this when a call, form, or webhook should change who handles ongoing SMS, DMs, web chat, or email threads. Use cases:
  • Route Meta leads to a dedicated sales chat agent
  • Escalate from a lightweight bot to a specialist agent after qualification
  • Align chat ownership with tags or workflow branches

Interrupt Chat Agent

Stop the active chat agent for a contact so automation pauses—useful when a human needs to take over or when you want to halt AI replies until something else happens. Use cases:
  • Pause AI after a high-value event until your team responds
  • Prevent duplicate automated messages when a workflow also assigns manual follow-up
  • Coordinate with Interrupt Mode and human handoff in the CRM

Create Opportunity

Creates a new opportunity in a pipeline for the contact, with the stage and fields you configure in the action. Use cases:
  • Log a deal when a Meta lead form triggers a workflow
  • Open an opportunity after a high-score AI call or webhook event
  • Start a sales track before a rep assigns ownership manually
See Opportunities for pipelines and stages.

Update Opportunity

Updates an existing opportunity—typically moving a stage or refreshing fields after an automated step. Use cases:
  • Advance a deal after a successful follow-up SMS or email step
  • Sync pipeline status when a branch condition (score, tag, etc.) fires
  • Close or disqualify opportunities from automated sequences

Add to Workflow

Add the contact to another workflow, allowing you to chain workflows together or move contacts between sequences. Configuration:
  • Target Workflow – Select which workflow to add the contact to
Use Cases:
  • Move qualified leads from general nurture to sales sequence
  • Transfer contacts between different campaign types
  • Create workflow hierarchies (parent → child workflows)
  • Route contacts based on call outcomes
Add to Workflow Action
Contacts can be in multiple workflows simultaneously. Use this action to add them to additional sequences without removing them from the current workflow.

Remove from Workflow

Remove the contact from a workflow, stopping further automation for that contact in that specific sequence. Configuration:
  • Target Workflow – Select which workflow to remove the contact from
Use Cases:
  • Stop automation when contact converts or opts out
  • Remove contacts who have been handled manually
  • Clean up workflows by removing unqualified contacts
  • Prevent duplicate automation when contacts are in multiple workflows
Remove from Workflow Action
Best Practice: Always remove contacts from workflows when they convert or explicitly opt out to avoid sending unwanted follow-ups.

Add Contact Tag

Add a tag to the contact for organization, segmentation, and filtering. Configuration:
  • Tags – Add multiple tags at once
Use Cases:
  • Tag contacts based on call outcomes (“Hot Lead”, “Follow Up Needed”)
  • Segment contacts by score (“High Score”, “Low Score”)
  • Mark contacts for specific campaigns (“Solar Interest”, “Appointment Booked”)
  • Organize contacts by status (“Qualified”, “Unqualified”)
Add Contact Tag Action
Example Tags:
  • hot-lead, warm-lead, cold-lead
  • appointment-booked, callback-requested
  • no-answer, voicemail-left
  • high-score, qualified, unqualified

Remove Contact Tag

Remove a tag from the contact, useful for cleaning up tags or updating contact status. Configuration:
  • Tags – Remove multiple tags at once
Use Cases:
  • Remove outdated tags when contact status changes
  • Clean up tags when contacts move between stages
  • Remove temporary tags used for filtering
  • Update contact segmentation
Remove Contact Tag Action
Example Workflow:
  1. AI Call Completed → Score > 80
  2. Remove Tag: “Cold Lead”
  3. Add Tag: “Hot Lead”

If/Else

Create conditional branches in your workflow based on call status or score. This allows you to route contacts down different paths depending on call outcomes. Configuration:
  • Condition Type – Choose “Call Status” or “Score”
  • Condition Logic – Set the comparison (equals, greater than, less than, etc.)
  • If Path – Actions to execute if condition is true
  • Else Path – Actions to execute if condition is false
Condition Types: Call Status:
  • Equals: Completed, Forwarded, Voicemail, No Answer, Error, Unqualified
  • Not Equals: Any status except the specified one
Score:
  • Greater Than: Score is above X
  • Less Than: Score is below X
  • Equals: Score equals exactly X
  • Between: Score is within a range
If/Else Action
Example Workflows: Example 1: Route by Score
Example 2: Route by Call Status
Complex Logic: You can nest If/Else branches to create sophisticated routing logic. Start simple and add complexity as needed.

Split

Send contacts down two or more paths at random, against percentages you set. Where If/Else routes by asking a question about the contact, Split routes by rolling a dice — which is what you want for split-testing two approaches against each other. Configuration:
  • Paths – Two or more branches, each with a label
  • Weight – The percentage of contacts that should take each path
Give each path a weight and they are used as written. Leave a path’s weight blank and it takes an even share of whatever the others have not claimed, so two unweighted paths are a straight 50/50.
The roll happens once per contact and is remembered. If the workflow sleeps partway down a path — on a wait, or overnight — the contact resumes on the same path it started on. Nobody ever travels down two arms of a split.
Example: test two follow-up approaches
Let it run, then compare outcomes across the two paths to see which ordering books more.
A Split has no Else path — every contact lands on one of the paths you defined. And splitting contacts between two identical paths measures nothing: only split when the paths genuinely differ.

Action Configuration Reference

Every workflow action is an object with an action_type and a config object. This section documents the exact config schema for each action_type so you can build workflows programmatically (via the API, or when generating workflows with an AI agent). Fields not listed are ignored.
Any string field may contain template variables such as {{contact.first_name}} or {{call.score}}, which are resolved at execution time.

send_ai_call

send_sms

send_email

wait

wait_type: "call_end" pauses the workflow until the triggering call ends — used to branch on the outcome of a call placed earlier in the same workflow.

drip

if_else

Creates conditional branches. config.branches is an array; each branch defines one condition and the actions nested under it run when that condition matches.
A call_score branch uses min_score / max_score, not operator / values. Supply at least one bound — you can set only min_score (e.g. “greater than 50”), only max_score, or both for a range. A call_status branch uses operator + values and does not use the score fields.
Valid call_status values: error, did-not-answer, did-not-qualify, customer-ended, agent-ended, callback-booked, did-forward, did-succeed.

split

Creates random branches for split-testing. Same branching machinery as if_else, chosen by weight rather than by a condition.
branches is the only field a split needs. Supply at least two. A branch with no weight takes an even share of whatever the weighted branches leave, so [{"label": "A"}, {"label": "B"}] is a straight 50/50.
A split has no else branch — child actions attach to a branch_index of 0, 1, and so on, never to null. The chosen branch is recorded on the execution the first time the split runs and reused if the workflow sleeps inside a branch and resumes, so a contact never travels down two paths.
There is no percentage, weights, paths or condition field. Weights live on the individual branches; if the path should depend on the contact, you want if_else, not split.

add_tag / remove_tag

add_to_workflow

remove_from_workflow

create_opportunity

opportunity_name is accepted as an alias for name.

update_opportunity

Updates the contact’s matching opportunity. Provide opportunity_id to target a specific one, otherwise the most recent matching opportunity is used. Include at least one mutable field.

update_contact

At least one standard field or one custom_fields entry is required.

assign_chat_agent

interrupt_chat_agent

run_module

webhook

jarvis_agent


Building Your First Workflow

Follow these steps to create your first automated campaign:
1

Define Your Goal

What do you want to achieve? (e.g., “Follow up on no-answer calls within 4 hours”)
2

Set the Trigger

Add “AI Call Completed” trigger and configure filters (e.g., Status = “No Answer”)
3

Add Actions

Add the actions you want to execute (e.g., Wait 4 hours → Send AI Call)
4

Test the Workflow

Test with a single contact to ensure it works as expected
5

Activate

Enable the workflow and monitor results
Example Complete Workflow

Common Workflow Patterns

Pattern 1: No-Answer Retry Sequence

Goal: Retry calls that didn’t get answered Workflow:
  1. Trigger: AI Call Completed → Filter: Status = “No Answer”
  2. Wait: 4 hours
  3. Send AI Call: Retry with different first message
  4. If/Else: Score > 70 → Add Tag “Engaged”, Else → Add Tag “Low Interest”

Pattern 2: High-Score Immediate Follow-Up

Goal: Immediately follow up on highly qualified leads Workflow:
  1. Trigger: AI Call Completed → Filter: Score > 80
  2. Add Tag: “Hot Lead”
  3. Send Email: “High Priority Follow-Up” (immediately)
  4. Send SMS: “Quick follow-up” (wait 1 hour)
  5. Add to Workflow: “Sales Sequence”

Pattern 3: Drip Nurture Campaign

Goal: Maintain contact with leads over time Workflow:
  1. Trigger: AI Call Completed → Filter: Status = “Completed”
  2. Enable Drip Mode: Every 3 days, max 4 actions
  3. Action 1: Send Email (Day 0)
  4. Action 2: Send SMS (Day 3)
  5. Action 3: Send AI Call (Day 6)
  6. Action 4: Send Email (Day 9)

Pattern 4: Multi-Channel Follow-Up

Goal: Follow up across multiple channels Workflow:
  1. Trigger: AI Call Completed → Filter: Status = “Completed”
  2. Send Email: “Thank you for your time” (immediately)
  3. Wait: 1 day
  4. Send SMS: “Quick question” (Day 1)
  5. Wait: 2 days
  6. Send AI Call: “Follow-up call” (Day 3)

Pattern 5: Scheduled Quote Chase

Goal: Chase quotes that have gone quiet, without anyone remembering to Workflow:
  1. Trigger: Schedule → Weekly, Monday at 09:00, target “Contacts”, tag = “quote-sent”
  2. Send AI Call: “Following up on your quote”
  3. Wait: Call End
  4. If/Else on call status:
    • Completed → Add Tag: “quote-discussed” → Remove Tag: “quote-sent”
    • No Answer → Send SMS: “Tried to reach you about your quote”

Pattern 6: Split-Test Your Follow-Up

Goal: Find out which follow-up order actually books more Workflow:
  1. Trigger: AI Call Completed → Filter: Status = “No Answer”
  2. Split:
    • Path A (50%) → Send SMS → Wait 2 days → Send AI Call
    • Path B (50%) → Send AI Call → Wait 2 days → Send SMS
  3. Compare booked outcomes between the two paths, then keep the winner

Best Practices

Begin with basic workflows and add complexity gradually. A simple workflow that works is better than a complex one that breaks.
Always test workflows with a small group before rolling out to all contacts. Monitor results and adjust as needed.
Use Wait actions to space out communications. Don’t overwhelm contacts with too many messages in a short time.
Tag contacts consistently to enable filtering and segmentation. Create a tagging strategy before building workflows.
Track which workflows perform best. Review call logs, conversion rates, and engagement metrics regularly.
Remove contacts from workflows when they convert, opt out, or become unqualified. Keep your workflows clean and efficient.

Troubleshooting

Problem: Workflow isn’t executing when expected.Solutions:
  • Check that filters aren’t too restrictive
  • Verify the trigger conditions match your call outcomes
  • On a Schedule trigger, check the workflow is active and the cadence is valid — an unreadable schedule is switched off rather than retried every minute. Remember a schedule ignores filters entirely.
  • Ensure the workflow is enabled/active
  • Check that contacts meet all filter criteria
  • Review call logs to confirm call status matches filters
Problem: Some actions in the workflow aren’t running. Solutions: - Verify action configuration is correct - Check for errors in action settings (invalid phone numbers, email addresses, etc.) - Ensure Wait actions aren’t blocking subsequent steps - Review action logs for error messages - Test each action individually
Problem: Contacts are receiving too many messages. Solutions: - Add Wait actions between communications - Use If/Else to prevent duplicate actions
  • Remove contacts from workflows when they respond - Review your workflow timing and spacing - Consider using Drip Mode for better pacing
Problem: Contacts remain in workflows when they shouldn’t.Solutions:
  • Add “Remove from Workflow” actions for conversion/opt-out scenarios
  • Use If/Else branches to handle different outcomes
  • Regularly review and clean up workflow members
  • Set up automatic removal conditions

Next Steps

Voice Agents

Learn how to create the AI agents that power your workflows

Prompting Guide

Master prompt writing to improve call outcomes

Tool Library

Explore tools that can enhance your workflows

Opportunities

Pipelines, stages, and opportunity tools

GoHighLevel Integration

Integrate workflows with your CRM