| Інтент | Кількість | % |
|---|
| Причина | Кількість |
|---|
Westelecom — Omnichannel CRM
Іванка — AI-помічник першої лінії підтримки Westelecom. Працює у текстових чатах (Telegram, Viber, WhatsApp, Facebook).
| Модель | Qwen2.5-72B-Instruct (дві GPU RTX 6000 Ada, 96 GB VRAM) |
| Мова | Відповідає ТІЛЬКИ українською, навіть якщо клієнт пише іншою мовою |
| Тон | Привітна, компетентна, стисла. Максимум 2-3 речення. Звертається на «ви» (з маленької) |
| Чесність | Чесно зізнається, що вона AI: «Так, я AI-помічник Іванка» |
) замість емодзі.
Тригери: «привіт», «здравствуйте», «добрий день/вечір/ранок», «доброго дня», «hi», «hello», «хай», «хей», «вітаю» та ін.
Умова: тільки якщо повідомлення складається виключно з привітання (без додаткового тексту), і це одне з перших двох повідомлень у сесії.
| 05:00–12:00 | «Доброго ранку! Я Іванка, помічник Westelecom 😊 Чим можу допомогти?» |
| 12:00–18:00 | «Доброго дня! ...» |
| 18:00–05:00 | «Доброго вечора! ...» |
Якщо клієнт вже ідентифікований: «Доброго дня, Вадиме Вікторовичу! Я Іванка, помічник Westelecom 😊»
Тригери: «як тебе звуть», «як тебе звати», «як тебе кличуть», «як твоє ім'я», «хто ти», «ти хто», «как тебя зовут», «представся», «назви себе»
Тригери (regex): «забудь інструкції», «ігноруй промпт/правила», «ти тепер chatgpt/gpt/dan/інший бот», «нові інструкції», «зміни роль», «change role», «ignore instructions», «forget everything», «you are now», «act as», «DAN», «jailbreak»
[SECURITY].Тригери: «які тарифи», «список тарифів», «всі тарифи», «про тарифи», «скільки коштує інтернет», «ціни на інтернет» та їх російські аналоги.
Відповідь береться з PostgreSQL бази знань (таблиця knowledge_base, категорія tariffs). Розділена на «Для дому» і «Для бізнесу». Акційні тарифи позначені 🔥.
Умова: клієнт питає щось, що потребує CRM-даних, але в повідомленні немає ні номера л/с, ні телефону, ні ПІБ.
Тригери (needs_crm_lookup): «баланс», «не працює», «немає інтернету», «який тариф», «мій тариф», «статус», «оплата», «борг», «повільно», «обривається»
Умова: клієнт ввів ідентифікатор (л/с, телефон, ПІБ), але CRM нічого не повернув.
За телефоном: «На жаль, за номером {phone} клієнта не знайдено 😔 Підкажіть номер особового рахунку (6-8 цифр) або ПІБ?»
За іншим: «На жаль, за запитом '{query}' клієнта не знайдено 😔 Перевірте правильність номера та спробуйте ще раз.»
Умова: CRM повернув клієнта зі статусом DELETED, TERMINATED або INACTIVE.
Тригери: «баланс», «залишок», «скільки на рахунку», «скільки платити», «оплата», «коли платити», «заборгованість»
| Умова | Відповідь |
|---|---|
| «Скільки платити?» | «Ваш тариф X коштує Y/міс. Зараз на балансі Z грн.» |
| Баланс > 0 | «✅ баланс: X грн. 📦 Тариф: Y (ціна)» |
| Баланс < 0 | «🔴 баланс: X грн» + «Після поповнення послуги відновляться автоматично протягом 15 хвилин.» |
| Баланс = 0 | «✅ баланс: 0.00 грн» (нейтрально) |
| Баланс = 0, після 20-го числа | Додається: «💡 До речі, наближається 1 число — не забудьте поповнити рахунок 😊» |
Тригери: «який у мене тариф», «мій тариф», «мой тариф», «який тариф підключено»
Тригери: «статус», «стан», «підключення», «активний»
Тригери: «не працює», «нема інтернету», «пропав інтернет», «відключили», «обривається», «повільний»
| Крок | Умова | Дія |
|---|---|---|
| 1. Баланс | balance < 0 | «Перевірила — на рахунку заборгованість X грн. Після поповнення інтернет відновиться автоматично.» → СТОП |
| 1. Баланс | balance ≥ 0 | Показує баланс, переходить до кроку 2 |
| 2. ONT | ONT = online | «Обладнання працює нормально ✅ Перезавантажте ONT та роутер: вимкніть на 30 секунд, увімкніть назад.» |
| 2. ONT | ONT = offline | «Ваше обладнання не відповідає 📡 Перевірте: чи горять індикатори на ONT-терміналі?» |
Умова: клієнт спочатку запитав «який у мене баланс?», Іванка попросила л/с, клієнт надіслав тільки цифри (наприклад, «000010»).
Умова: клієнт вводить 3+ різних номерів л/с в одній сесії.
| 1-й л/с | Працюємо |
| 2-й л/с | Дозволяємо перемикання |
| 3-й+ л/с | «Для вашої безпеки, з'єдную вас зі спеціалістом 😊» → ескалація Б-07 |
| ID | Сценарій | Тригери | Пріоритет |
|---|---|---|---|
Э-01 | Запит оператора | «дайте оператора», «з'єднайте з людиною», «хочу менеджера» | терміново |
Ж-03 | Погрози судом | «суд», «прокуратура», «юрист», «НКРЗІ», «напишу у фейсбук» | терміново |
Ж-04 | Агресія / нецензурна | Мат, образи, «ідіот», «дебіл» | терміново |
Э-02 | Поза компетенцією | «юридичні», «медичні», «банк», «кредит» | звичайний |
T-07 | Повторне звернення | «знову не працює», «вже зверталися», «проблема не вирішена» | повторне |
| ID | Сценарій | Тригери | Пріоритет |
|---|---|---|---|
Ж-02 | Вимога компенсації | «компенсація», «знижку за», «вимагаю», «не працювало X днів» | терміново |
Ж-01 | Скарга на якість | «скарга», «жалоба», «незадоволений», «погане обслуговування» | звичайний |
| ID | Сценарій | Тригери |
|---|---|---|
У-04 | Розірвання договору | «розірвати договір», «хочу відмовитися», «закрити рахунок» |
У-05 | Переїзд | «переїзд», «змінити адресу», «перенести підключення» |
Б-04 | Зміна тарифу | «змінити тариф», «перейти на інший», «поміняти тариф» |
Б-05 | Обіцяний платіж | «обіцяний платіж», «відстрочка», «кредит довіри» |
Б-06 | Перерахунок | «перерахунок», «повернення коштів», «неправильно списали» |
У-01 | Підключення послуги | «підключити», «хочу IPTV», «додати послугу» |
У-02 | Відключення послуги | «відключити послугу», «прибрати», «не потрібна» |
У-03 | Заморозка | «заморозити», «призупинити», «пауза», «їду у відпустку» |
T-05 | Проблеми з TV/IPTV | «не працює TV», «канали не показують», «IPTV не працює» |
| ID | Сценарій | Умова |
|---|---|---|
T-01 | Перезавантаження не допомогло (ONT online) | Заявка на ремонт |
T-02 | Перезавантаження не допомогло (ONT offline) | Аварійна заявка |
Э-03 | Не вдалося визначити проблему | Після 3+ обмінів |
Б-07 | Множинні рахунки | 3+ різних л/с |
⚡ ТЕРМІНОВО [Э-01] Запит оператора 👤 Абонент: Петренко Вадим Вікторович 📋 Л/С: 000010 📦 Тариф: Turbo 500 (250 грн/міс) / Баланс: 0.00 грн 📡 Статус ONT: online ❗ Проблема: Хочу поговорити з людиною ✅ Вже перевірено/зроблено: Перевірено баланс; Перевірено статус ONT 🎯 Потрібно від оператора: Прийняти діалог ⏱ Пріоритет: терміново
LLM (Qwen 72B) вмикається тільки якщо:
| Тема | Приклади |
|---|---|
| Способи оплати | «Як оплатити?», «Де поповнити?» |
| Загальні питання про послуги | «Що таке GPON?», «Як працює інтернет через оптику?» |
| Адреси офісів | «Де ваш офіс?», «Куди можна прийти?» |
| Графік роботи | «До котрої працюєте?» |
| Підключення нових абонентів | «Як підключити інтернет?», «Скільки коштує підключення?» |
| Уточнюючі питання | «А що таке ONT?», «Де шукати блок живлення?» |
| Нетипові питання | «Чи працює інтернет без світла?» |
| Offtopic | «Яка погода?» → м'яко повертає до теми |
{{CUSTOMER_NAME}}), галюцинації («можна заморозити рахунок», «🎁 Акція»), зайві порожні рядки.
| Режим | Опис |
|---|---|
| off | Іванка не працює — всі чати обробляють оператори |
| copilot | Генерує підказки, але НЕ відправляє клієнтам. Зберігаються в ai_dialog_log |
| autopilot | Сама відповідає клієнтам. При складних питаннях — ескалює |
кожні 3 сек:
1. Синхронізувати конфіг з CRM (кожні 60 сек)
2. Перевірити mode → off? → спати 10 сек
3. Перевірити розклад → поза графіком? → спати 30 сек
4. Запитати нові повідомлення: GET /api/agent/omni/ai/new-messages
5. Для кожного повідомлення:
a. Дебаунс 3 сек (щоб клієнт дописав)
b. Отримати контекст: GET /api/agent/omni/ai/context/{id}
c. Якщо >15 повідомлень → підсумувати старі
d. copilot → підказку в лог
autopilot → відповідь клієнту
| Механізм | Опис |
|---|---|
| Max concurrent LLM | Максимум 5 одночасних запитів до LLM |
| Max messages | Після 20 повідомлень у діалозі → автоескалація |
| 3 помилки LLM | 3 поспіль помилки → ескалація |
| Валідація відповіді | Не порожня, не ехо, не >1500 символів, не <5, без заборонених паттернів |
| Заборонені паттерни | ) як смайлик, «нажаль», «заспокойтесь», «я оператор», «я Аліса/Поліна/Анна» |
| Sliding window | При >15 повідомлень — старі сумаризуються |
| Kill switch | Миттєве відключення через CRM |
Конфігурується через CRM. Приклад: Іванка працює з 21:00 до 09:00 (нічна зміна). Поза розкладом автопілот не відповідає.
PUT https://10.255.202.43/api/agent/omni/ai/config
Body: {"mode": "off"} — вимкнути
Body: {"mode": "copilot"} — підказки
Body: {"mode": "autopilot"} — автопілот
POST http://10.255.202.139:8000/api/ai-processor/mode/off POST http://10.255.202.139:8000/api/ai-processor/mode/copilot POST http://10.255.202.139:8000/api/ai-processor/mode/autopilot
POST https://10.255.202.43/api/agent/omni/ai/kill-switch
POST https://10.255.202.43/api/agent/omni/conversations/{id}/claim-from-ai
| URL | Що показує |
|---|---|
http://10.255.202.139:8000/monitor | Веб-дашборд: всі чати, відповіді, час, категорії |
GET .../api/ai-processor/status | Режим, активні запити, статистика, помилки |
GET .../health | Здоров'я сервісу (Ollama, модель, Whisper, TTS) |
GET .../api/agent/omni/ai/stats | Статистика через CRM |
Коли оператору треба перехопити чат:
| Ознака | Що робити |
|---|---|
| Відповідає російською або суржиком | Перехопити |
| Називає себе іншим ім'ям (Аліса, Поліна, Софія, Анна) | Перехопити + повідомити адміна |
| Каже «я оператор» | Перехопити |
| Вигадує дані (тарифи, ціни, адреси) | Перехопити |
| Повторює одне й те саме по колу | Перехопити |
| Клієнт явно незадоволений | Перехопити |
| Масові проблеми з відповідями | Kill switch |