# OmniWorkflows (/docs/workflows)

> Build visual automations that connect triggers to actions like voice AI calls, CRM updates, and messaging.

OmniWorkflows is a visual, drag-and-drop automation builder. You connect a
trigger (something that starts the flow) to a sequence of actions (calls,
messages, CRM updates, and logic), so work happens automatically without
writing code.

  OmniWorkflows is in beta and may need to be enabled for your account. If you
  do not see **Workflow** in the sidebar, contact support to turn it on.

## Where to find it [#where-to-find-it]

In the dashboard sidebar under **Voice AI Setup**, open **Workflow**. From
there you can create a workflow, open the builder, and view execution logs.

## What a workflow is made of [#what-a-workflow-is-made-of]

A workflow starts with one trigger and then runs the actions you connect to
it.

### Triggers [#triggers]

* Webhook
* OmniDim CRM
* LeadSquared
* Email event (replied, opened, clicked, or a delivery problem)
* WhatsApp inbound
* SMS received (Twilio)
* Shopify
* Instantly

### Actions [#actions]

* **AI**: AI Assistant, Photo Analyzer
* **Messaging and calls**: Send Email, Send SMS, WhatsApp, Voice AI call,
  Dialer, Add to Bulk Call
* **CRM**: OmniDim CRM activity, LeadSquared update, LeadSquared get
* **Integrations**: Custom API, Slack message, Enroll in Instantly
* **Flow control**: Condition, Switch, Delay, Wait for time, Time
  condition, Run workflow (sub-workflow), Code, Note

Provider actions (WhatsApp, Twilio SMS, Slack, Shopify, LeadSquared,
Instantly, Voice AI) need the matching integration or credentials connected
first.

## Build a workflow [#build-a-workflow]

  
    ### Create the workflow [#create-the-workflow]

    On the Workflow page, click to create a new workflow. Give it a name,
    optionally pick a folder, and start from a blank canvas or a template.
  

  
    ### Add and connect nodes [#add-and-connect-nodes]

    Drag nodes from the components palette onto the canvas and draw connections
    between them to set the order. A workflow has a single trigger at the start.
  

  
    ### Configure each node [#configure-each-node]

    Select a node to open its properties. To pass data forward, reference the
    output of an earlier node with a variable like
    `{{ context.<node>.<field> }}`. The upstream variables panel lists the
    fields each earlier node makes available so you can insert them.
  

  
    ### Save [#save]

    Save your work as a draft while you build.
  

## Test before you publish [#test-before-you-publish]

* **Test the whole flow**: use **Test** in the top bar. For webhook and
  event triggers you paste a sample payload, which the run receives as
  `context.webhook`. The test opens the execution monitor so you can watch
  it run.
* **Test a single node**: from a node's properties, run it on its own with
  manual input to check its output in isolation.

## Execution logs [#execution-logs]

Open a workflow's executions to see each run. The live diagram color-codes
nodes as completed, waiting, or failed. Click a node to inspect its input
(data received from earlier nodes) and its output. Runs can be running,
waiting, completed, failed, or cancelled, and you can cancel a run or rerun
a failed one.

## Publish and activate [#publish-and-activate]

Publishing makes the current version live and starts a fresh draft for
further edits. A published workflow is read-only in the builder, with an
active or paused toggle to turn the live version on or off. Webhook and
event triggers only fire while a published version is active.

## Walkthrough: build a speed-to-lead workflow [#walkthrough-build-a-speed-to-lead-workflow]

A common first workflow: when a new lead arrives, call them within seconds
and log the outcome back to your CRM.

  
    ### Add the trigger [#add-the-trigger]

    Create a workflow and add a trigger. For speed-to-lead, use **OmniDim CRM**
    (fires when a lead is created) or **Webhook** (paste the generated webhook
    URL into your lead source so new leads post to it).
  

  
    ### Call the lead [#call-the-lead]

    Add a **Voice AI** action and connect it to the trigger. Choose the agent
    that qualifies leads and the number to call from. Map the lead's phone
    number from the trigger with a variable, for example
    `{{ context.<trigger>.phone }}`.
  

  
    ### Branch on the result [#branch-on-the-result]

    Add a **Condition** after the call. The Voice AI node exposes outputs like
    `call_status` and your extracted variables, so you can branch on something
    like `{{ context.<voice>.extracted_variables.interested }}`.
  

  
    ### Act on each branch [#act-on-each-branch]

    On the interested branch, add an **OmniDim CRM activity** (or LeadSquared
    update) to log the disposition. On the other branch, add a **Send Email**,
    **WhatsApp**, or **SMS** follow-up.
  

  
    ### Test with a sample payload [#test-with-a-sample-payload]

    Click **Test** and paste a sample lead payload. It reaches the run as
    `context.webhook`. Watch the run in the execution monitor and check each
    node's input and output.
  

  
    ### Publish [#publish]

    Publish to make it live. Webhook and event triggers only fire on a
    published, active version.
  

## Common uses [#common-uses]

* **Speed-to-lead**: a new lead (CRM event or webhook) triggers an instant
  Voice AI call, then writes the outcome back to your CRM.
* **Follow-up messaging**: after a call, send a WhatsApp, SMS, or email
  based on the call result.
* **Routing and enrichment**: use conditions and Custom API calls to branch
  the flow and pull in external data before the next step.

## Video walkthrough [#video-walkthrough]