> ## Documentation Index
> Fetch the complete documentation index at: https://docs.telli.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Workflows

> Automate actions across calls, contacts, and integrations with visual workflows in telli

<Frame>
  <video src="https://migthzpcwvipwgioldfr.supabase.co/storage/v1/object/public/public_assets/changelog/2026-05-04-week-19/workflows.mp4" width="3842" height="2160" controls muted autoPlay loop playsInline className="w-full rounded-xl" />
</Frame>

Workflows automate repeatable work across calls, contacts, and integrations. Start from a trigger, add actions and conditions in the visual builder, and keep contact records, CRMs, and external systems up to date automatically. The steps below use **Call ended** as the example trigger.

## Create a workflow

<Steps>
  <Step title="Open Workflows">
    Go to **Workflows** in the telli dashboard. The list shows your workflows, run counts, triggers, statuses, and last update times.
  </Step>

  <Step title="Click Create Workflow">
    Click **Create Workflow** to open the creation dialog.
  </Step>

  <Step title="Name and describe the workflow">
    Give the workflow a clear name and optional description. Use a name that describes the result, such as "Send call summary to CRM" or "Update lead status after call".
  </Step>

  <Step title="Select a trigger">
    Choose the event that should start the workflow. For this guide, select **Call ended** to evaluate the workflow after a completed call.
  </Step>

  <Step title="Configure the trigger">
    Fill in the settings required by the trigger. For **Call ended**, select the agent and the call statuses that should start this workflow.
  </Step>

  <Step title="Add workflow blocks">
    Use the **+** button on the canvas to add action and condition blocks after the trigger.
  </Step>

  <Step title="Publish the draft">
    Click **Publish** when the trigger and required blocks are configured. Publishing creates the version telli can use for new workflow runs.
  </Step>

  <Step title="Enable the workflow">
    Turn the workflow **Enabled**. Disabled workflows keep their draft and published versions, but do not run automatically.
  </Step>
</Steps>

## Choose which ended calls start the workflow

The **Call ended** trigger uses your selected call statuses as an OR filter. An ended call starts the workflow once when it matches any selected status.

| Trigger option               | Status available in conditions | Has follow-up |
| :--------------------------- | :----------------------------- | :------------ |
| **Connected → No follow-up** | **Connected**                  | `false`       |
| **Connected → Follow-up**    | **Connected**                  | `true`        |
| **Not connected**            | **Not connected**              | `false`       |
| **Voicemail**                | **Voicemail**                  | `false`       |

After selecting the statuses that may enter the workflow, use **Status** or **Has follow-up** in an **If / else** or **Switch** block to route them to different actions.

Failed, unknown, and unfinished calls do not start a call-ended workflow.

## Add workflow blocks

Blocks define what the workflow does after the trigger. Add them from the canvas, configure each block in the side panel, and use conditions when different call results should follow different paths.

<Tabs>
  <Tab title="Actions">
    Action blocks perform work outside the workflow branch itself:

    | Block                        | Use it to                                                     |
    | :--------------------------- | :------------------------------------------------------------ |
    | **Webhook**                  | Send call, contact, and workflow data to an external endpoint |
    | **Update contact**           | Update contact fields or custom contact properties in telli   |
    | **Send SMS**                 | Send a text message to the workflow contact                   |
    | **Send WhatsApp**            | Send an approved WhatsApp template to the workflow contact    |
    | Salesforce **Create record** | Create a Salesforce record when Salesforce is connected       |
    | Salesforce **Update record** | Update a Salesforce record when Salesforce is connected       |
  </Tab>

  <Tab title="Conditions">
    Condition blocks decide which path the workflow should follow:

    | Block         | Use it to                                                       |
    | :------------ | :-------------------------------------------------------------- |
    | **If / else** | Split the workflow into a true branch and a false branch        |
    | **Switch**    | Route the workflow through multiple branches based on one value |

    Conditions are useful when only some calls should update a property, send a webhook, or sync to Salesforce. For example, compare **Status** with **Not connected** or **Voicemail**, or use **Has follow-up** to separate connected calls with a scheduled follow-up.
  </Tab>

  <Tab title="Data you can use">
    Workflow blocks can use values from the trigger and from earlier blocks in the same run.

    Common sources include:

    * Trigger data, such as the completed call for **Call ended**
    * Contact fields and contact properties
    * Call metadata such as status, follow-up state, direction, duration, and end reason
    * Collected data from the agent
    * Call outcomes and analysis outputs

    This lets you send structured context to external systems or update telli contact data based on what happened during the call.
  </Tab>
</Tabs>

## Publish, enable, and edit

Workflow edits are saved as a draft while you work. Publishing turns the current draft into the version telli uses for new runs.

<Tabs>
  <Tab title="Drafts">
    Use the draft while you are building or changing a workflow. If the builder highlights incomplete or broken blocks, configure those blocks before publishing.
  </Tab>

  <Tab title="Published versions">
    A published version is the workflow version used for new automatic runs. Use **Version history** to preview previous versions.
  </Tab>

  <Tab title="Discard draft">
    Use **Discard draft** when you want to remove unpublished changes and return the draft to the latest published version.
  </Tab>

  <Tab title="Enabled state">
    Use the **Enabled** switch to control automatic execution. A workflow must be published before it can be enabled.
  </Tab>
</Tabs>

## Test and monitor runs

Run a workflow manually before relying on automatic execution. Manual runs use the published workflow and let you test it against a real completed call.

<Steps>
  <Step title="Open the workflow">
    Open the workflow you want to test.
  </Step>

  <Step title="Go to Runs">
    Select the **Runs** tab in the workflow builder.
  </Step>

  <Step title="Click Run manually">
    Click **Run manually**. This action is available after the workflow is published and a trigger agent is selected.
  </Step>

  <Step title="Choose a completed call">
    Select one of the completed calls from the trigger agent.
  </Step>

  <Step title="Click Run workflow">
    Click **Run workflow** to create the run.
  </Step>

  <Step title="Review the trace">
    Open the run details to see which blocks ran, which branches were used, and where a failure happened if a block did not complete.
  </Step>
</Steps>

The **Runs** tab shows completed, failed, and running workflow runs. Manual runs appear in the history with a **Manual** label.

## Common examples

<Tabs>
  <Tab title="Send a webhook">
    Use **Call ended** with a **Webhook** block when another system needs call details after a completed conversation.

    This is useful for CRMs, data warehouses, or automation platforms that should receive call summaries, contact fields, call outcomes, or collected data.
  </Tab>

  <Tab title="Update a contact">
    Use **Update contact** with call outcomes or collected data to keep contact records current.

    For example, route qualified leads through an **If / else** branch and update a custom property such as "Lead Status" or "Interested Product".
  </Tab>

  <Tab title="Send an SMS">
    Use **Send SMS** when a completed call should trigger a text follow-up, such as a booking link, payment link, reminder, or confirmation.

    Choose an SMS-capable sender number, set the recipient to the contact phone number, and use workflow variables to personalize the message. See [SMS](./sms) for setup requirements and delivery status details.
  </Tab>

  <Tab title="Send WhatsApp">
    Use **Send WhatsApp** when a completed call should trigger a WhatsApp template message, such as an appointment reminder or confirmation.

    Choose an active WhatsApp Business phone number, select an approved Meta template, and map template fields to workflow data. See [WhatsApp Business](../integrations/whatsapp) for setup requirements and delivery status details.
  </Tab>

  <Tab title="Sync Salesforce">
    When Salesforce is connected, use Salesforce blocks to create or update records with data from the completed call.

    A common pattern is to use call outcomes to decide what should be written back. For example, update a Salesforce field when an outcome such as "Appointment Booked" or "Qualified Lead" is true, and use conditions when only certain calls should sync to Salesforce.
  </Tab>

  <Tab title="Log Salesforce calls">
    Use a Salesforce **Create record** block with type `Task` to log a completed telli call back into Salesforce as an activity.

    Set these fields:

    | Salesforce field | Value                                                                 |
    | :--------------- | :-------------------------------------------------------------------- |
    | `Task Subtype`   | `Call`                                                                |
    | `Type`           | `Call`                                                                |
    | `Status`         | `Completed`                                                           |
    | `Name ID`        | `Contact -> External ID`                                              |
    | `Subject`        | A short title, such as `telli call` or the call outcome               |
    | `Call Type`      | `Inbound` or `Outbound`                                               |
    | `Description`    | Call summary, outcome, call ID, recording link, or transcript details |

    <Note>
      `Name ID` links the Salesforce task to the synced Lead or Contact. Use `Contact -> External ID`, which stores the Salesforce record ID for contacts synced from Salesforce.
    </Note>
  </Tab>
</Tabs>

## Related pages

* [Contact Properties](./contact-properties) - Define the custom fields workflows can update on telli contacts
* [SMS](./sms) - Send SMS messages from agents and workflows
* [WhatsApp Business](../integrations/whatsapp) - Send WhatsApp template messages from agents and workflows
* [Call Analysis](../deep-dives/call-analysis) - Learn how telli extracts structured outcomes from completed calls
* [Receive Call Data](../receive-call-data) - Send completed call data to external systems outside of workflows
* [Salesforce](../integrations/salesforce) - Connect Salesforce before using Salesforce workflow blocks
