AI-диспетчер — цифровий співробітник для координації завдань
Диспетчерська служба часто тоне в заявках. Оператори вручну перебирають пошту та чати, призначають виконавців на око. SLA постійно зриваються. Така ситуація знайома багатьом. Ми стикалися з нею в телекомі, де щодня оброблялося 800 заявок на технічні виїзди. Ручна диспетчеризація не справлялася: середній час призначення завдання становив 12 хвилин, перевантаження окремих інженерів досягало 30%, а дотримання SLA трималося на рівні 71%. Після впровадження AI-диспетчера час призначення скоротився до 45 секунд, дотримання SLA зросло до 89%, а навантаження на інженерів вирівнялося. Модель класифікації донавчається на ваших історичних даних, що підвищує точність з кожним місяцем.
Наш цифровий диспетчер автоматично приймає вхідні заявки, класифікує їх, призначає виконавців з урахуванням завантаження та компетенцій, відстежує виконання та ескалює прострочені завдання. Все це — без участі людини. Ми впроваджуємо такі системи під ключ: від налаштування класифікатора до інтеграції з вашою CRM.
Як AI-диспетчер маршрутизує заявки?
Ядро системи — інтелектуальний intake та маршрутизація. Процес складається з трьох кроків: класифікація заявки, скоринг виконавців, моніторинг виконання. Розглянемо на прикладі коду:
from openai import AsyncOpenAI from pydantic import BaseModel from typing import Literal, Optional client = AsyncOpenAI() class TaskClassification(BaseModel): category: str priority: Literal["critical", "high", "normal", "low"] required_skill: str estimated_duration_minutes: int location: Optional[str] sla_hours: float special_requirements: list[str] class DispatcherAgent: def __init__(self, team_db, task_db): self.team_db = team_db self.task_db = task_db async def process_incoming_request(self, request: dict) -> dict: cls = await client.beta.chat.completions.parse( model="gpt-4o", messages=[{ "role": "system", "content": "Классифицируй входящую заявку для диспетчеризации. Определи приоритет, категорию, необходимые компетенции и ожидаемое время выполнения." }, { "role": "user", "content": f"Заявка: {request['description']}\nОт: {request['client']}\nКонтакт: {request['contact']}" }], response_format=TaskClassification, temperature=0, ) task_class = cls.choices[0].message.parsed assignee = await self.select_best_assignee(task_class, request.get("location")) task = await self.task_db.create({ "title": request.get("title", f"Заявка от {request['client']}"), "description": request["description"], "category": task_class.category, "priority": task_class.priority, "required_skill": task_class.required_skill, "assignee_id": assignee["id"] if assignee else None, "sla_deadline": datetime.now() + timedelta(hours=task_class.sla_hours), "status": "assigned" if assignee else "pending", }) if assignee: await self.notify_assignee(assignee, task) return {"task_id": task["id"], "assignee": assignee, "sla": task["sla_deadline"]} async def select_best_assignee(self, task, location): available = await self.team_db.get_available(skill=task.required_skill, shift="current") if not available: return None scored = [] for person in available: score = 100 current_load = await self.task_db.count_active(person["id"]) score -= current_load * 10 if location and person.get("current_location"): distance = calculate_distance(location, person["current_location"]) score -= min(distance / 10, 30) if task.required_skill in person.get("specializations", []): score += 20 scored.append({**person, "score": score}) return max(scored, key=lambda x: x["score"]) if scored else None На першому кроці модель GPT-4o аналізує опис заявки та витягує категорію, пріоритет, необхідні навички. Алгоритм скорингу використовує базу 100 балів: штраф за завантаження (10 балів за активне завдання) та дистанцію (до 30 балів), бонус за спеціалізацію (20 балів). Це забезпечує оптимальний розподіл з урахуванням поточної ситуації.
Деталі алгоритму скорингу
Алгоритм також враховує історію виконаних завдань виконавця, його рейтинг та доступність за графіком. Модель може бути доповнена бізнес-правилами, наприклад, пріоритетом для VIP-клієнтів або обов'язковою наявністю сертифіката.
Чому SLA-моніторинг критичний?
Будь-яке завдання має Service Level Agreement (SLA) — термін виконання. Якщо його порушити, страждає репутація бізнесу. Наш AI-диспетчер не просто створює завдання — він стежить за ними в реальному часі. Кожні 15 хвилин система перевіряє залишковий час до дедлайну. Якщо до SLA менше години — надсилається нагадування виконавцю, менше 30 хвилин — термінове повідомлення, при порушенні — ескалація керівнику. Код моніторингу:
class SLAMonitor: async def check_and_escalate(self): tasks = await self.task_db.get_active_tasks() now = datetime.now() for task in tasks: sla_deadline = task["sla_deadline"] time_to_sla = (sla_deadline - now).total_seconds() / 3600 if time_to_sla < 0: await self.handle_sla_breach(task) elif time_to_sla < 0.5: await self.send_urgent_reminder(task) elif time_to_sla < 1 and task["status"] == "assigned": await self.escalate_to_supervisor(task, reason="task_not_started") async def handle_sla_breach(self, task): breach_message = await client.chat.completions.create( model="gpt-4o-mini", messages=[{ "role": "system", "content": "Создай сообщение об эскалации нарушения SLA для руководителя. Краткое, конкретное." }, { "role": "user", "content": f"Задача: {task['title']}, нарушение SLA на {abs(int((datetime.now() - task['sla_deadline']).total_seconds() / 60))} мин" }], ) await slack_client.post_message( channel="#dispatcher-escalations", text=f"🚨 SLA нарушен:\n{breach_message.choices[0].message.content}", ) await self.task_db.update(task["id"], {"sla_status": "breached"}) Як навчити класифікатор заявок?
Для навчання класифікатора ми використовуємо ваші історичні дані. Етапи:
- Збір датасету: не менше 500 розмічених заявок.
- Попередня обробка: очищення, лематизація.
- Тюнінг моделі: fine-tuning GPT-4o або іншого LLM на задачах класифікації.
- Валідація: перевірка accuracy на відкладеній вибірці (не менше 85%).
- Розгортання: завантаження моделі в SageMaker або Vertex AI.
Які результати показав AI-диспетчер в телекомі?
З нашої практики: телеком-оператор з польовими інженерами, 800 заявок на технічні виїзди на день. До впровадження — ручний розподіл, 12 хвилин на призначення завдання, 71% дотримання SLA. Після — AI-диспетчер.
| Параметр | До | Після |
|---|---|---|
| Час призначення завдання | 12 хв | 45 сек |
| Дотримання SLA | 71% | 89% |
| Перевантаження інженерів | ~30% нерівномірність | -34% (рівномірний розподіл) |
AI-диспетчер призначає завдання в 16 разів швидше за людину, а дотримання SLA підвищується на 18 процентних пунктів. Система приймає заявки через чат, email, API CRM; класифікує їх за 8 типами (підключення, ремонт, заміна обладнання); призначає інженера з урахуванням навичок, завантаження, геолокації; контролює SLA (4 год для критичних, 24 год для стандартних); автоматично нагадує та ескалює прострочені завдання.
Що входить в розробку AI-диспетчера
- Класифікатор заявок: налаштування категорій, пріоритетів, необхідних навичок
- Алгоритм призначення: скоринг виконавців за завантаженням, навичками, геолокацією
- SLA-моніторинг: автоматичні перевірки, нагадування, ескалації
- Інтеграція: з CRM, месенджерами (Slack/Telegram), API сповіщень
- Документація: опис архітектури, інструкції для адміністратора
- Навчання: тренування моделі класифікації на ваших даних
- Підтримка: гарантійне обслуговування 3 місяці після запуску
Терміни впровадження
| Етап | Тривалість |
|---|---|
| Класифікатор заявок | 1–2 тижні |
| Алгоритм призначення | 1–2 тижні |
| SLA-моніторинг та ескалації | 1 тиждень |
| Інтеграція з CRM та сповіщеннями | 1–2 тижні |
| Разом | 4–7 тижнів |
Зв'яжіться з нами, щоб обговорити впровадження AI-диспетчера у вашу службу. Отримайте консультацію з оптимізації диспетчеризації. Наш досвід: сертифіковані інженери, робота з великими телеком-операторами.







