> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brilo.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Choose when each step runs

> Set the trigger and delay on a Brilo campaign step so it only runs for the right people, branching on whether the call reached a person, hit voicemail, or failed to connect.

Every step in a campaign has two settings that decide who gets it and when: **When to execute this step**
and the condition it runs on. Getting these right is what separates a sequence that feels considered from
one that sends everybody everything.

## Before you start

* A campaign with at least two steps. See [Build a sequence](/campaigns/build-a-sequence).
* Five minutes per step.
* You will be working in the step settings on the campaign's **Overview** tab.

## Steps

<Steps>
  <Step title="Open the step">
    Open the campaign, go to **Overview**, and click the step you want to change.
  </Step>

  <Step title="Choose immediate or delayed">
    Under **When to execute this step**, pick one:

    * **Immediately.** For the first step this means as soon as the contact is added to the campaign. For
      any later step it means as soon as the previous step completes.
    * **After a delay.** Enter a number and choose minutes, hours, or days. The default is 30 minutes.

    Delays run from the previous step, not from a fixed timetable, so a contact added on Friday and one
    added on Monday each get their own clock.
  </Step>

  <Step title="Choose what it matches on">
    Under **Match by**, pick **Call outcome** or **Custom rule**.

    **Call outcome** is the one to use nearly always. It is reliable, it is instant, and it covers the
    three things that actually happen on an outbound call.
  </Step>

  <Step title="Pick the outcomes it runs on">
    With **Call outcome** selected, tick which results should trigger this step:

    | Outcome                   | What it means                             |
    | ------------------------- | ----------------------------------------- |
    | **Reached a person**      | Somebody answered and spoke to your agent |
    | **Went to voicemail**     | An answering machine picked up            |
    | **Couldn't be connected** | No answer, busy, or the number failed     |

    Tick more than one where it makes sense. A follow up text usually wants both **Went to voicemail** and
    **Couldn't be connected**.
  </Step>

  <Step title="Or write a custom condition">
    **Custom rule** lets you describe the situation in plain language, and Brilo reads the conversation to
    decide. It only runs on calls a person answered, since there is no conversation to read otherwise.

    Use it for things an outcome cannot express, such as "the caller asked for a quote by email".
  </Step>

  <Step title="Test it with one contact">
    Add one contact and follow them through. A trigger you have not watched fire is a guess. See
    [Track a contact through a campaign](/campaigns/track-a-contact).
  </Step>
</Steps>

## You will know it worked when

A test contact who answers the call takes one branch, and a test contact who does not answer takes the
other. Both branches, checked, on real calls.

## Outcomes on message steps

Text steps produce their own results, so a step following a text can branch on those instead:

| Outcome              | What it means                                                               |
| -------------------- | --------------------------------------------------------------------------- |
| **Message sent**     | The message was accepted for delivery                                       |
| **Message failed**   | Delivery was rejected, usually a bad number or a blocked handset            |
| **Message not sent** | The step did not send, for example because the contact had no mobile number |

A call step following a text usually wants **Message sent**, so you only ring the people who received it.

## Call outcome or custom rule?

|          | Call outcome       | Custom rule                 |
| -------- | ------------------ | --------------------------- |
| Runs on  | Every call         | Answered calls only         |
| Based on | How the call ended | What was said               |
| Speed    | Immediate          | Needs the conversation read |
| Use for  | Did we reach them  | What did they want          |

The mistake worth avoiding: using a custom rule to express something an outcome already covers. "The
person did not pick up" is an outcome, not a rule, and writing it as a rule means it never fires because
there was no conversation to read.

## Delays that behave

* **Minutes** for anything that should feel connected to the call, like a text with a link. Five to
  fifteen minutes.
* **Hours** for a follow up on the same day. One hour is the sensible floor after a call, so the message
  does not land while their phone is still ringing.
* **Days** for another attempt at reaching somebody. One to three days.

Delays stack rather than running in parallel, so a sequence of 1 hour, 2 days, and 3 days finishes about
five days after the contact was added.

## What else you can do here

* Set an exit rule so the sequence ends for people who are clearly not interested, rather than relying on
  running out of steps. See [Stop calling a contact](/campaigns/stop-calling-a-contact).
* Keep steps inside sensible hours, which the calling window does regardless of your delays. See
  [Choose when calls go out](/campaigns/choose-when-calls-go-out).
* Have the step's content change per contact, rather than the timing. See
  [Add your own contact fields](/contacts/add-your-own-contact-fields).

## If it did not work

**The step never runs.** Its condition does not match what your contacts actually got. Look at real
outcomes on the **Contacts** tab before changing the condition, because the fix is usually to tick a
second outcome rather than to rewrite anything.

**A custom rule never fires.** Either the calls are not being answered, so there is no conversation to
read, or the rule describes something that is not discussed on the call. Check a transcript and quote
what was actually said.

**The step ran for everybody.** No outcome was ticked, so nothing filtered it.

**A step ran too soon.** The delay is set in minutes when you meant hours. It is an easy misread and the
default is 30 minutes.

**Steps overtake each other.** Delays run from the previous step. A long delay on step two and a short one
on step three does not keep them in order the way a fixed schedule would.

**A message step is skipped for some contacts.** They have no mobile number or no email address on the
contact record. That shows as **Message not sent**.

## FAQ

<AccordionGroup>
  <Accordion title="How do I text only the people who did not answer my call?">
    Open the text step, set **Match by** to **Call outcome**, and tick **Went to voicemail** and
    **Couldn't be connected**. People who answered skip the step entirely.
  </Accordion>

  <Accordion title="What is the difference between call outcome and a custom rule?">
    A call outcome is how the call ended, and it is available on every call. A custom rule is a plain
    language condition Brilo checks by reading the conversation, so it only works on calls somebody
    answered. Use outcomes for reach, rules for intent.
  </Accordion>

  <Accordion title="Can a campaign step run based on what the caller said?">
    Yes, with **Custom rule**. Describe the situation, for example "the person asked for a quote by
    email", and Brilo reads the answered conversation to decide. It does not run on unanswered calls.
  </Accordion>

  <Accordion title="How long can I delay a campaign step?">
    Enter any number and choose minutes, hours, or days. The default is 30 minutes. Delays count from the
    previous step completing, not from when the contact was added.
  </Accordion>

  <Accordion title="What does immediately mean on the first step?">
    As soon as the contact is added to the campaign, subject to your calling hours and daily cap. On any
    later step it means as soon as the previous step finishes.
  </Accordion>

  <Accordion title="Why did a step run out of order?">
    Because delays are relative to the previous step rather than absolute. A short delay later in the
    sequence can catch up with a long one earlier in it.
  </Accordion>

  <Accordion title="Can I branch on whether a text was delivered?">
    Yes. Steps following a message step can run on **Message sent**, **Message failed**, or **Message not
    sent**, so you can call only the people whose text actually went through.
  </Accordion>
</AccordionGroup>

## Related

* [Build a sequence](/campaigns/build-a-sequence) for sequences that work
* [Track a contact through a campaign](/campaigns/track-a-contact) to watch a trigger fire
* [Stop calling a contact](/campaigns/stop-calling-a-contact) for ending the sequence properly
* [Choose when calls go out](/campaigns/choose-when-calls-go-out) for the hours that override delays
* [Add a text message step](/campaigns/text-message-step) for the most common branch
