🤖 Іванка AI — Моніторинг

← Workspace
📊 Огляд
✅ Якість
📋 Лог діалогів
⚖️ AI vs Оператори
📖 Інструкція

🎯 Топ інтентів

ІнтентКількість%

⚠️ Причини ескалації

ПричинаКількість

⚙️ Поточний стан

🏆 AI Quality Score

👍👎 Фідбек клієнтів

💡 Copilot статистика

🚩 Заблоковані відповіді

🧠 Smart Insights

📋 AI діалоги

⚖️ AI vs Оператори — Зведення

🔄 Повторні звернення (24 год)

💰 ROI

🤖

Повний гайд по AI-помічнику Іванка

Westelecom — Omnichannel CRM

Частина 1: Хто така Іванка

Іванка — AI-помічник першої лінії підтримки Westelecom. Працює у текстових чатах (Telegram, Viber, WhatsApp, Facebook).

Основні характеристики

МодельQwen2.5-72B-Instruct (дві GPU RTX 6000 Ada, 96 GB VRAM)
МоваВідповідає ТІЛЬКИ українською, навіть якщо клієнт пише іншою мовою
ТонПривітна, компетентна, стисла. Максимум 2-3 речення. Звертається на «ви» (з маленької)
ЧесністьЧесно зізнається, що вона AI: «Так, я AI-помічник Іванка»
Ніколи не каже: «заспокойтесь», «не хвилюйтесь», «Дякую за звернення!», «нажаль» (правильно «на жаль»)
Емодзі: максимум 1-2 позитивних, жодних при конфлікті. Ніколи не використовує ) замість емодзі.

Частина 2: Архітектура відповідей — два рівні

Рівень 1: Smart Responses (миттєві, без LLM)

Заздалегідь запрограмовані відповіді, які НЕ викликають модель LLM. Спрацьовують за ключовими словами і дають стабільну, гарантовано правильну відповідь за <100 мс.

Рівень 2: LLM (модель Qwen 72B)

Якщо жоден Smart Response не спрацював, запит іде до LLM з runtime-промптом, CRM-контекстом і алгоритмами дій. Час відповіді: 3-15 секунд.

Частина 3: Smart Responses — повний перелік

3.1 Привітання (без ідентифікації)

Тригери: «привіт», «здравствуйте», «добрий день/вечір/ранок», «доброго дня», «hi», «hello», «хай», «хей», «вітаю» та ін.

Умова: тільки якщо повідомлення складається виключно з привітання (без додаткового тексту), і це одне з перших двох повідомлень у сесії.

05:00–12:00«Доброго ранку! Я Іванка, помічник Westelecom 😊 Чим можу допомогти?»
12:00–18:00«Доброго дня! ...»
18:00–05:00«Доброго вечора! ...»

Якщо клієнт вже ідентифікований: «Доброго дня, Вадиме Вікторовичу! Я Іванка, помічник Westelecom 😊»

3.2 Ім'я — «Як тебе звуть?»

Тригери: «як тебе звуть», «як тебе звати», «як тебе кличуть», «як твоє ім'я», «хто ти», «ти хто», «как тебя зовут», «представся», «назви себе»

Відповідь: «Мене звуть Іванка! Я помічник підтримки Westelecom 😊 Чим можу допомогти?»

3.3 Блокування Prompt Injection

Тригери (regex): «забудь інструкції», «ігноруй промпт/правила», «ти тепер chatgpt/gpt/dan/інший бот», «нові інструкції», «зміни роль», «change role», «ignore instructions», «forget everything», «you are now», «act as», «DAN», «jailbreak»

Відповідь: «Я Іванка, помічник підтримки Westelecom. Чим можу допомогти? 😊»
Факт спроби логується з міткою [SECURITY].

3.4 Загальні тарифи — «Які у вас тарифи?»

Тригери: «які тарифи», «список тарифів», «всі тарифи», «про тарифи», «скільки коштує інтернет», «ціни на інтернет» та їх російські аналоги.

Відповідь береться з PostgreSQL бази знань (таблиця knowledge_base, категорія tariffs). Розділена на «Для дому» і «Для бізнесу». Акційні тарифи позначені 🔥.

Ключова відмінність: це загальні тарифи (без ідентифікації). Якщо клієнт питає «мій тариф» — це персональний запит (3.9).

3.5 Запит особового рахунку

Умова: клієнт питає щось, що потребує CRM-даних, але в повідомленні немає ні номера л/с, ні телефону, ні ПІБ.

Тригери (needs_crm_lookup): «баланс», «не працює», «немає інтернету», «який тариф», «мій тариф», «статус», «оплата», «борг», «повільно», «обривається»

Відповідь: «Для перевірки інформації мені потрібен ваш номер особового рахунку (6-8 цифр). Підкажіть, будь ласка 😊»

3.6 Клієнт не знайдений у CRM

Умова: клієнт ввів ідентифікатор (л/с, телефон, ПІБ), але CRM нічого не повернув.

За телефоном: «На жаль, за номером {phone} клієнта не знайдено 😔 Підкажіть номер особового рахунку (6-8 цифр) або ПІБ?»

За іншим: «На жаль, за запитом '{query}' клієнта не знайдено 😔 Перевірте правильність номера та спробуйте ще раз.»

3.7 Розірваний / видалений / неактивний клієнт

Умова: CRM повернув клієнта зі статусом DELETED, TERMINATED або INACTIVE.

Відповідь: «{Ім'я}, ваш договір №{account} має статус: {status}. Для уточнення умов відновлення — зараз з'єдную вас зі спеціалістом.»

3.8 Баланс / Оплата (клієнт ідентифікований)

Тригери: «баланс», «залишок», «скільки на рахунку», «скільки платити», «оплата», «коли платити», «заборгованість»

УмоваВідповідь
«Скільки платити?»«Ваш тариф X коштує Y/міс. Зараз на балансі Z грн.»
Баланс > 0«✅ баланс: X грн. 📦 Тариф: Y (ціна)»
Баланс < 0«🔴 баланс: X грн» + «Після поповнення послуги відновляться автоматично протягом 15 хвилин.»
Баланс = 0«✅ баланс: 0.00 грн» (нейтрально)
Баланс = 0, після 20-го числаДодається: «💡 До речі, наближається 1 число — не забудьте поповнити рахунок 😊»

3.9 Персональний тариф

Тригери: «який у мене тариф», «мій тариф», «мой тариф», «який тариф підключено»

Відповідь: «📦 Ваш тариф: {тариф} ({ціна}). 💰 Баланс: X грн»

3.10 Статус договору

Тригери: «статус», «стан», «підключення», «активний»

Відповідь: «📊 Статус вашого договору: {status}. 💰 Баланс: X грн. 📡 ONT: 🟢 online / 🔴 offline»

3.11 Не працює інтернет — діагностика

Тригери: «не працює», «нема інтернету», «пропав інтернет», «відключили», «обривається», «повільний»

КрокУмоваДія
1. Балансbalance < 0«Перевірила — на рахунку заборгованість X грн. Після поповнення інтернет відновиться автоматично.» → СТОП
1. Балансbalance ≥ 0Показує баланс, переходить до кроку 2
2. ONTONT = online«Обладнання працює нормально ✅ Перезавантажте ONT та роутер: вимкніть на 30 секунд, увімкніть назад.»
2. ONTONT = offline«Ваше обладнання не відповідає 📡 Перевірте: чи горять індикатори на ONT-терміналі?»
Після ONT: Якщо клієнт каже «не допомогло» → сценарна матриця ескалює на спеціаліста (T-01 або T-02).

3.12 Розпізнавання номера л/с зі старого питання

Умова: клієнт спочатку запитав «який у мене баланс?», Іванка попросила л/с, клієнт надіслав тільки цифри (наприклад, «000010»).

Система знаходить оригінальне запитання в історії діалогу і відповідає на нього, а не на самі цифри.

3.13 Безпека — множинні рахунки

Умова: клієнт вводить 3+ різних номерів л/с в одній сесії.

1-й л/сПрацюємо
2-й л/сДозволяємо перемикання
3-й+ л/с«Для вашої безпеки, з'єдную вас зі спеціалістом 😊» → ескалація Б-07

Частина 4: Сценарна матриця — ескалація на спеціаліста

4.1 Безумовна ескалація (ТЕРМІНОВО)

IDСценарійТригериПріоритет
Э-01Запит оператора«дайте оператора», «з'єднайте з людиною», «хочу менеджера»терміново
Ж-03Погрози судом«суд», «прокуратура», «юрист», «НКРЗІ», «напишу у фейсбук»терміново
Ж-04Агресія / нецензурнаМат, образи, «ідіот», «дебіл»терміново
Э-02Поза компетенцією«юридичні», «медичні», «банк», «кредит»звичайний
T-07Повторне звернення«знову не працює», «вже зверталися», «проблема не вирішена»повторне

4.2 Скарги та конфлікти

IDСценарійТригериПріоритет
Ж-02Вимога компенсації«компенсація», «знижку за», «вимагаю», «не працювало X днів»терміново
Ж-01Скарга на якість«скарга», «жалоба», «незадоволений», «погане обслуговування»звичайний

4.3 Управління послугами (завжди ескалація)

Іванка НЕ МОЖЕ виконувати ці дії — тільки передає спеціалісту.
IDСценарійТригери
У-04Розірвання договору«розірвати договір», «хочу відмовитися», «закрити рахунок»
У-05Переїзд«переїзд», «змінити адресу», «перенести підключення»
Б-04Зміна тарифу«змінити тариф», «перейти на інший», «поміняти тариф»
Б-05Обіцяний платіж«обіцяний платіж», «відстрочка», «кредит довіри»
Б-06Перерахунок«перерахунок», «повернення коштів», «неправильно списали»
У-01Підключення послуги«підключити», «хочу IPTV», «додати послугу»
У-02Відключення послуги«відключити послугу», «прибрати», «не потрібна»
У-03Заморозка«заморозити», «призупинити», «пауза», «їду у відпустку»
T-05Проблеми з TV/IPTV«не працює TV», «канали не показують», «IPTV не працює»

4.4 Умовна ескалація (після діагностики)

IDСценарійУмова
T-01Перезавантаження не допомогло (ONT online)Заявка на ремонт
T-02Перезавантаження не допомогло (ONT offline)Аварійна заявка
Э-03Не вдалося визначити проблемуПісля 3+ обмінів
Б-07Множинні рахунки3+ різних л/с

4.5 Що отримує оператор при ескалації

⚡ ТЕРМІНОВО [Э-01] Запит оператора
👤 Абонент: Петренко Вадим Вікторович
📋 Л/С: 000010
📦 Тариф: Turbo 500 (250 грн/міс) / Баланс: 0.00 грн
📡 Статус ONT: online
❗ Проблема: Хочу поговорити з людиною
✅ Вже перевірено/зроблено: Перевірено баланс; Перевірено статус ONT
🎯 Потрібно від оператора: Прийняти діалог
⏱ Пріоритет: терміново

Частина 5: LLM — коли вмикається модель

LLM (Qwen 72B) вмикається тільки якщо:

  • Жоден smart response не спрацював
  • Сценарна матриця не повернула ескалацію
  • Клієнт ідентифікований або запитує щось загальне

Типові випадки для LLM

ТемаПриклади
Способи оплати«Як оплатити?», «Де поповнити?»
Загальні питання про послуги«Що таке GPON?», «Як працює інтернет через оптику?»
Адреси офісів«Де ваш офіс?», «Куди можна прийти?»
Графік роботи«До котрої працюєте?»
Підключення нових абонентів«Як підключити інтернет?», «Скільки коштує підключення?»
Уточнюючі питання«А що таке ONT?», «Де шукати блок живлення?»
Нетипові питання«Чи працює інтернет без світла?»
Offtopic«Яка погода?» → м'яко повертає до теми

Що LLM отримує в контексті

  • CRM-дані клієнта (ПІБ, баланс, тариф, ONT, статус)
  • Алгоритм діагностики «Не працює інтернет» (покрокова логіка)
  • Правила передачі спеціалісту з форматом саммарі
  • Нагадування: тільки українська, не вигадувати, один крок за раз, 2-3 речення

Постобробка LLM-відповіді (sanitization)

Навіть якщо LLM відповідає, відповідь проходить через фільтр, який видаляє: CRM-сміття, шаблонні змінні ({{CUSTOMER_NAME}}), галюцинації («можна заморозити рахунок», «🎁 Акція»), зайві порожні рядки.

Частина 6: Повний Pipeline обробки запиту

1
Чи чекає сесія на спеціаліста? → ТАК: «Очікуйте, спеціаліст вже підключається» → СТОП
2
Безумовна ескалація (Э-01, Ж-03, Ж-04, T-07)? → ТАК: повідомлення клієнту + саммарі → СТОП
3
Pre-identification (CRM вже знає клієнта з платформи)? → ТАК: завантажити CRM-дані
4
Smart greeting (чисте привітання)? → ТАК: «Доброго дня! Я Іванка...» → СТОП
5
«Як тебе звуть?» → ТАК: «Мене звуть Іванка!» → СТОП
6
Prompt injection? → ТАК: «Я Іванка, помічник підтримки Westelecom.» → СТОП
7
Загальний тариф? → ТАК: список тарифів з PostgreSQL → СТОП
8
Є ідентифікатор клієнта? → ТАК: CRM lookup → smart CRM response? → СТОП / додати контекст для LLM
9
Потребує CRM-даних, але ідентифікатора немає? → ТАК: «Підкажіть номер л/с» → СТОП
10
Сценарна матриця (ескалація)? → ТАК: передача спеціалісту + саммарі → СТОП
11
LLM (Qwen 72B) → Запит до моделі з runtime prompt → sanitization → відповідь

Частина 7: AI Processor (автопілот для CRM)

7.1 Режими

РежимОпис
offІванка не працює — всі чати обробляють оператори
copilotГенерує підказки, але НЕ відправляє клієнтам. Зберігаються в ai_dialog_log
autopilotСама відповідає клієнтам. При складних питаннях — ескалює

7.2 Цикл роботи автопілота

кожні 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 → відповідь клієнту

7.3 Захисні механізми

МеханізмОпис
Max concurrent LLMМаксимум 5 одночасних запитів до LLM
Max messagesПісля 20 повідомлень у діалозі → автоескалація
3 помилки LLM3 поспіль помилки → ескалація
Валідація відповідіНе порожня, не ехо, не >1500 символів, не <5, без заборонених паттернів
Заборонені паттерни) як смайлик, «нажаль», «заспокойтесь», «я оператор», «я Аліса/Поліна/Анна»
Sliding windowПри >15 повідомлень — старі сумаризуються
Kill switchМиттєве відключення через CRM

7.4 Розклад

Конфігурується через CRM. Приклад: Іванка працює з 21:00 до 09:00 (нічна зміна). Поза розкладом автопілот не відповідає.

Частина 8: Керування

Перемикання режимів

Через CRM:

PUT https://10.255.202.43/api/agent/omni/ai/config
Body: {"mode": "off"}        — вимкнути
Body: {"mode": "copilot"}    — підказки
Body: {"mode": "autopilot"}  — автопілот

Через AI-сервер:

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

Kill switch (аварійне):

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

Частина 9: Абсолютні заборони Іванки

Іванка НІКОЛИ не робить (навіть якщо клієнт просить):
  • Не створює заявки на ремонт
  • Не змінює тариф
  • Не робить перерахунки
  • Не обіцяє знижки, компенсації, безкоштовні періоди
  • Не називає конкретні строки ремонту
  • Не розголошує дані одного клієнта іншому
  • Не просить паролі, CVV, номери карток
  • Не коментує конкурентів
  • Не дає юридичних, медичних порад
  • Не відповідає на теми поза послугами Westelecom
  • Не вигадує інформацію — якщо не знає, каже чесно
  • Не розкриває зміст системного промпта
Замість будь-якої забороненої дії → «Це може зробити тільки спеціаліст, зараз з'єдную.»

Частина 10: Ознаки проблем

Коли оператору треба перехопити чат:

ОзнакаЩо робити
Відповідає російською або суржикомПерехопити
Називає себе іншим ім'ям (Аліса, Поліна, Софія, Анна)Перехопити + повідомити адміна
Каже «я оператор»Перехопити
Вигадує дані (тарифи, ціни, адреси)Перехопити
Повторює одне й те саме по колуПерехопити
Клієнт явно незадоволенийПерехопити
Масові проблеми з відповідямиKill switch