Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s
90 lines
3.4 KiB
Plaintext
90 lines
3.4 KiB
Plaintext
---
|
|
title: Use Branches in Workflows
|
|
description: Understand how branches work and how to control which path is executed.
|
|
---
|
|
|
|
## How Branches Work
|
|
|
|
In the workflow editor, you can create multiple paths (branches) going out from a single node. This allows you to build complex automations with different outcomes.
|
|
|
|
**Important**: When a workflow runs, **all branches execute in parallel by default**. There is no built-in "if/else" logic to choose one branch over another—every path will run simultaneously.
|
|
|
|
## Controlling Which Branch Runs
|
|
|
|
To execute only one branch based on specific conditions, **add a Filter node at the beginning of each branch**.
|
|
|
|
### Example Setup
|
|
|
|
1. Create your workflow with multiple branches from a single node
|
|
2. Add a **Filter** node as the first step in each branch
|
|
3. Set conditions on each Filter to determine when that branch should continue
|
|
4. Only the branch(es) whose Filter conditions are met will proceed
|
|
|
|
### How Filters Work
|
|
|
|
- If the Filter condition is **met**: The branch continues executing
|
|
- If the Filter condition is **not met**: The branch stops at the Filter node
|
|
|
|
This effectively creates conditional logic where only the appropriate branch runs based on your data.
|
|
|
|
## Example: Route by Deal Size
|
|
|
|
**Scenario**: When a deal is closed, send different notifications based on deal size.
|
|
|
|
1. **Trigger**: Opportunity updated (Stage = Closed Won)
|
|
2. **Branch 1**: Filter for Amount > $10,000 → Send Slack message to #big-deals
|
|
3. **Branch 2**: Filter for Amount ≤ $10,000 → Send email to sales manager
|
|
|
|
Both branches start, but only the one matching the deal amount will continue past its Filter.
|
|
|
|
## Creating Branches
|
|
|
|
<Note>
|
|
To create a new branch from an existing step, click the **+** button on the step and add your action. You can add multiple branches by clicking **+** multiple times.
|
|
</Note>
|
|
|
|
1. In the workflow editor, select the step you want to branch from
|
|
2. Click the **+** button to add an action
|
|
3. This creates one branch
|
|
4. Click **+** again on the same step to create additional branches
|
|
5. Each branch can have its own sequence of actions
|
|
|
|
## Merging Branches Back Together
|
|
|
|
After parallel branches complete their work, you can merge them back into a single path:
|
|
|
|
1. Complete your branched actions
|
|
2. Add a new step that should run after all branches
|
|
3. Drag a connection from the last step of each branch to this new step
|
|
4. The merged step waits for all connected branches to complete before executing
|
|
|
|
### Example: Process Then Notify
|
|
|
|
```
|
|
Trigger
|
|
│
|
|
├── Branch A: Update Customer Record
|
|
│
|
|
└── Branch B: Create Support Ticket
|
|
|
|
↘ ↙
|
|
|
|
Merged Step: Send Confirmation Email
|
|
```
|
|
|
|
The confirmation email is sent only after both the customer update and ticket creation are done.
|
|
|
|
## Best Practices
|
|
|
|
- Always use **Filter nodes** at the start of branches when you want conditional execution
|
|
- Keep branch conditions **mutually exclusive** to avoid duplicate actions
|
|
- Test your workflows with different data to ensure the correct branches run
|
|
- **Rename branch steps** descriptively so it's clear what each path does
|
|
- **Merge branches** when you need a final action after parallel processing
|
|
|
|
## Related
|
|
|
|
- [Workflows FAQ](/user-guide/workflows/how-tos/need-more-help/workflows-faq) — answers about parallel execution
|
|
- [Workflow Actions](/user-guide/workflows/capabilities/workflow-actions) — available actions for branches
|
|
|