---
title: "Use Case 12: Copilot + Custom Data lookup"
description: "Optional: окремий Copilot-бот з categorizer і пошуком у каталозі Custom Data."
level: optional
use_case: 12
prerequisites:
  - ../capstone/use-case-13-integrated-bot.md
  - ../basic/use-case-07-custom-data.md
  - ../concepts.md#categorizer-pattern
---

# Use Case 12: Copilot + Custom Data lookup

> **Optional track** — не потрібен для завершення базового, просунутого рівня або capstone. Проходьте після [Use Case 13](/uk/learn/implementer/training/capstone/use-case-13-integrated-bot.md) або якщо ваш проєкт використовує Copilot.

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

| Модуль / налаштування | Навіщо |
|------------------------|--------|
| **Scenario Builder** | Основний bot (routing) + Copilot bot |
| **Fast Line Pro** | Categorizer для каталогу |
| **Custom Data** | Модель `products` і seed-дані |
| **Settings → Bots** | Другий bot для Copilot (або process sections) |
| **Runs / Chat preview** | Self-check lookup found / not found |

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

Клієнт пише вільним текстом («хочу воїна з Півночі»). Copilot-бот класифікує запит, шукає запис у Custom Data і повертає результат. Основний клієнтський bot лише **маршрутизує** (кнопка «Каталог»), а AI-heavy логіка живе в Copilot.

→ [Copilot overview](/uk/learn/copilot/copilot-overview.md)

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

- Окремий **Copilot bot** (або process-секція) з categorizer
- Custom Data `products`: поля name, category, faction, price
- Categorizer → filters → lookup у CD → MessageKeyboard з результатом
- Edges **found** / **not found** / **error** — усі оброблені
- Розуміння: categorizer у Copilot, не в основному client bot

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

```text
[Основний training bot]
   MessageKeyboard «Каталог» → routing до Copilot (call / process)

[Copilot bot]
   WaitForInput (запит) → action_fastline_pro (categorizer)
      → Router (valid category/faction)
      → custom_modules__get / filter
         ├─ found    → MessageKeyboard (назва, ціна)
         ├─ not_found → «Не знайдено» + опційно handoff
         └─ error    → повідомлення про помилку
```

| Тип бота | Роль |
|----------|------|
| **Основний** | Клієнт пише в канал; кнопки меню |
| **Copilot** | AI + CD lookup |
| **Macro (Use Case 8)** | Ініціатор — оператор, не клієнт |

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

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

1. **Custom Data** → створіть модель `products`.
2. Поля: `name`, `category`, `faction`, `price`.
3. Імпортуйте seed з [products-training.csv](/content/uk/learn/implementer/training/scenarios/seed/products-training.csv) або додайте 5–10 рядків вручну.

| Поле | Приклад |
|------|---------|
| name | Geralt of Rivia |
| category | warrior |
| faction | north |
| price | 120 |

→ [Custom Data set](/uk/customdata/how-to/use-custom-modules-set.md)

**Alias моделі** `products` має **точно** збігатися з `module_name` у action lookup.

---

### Крок 1. Copilot bot і categorizer

1. **Settings → Bots** → створіть bot «Training Copilot» (або використайте process sections за докою Copilot).
2. **Fast Line Pro** → Chat-bot «Training Catalog Categorizer».
3. Prompt: секція **Use Case 12 (каталог products)** з [categorizer-training.txt](/content/uk/learn/implementer/training/scenarios/prompts/categorizer-training.txt).

Вихід categorizer — JSON, наприклад: `{"faction":"north","category":"warrior"}`.

Перевірте в Fast Line Pro окремо перед сценарієм.

---

### Крок 2. WaitForInput — запит клієнта

| Параметр | Значення |
|----------|----------|
| messageText | «Опишіть, кого шукаєте (клас, фракція)» |
| outputVariable | `catalog_query` |

**Edges:** → `action_fastline_pro`.

---

### Крок 3. Action — categorizer

| node_params | Значення |
|-------------|----------|
| `agent_name` | `Training Catalog Categorizer` |
| `user_input` | `{{catalog_query}}` |
| `save_response` | `catalog_filters` |

**Edges:** основний → parse / Router; **fallback** → «Уточніть запит».

---

### Крок 4. Lookup у Custom Data

Використайте `custom_modules__get` або filter action з параметрами за вашим інстансом:

| node_params (приклад) | Значення |
|-----------------------|----------|
| `module_name` | `products` |
| filters | category, faction з categorizer |

**Edges (обов'язково):**

| Edge | Куди |
|------|------|
| **success** / found | MessageKeyboard: `{{name}} — {{price}}` |
| **not found** | «За вашим запитом нічого не знайдено» |
| **error** | «Помилка пошуку. Спробуйте пізніше.» |

---

### Крок 5. Routing з основного bot

У **основному** training bot (capstone):

| Кнопка | Дія |
|--------|-----|
| «Каталог» | Виклик Copilot process / call_node за [Copilot overview](/uk/learn/copilot/copilot-overview.md) |

Основний bot **не** містить categorizer — лише маршрутизацію.

---

## Troubleshooting

| Симптом | Що перевірити |
|---------|----------------|
| «Де categorizer?» | У Copilot bot, не в client bot |
| Lookup порожній | `module_name` = alias CD; filters відповідають seed CSV |
| JSON categorizer не парситься | Prompt — один рядок JSON; перевірте Fast Line Pro |
| Copilot не викликається | Routing з основного bot; ім'я process / bot у call |

## Self-check (Runs)

- [ ] Seed CSV імпортовано; записи видно в Custom Data UI
- [ ] Categorizer: «воїн з Півночі» → faction north, category warrior
- [ ] Lookup: знайдено Geralt (або інший рядок з CSV)
- [ ] Not found: запит поза каталогом → повідомлення клієнту
- [ ] Error edge → повідомлення, не тиша
- [ ] Основний bot: кнопка «Каталог» → Copilot flow

## Самостійне завдання

Додайте edge handoff на оператора, якщо not found **двічі** поспіль (лічильник у state або constants).

## Довідкові посилання

- [Copilot overview](/uk/learn/copilot/copilot-overview.md)
- [Categorizer prompt](/content/uk/learn/implementer/training/scenarios/prompts/categorizer-training.txt)
- [Products seed CSV](/content/uk/learn/implementer/training/scenarios/seed/products-training.csv)
- [Custom Data set](/uk/customdata/how-to/use-custom-modules-set.md)
- [Categorizer pattern](/uk/learn/implementer/training/concepts.md#categorizer-pattern)

**Пов'язаний optional:** [AI-агент з пошуком у каталозі](/uk/learn/implementer/training/optional/use-case-ai-catalog-search.md) — lookup у **тому ж** bot без Copilot.
