> ## 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`       |
| **Failed**                   | **Failed**                     | `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.

Unknown and unfinished calls do not start a call-ended workflow. Failed calls start it only when **Failed** is selected.

## 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.

Use a **Delay** block to pause before the next step. Set a total duration of at least 10 seconds. Combined delays along any workflow path cannot exceed 30 days. You can leave a delay unconfigured in a draft, but you must set a valid duration before publishing.

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

    | Block                        | Use it to                                                     |
    | :--------------------------- | :------------------------------------------------------------ |
    | **HTTP request**             | 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 a selected phone number                |
    | **Send WhatsApp**            | Send an approved WhatsApp template to a selected phone number |
    | Salesforce **Create record** | Create a Salesforce record when Salesforce is connected       |
    | Salesforce **Update record** | Update a Salesforce record when Salesforce is connected       |
    | HubSpot **Create record**    | Create a HubSpot record when HubSpot is connected             |
    | HubSpot **Update record**    | Update a HubSpot record when HubSpot 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
    * The full plain-text call transcript through `call.transcript`
    * The conversation link in the telli app through `call.conversationUrl`
    * 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.

    In **Call ended** workflows, select **Call Metadata → Conversation link** or use `{{call.conversationUrl}}` in a text field to include a link to the call that triggered the workflow. To open the link, you must sign in to telli with access to that account.

    `call.transcript` is available to **Call ended** workflows. It uses one `Agent:` or `User:` line per transcript entry and prefers the refined transcript when available. Calls processed while transcript storage is disabled have no transcript, so the variable resolves without a value. When transcript retention deletes a call transcript, telli removes it from stored workflow snapshots and traces, and stops active runs that depend on it. Data already sent to external systems is unaffected.
  </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 groups the history by your local day. The status icon shows whether the workflow completed, failed, or remains in progress. The first line names the trigger event, then shows the **Manual** or **Triggered** origin and exact local time. When snapshot context is available, the second line identifies the contact or call with the saved contact name, phone number or email, plus the call duration.

The **All time** metrics include every retained run, including runs not loaded in the current list. The history loads up to 50 runs at a time. Scroll down or click **Load more** to fetch older runs, then open any row to review its full trace.

When a workflow reaches a delay, run details show the completed blocks and mark the delay **In progress**. Progress updates at the next delay or when the run finishes.

## Common examples

<Tabs>
  <Tab title="Send a webhook">
    Use **Call ended** with an **HTTP request** 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.

    To send a recording link, select **Call Metadata → Recording URL** in a body field, header, or query parameter.
  </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 and select **To**: the contact phone number, another contact property with the phone number type, collected data, or a fixed phone number. 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 and a recipient, 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="Sync HubSpot">
    When HubSpot is connected, use HubSpot blocks to create or update records with data from the completed call.

    As with Salesforce, use call outcomes and conditions to decide what should be written back to HubSpot. See [HubSpot](../integrations/hubspot) for connection setup and write-back details.
  </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. For contacts synced from Person Accounts, `External ID` holds the Account record ID, which Salesforce does not accept as a task `Name ID`.
    </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
* [Webhooks](../webhooks) - Send completed call data to external systems outside of workflows
* [Salesforce](../integrations/salesforce) - Connect Salesforce before using Salesforce workflow blocks
* [HubSpot](../integrations/hubspot) - Connect HubSpot before using HubSpot workflow blocks


## Related topics

- [Workflows](/en/get-started/workflows.md)
- [SMS](/platform/sms.md)
- [WhatsApp Business](/integrations/whatsapp.md)
