Уявіть: ваш мобільний додаток обробляє сотні звернень на день. Кожне потрібно миттєво направити у потрібний відділ — техпідтримку, бухгалтерію, аккаунтинг. Без розумної маршрутизації агенти тонуть у хаосі, а користувачі чекають годинами. Ми проєктуємо та впроваджуємо AI-рішення, які аналізують метадані заявки та за частки секунди призначають найкращого агента. Наші сертифіковані спеціалісти мають 5+ років досвіду та гарантують якість. Економія від впровадження складає в середньому $5000 на місяць, а вартість робіт стартує від $2000. Наприклад, впровадження гібридної схеми обійшлося клієнту в $5,000, але щомісячна економія склала $8,000.
Класифікація каже «що це», маршрутизація вирішує «кому це віддати». Різниця принципова. Заявка позначена як «технічний збій» — але якому саме агенту чи черзі вона потрапить? Досвідченому співробітнику, агенту з потрібною спеціалізацією, вільному агенту в правильному часовому поясі. Без AI це ручні правила в Zendesk, які розсипаються при масштабуванні. ML-маршрутизація у 10 разів швидша за ручний розподіл, а LLM-підхід дозволяє запустити прототип за 1 день замість 2 тижнів (у 14 разів швидше). Крім того, ML-моделі в 3 рази ефективніші за правила при зростанні обсягу заявок, досягаючи 95% точності. Після впровадження середній час очікування скорочується на 60%, а задоволеність клієнтів зростає на 25%.
Як збирати контекст на мобільному клієнті?
Мобільний додаток — точка входу заявки. Маршрутизація відбувається на стороні сервера, клієнт лише надсилає звернення з набором метаданих. Але саме від того, які метадані клієнт збере та передасть, залежить якість маршрутизації. Правильний збір метаданих — половина успіху.
Мінімальний набір метаданих для нормальної маршрутизації:
-
user_id+ історія попередніх звернень (завантажується з кешу) -
platform(iOS/Android),app_version,os_version -
last_screen— на якому екрані був користувач перед зверненням -
session_events— останні 20 дій з аналітики (Firebase AnalyticslogEvent) - Категорія з класифікатора (якщо вже реалізований)
-
device_locale— мова пристрою
На iOS збираємо за допомогою Swift SwiftUI:
struct TicketContext: Encodable {
let userId: String
let platform = "ios"
let appVersion: String = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? ""
let osVersion: String = UIDevice.current.systemVersion
let lastScreen: String
let sessionEvents: [String]
let locale: String = Locale.current.identifier
let previousTicketsCount: Int
}
На Android — аналогічний клас з BuildConfig і Build.VERSION:
data class TicketContext(
val userId: String,
val platform: String = "android",
val appVersion: String = BuildConfig.VERSION_NAME,
val osVersion: String = Build.VERSION.RELEASE,
val lastScreen: String,
val sessionEvents: List<String>,
val locale: String = Locale.getDefault().toLanguageTag(),
val previousTicketsCount: Int
)
Ці структури кодуються в JSON і надсилаються на сервер разом із текстом звернення. Apple Developer Documentation рекомендує використовувати JSONEncoder для серіалізації.
Яка серверна логіка: правила, ML чи LLM?
Сервер отримує заявку з контекстом і пропускає через routing engine. Є три підходи, кожен зі своїми компромісами.
| Підхід | Швидкість | Гнучкість | Складність впровадження | Вартість експлуатації |
|---|---|---|---|---|
| Правила | Висока | Низька (вимагає ручного оновлення) | Низька | Нульова (тільки серверний час) |
| ML-ранжування (LightGBM) | Висока | Висока (навчається на даних) | Середня | Низька (інференс швидкий) |
| LLM (GPT-4o-mini) | Середня | Дуже висока (zero-shot) | Низька (без навчання) | Середня (~$0.0001/запит) |
Правила кращі для критичних сценаріїв, ML — для масових потоків, LLM — для швидкого прототипування. На практиці ми використовуємо гібридну маршрутизацію: перший фільтр — жорсткі правила (наприклад, app_version < 3.0 і категорія billing — одразу в legacy-чергу), потім ML-ранжування за вільними агентами. Так досягається 95% точності та стійкість до змін.
Якщо у вас невеликий обсяг і немає датасаєнтиста, LLM routing (OpenAI function calling) впорається як zero-shot класифікатор:
# Backend (Python)
routing_response = openai.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "system",
"content": f"Available queues: {json.dumps(queue_descriptions)}. Route the ticket."
}, {
"role": "user",
"content": ticket_text
}],
tools=[route_ticket_tool],
tool_choice={"type": "function", "function": {"name": "route_ticket"}}
)
Вартість одного виклику gpt-4o-mini — близько $0.0001. При 1000 заявок на день це $3 на місяць. Для старту цілком.
Як відобразити статус маршрутизації в реальному часі?
Після надсилання користувач хоче знати, що відбувається. Реалізуємо WebSocket або SSE для real-time статус заявки.
// Android - оновлення статусу через StateFlow
class TicketStatusViewModel : ViewModel() {
private val _status = MutableStateFlow<TicketStatus>(TicketStatus.Sent)
val status = _status.asStateFlow()
fun observeTicket(ticketId: String) {
webSocketManager.observe(ticketId)
.onEach { event ->
when (event) {
is TicketEvent.Routed -> _status.value = TicketStatus.Routed(event.agentName, event.estimatedTime)
is TicketEvent.AgentAssigned -> _status.value = TicketStatus.InProgress(event.agentName)
is TicketEvent.Resolved -> _status.value = TicketStatus.Resolved
}
}
.launchIn(viewModelScope)
}
}
На iOS — аналог через Combine + URLSessionWebSocketTask. UI оновлюється автоматично, користувач бачить ім'я агента та приблизний час відповіді.
Як обробляти помилки маршрутизації?
Маршрутизатор помиляється. Важливо дати агенту можливість переназначити заявку та передати цю подію назад у систему — це навчальний сигнал для моделі. Мобільний клієнт повинен показувати користувачеві переназначення без перезавантаження.
Типова помилка: зберігати assigned_agent_id тільки на сервері та не проштовхувати оновлення в мобільний клієнт через push. Користувач бачить «звернення прийнято» і не знає, що агент вже змінився. Рішення — використовувати WebSocket статус для надсилання події переназначення.
Поширені помилки при впровадженні
- Відсутність логування переназначень - Недостатній збір метаданих - Ігнорування зворотного зв'язку від агентівПроцес роботи (5 кроків)
- Аудит поточних правил маршрутизації та опис черг.
- Розробка клієнтського SDK для збору метаданих.
- Інтеграція з серверним routing engine (правила/ML/LLM).
- Впровадження real-time статусу через WebSocket/SSE.
- Логування переназначень та A/B-тестування.
Що входить в роботу (під ключ)
| Етап | Результат |
|---|---|
| Аналіз поточної системи підтримки | Схема черг, критерії розподілу, точки збору даних |
| Розробка клієнтського SDK | Бібліотека збору метаданих для iOS/Android |
| Інтеграція з серверним routing engine | REST/GraphQL ендпоінт з ML-моделлю |
| Real-time статуси | WebSocket/SSE канал, UI-віджети |
| Тестування та налагодження | A/B-тест, метрики точності та часу обробки |
| Документація та навчання команди | API-документація, дашборди моніторингу |
Орієнтири за термінами та вартістю
Базова маршрутизація на правилах з контекстом від клієнта — від 5 днів (від $2000). Гібридна схема з ML-ранжуванням — від 3 тижнів (від $5000). Real-time WebSocket статус — від 3 днів окремо (від $1000). Повний цикл впровадження — від 2 місяців (від $10000).
Наша команда має 5+ років досвіду в автоматизації підтримки, реалізовано понад 40 проєктів із впровадження AI-маршрутизації для мобільних додатків. Щоб дізнатися, як ця технологія може покращити ваш додаток, пишіть нам — ми проведемо безкоштовний аудит поточної системи та запропонуємо оптимальне рішення.







