---
title: "Use Case 11: Broadcast"
description: "Marketing broadcast via alias entry in the scenario, Broadcast template, and delayed delivery."
level: advanced
use_case: 11
prerequisites:
  - ../basic/use-case-02-menu-branching.md
  - ../concepts.md#broadcast-vs-scenario-entry
---

# Use Case 11: Broadcast

> **Before you start:** read [Broadcast vs scenario entry](/en/learn/implementer/training/concepts.md#broadcast-vs-scenario-entry). A connected **Telegram** channel is recommended for an E2E delivery test.

## Required permissions and access

| Module / setting | Why you need it |
|------------------|-----------------|
| **Scenario Builder** | Alias entry and MessageKeyboard in the scenario |
| **Broadcast** | Template, client selection, send |
| **Settings → Bots** | Channel (Telegram recommended) |
| **Runs / Chat preview** | Verify alias entry before sending |

## Business context

A marketing or service scenario: a mass broadcast with text, an image, and a URL button. The message is built in the scenario (alias entry), and the campaign is launched from the Broadcast module.

## Expected result

- Entry point with an **alias** in the scenario (Latin characters)
- MessageKeyboard: text, image URL, button with **URL** (`open-url`)
- Broadcast template → alias action = your alias
- Understanding the difference: **one-off broadcast** vs **subscribe**; `send_after` / `one_time`

## Architecture

```text
[Alias entry: training_broadcast_entry]
   → MessageKeyboard (text + image + URL button)
        → End / optionally follow-up

[Broadcast module]
   → Template (alias = training_broadcast_entry)
   → Clients → training bot → “now” or on a schedule
```

## Step-by-step implementation

### Step 1. Entry alias in the scenario

1. In Scenario Builder, add an **entry point** block (alias).
2. Set the alias in Latin characters, for example: `training_broadcast_entry`.
3. Connect the alias to MessageKeyboard.

| MessageKeyboard parameter | Value (example) |
|---------------------------|-----------------|
| Text | “Special offer! 10% off until the end of the week.” |
| Image | Public image URL (https://…) |
| Button | Text: “Details” · type: **open-url** · URL: `https://docs.connectiveone.io` |

**Edges:** after display — End or a short “Thank you”.

→ [Configure an alias for broadcast](/en/broadcast/how-to/configure-broadcast-alias.md)

**Self-check in Runs:** run the scenario via **alias entry** (not Start) — make sure the keyboard and URL appear in preview.

---

### Step 2. Broadcast template and send

1. **Broadcast** → create a template.
2. Field **Scenario alias action** = `training_broadcast_entry` (exact match with the scenario).
3. **Clients** tab → select **yourself** and the **training bot**.
4. Schedule the send or click “now”.

→ [Send a broadcast from clients](/en/broadcast/how-to/send-broadcast-from-clients.md)

| Check | Expectation |
|-------|-------------|
| Alias in the template = alias in the scenario | Otherwise entry is not found |
| Client subscribed to the bot + channel | Delivery in Telegram / widget |
| Runs after campaign create | success ≠ instant delivery (see step 4) |

---

### Step 3. Telegram vs Viber

| Channel | URL button | Note |
|---------|------------|------|
| **Telegram** | `open-url` | Happy path for training |
| **Viber** | `open-url` / `open-web-app` | Delivery errors possible — document in the result template |

If Viber does not deliver — simplify to text-only, check the button type, record the attempt locally (not an escalation).

→ [Connect Telegram](/en/channels/how-to/connect-telegram.md)

---

### Step 4. Subscribe, autobroadcast, and delayed delivery

| Pattern | Semantics | Self-check |
|---------|-----------|------------|
| **`action_broadcast__subscribe`** | Subscription to a **topic** for a series of campaigns | Do not confuse with the one-off broadcast in Use Case 11 |
| **Broadcast template + alias** | One-off / mass campaign from the Broadcast module | Main path of this Use Case |
| **`send_after`** | Delay before send (min/hours) | In Runs: create success ≠ instant delivery in the channel |
| **`one_time`** | One-time send by event | A repeated trigger does not duplicate the message |

After changing the bot or channel: check the alias entry and channel token in **Settings → Bots → Channels**.

→ [Actions reference — broadcast](/en/actionjail/reference/actions-reference.md)

---

### Step 5 (optional). MessageKeyboard with URL — native, without Action Jail

For a link button, **first** use a native URL in MessageKeyboard (`open-url`). Use Action Jail only if native does not cover your case.

## Troubleshooting

| Symptom | What to check |
|---------|----------------|
| Broadcast does not start | Alias in the template = alias in the scenario; bot and channel on the “Clients” tab |
| Button is not clickable | `open-url` for Telegram; HTML/plain mode |
| Preview OK, Telegram — no | Separate path: channel token, real client in the list |
| Duplicate messages | `one_time`; do not run the campaign twice for the same client without need |

## Self-check (Runs + channel)

- [ ] Alias entry exists; one alias — no duplicates
- [ ] Runs via alias: keyboard, image, URL button are correct
- [ ] Broadcast template points to the same alias
- [ ] You understand the difference between subscribe and a one-off broadcast
- [ ] (Optional) E2E Telegram: message received
- [ ] (Optional) Viber attempt documented in [results-template.md](/en/learn/implementer/training/results-template.md)

## Independent task

Compare two campaigns: **text-only** vs **text + image + URL button**. Record in the result template which channel you tested and what worked.

## Reference links

- [Broadcast vs scenario entry](/en/learn/implementer/training/concepts.md#broadcast-vs-scenario-entry)
- [Configure an alias for broadcast](/en/broadcast/how-to/configure-broadcast-alias.md)
- [Send a broadcast from clients](/en/broadcast/how-to/send-broadcast-from-clients.md)
- [MessageKeyboard parameters](/en/scenariobuilder/reference/message-keyboard-parameters.md)

**Next step (after the advanced level):** [Use Case 13: Capstone](/en/learn/implementer/training/capstone/use-case-13-integrated-bot.md)
