Уявіть: ваш мобільний додаток обробляє сотні звернень на день. Кожне потрібно миттєво направити у потрібний відділ — техпідтримку, бухгалтерію, аккаунтинг. Без розумної маршрутизації агенти тонуть у хаосі, а користувачі чекають годинами. Ми проєктуємо та впроваджуємо 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-маршрутизації для мобільних додатків. Щоб дізнатися, як ця технологія може покращити ваш додаток, пишіть нам — ми проведемо безкоштовний аудит поточної системи та запропонуємо оптимальне рішення.







