---
title: "Use Case 10: Тікет з бота + categorizer"
description: "Клієнт подає звернення з бота; AI визначає тип; action_tickets_create повертає ticket_id у Runs."
level: advanced
use_case: 10
prerequisites:
  - ../basic/use-case-01-faq-ai.md
  - ../basic/use-case-02-menu-branching.md
  - ../concepts.md#categorizer-pattern
---

# Use Case 10: Тікет з бота + categorizer

> **Перед стартом:** прочитайте [Categorizer pattern](/uk/learn/implementer/training/concepts.md#categorizer-pattern). Виконуйте в **навчальному боті** після базового рівня (Use Case 1–9).

## Необхідні права та доступ

| Модуль / налаштування | Навіщо |
|------------------------|--------|
| **Scenario Builder** | Збірка flow з categorizer і create-тікета |
| **Fast Line Pro** | Categorizer-агент (тип «Чат-бот») |
| **Settings → Tickets** | Теми тікетів і `subject_alias` |
| **Settings → Bots** | Канал для тесту (preview або Telegram) |
| **Runs / Chat preview** | Self-check: `ticket_id`, edges success/error |

Якщо розділу **Settings → Tickets** немає в меню — перевірте права облікового запису або зверніться до того, хто керує доступами у вашій організації / до підтримки ConnectiveOne.

## Бізнес-контекст

Клієнт описує проблему вільним текстом у боті. Система має автоматично визначити тип звернення, зібрати обов'язкові поля та створити тікет у ConnectiveOne. Номер тікета має бути доступний у Runs для подальшої перевірки.

## Очікуваний результат

- Форма збору: тема, опис, пріоритет
- Categorizer → змінна категорії → `subject_alias` через **Router** / **`switch`**
- `action_tickets_create` → edges **`success`** і **`error`**
- Клієнт отримує підтвердження з номером тікета
- **`ticket_id`** збережено у Runs/constants після success

## Архітектура

```text
MessageKeyboard («Подати скаргу») → WaitForInput (тема, опис, пріоритет)
   → action_fastline_pro (categorizer) → Router за категорією
   → action_tickets_create
      ├─ success → «Тікет створено: {{ticket_id}}»
      └─ error → «Не вдалося створити» + retry або завершення
```

## Покрокова реалізація

### Крок 0. Теми тікетів у Settings

> **Зв'язок з іншими налаштуваннями:** `subject_alias` і custom fields тікета мають відповідати темам у **Settings → Налаштування Тікетів**. Детальніше: [налаштувати тікети](/uk/settings/how-to/configure-tickets.md).

Створіть (або використайте) теми з alias для навчання:

| Alias (приклад) | Призначення |
|-----------------|-------------|
| `training_payment` | Проблеми з оплатою |
| `training_delivery` | Проблеми з доставкою |
| `training_damage` | Пошкоджений товар |
| `training_order` | Неправильне замовлення |

Запишіть alias — вони потрібні в Router на кроці 5.

---

### Крок 1. Fast Line Pro — categorizer

1. **Fast Line Pro** → створіть агента типу **Чат-бот** (наприклад, «Training Ticket Categorizer»).
2. У prompt вставте текст з файлу [categorizer-training.txt](/content/uk/learn/implementer/training/scenarios/prompts/categorizer-training.txt) — секція **Use Case 10 (тікети)**.
3. Перевірте в **Тестування агента**: вхід «не прийшла оплата» → вихід `payment`.

**Що робить categorizer:** перетворює вільний опис на одну категорію (`payment`, `delivery`, `damage`, `order`, `other`).

| Параметр Fast Line Pro | Значення |
|------------------------|----------|
| Тип | **Чат-бот** (не Agent) |
| Prompt | [categorizer-training.txt](/content/uk/learn/implementer/training/scenarios/prompts/categorizer-training.txt) |
| Вихід у сценарії | змінна `ticket_category` |

→ [Fast Line Pro action](/uk/fastlinepro/how-to/use-action-fastline-pro.md)

---

### Крок 2. MessageKeyboard — вхід у flow

| Параметр | Значення |
|----------|----------|
| Текст | «Хочете подати звернення?» |
| Кнопка | «Подати скаргу» · payload `ticket_start` |
| Тип клавіатури | inline |

**Edges:** кнопка → перша нода WaitForInput (тема).

---

### Крок 3. WaitForInput — збір полів

Виконайте **три** ноди послідовно (або одну з кількома полями, якщо ваш інстанс підтримує):

| Нода | messageText | outputVariable |
|------|-------------|----------------|
| 1 | «Коротко опишіть тему звернення» | `ticket_title` |
| 2 | «Детальний опис проблеми» | `ticket_description` |
| 3 | «Пріоритет: low / normal / high» | `ticket_priority` |

Validation: `none` на навчанні (або обмежте пріоритет списком, якщо потрібно).

**Edges:** останній WaitForInput → Action categorizer.

---

### Крок 4. Action — `action_fastline_pro` (categorizer)

| node_params | Значення | Навіщо |
|-------------|----------|--------|
| `agent_name` | `Training Ticket Categorizer` | Ім'я з Fast Line Pro |
| `user_input` | `{{ticket_description}}` | Текст для класифікації |
| `save_response` | `ticket_category` | Категорія для Router |

**Edges (обов'язково):**

| Edge | Куди |
|------|------|
| Основний вихід | Router (мапінг alias) |
| **fallback** | MessageKeyboard: «Не вдалося визначити тип. Спробуйте переформулювати опис.» |

---

### Крок 5. Router — мапінг категорії на `subject_alias`

**Нода:** Router (`action_router`), режим `first_match` + **default branch**.

| Правило | `subject_alias` |
|---------|-----------------|
| `ticket_category` equals `payment` | `training_payment` |
| equals `delivery` | `training_delivery` |
| equals `damage` | `training_damage` |
| equals `order` | `training_order` |
| **Default** | `training_order` (або окрема тема «інше») |

Після Router — Set `subject_alias` (якщо потрібно) або одразу `action_tickets_create`.

**Альтернатива:** Action **`switch`** з тими самими умовами.

---

### Крок 6. Action — `action_tickets_create`

| node_params | Значення | Навіщо |
|-------------|----------|--------|
| `subject_alias` | `{{subject_alias}}` | Тема тікета з Settings |
| `ticket_description` | `{{ticket_description}}` | Опис (v2 API, якщо доступно) |
| `additional_fields` | title, пріоритет за docs теми | Custom fields теми |

> На нових інстансах може бути `action_tickets_create_v2` — перевірте Node Inspector; контракт аналогічний.

**Edges (обов'язково):**

| Edge | Куди | Навіщо |
|------|------|--------|
| **`success`** | MessageKeyboard: «Тікет створено. Номер: {{ticket_id}}» | Клієнт бачить результат |
| **`error`** | MessageKeyboard: «Не вдалося створити тікет. Перевірте дані або спробуйте пізніше.» | Без error edge — тиша |

→ [Довідник actions — tickets](/uk/actionjail/reference/actions-reference.md)

---

## Troubleshooting у сценарії

| Симптом | Що перевірити |
|---------|----------------|
| Edge **`error`** після create | `subject_alias` існує в Settings; custom fields теми; v1 vs v2 action |
| Немає `ticket_id` у Runs | Edge success підключений; action зберігає id у constants |
| Categorizer повертає «зайве» | Prompt — лише одне слово категорії; перевірте Fast Line Pro окремо |
| «Залипання» chat_room_id | Параметри create: не перевикористовуйте старий room без логіки; порівняйте новий Run vs той самий діалог |

Детальніше: [Edge-driven flow](/uk/learn/implementer/training/concepts.md#edge-driven-flow) · [Коли не сценарій](/uk/learn/implementer/training/reference/when-not-scenario.md)

## Self-check (Runs)

Перед переходом до [Use Case 11](/uk/learn/implementer/training/advanced/use-case-11-broadcast.md) переконайтеся:

- [ ] Три поля зібрані; у trace видно `ticket_title`, `ticket_description`, `ticket_priority`
- [ ] Categorizer: опис «картка не працює» → `damage` (або ваша категорія)
- [ ] Router → правильний `subject_alias` у constants
- [ ] Edge **`success`**: `ticket_id` присутній у Runs/constants
- [ ] Edge **`error`**: клієнт отримує повідомлення (симулюйте невалідний alias для тесту, потім поверніть коректний)
- [ ] Fallback categorizer не залишає клієнта без відповіді

Зафіксуйте результат у [results-template.md](/uk/learn/implementer/training/results-template.md).

## Самостійне завдання

Додайте правило: якщо categorizer повернув `payment`, автоматично встановлюйте `ticket_priority` = `high` перед create (через Set або окрему гілку Router).

## Довідкові посилання

- [Categorizer pattern](/uk/learn/implementer/training/concepts.md#categorizer-pattern)
- [Categorizer prompt](/content/uk/learn/implementer/training/scenarios/prompts/categorizer-training.txt)
- [Налаштувати тікети](/uk/settings/how-to/configure-tickets.md)
- [Тест сценарію](/uk/scenariobuilder/how-to/test-scenario.md)
- [Built-in actions](/uk/scenariobuilder/reference/standard-built-in-actions.md)

**Наступний крок:** [Use Case 11: Broadcast](/uk/learn/implementer/training/advanced/use-case-11-broadcast.md)
