---
title: "Use Case 5: Нормалізація телефону"
description: "Кастомна дія в Action Jail: raw_phone → normalized_phone, edges success і error, self-check трьох форматів UA-номера."
---

# Use Case 5: Формат номера телефону

**Рівень:** базовий · **Модулі:** Scenario Builder, Action Jail · **Action:** кастомна дія Action Jail

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

| Що потрібно | Де в меню | Навіщо |
|-------------|-----------|--------|
| **Scenario Builder** | Меню → Scenario Builder | WaitForInput, виклик кастомної дії |
| **Action Jail** | Меню → Action Jail | Створення і тест JS-дії |

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

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

Клієнт вводить телефон у різних форматах (`0800…`, `380…`, `+380…`) — для CRM, Registered Users і API потрібен єдиний формат `+380XXXXXXXXX`.

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

- Action Jail дія: вхід `raw_phone` → вихід `normalized_phone`.
- Виклик зі сценарію → показ нормалізованого номера клієнту.
- Невалідний ввід → edge **error** і повторний запит (не тиша).

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

```text
WaitForInput (raw_phone) → Action (кастомна дія Action Jail)
   ├─ success → MessageKeyboard «Ваш номер: {{normalized_phone}}»
   └─ error   → «Невірний формат» → loop на WaitForInput
```

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

### Крок 1. Action Jail — нова дія

Action Jail → **Створити дію** (можна AI-генерація з промптом нижче).

**Контракт дії (що має робити код):**

| Вхід (з сценарію) | Вихід | Логіка |
|-------------------|-------|--------|
| `raw_phone` (string) | `normalized_phone` | Прибрати пробіли/дужки; якщо 10 цифр з `0` — додати `+38`; якщо вже `+380…` — лишити |
| — | подія `error` | Якщо менше 10 цифр або не схоже на UA номер |

**Промпт для AI-генерації (приклад):**  
«Action Jail: нормалізувати український телефон у формат +380XXXXXXXXX. Вхід `raw_phone`, вихід `normalized_phone`, return error якщо невалідно.»

**Тест у Action Jail (вкладка «Тестування»):**

| raw_phone | Очікування |
|-----------|------------|
| `0800123456` | `+380800123456` або `+380…` за вашим правилом |
| `380501234567` | нормалізується до `+380501234567` |
| `+380501234567` | без змін |
| `abc` | error |

---

### Крок 2. WaitForInput — сирий номер

| Параметр | Значення |
|----------|----------|
| messageText | «Введіть номер телефону» |
| outputVariable | `raw_phone` |
| Validation | `phone` або `none` на першому проході |

**Edges:** → Action (кастомна дія).

---

### Крок 3. Action — кастомна дія з Action Jail

| node_params | Значення | Навіщо |
|-------------|----------|--------|
| `raw_phone` | `{{raw_phone}}` | Передати ввід з WaitForInput |

*(Імена параметрів — як у формі вашої дії в Inspector.)*

**Edges:**

| Edge | Куди | Навіщо |
|------|------|--------|
| **success** / основний | MessageKeyboard «Ваш номер: {{normalized_phone}}» | Показати результат |
| **error** | «Невірний формат. Спробуйте ще раз» → loop на WaitForInput | Не залишати клієнта без відповіді |

---

### Крок 4. MessageKeyboard — результат

| Текст | `Нормалізований номер: {{normalized_phone}}` |

---

### Крок 5 (опційно). MessageKeyboard з URL-кнопкою

| Параметр | Значення | Навіщо |
|----------|----------|--------|
| Кнопка | Текст + **URL** у розширених налаштуваннях кнопки | Без Action Jail для простого посилання |
| ActionType | `open-url` (Telegram) | Перевірити в preview / TG |

→ Use Case 11 (просунутий рівень) для broadcast alias і масової відправки.

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

- [ ] `+380XXXXXXXXX` — success, номер показано клієнту.
- [ ] `380XXXXXXXXX` — нормалізується до `+380…`.
- [ ] `0XXXXXXXXX` — нормалізується до `+380…`.
- [ ] Невалідний ввід (`abc`) — edge **error**, повідомлення клієнту, можливість повторити.
- [ ] Прогнано в Runs; опційно — той самий тест у реальному каналі (Telegram або widget).
- [ ] Edge **error** підключений на полотні.

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

| Симптом | Причина | Що зробити |
|---------|---------|------------|
| `{{normalized_phone}}` порожній | Немає `return { normalized_phone: '…' }` у коді | Виправити Action Jail |
| Завжди error | Параметр у сценарії ≠ імені в Action Jail | Звірити node_params і форму дії |
| Бот «замовкає» | Edge **error** не підключений | Підключити error → MessageKeyboard |
| Тест у Action Jail OK, у Runs — ні | Інша назва action у сценарії | Обрати правильну дію в Inspector |

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

- [Action Jail — інтеграції](/uk/actionjail/how-to/integrator-embed-actions.md)
- [Глосарій actions](/uk/learn/implementer/training/reference/actions-glossary.md)
- [FAQ — Action Jail](/uk/learn/implementer/training/reference/faq.md)
- Далі: [Use Case 6 — Registered Users](/uk/learn/implementer/training/basic/use-case-06-registered-users.md)
