Use Case 6: Реєстрація + повторний візит
Рівень: базовий · Модулі: Scenario Builder, Settings → Registered Users · Actions: registered_users__get, registered_users__check_phone, 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 |
Preview vs канал. Кожен Run у Preview — новий клієнт (новий chat_id). Профіль шукається за chat_id + channel, тому другий Preview Run не побачить реєстрацію з першого. Повторний візит з вітанням по імені перевіряйте в реальному каналі (Telegram / віджет), де chat_id стабільний між діалогами.
Міні-приклад
- Клієнт пише «Олена» → «Привіт, Олена!» — ім'я з змінної діалогу, все ок до кінця цього Run.
- Клієнт повертається завтра в тому ж каналі (той самий Telegram / віджет):
- без
registered_users__set— бот знову «не знає» Олену; - з
__setна першому візиті +__getна старті другого — «Вітаємо, Олена!».
- без
Правило: все, що зібрали на реєстрації, збережіть через registered_users__set. На наступному візиті спочатку registered_users__get.
Очікуваний результат
registered_users__getна старті → success / error.- error → збір даних →
registered_users__set. - success → «Вітаємо,
{{client.first_name}}!» - Повторний візит у каналі після реєстрації →
__getsuccess з тим самим ім'ям.
Архітектура flow
Start → registered_users__get
├─ success → «Вітаємо, {{client.first_name}}!»
└─ error → WaitForInput (ім'я, телефон) → registered_users__check_phone → registered_users__set → «Дякуємо!»
Якщо збираєте телефон текстом: registered_users__check_phone перед registered_users__set. __set не нормалізує 050… → 380… — без check_phone номер збережеться як введено.
Покрокова реалізація
Крок 0. Registered Users — поля моделі
Settings → Registered Users → додати поля профілю (якщо ще немає):
| Поле в моделі | Тип | Навіщо |
|---|---|---|
first_name |
text | Ім'я для вітання |
phone |
phone | Опційно для Use Case 5/6 |
Дані для запису (__set) потрапляють через constants reg_first_name, registration:first_name, reg_phone / registration:phone тощо. Для текстового телефону зазвичай outputVariable: reg_phone, потім registered_users__check_phone.
Як читати після __get (не плутати з записом): дія виставляє два обʼєкти — client (стандартні колонки профілю: first_name, phone, …) і registration (кастомні поля з колонки data). У повідомленнях використовуйте крапку: {{client.first_name}}. Плейсхолдер {{registration:first_name}} (з двокрапкою) після __get не заповнюється — це інший механізм (плоский ключ), його немає серед констант після читання.
На гілці реєстрації (до __get) звертайтеся до змінної введення з цього ж діалогу ({{reg_first_name}}), бо профіль ще не читали.
Крок 1. Action на Start — registered_users__get
Що робить: шукає профіль за chat_id + channel поточного діалогу; якщо знайдено — завантажує константи client (рядок профілю) і registration (обʼєкт data).
| node_params | Значення | Навіщо |
|---|---|---|
check_by_phone |
false |
На навчанні — lookup по поточному чату |
Edges:
| Edge | Коли | Куди | Навіщо |
|---|---|---|---|
success |
Профіль є | MessageKeyboard «Вітаємо, {{client.first_name}}!» |
Повторний візит |
error |
Новий клієнт | гілка реєстрації (крок 2) | Очікувана гілка, не баг |
Крок 2. Гілка error — збір даних
WaitForInput — ім'я
| Параметр | Значення |
|---|---|
| messageText | «Як до вас звертатися?» |
| outputVariable | reg_first_name |
WaitForInput — телефон (опційно)
| Параметр | Значення |
|---|---|
| messageText | «Ваш номер телефону» |
| outputVariable | reg_phone |
Action — registered_users__check_phone (якщо збирали телефон)
| Edge | Коли | Куди |
|---|---|---|
| success | Номер нормалізовано в reg_phone (380…) |
registered_users__set |
| error | Невалідний формат | повідомлення «Перевірте номер» |
Edges: ланцюжок WaitForInput → registered_users__check_phone → registered_users__set.
Крок 3. Action — registered_users__set
Що робить: збирає constants профілю (registration:*, reg_*) і зберігає запис у БД Registered Users. Не нормалізує телефон — очікує вже підготовлений reg_phone після check_phone.
| node_params | Значення | Навіщо |
|---|---|---|
check_by_phone |
false |
Зв'язок з поточним chat_id |
active |
1 |
Активний профіль |
Edges:
| Edge | Куди |
|---|---|
| success | MessageKeyboard «Дякуємо за реєстрацію, {{reg_first_name}}!» |
Гілка error для __set у типовому сценарії немає (дія повертає success після збереження). Невалідний телефон обробляйте на registered_users__check_phone.
На цій гілці імʼя ще з змінної діалогу (reg_first_name). Після __get на наступному візиті використовуйте {{client.first_name}}.
Крок 4. Тест: Preview і повторний візит у каналі
A. Preview (гілка реєстрації)
- Preview: пройти
error→ реєстрацію →successна__set. - (Опційно) Settings → Registered Users — є запис з ім'ям:
__setспрацював. - Новий Preview Run: на Start
__getзновуerror— очікувано. Preview щоразу створює нового клієнта; між Run профіль «не підхоплюється».
B. Канал (критерій повторного візиту)
- Той самий користувач у Telegram або віджеті: перший діалог — реєстрація (
__setsuccess). - Другий діалог того ж користувача: на Start
__get→success,{{client.first_name}}заповнене.
Без кроку B ви довели лише запис профілю, не розпізнавання при поверненні.
Критерії приймання (self-check)
Типові помилки
| Симптом | Причина | Що зробити |
|---|---|---|
| Другий діалог у каналі знову реєстрація | __set не виконався або невірні поля |
Перевірити trace першого діалогу / Run |
| Дані не збереглися | Поле не в моделі Registered Users | Додати поле в Settings |
Телефон 066… у базі |
__set без check_phone |
Додати registered_users__check_phone перед __set |
Після __get «Вітаємо, !» / порожнє імʼя |
У повідомленні {{registration:first_name}} (двокрапка) замість {{client.first_name}} |
Після __get — {{client.first_name}}; двокрапка шукає плоский ключ, якого __get не виставляє |
| Другий Preview Run знову реєстрація | Preview = новий chat_id щоразу |
Очікувано; повторний візит перевіряйте в каналі |