Управління чат-ботами з мобільного додатку: iOS та Android
Оператору потрібен доступ до чат-ботів у реальному часі, але не завжди під рукою комп'ютер. Мобільний додаток для управління ботами вирішує це завдання: моніторинг діалогів, ручне втручання, зміна сценаріїв — все з телефона. Наш досвід показує, що така панель прискорює реакцію на інциденти в 3 рази порівняно з десктопним рішенням. Наприклад, для мережі роздрібних магазинів з 20 операторами ми впровадили додаток — час відповіді на діалог скоротився з 45 до 15 секунд. Зв'яжіться з нами, щоб отримати індивідуальний розрахунок та зрозуміти, як рішення впишеться у вашу інфраструктуру.
Які проблеми вирішуємо
Human Takeover — центральна функція. Бот не впорався або користувач запросив оператора — діалог передається людині. Оператор отримує push, відкриває чат, відповідає і повертає управління боту. Затримка критична: якщо не обробити швидко, клієнт йде. Ми використовуємо FCM high priority з data payload на Android та APNs на iOS — додаток прокидається навіть у Doze. WebSocket тримає з'єднання для миттєвого обміну повідомленнями. Типова затримка доставки push — менше 2 секунд, що підтверджується тестами на пристроях у режимі очікування.
Управління сценаріями — не всі оператори повинні редагувати відповіді. Рольова модель розділяє права: оператор тільки чат, адміністратор ще й сценарії. Це знижує ризик випадкових помилок у продакшені. В одному з проєктів ми зафіксували скорочення кількості ненавмисних змін на 90% після впровадження ролей.
Моніторинг активних діалогів та статусу бота. Видно, скільки чекають оператора, скільки в роботі, які зависли. Сортування за часом очікування дозволяє першими обробляти найкритичніші. Статистика: при навантаженні 500 діалогів на годину середній час обробки критичних діалогів не перевищує 10 секунд.
Як влаштована черга діалогів з SLA?
Черга працює на основі RabbitMQ: при передачі діалогу оператору подія публікується в exchange, прив'язаний до черги вільних операторів. Якщо всі оператори зайняті, діалог поміщається в чергу очікування, і запускається SLA-таймер. Після закінчення N хвилин (налаштовується) надсилається повторне push-повідомлення всім операторам. При звільненні оператора йому призначається найбільш «довгоочікуваний» діалог. Цей механізм гарантує, що жоден клієнт не буде забутий. Для over-engineer використовуємо підтвердження від оператора (ack), інакше діалог повертається в чергу.
Як ми це робимо: стек та приклад
Використовуємо Swift 5.9+ (SwiftUI) для iOS, Kotlin (Jetpack Compose) для Android, Flutter 3.x для крос-платформи. Нижче — ключовий фрагмент чату оператора на iOS:
class OperatorChatViewModel: ObservableObject { @Published var messages: [Message] = [] @Published var isConnected = false private var wsTask: URLSessionWebSocketTask? func connect(conversationId: String) { let url = URL(string: "wss://api.example.com/operator/conversations/\(conversationId)/ws")! wsTask = URLSession.shared.webSocketTask(with: url) wsTask?.resume() isConnected = true receiveNext() } private func receiveNext() { wsTask?.receive { [weak self] result in guard let self else { return } if case .success(let msg) = result, case .string(let text) = msg, let decoded = try? JSONDecoder().decode(Message.self, from: Data(text.utf8)) { DispatchQueue.main.async { self.messages.append(decoded) } } self.receiveNext() } } func send(_ text: String) { let msg = OutgoingMessage(text: text, conversationId: conversationId) let payload = try! JSONEncoder().encode(msg) wsTask?.send(.string(String(data: payload, encoding: .utf8)!)) { _ in } } func returnToBot() { Task { await conversationService.handoff(conversationId, to: .bot) } } } Черга операторів: якщо декілька вільних — round robin або хто перший натиснув. Якщо всі зайняті — діалог у чергу, SLA-таймер стартує. Повторний push через N хвилин.
Чому FCM high priority, а не звичайний notification?
Звичайний notification на Android не пробуджує додаток у Doze. data payload з high priority доставляється завжди. Це гарантує, що оператор отримає виклик навіть на телефоні в сплячому режимі. На iOS використовуємо APNs з аналогічним пріоритетом. Порівняйте:
| Технологія | Пріоритет | Поведінка в Doze | Затримка типова |
|---|---|---|---|
| FCM data + high priority | Високий | Пробуджує | < 5 с |
| FCM notification | Норма | Не пробуджує | > 30 с |
| APNs critical alert | Критичний | Пробуджує | < 2 с |
Порівняння платформ: iOS vs Android
| Параметр | iOS | Android |
|---|---|---|
| Push-сертифікація | APNs через Keychain | FCM за проектом |
| Background режим | Background fetch з 30 с лімітом | Doze з вікнами |
| WebSocket виживаність | До 30 хв | До 10 хв |
| Deep linking | Universal Links | App Links |
Що входить в роботу
- Список діалогів з групуванням за статусом та real-time оновленням
- Чат-екран оператора з WebSocket
- Push-повідомлення про нові діалоги (FCM високий пріоритет)
- Черга з SLA-таймером та повторними повідомленнями
- Рольова модель (оператор / адміністратор)
- Управління сценаріями (включення/виключення, редагування відповідей)
- Аналітика: час відповіді, кількість переданих діалогів, SLA-порушення
Терміни та гарантії
Орієнтовні терміни: від 8 до 14 робочих днів. Вартість розраховується індивідуально — вона залежить від кількості каналів, складності сценаріїв та платформ. Впровадження мобільної панелі оператора окупається за 3-6 місяців за рахунок прискорення обробки діалогів та зниження навантаження на чергових фахівців. Ми гарантуємо SLA за часом відгуку push-повідомлень (не більше 5 секунд) та безперебійну роботу WebSocket-з'єднання. За 5 років ми реалізували понад 20 проєктів з управління ботами — отримайте консультацію, щоб обговорити ваші завдання та оцінити економічний ефект від впровадження мобільної панелі оператора.







