---
title: "Use Case 7: Скарга в Custom Data"
description: "Модель complaints, custom_modules__set, підтвердження номером скарги, edges success і error."
---

# Use Case 7: Скарга в Custom Data

**Рівень:** базовий · **Модулі:** Scenario Builder, Custom Data · **Action:** `custom_modules__set`

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

| Що потрібно | Де в меню | Навіщо |
|-------------|-----------|--------|
| **Scenario Builder** | Меню → Scenario Builder | Збір тексту/телефону, запис у CD |
| **Custom Data** | Меню → Custom Data | Модель `complaints` |

Якщо розділу немає в меню — перевірте права облікового запису або зверніться до підтримки ConnectiveOne.

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

Клієнт залишає скаргу — запис потрапляє у таблицю Custom Data з ID для підтвердження («Ваша скарга №…»). Це патерн для будь-яких форм: заявки, звернення, feedback без CSAT.

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

- Модель Custom Data `complaints` (поля `text`, `phone`, `status`).
- `custom_modules__set` створює запис; ID доступний для підтвердження клієнту (`{{complaint:id}}`).
- Edges **success** / **error** оброблені — немає тиші.

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

```text
MessageKeyboard («Залишити скаргу») → WaitForInput (text) → WaitForInput (phone)
   → custom_modules__set
      ├─ success → «Скаргу №{{complaint:id}} прийнято»
      └─ error → «Не вдалося зберегти»
```

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

### Крок 0. Custom Data — модель

Custom Data → **Нова модель**:

| Поле | Тип | Alias / ім'я |
|------|-----|---------------|
| Текст скарги | text | `text` |
| Телефон | phone | `phone` |
| Статус | text або select | `status` (default `new`) |

**Alias моделі:** `complaints` — має **точно** збігатися з `module_name` у action (регістр важливий).

---

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

| Параметр | Значення |
|----------|----------|
| Текст | «Хочете залишити скаргу?» |
| Кнопка | «Так» · `complaint_yes` |

**Edges:** → WaitForInput (текст скарги).

---

### Крок 2. WaitForInput — текст і телефон

**Нода 1 — текст**

| Параметр | Значення | Навіщо |
|----------|----------|--------|
| messageText | «Опишіть скаргу» | |
| outputVariable | `complaints:text` | Формат **`module:field`** для `custom_modules__set` |
| Validation | `none` або min символи | |

**Нода 2 — телефон**

| outputVariable | `complaints:phone` |
| Validation | `phone` |

**Edges:** ланцюжок → Action set.

---

### Крок 3. Action — `custom_modules__set`

**Що робить:** створює **новий** рядок у таблиці `complaints` з constants `complaints:*`.

| node_params | Значення | Навіщо |
|-------------|----------|--------|
| `module_name` | `complaints` | Alias моделі в Custom Data |
| `set_to` | `complaint` | Об'єкт запису → `{{complaint:id}}`, `{{complaint:text}}` … |

Додатково можна задати `complaints:status` = `new` через ноду **Set** або попередній WaitForInput.

**Edges:**

| Edge | Куди | Навіщо |
|------|------|--------|
| **success** | MessageKeyboard «Дякуємо! Номер скарги: **{{complaint:id}}**» | Клієнт має reference |
| **error** | «Не вдалося зберегти скаргу» | Перевірити alias моделі та поля |

---

### Крок 4. Перевірка

1. Custom Data → модуль `complaints` — з'явився новий рядок.
2. Runs → після success constants містять `complaint` з `id`.

## Критерії приймання (self-check Runs)

- [ ] Після success клієнт бачить номер скарги `{{complaint:id}}`.
- [ ] У Custom Data з'явився новий рядок з текстом і телефоном.
- [ ] Edges **success** і **error** підключені на полотні.
- [ ] `module_name` = alias моделі `complaints` (регістр).
- [ ] outputVariable у форматі `complaints:field`.

## Типові помилки

| Симптом | Причина | Що зробити |
|---------|---------|------------|
| `__set` error | Невірний `module_name` або поле | Звірити alias моделі і constants |
| Немає `complaint:id` | Невірний `set_to` | Перевірити `set_to`: `complaint` |
| Бот «замовкає» | Edge **error** не підключений | Підключити error → MessageKeyboard |
| Рядок без телефону | Validation phone відхилила | Перевірити формат або Validation `none` |

## Пов'язана документація

- [use-custom-modules-set](/uk/customdata/how-to/use-custom-modules-set.md)
- [Параметри WaitForInput](/uk/scenariobuilder/reference/wait-for-input-parameters.md)
- [FAQ — Custom Data](/uk/learn/implementer/training/reference/faq.md)
- Далі: [Use Case 7b — CSAT/NPS](/uk/learn/implementer/training/basic/use-case-07b-csat-nps.md)
