# Як отримати запис з Custom Data за критеріями пошуку?

Коли в сценарії потрібно знайти існуючий запис (наприклад, магазин за містом, клієнта за email або VIP за телефоном), використовуйте дію `custom_modules__get`. Вона шукає запис за значеннями зі змінних стану і зберігає результат у змінну для подальшого використання.

## Коли знадобиться

- Користувач обирає місто — потрібно показати список магазинів з Custom Data.
- Користувач вводить email або телефон — потрібно перевірити VIP-статус або отримати дані клієнта.
- Потрібно перевірити, чи існує запис з певними значеннями, і продовжити сценарій відповідно.

## Що важливо знати

- **custom_modules__get** — дія для пошуку та отримання запису з Custom Data.
- Перед використанням потрібно зберегти в стані користувача значення полів для пошуку.
- Пошук виконується за значеннями зі змінних типу "назва_моделі:назва_поля".
- Після отримання запису можна вивести його атрибути в блоці повідомлення.

## Перед початком

- [x] Ви увійшли в систему з правами інтегратора або адміністратора.
- [x] У системі є створена модель Custom Data з записами.
- [x] Ви маєте доступ до конструктора сценаріїв.
- [x] Ви знаєте, за якими полями потрібно шукати запис.

## Покрокова інструкція

### Підготовка критеріїв пошуку

1. У сценарії додайте блоки для збору даних, за якими потрібно шукати:
   - **"Очікування відповіді"** — для введення значення пошуку
   - **"Повідомлення з клавіатурою"** — для вибору з варіантів
2. Збережіть значення в змінні типу "назва_моделі:назва_поля" (наприклад, `customer:email`, `product:code`).

**Приклад:** Для пошуку за полем "email" збережіть значення в змінну `customer:email`.

### Налаштування дії

1. Додайте блок **"Дія"** в сценарій після блоків збору критеріїв пошуку.
2. У налаштуваннях блоку "Дія" оберіть функцію **`custom_modules__get`**.
3. У полі конфігурації (JSON) введіть параметри:

```json
{
  "module_name": "customer",
  "set_to": "customer"
}
```

- `module_name` — назва моделі з кастомною таблицею (наприклад, "customer", "product")
- `set_to` — назва змінної, в яку збережеться знайдений запис (наприклад, "customer", "found_product")

4. Збережіть зміни в дії та сценарії.

### Використання отриманого запису

Після отримання запису можна вивести його атрибути в блоці повідомлення, використовуючи змінну з `set_to`. Наприклад, якщо `set_to` = "customer", можна використати `{{customer:name}}` або `{{customer:phone}}` для виведення значень полів.

## Приклад використання

**Сценарій:**
1. Блок "Очікування відповіді" → користувач вводить email, зберігається в `customer:email`
2. Блок "Дія" з `custom_modules__get` → шукає запис за `customer:email`, зберігає в `customer`
3. Блок "Повідомлення" → виводить `{{customer:name}}` та `{{customer:phone}}`

---

## Типові сценарії

| Сценарій | Поля моделі | Послідовність |
|----------|-------------|------|
| **Довідник магазинів** | city, address, lang_code | Користувач обирає місто → get за filters → показ списку магазинів |
| **Перевірка VIP** | email, phone, vip_status | Користувач вводить email/phone → get → показ VIP-переваг або стандартний флоу |
| **Категорії для роутингу** | id, first_level, last_level, name | Inline-кнопки з callback_data = id → get за id → роутинг до гілки |

## Важливі примітки

- Перед використанням `custom_modules__get` обов'язково збережіть значення полів для пошуку в змінні стану користувача.
- Якщо запис не знайдено, змінна з `set_to` буде порожньою.
- Можна використовувати кілька полів для пошуку одночасно — система знайде запис, який відповідає всім критеріям.

## Що відбувається після

Після виконання дії `custom_modules__get` знайдений запис зберігається в змінну, вказану в `set_to`. Запис стає доступним для використання в наступних блоках сценарію. Якщо запис не знайдено, змінна буде порожньою.

## Як переконатися, що все вдалось

- Перевірте, що значення для пошуку збережені в змінні типу "назва_моделі:назва_поля".
- Переконайтеся, що назва моделі в `module_name` відповідає існуючій моделі.
- Протестуйте сценарій та перевірте, що запис знайдено та збережено в змінну.
- Перевірте, що атрибути запису доступні для виведення.

## Пов'язані матеріали

- [Патерни та приклади Custom Data](/uk/customdata/explanation/custom-data-patterns-and-examples.md) — як обрати підхід під задачу
- [Як створити запис у Custom Data](/uk/customdata/how-to/use-custom-modules-set.md)
- [Використати пошук з автодоповненням](/uk/customdata/how-to/use-custom-modules-search.md)
- [Створити модель](/uk/customdata/how-to/create-model.md)

