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

# Write content for each channel

> Fill in the email, SMS and push blocks of a campaign: senders, subject and body, the live SMS segment counter, and push data and delivery options.

export const Loop = ({id, src, alt, caption}) => {
  if (!src) {
    return <Placeholder id={id} kind="loop" label="Animation coming soon" description={alt} icon={<PlayIcon />} />;
  }
  return <figure className="brd-media" data-media-id={id}>
      <video className="brd-media-frame" src={src} autoPlay muted loop playsInline aria-label={alt} />
      {caption && <figcaption className="brd-media-caption">{caption}</figcaption>}
    </figure>;
};

export const Screenshot = ({id, src, srcDark, alt, caption}) => {
  if (!src) {
    return <Placeholder id={id} kind="screenshot" label="Screenshot coming soon" description={alt} icon={<ImageIcon />} />;
  }
  return <figure className="brd-media" data-media-id={id}>
      <img className="brd-media-frame block dark:hidden" src={src} alt={alt} />
      <img className="brd-media-frame hidden dark:block" src={srcDark || src} alt={alt} />
      {caption && <figcaption className="brd-media-caption">{caption}</figcaption>}
    </figure>;
};

Every channel you turn on in a campaign gets its own block in the **Content** section, stacked so
you can review all the copy in one scroll. This page covers every field in each block.

<Screenshot id="ss-campaigns-write-content-per-channel-hero" alt="The Content section with Email, SMS and Push blocks stacked one above the other" />

<Info>
  **Before you start:** select the campaign's channels in **Setup**. A block appears for each one.
  See [Create a campaign](/campaigns/create-a-campaign).
</Info>

## Email

| Field               | What to enter                                                                                                                                                                                                                                                            |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Sender identity** | Pick one of your saved sender identities. To type a sender name, address and reply-to address instead, select **Enter details manually**, and **Pick a saved identity** to go back. The address must be on a verified sending domain, or be your Brudcast trial address. |
| **Subject**         | Required. Use **Insert variable** to add a merge tag.                                                                                                                                                                                                                    |
| **Editor**          | **Visual builder** (drag-and-drop blocks) or **Rich text** (a text editor).                                                                                                                                                                                              |
| **Body**            | With the visual builder, select **Open builder**. Once the body is designed, the block shows a summary with **Preview** and **Edit body**. With rich text, type straight into the editor.                                                                                |
| **Preview text**    | Optional. The snippet mail apps show after the subject line. **Suggest with AI** writes one from your body.                                                                                                                                                              |

<Snippet file="managed-address-note.mdx" />

If you send from the trial address, its sender name and address are fixed, and the campaign must
use them as they are.

For building the body, see [Design an email with the builder](/templates/email-builder). If the
campaign's **Type** is **A/B Test**, the test settings appear at the top of this block. See
[Test two versions of an email](/campaigns/create-a-campaign#test-two-versions-of-an-email).

## SMS

| Field         | What to enter                                                                                                                                                                                                   |
| ------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Sender ID** | Pick one of your approved sender IDs. Once you pick one, a line underneath shows where it can send. If it isn't cleared anywhere yet, the line warns that the campaign won't send until the sender is approved. |
| **Message**   | Required. Keep it short: recipients see plain text. **Insert variable** adds a merge tag, and **Suggest with AI** offers a rewrite you can **Undo**.                                                            |

<Screenshot id="ss-campaigns-write-content-per-channel-01-sms" alt="The SMS block with a sender ID selected and the counter reading 148 characters, 1 segment billed" />

### The segment counter

Under the message, a live counter shows the character count and how many segments each message is
billed as. SMS is charged per segment, so this is what the message actually costs per recipient.

<Loop id="lp-campaigns-write-content-per-channel-sms-segments" alt="Typing past the single-segment limit changes the counter from 1 segment billed to 2 segments billed" />

A few things move the count:

* **"Reply STOP to opt out" is added to every campaign SMS**, and it counts toward the segments.
* **One character outside the GSM-7 set switches the whole message to Unicode**, and each segment
  holds far fewer characters. The counter notes when that happens.
* **Merge tags expand per recipient.** A long name can push one person's message into another
  segment.

| Encoding        | Used when                                          | One message    | Each segment of a longer message |
| --------------- | -------------------------------------------------- | -------------- | -------------------------------- |
| GSM-7           | Every character is in the GSM set                  | 160 characters | 153 characters                   |
| Unicode (UCS-2) | Any other character is present, such as most emoji | 70 characters  | 67 characters                    |

The characters `^ { } \ [ ~ ] | €` count as two each in GSM-7.

A campaign SMS can be up to **4 segments**. Past that, the counter turns red and asks you to
shorten the message. For writing tips, see [Writing SMS content](/channels/sms/writing-sms-content).

## Push

| Field                | What to enter                                                                                                                             |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Apps**             | Required. The push apps to send through. Only active apps can send.                                                                       |
| **Title**            | Required. A preview above the fields shows how the title and body look on a lock screen.                                                  |
| **Body**             | Required.                                                                                                                                 |
| **Image URL**        | Optional. An image to show with the notification.                                                                                         |
| **Click URL**        | Optional. Where tapping the notification leads.                                                                                           |
| **Data**             | Optional key and value pairs your app reads when the notification arrives. Recipients don't see them. Select **Add field** for each pair. |
| **Delivery options** | **Expires after** sets how long to keep trying a device that's offline. **Priority** is normal or high.                                   |

Data rules: up to 20 fields, keys up to 64 characters, values up to 1,024 characters. The keys
`from`, `notification` and `message_type`, and any key starting with `google.` or `gcm.`, are
reserved. Expiry can be up to 28 days. See [Push overview](/channels/push/overview).

## WhatsApp

<Snippet file="early-access.mdx" />

The WhatsApp block appears only for organizations with early access. It uses a message template
that Meta has already approved, rather than free-form text. See
[WhatsApp overview](/channels/whatsapp/overview).

## One campaign, several channels

The channels you turn on run side by side and don't wait for each other. For each channel, Brudcast
works out who in the audience can be reached there and sends that channel's message to them. A
contact with an email address and a phone number gets both the email and the SMS; there's no
fallback order in which one channel waits to see whether another worked.

| Channel | A contact is reachable when they have                              | The campaign needs                                      |
| ------- | ------------------------------------------------------------------ | ------------------------------------------------------- |
| Email   | An email address that's verified or unverified and not suppressed  | A verified sending domain or the Brudcast trial address |
| SMS     | A phone number that's verified or unverified that hasn't opted out | An approved sender ID                                   |
| Push    | An active device registered with one of the campaign's push apps   | An active push app                                      |

A campaign sends as long as at least one of its channels can reach someone. A channel that reaches
nobody sends nothing, and the others go ahead.

Two kinds of total come out of this, and they answer different questions. **Recipient totals** count
each person once, however many channels reached them. **Channel totals** count messages, so a person
who got an email and an SMS appears in both rows. That's why the channel rows never add up to the
recipient total. See [Campaign results](/campaigns/results).

Credits for every channel are reserved together, in one step, when the campaign starts sending. If
the wallet can't cover the whole send, nothing is reserved and nothing goes out, so a campaign never
starts on one channel and then stalls because another was short.

## Merge tags on every channel

Every **Insert variable** menu lists the built-in contact fields (**First name**, **Last name**,
**Full name**, **Email address** and **Unsubscribe link**) and your custom fields. Pick one to
insert it where your cursor is, for example `{{first_name}}`.

If you type a tag that doesn't match a contact field or custom field, a warning appears at the top
of the **Content** section. It says the tag sends as empty text, and suggests inserting a variable
from the picker or adding the field under **Contacts**. See
[Placeholders and merge tags](/templates/placeholders-and-merge-tags).

## Related

<Columns cols={2}>
  <Card title="Email builder" icon="panels-top-left" href="/templates/email-builder">
    Design the email body with blocks.
  </Card>

  <Card title="Writing SMS content" icon="message-square" href="/channels/sms/writing-sms-content">
    Segments, encoding and the opt-out footer.
  </Card>

  <Card title="Credits and wallet" icon="coins" href="/billing/credits-and-wallet">
    What a message costs on each channel.
  </Card>

  <Card title="The send checklist" icon="list-checks" href="/campaigns/send-checklist">
    What each channel needs before it can send.
  </Card>
</Columns>
