# Automation workflows

> Build visual workflows that react to ticket events, post automatic messages, assign tickets, notify Discord, and review every run.

Source: https://joely.io/documentation/automations/overview
Last updated: 2026-08-31

Automations let your team build visual workflows on a node canvas. A workflow starts with one **trigger**, then flows through any number of **conditions** and **actions**. When the trigger's event happens on a ticket, every enabled workflow of the project listening to that event is evaluated independently.

Workflows live in **Automations**, in the dashboard's main menu. Viewing the page requires the `automations.view` permission; creating, editing, enabling, or deleting workflows requires `automations.manage`.

## The three building blocks

| Block | How many | What it does |
|-------|----------|--------------|
| [Trigger](https://joely.io/documentation/automations/triggers.md) | Exactly one, at the start | Names the ticket event the workflow listens to, and publishes that ticket's data to the nodes after it |
| [Condition](https://joely.io/documentation/automations/conditions.md) (the **If** node) | Any number, optional | Tests one field of that data and routes the workflow through its **True** or **False** output |
| [Action](https://joely.io/documentation/automations/actions.md) | At least one | Does something: posts a message, assigns the ticket, sets a priority, notifies Discord, calls a webhook |

Conditions can **branch**: each one has a *True* and a *False* output, so a workflow can do one thing when a condition matches and another when it doesn't. Actions publish data too, so a condition placed after an action can test what that action did.

## A workflow, end to end

Say a resolved ticket should thank the customer and then close itself a few days later:

1. Start with the **Status changed** trigger.
2. Add a condition on **New status** *is* **Resolved**, so the rest only runs on that transition.
3. On the condition's **True** output, add a **Post message** action: `Glad we could help, {customer.name}. This ticket will close on its own in 3 days if you have nothing to add.`
4. After it, add a **Schedule closure** action set to 3 days.
5. Save the workflow, then turn it on.

From then on, every ticket moved to *Resolved* gets the message and the scheduled closure, and each evaluation is recorded in the [run history](https://joely.io/documentation/automations/runs-and-quota.md).

## In this section

| Page | What it covers |
|------|----------------|
| [Triggers](https://joely.io/documentation/automations/triggers.md) | The four events a workflow can start from, and the data each one publishes |
| [Conditions](https://joely.io/documentation/automations/conditions.md) | Testable fields, operators, and how True/False branching works |
| [Actions](https://joely.io/documentation/automations/actions.md) | The ten actions, what each one does, and when it declines to |
| [Placeholders](https://joely.io/documentation/automations/placeholders.md) | The `{path}` tokens you can drop into messages, Discord embeds, and webhook bodies |
| [Building workflows](https://joely.io/documentation/automations/building-workflows.md) | Graph rules, branch order, drafts, and automations triggering each other |
| [Runs and quota](https://joely.io/documentation/automations/runs-and-quota.md) | Run history, the monthly run quota per plan, and the workflow cap |
