---
title: "Use Case 13: Capstone — integrated bot"
description: "Capstone project: one training bot with a menu — operator, ticket, FAQ, or Custom Data."
level: capstone
use_case: 13
prerequisites:
  - ../basic/use-case-01-faq-ai.md
  - ../basic/use-case-03-handoff-to-operator.md
  - ../basic/use-case-07-custom-data.md
  - ../basic/use-case-09-scenario-audit.md
  - ./../advanced/use-case-10-tickets-categorizer.md
  - ./../advanced/use-case-11-broadcast.md
---

# Use Case 13: Capstone — integrated bot

> **Goal:** one training bot combines the skills of customer onboarding **without Copilot** — a typical MVP for a customer. Completion is a **self-check**, with no mentor hand-off.

## Required permissions and access

| Module / setting | Why you need it |
|------------------|-----------------|
| **Scenario Builder** | Main menu and three flow branches |
| **Fast Line Pro** | FAQ branch (Use Case 1) |
| **Settings → Operator Panel** | Connect branch (Use Case 3) |
| **Settings → Tickets** | Ticket branch (Use Case 10) |
| **Custom Data** | Optional third branch instead of FAQ (Use Case 7) |
| **Runs / Chat preview** | Self-check of all branches |

## Business context

The customer gets a single bot entry with a main menu: ask an AI question, contact an operator, or submit a formal request (ticket or complaint to a database). This checks that you can assemble a working MVP for a customer without external guidance.

## Expected result

```text
MessageKeyboard (main menu)
├─ "Operator" → Use Case 3 flow
├─ "Complaint" / "Ticket" → Use Case 10 flow
└─ "FAQ" → Use Case 1 flow
   (or "Complaint to database" → Use Case 7 flow)
```

**No Copilot** in the minimal capstone — for Copilot see [Use Case 12](/en/learn/implementer/training/optional/use-case-12-copilot-cd-lookup.md) (optional).

## Architecture

```text
Start → MessageKeyboard (main menu)
   ├─ operator    → [section / subgraph Use Case 3]
   ├─ ticket      → [section / subgraph Use Case 10]
   └─ faq         → [section / subgraph Use Case 1]
        (or complaint → Use Case 7)

Each branch: return to menu or End after completion
```

## Step-by-step implementation

### Step 0. Prepare in the existing training bot

Use the **same** training bot where you completed Use Case 1–11. Do not create a new bot — import or copy already verified scenario fragments.

Make sure the following work from previous Use Cases:

| Use Case | Minimum for capstone |
|----------|----------------------|
| [Use Case 1](/en/learn/implementer/training/basic/use-case-01-faq-ai.md) | Fast Line Pro + fallback edge |
| [Use Case 3](/en/learn/implementer/training/basic/use-case-03-handoff-to-operator.md) | connect: success / limit / error |
| [Use Case 10](/en/learn/implementer/training/advanced/use-case-10-tickets-categorizer.md) | create: success / error, `ticket_id` |
| [Use Case 7](/en/learn/implementer/training/basic/use-case-07-custom-data.md) | *(optional)* write to CD + id in Runs |
| [Use Case 9](/en/learn/implementer/training/basic/use-case-09-scenario-audit.md) | method to audit unconnected edges |

---

### Step 1. Main menu

**Node:** MessageKeyboard after Start.

| Button | Payload | Leads to |
|--------|---------|----------|
| “Operator” | `menu_operator` | Connect flow |
| “Submit a request” | `menu_ticket` | Ticket + categorizer flow |
| “FAQ” | `menu_faq` | FAQ flow |
| *(optional)* “Complaint to database” | `menu_complaint` | Custom Data flow |

| Parameter | Recommendation |
|-----------|----------------|
| Output Variable | `main_menu_choice` (optional) |
| Default edge | “Please choose a main menu item.” |

**Edges:** each button → a **separate** entry into the matching section or subgraph.

---

### Step 2. Sections or subgraphs

It is recommended to put each branch into a **separate scenario section**:

| Section (example) | Contents |
|-------------------|----------|
| `sec_operator` | “Talk to an operator” button → `operator_panel__connect_to_operator_with_msg` |
| `sec_ticket` | Full Use Case 10 flow |
| `sec_faq` | FAQ greeting → WaitForInput → `action_fastline_pro` |
| `sec_complaint` | Use Case 7 flow (if chosen instead of FAQ) |

After a branch finishes — MessageKeyboard “Back to menu” → edge to the main menu.

---

### Step 3. Required edges on critical nodes

Check using the [Use Case 9](/en/learn/implementer/training/basic/use-case-09-scenario-audit.md) method:

| Node | Minimum edges |
|------|---------------|
| `action_fastline_pro` (FAQ) | reply + **fallback** |
| `operator_panel__connect_to_operator_with_msg` | **success** + **limit** + **error** |
| `action_tickets_create` | **success** + **error** |
| `action_fastline_pro` (categorizer) | main + **fallback** |
| Main menu | each button + **default** |

On edge **`limit`** there must be **your** waiting message to the customer — not silence.

---

### Step 4. Self-check in Runs (full pass)

Run **three separate Runs** (or one Run with sequential returns to the menu):

| # | Scenario | What to check in Runs |
|---|----------|------------------------|
| 1 | FAQ: question from the knowledge base | `ai_answer`; fallback on an unknown question |
| 2 | Operator: connect | success edge or **limit** with text to the customer |
| 3 | Ticket: description → categorizer → create | `ticket_id` in constants; error edge tested |

If the third branch is Custom Data: complaint id in Runs/constants.

---

### Step 5. Document the data flow

Fill in the **Use Case 13** section in [results-template.md](/en/learn/implementer/training/results-template.md):

- Text data flow (3–5 sentences per branch)
- Which `subject_alias` values were used
- One example root cause you found through Runs during assembly

## Completion criteria (self-check)

- [ ] **3 menu branches** work in Runs
- [ ] Fast Line Pro fallback **does not leave silence**
- [ ] Connect has a message on edge **`limit`**
- [ ] Ticket or CD: `ticket_id` / complaint id in Runs/constants
- [ ] Use Case 9 audit: **0 unconnected edges** on critical nodes
- [ ] (Optional) CSAT branch [Use Case 7b](/en/learn/implementer/training/basic/use-case-07b-csat-nps.md) tested in Runs
- [ ] Data flow described in the result template

## Troubleshooting

| Symptom | What to check |
|---------|----------------|
| Branch “hangs” afterward | End vs return to menu; unconnected edge |
| FAQ works alone, not from the menu | Main menu payload edge → correct section |
| Ticket without `ticket_id` | Use Case 10 success edge; subject_alias |
| Operator — silence on limit | limit edge connected → MessageKeyboard |

→ [When it is not the scenario](/en/learn/implementer/training/reference/when-not-scenario.md)

## Independent task

Extend the capstone with **one** optional module of your choice:

- [Priority segment](/en/learn/implementer/training/optional/use-case-priority-segment.md) — different `subject_alias` in connect
- Deeplink + registered users ([Use Case 6](/en/learn/implementer/training/basic/use-case-06-registered-users.md))
- [Use Case 12: Copilot](/en/learn/implementer/training/optional/use-case-12-copilot-cd-lookup.md)

## Reference links

- [Integrator overview](/en/learn/implementer/implementer-overview.md)
- [Test a scenario](/en/scenariobuilder/how-to/test-scenario.md)
- [Edge-driven flow](/en/learn/implementer/training/concepts.md#edge-driven-flow)
- [Results template](/en/learn/implementer/training/results-template.md)

**Optional next:** [Use Case 12](/en/learn/implementer/training/optional/use-case-12-copilot-cd-lookup.md) · [Advanced Fast Line Pro](/en/learn/implementer/training/optional/use-case-advanced-fastline.md)
