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-диспетчера у вашу службу. Отримайте консультацію з оптимізації диспетчеризації. Наш досвід: сертифіковані інженери, робота з великими телеком-операторами.







