# Branches and fallbacks

Design clear decisions, handle failures, and keep workflows useful when inputs or services do not behave as expected.

## Read the branch labels

Branches describe possible outcomes, such as Yes/No, a selected answer, Success/Error, or Timeout. Their meaning comes from the node’s logic and configuration. Connect the branch that matches the outcome, rather than choosing by position alone.

**Check condition** makes a logical decision. **Ask Multiple Choice Question** routes based on an answer. Other router and selector nodes provide different ways to choose a path; use their inspector labels to understand the behavior.

The [detailed Check condition guide](/nodes/if-statement/) covers **As Text**, **As Number**, **Ignore case**, AND/OR groups, nested rules, variable comparisons, and testing thresholds. **No** is a valid non-match; invalid numeric input is an execution failure, not the same outcome.

## Design the unhappy path

For every external action, ask what should happen if the connection expires, the resource is missing, the input is empty, or a result does not arrive.

A useful fallback might explain the issue, ask for a missing value, store a request for later attention, or direct the team to follow up. Keep customer-facing wording concise and avoid exposing raw provider errors.

## A practical support menu

```text
New Chat Created
  └─ Ask Multiple Choice Question: “How can we help?”
       ├─ Sales   → Send Text Message: sales guidance
       └─ Support → Send Text Message: support guidance
```

The [support menu recipe](/recipes/support-menu/) includes a visual diagram and complete importable JSON for this pattern.

## Avoid repeated side effects

After an interrupted send or write, inspect the destination before retrying. A timeout does not prove that an external service did nothing. Where the service supports it, use a stable business identifier to recognize an already-created record.

Avoid loops that repeatedly send a message, write a record, or change a status without a clear stopping condition.

## Special cases

- A [paused multi-branch node](/workflows/pause-nodes/) continues down the first branch without evaluating its decision.
- A [ChatGPT Task](/ai/chatgpt-tasks/) needs both Error and Timeout paths before activation.
- A [Database Operation](/data/database-workflows/) that writes into its watched table needs a condition to prevent a self-triggering cycle.

## Test every meaningful outcome

Use a normal input, a missing or invalid input, and a deliberately unavailable result. Check the actual path in Workflow Activity. An attractive canvas is useful only when its connected outcomes do the work you expect.
