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

# Voice broadcasting

> Play a message to whoever answers. No agent, so nobody is ever left holding.

export const Unverified = ({what, detail}) => <Warning>
    <strong>Not yet verified on a live call.</strong> {what} is built and covered
    by tests, but {detail} FireTone's engineering tracker records this as an open
    check rather than a passing one. Treat what follows as the design, and expect
    rough edges the first time you run it.
  </Warning>;

A broadcast dials a list and delivers a message. There is no agent involved,
which is the whole point: it opens as many lines as its ceiling allows, because
there is nobody to wait for.

<img src="https://mintlify.s3.us-west-1.amazonaws.com/firetone/images/campaigns-broadcast-list.png" alt="Voice broadcasting" />

## The four steps

Creating one walks four decisions, and each changes what the next means.

<Steps>
  <Step title="Voice — what the call says">
    Three sources:

    * **A recording.** Something somebody made and has listened to.
    * **Write it, a voice reads it out.** Text-to-speech, spoken once and cached.
    * **Write it, an AI delivers it.** An [agent profile](/tenant/ai/virtual-agents)
      rephrases it in its own manner and voice — it reads dates and account
      numbers the way a person does rather than reciting them.

          <img src="https://mintlify.s3.us-west-1.amazonaws.com/firetone/images/wizard-step1-voice.png" alt="Choosing what the call says" />
  </Step>

  <Step title="List — who to call">
    A [segment](/tenant/outbound/segments), or a CSV upload. Either way you see
    the list before you continue: a segment's first rows and its total, or the
    file parsed into a table.
  </Step>

  <Step title="Channels">
    How many calls run at once. For a broadcast this is the *whole* of its
    pacing — there are no agents to wait for, so it opens to this ceiling.

    <Warning>
      The node allows a limited number of new calls per second in total, shared
      with everything arriving inbound. A broadcast set very wide competes with
      your own incoming callers.
    </Warning>
  </Step>

  <Step title="Start">
    Now, or at a date and time. Plus the daily hours it may dial in — it never
    calls outside them, whatever else is set.

    A broadcast can also run a **workflow** after the message, so somebody who
    needs to respond can press a key. Everyone who hears the message enters it,
    so leave it empty unless you mean that.
  </Step>
</Steps>

## Personalising the message

A written message can carry fields from each contact's own row:

```
Hello {{name}}, your policy {{account}} is due for renewal on {{renewal_date}}.
```

The fields are the columns your CSV had. Press **Hear it** to have it spoken
with a real contact from your list — a template that reads perfectly on screen
and fails against your actual file is exactly what that button is for.

<Warning>
  **A contact missing a field is not called.** They are skipped, and the call
  sheet records which field was missing. A sentence with a hole in it would go
  to everybody whose row was short a column, sound broken to each of them, and
  leave nothing saying which calls were affected. An empty cell counts as
  missing for the same reason.
</Warning>

If the message names a column **nobody** has, the campaign refuses to start and
says so — otherwise it would skip every contact one at a time and look like a
dialler doing nothing.

## Answering machines

FireTone waits briefly for a voicemail beep before it starts talking, because a
message played over a greeting is a message nobody hears. No beep is the
ordinary case — a person picked up — so it does not wait long.

The call sheet distinguishes `message_played` from `message_left_on_machine`.

<Unverified what="The broadcast call path — playback, the beep window, and per-contact audio generated at answer" detail="no broadcast has yet run through the switch on this installation." />
