# Create a Workflow

Create a workflow to send Slack, email, or webhook notifications on key events.

You’ll connect a trigger to one or more actions. Actions run in order.

{% hint style="info" %}
Only workspace admins can create and manage workflows.
{% endhint %}

{% stepper %}
{% step %}

### Navigate to Workflows

Click **Workflows** in the main sidebar.

<figure><img src="/files/4rHkTgwmv2RDE8AGligW" alt=""><figcaption></figcaption></figure>

Click **New Workflow**.

<figure><img src="/files/lUzajqH3csGUnLPBsKJB" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}

### Select a trigger

Choose the event that runs your workflow.

<figure><img src="/files/FBUL2PH9YPYqg29xRJPU" alt=""><figcaption></figcaption></figure>

Available triggers:

* **Form Submitted** — Prospect submits a router form
* **Prospect Disqualified** — Prospect is disqualified by routing rules
* **Prospect No Booking** — Prospect doesn’t book after form submission
* **Meeting Booked** — Meeting is scheduled
* **Meeting Rescheduled** — Meeting time changes
* **Meeting Cancelled** — Meeting is cancelled
* **Before Meeting** — A set time before the meeting starts
* **After Meeting** — A set time after the meeting ends
* **Meeting Completed** — Meeting is marked complete
* **Meeting No Show** — Attendee is marked as no-show

For **Before Meeting** and **After Meeting**, set a time offset in minutes.
{% endstep %}

{% step %}

### Select a source type

<figure><img src="/files/padgw4MPFRVtavFhNGF4" alt=""><figcaption></figcaption></figure>

Choose what the workflow applies to:

* **Routers** — Form router events
* **Click Routers** — Click router events
* **Booking Links** — Personal booking link events
* **Group Meeting Links** — Group meeting link events

{% hint style="info" %}
Available triggers change based on the source type.

Example: `form_submitted` is only available for Routers and Click Routers.
{% endhint %}
{% endstep %}

{% step %}

### Select specific sources (optional)

<figure><img src="/files/ZxP7euYf8VOIIEt1Xoof" alt=""><figcaption></figcaption></figure>

Decide how broad the workflow should be:

* **All sources** — Run for every source of the selected type
* **Selected sources** — Pick specific routers, booking links, etc.

Use this for targeted workflows.

Example: only notify on bookings from your “Enterprise Demo” router.
{% endstep %}

{% step %}

### Configure actions

Add one or more actions. Distro runs them in order.

<figure><img src="/files/LeCxXXAg9p4scqiz0hJM" alt=""><figcaption></figcaption></figure>

#### Slack message

<figure><img src="/files/lbkyGo3WqxVIgZcKKhps" alt=""><figcaption></figcaption></figure>

1. Select a Slack channel
2. Write the message content
3. Add placeholders like `{{attendee.name}}`

{% hint style="info" %}
The Distro Slack app must be installed and connected via OAuth.

Invite the bot to the channel before sending.
{% endhint %}

#### Email to assignee

<figure><img src="/files/M6h6avmmLW0hcisWid7J" alt=""><figcaption></figcaption></figure>

1. Set the subject
2. Write the body
3. Add placeholders

{% hint style="info" %}
This action isn’t available for `form_submitted` or `prospect_disqualified`.

There’s no assignee yet.
{% endhint %}

#### Email to specific people

<figure><img src="/files/EntBl8mddFjZaX81mIgS" alt=""><figcaption></figcaption></figure>

1. Enter recipient emails (comma-separated)
2. Set the subject
3. Write the body
4. Add placeholders

#### Webhook

<figure><img src="/files/SNxsYyhxxpaEsSQuZrR3" alt=""><figcaption></figcaption></figure>

1. Enter the receiving webhook URL
2. Add a signing secret (optional)
3. Add custom headers (optional)

For webhook details and payload examples, see [Webhook payloads](/workflows/webhook-payloads.md).
{% endstep %}
{% endstepper %}

### Save your workflow

<figure><img src="/files/1ForGDZrgmGXvnrnLxHX" alt=""><figcaption></figcaption></figure>

1. Give it a clear name. Example: “Slack alert for enterprise bookings”.
2. Click **Save**.
3. New workflows start **inactive**. Toggle **active** when ready.

### Test your workflow

<figure><img src="/files/xQXnAPAtDTeDyy46lLnW" alt=""><figcaption></figcaption></figure>

1. Click **Test Workflow** in the editor.
2. Select a sample resource (booking or submission).
3. Use **Preview** to render without sending.
4. Use **Send Test** to send a real test notification.

Send test behavior:

* Slack: sends with `[TEST]` prefix
* Email: sends to you only
* Webhook: includes `X-Distro-Test: true`

### Using placeholders

Placeholders are replaced with real data at send time.

#### Attendee

* `{{attendee.name}}` — Full name
* `{{attendee.email}}` — Email
* `{{attendee.company}}` — Company

#### Booking

* `{{booking.title}}` — Meeting title
* `{{booking.start_time}}` — Meeting start time
* `{{booking.uuid}}` — Booking ID

#### Assignee

* `{{user.name}}` — Assigned user’s name
* `{{user.email}}` — Assigned user’s email

#### Submission

* `{{submission.form_data}}` — Form field responses

### Manage workflows

From **Workflows**, you can:

* Toggle active/inactive
* Edit triggers, sources, and actions
* Duplicate a workflow
* Delete a workflow
* View history for failures and retries


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.distro.so/workflows/create-a-workflow.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
