---
title: "Use Case 6: Реєстрація + повторний візит"
description: "registered_users__get на старті, реєстрація через __set, вітання по імені в новому Run."
---

# Use Case 6: Реєстрація + повторний візит

**Рівень:** базовий · **Модулі:** Scenario Builder, Settings → Registered Users · **Actions:** `registered_users__get`, `registered_users__set`

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

| Що потрібно | Де в меню | Навіщо |
|-------------|-----------|--------|
| **Scenario Builder** | Меню → Scenario Builder | Get/set на Start і в гілці реєстрації |
| **Settings → Registered Users** | Налаштування → Registered Users | Поля профілю `first_name`, `phone` |

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

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

Перший візит — реєстрація (ім'я, опційно телефон); наступний — вітання по імені без повторного опитування.

## Ключова ідея: змінні діалогу vs профіль клієнта

До Use Case 6 ви працювали з `{{user_input}}`, кнопками та API — це **змінні поточного діалогу**. Use Case 6 додає **запам'ятати клієнта між зверненнями**.

| | **Змінні діалогу (state)** | **Registered Users (профіль)** |
|---|---------------------------|----------------------------------|
| **Простими словами** | «Стікер» на одну розмову | «Картка» клієнта в базі |
| **Скільки живе** | Один Run / один діалог | Наступний візит, новий діалог |
| **Як записати** | Автоматично між нодами (`{{user_name}}` тощо) | Action **`registered_users__set`** |
| **Як прочитати** | `{{назва}}` у наступних нодах **цього ж** Run | **`registered_users__get`** → edge `success` / `error` |

**Міні-приклад**

1. Клієнт пише «Олена» → «Привіт, Олена!» — ім'я з **змінної діалогу**, все ок **до кінця цього Run**.
2. Клієнт повертається завтра (або **новий Run** у preview):
   - без **`registered_users__set`** — бот знову «не знає» Олену;
   - з **`__set`** на першому візиті + **`__get`** на старті другого — «Вітаємо, Олена!».

**Правило:** все, що зібрали на реєстрації, збережіть через **`registered_users__set`**. На наступному візиті спочатку **`registered_users__get`**.

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

- `registered_users__get` на старті → success / error.
- error → збір даних → `registered_users__set`.
- success → «Вітаємо, {{registration:first_name}}!»
- **Новий Run** після реєстрації → `__get` success з тим самим ім'ям.

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

```text
Start → registered_users__get
   ├─ success → «Вітаємо, {{registration:first_name}}!»
   └─ error → WaitForInput (ім'я, телефон) → registered_users__set → «Дякуємо!»
```

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

### Крок 0. Registered Users — поля моделі

Settings → **Registered Users** → додати поля профілю (якщо ще немає):

| Поле в моделі | Тип | Навіщо |
|---------------|-----|--------|
| `first_name` | text | Ім'я для вітання |
| `phone` | phone | Опційно для Use Case 5/6 |

Дані в action потрапляють через constants **`registration:first_name`**, **`registration:phone`** тощо.

---

### Крок 1. Action на Start — `registered_users__get`

**Що робить:** шукає профіль за `chat_id` + `channel` поточного діалогу; якщо знайдено — завантажує в `registration:*`.

| node_params | Значення | Навіщо |
|-------------|----------|--------|
| `check_by_phone` | `false` | На навчанні — lookup по поточному чату |

**Edges:**

| Edge | Коли | Куди | Навіщо |
|------|------|------|--------|
| **`success`** | Профіль є | MessageKeyboard «Вітаємо, {{registration:first_name}}!» | Повторний візит |
| **`error`** | Новий клієнт | гілка реєстрації (крок 2) | Очікувана гілка, не баг |

---

### Крок 2. Гілка `error` — збір даних

**WaitForInput — ім'я**

| Параметр | Значення |
|----------|----------|
| messageText | «Як до вас звертатися?» |
| outputVariable | `registration:first_name` |

**WaitForInput — телефон** *(опційно)*

| outputVariable | `registration:phone` |

**Edges:** ланцюжок WaitForInput → Action `registered_users__set`.

---

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

**Що робить:** збирає всі constants `registration:*` і зберігає профіль у БД Registered Users.

| node_params | Значення | Навіщо |
|-------------|----------|--------|
| `check_by_phone` | `false` | Зв'язок з поточним chat_id |
| `active` | `1` | Активний профіль |

**Edges:**

| Edge | Куди |
|------|------|
| **success** | MessageKeyboard «Дякуємо за реєстрацію, {{registration:first_name}}!» |
| **error** | «Не вдалося зберегти дані» + перевірити поля моделі |

---

### Крок 4. Тест «між діалогами»

1. Preview: пройти **`error`** → реєстрацію → **`success`** на `__set`.
2. **Завершити Run** → **новий Run**.
3. На Start `__get` → має бути **`success`**, `{{registration:first_name}}` заповнене.

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

- [ ] Перший Run: `__get` → **error** → реєстрація → `__set` **success**.
- [ ] Другий Run (новий): `__get` → **success**, ім'я відображається.
- [ ] Edges **success** і **error** на `__get` підключені.
- [ ] Edge **error** на `__set` підключений з повідомленням.
- [ ] Поля `registration:*` відповідають моделі в Settings → Registered Users.

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

| Симптом | Причина | Що зробити |
|---------|---------|------------|
| Другий Run знову реєстрація | `__set` не виконався або невірні поля | Перевірити trace першого Run |
| `__set` error | Поле не в моделі Registered Users | Додати поле в Settings |
| `{{registration:first_name}}` порожній | Невірний outputVariable | Формат `registration:first_name` |
| Профіль «зникає» | Тест у тому ж Run | Завершити Run і відкрити **новий** |

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

- [Built-in actions — Registered Users](/uk/scenariobuilder/reference/standard-built-in-actions.md)
- [Глосарій — registered_users](/uk/learn/implementer/training/reference/actions-glossary.md)
- [FAQ — Registered Users](/uk/learn/implementer/training/reference/faq.md)
- Далі: [Use Case 7 — Custom Data](/uk/learn/implementer/training/basic/use-case-07-custom-data.md)
