Зауважимо: коли штат компанії перевищує 5000 осіб, стандартні месенджери стають вузьким місцем: витоки даних, затримки повідомлень, відсутність офлайн-синхронізації. Без правильного підходу корпоративний месенджер перетворюється на джерело вразливостей і збоїв. Ми розробляємо корпоративні месенджери під ключ — від протоколу до публікації в сторах. В одному з проєктів для рітейлера з 5000+ співробітників ми обробляли 100+ повідомлень на секунду при 99,9% uptime. Нижче — технічні рішення, які лежать в основі. Інвестиції в розробку окупаються за рахунок скорочення часу на комунікацію до 40%.
Якої інфраструктури потребує корпоративний месенджер?
Корпоративний месенджер — це не просто CRUD з WebSocket. Він включає реалтайм-транспорт, E2E-шифрування, push-сповіщення, зберігання історії, медіа-обмін та синхронізацію між пристроями. Кожен з цих компонентів вимагає окремого підходу. Наприклад, для групи з 5000 користувачів з піковим навантаженням 200 повідомлень на секунду необхідна архітектура з горизонтальним масштабуванням та балансуванням WebSocket-з'єднань.
Який транспортний протокол обрати для корпоративного месенджера?
Вибір протоколу визначає масштабованість та складність підтримки. WebSocket у парі з власним протоколом дає повний контроль, але вимагає реалізації reconnect, heartbeat, acknowledgement та черги повідомлень при втраті зв'язку. XMPP — зрілий стандарт з готовими серверами (Ejabberd, OpenFire, Prosody) та бібліотеками для iOS/Android. Він з коробки дає presence, MUC та OMEMO для шифрування. Matrix — більш сучасний варіант з E2E за замовчуванням та федерацією, але жорстка прив'язка до homeserverу (Synapse). Для корпоративних завдань частіше обираємо WebSocket + custom backend (NestJS + Redis Pub/Sub + PostgreSQL). XMPP виправданий при інтеграції з існуючою XMPP-інфраструктурою, Matrix — якщо потрібна федерація між організаціями. Ключове рішення приймаємо на основі вашої IT-картини.
| Протокол | Масштабованість | Складність | E2E за замовчуванням | Федерація |
|---|---|---|---|---|
| WebSocket + custom | Висока | Висока | Ні | Ні |
| XMPP | Середня | Середня | OMEMO | Так |
| Matrix | Середня | Низька | Так | Так |
Як реалізувати E2E-шифрування в групових чатах?
Signal Protocol — де-факто стандарт для E2E. Використовується в Signal, WhatsApp, Skype. Для мобільного: libsignal-protocol-java (Android), SignalProtocolKit (iOS). Протокол базується на Double Ratchet Algorithm: кожне повідомлення шифрується новим ключем, компрометація одного не розкриває інші (forward secrecy).
Реалізація шифрування на Kotlin
// Шифрування вихідного повідомлення val sessionCipher = SessionCipher(signalStore, recipientAddress) val encryptedMessage = sessionCipher.encrypt(plaintext.toByteArray()) val payload = Base64.encodeToString(encryptedMessage.serialize(), Base64.NO_WRAP) Для груп — Sender Key Distribution: один ключ шифрує для всіх, ефективніше ніж шифрування кожному. Ключі зберігаються лише на пристрої. При видаленні додатку історія втрачається — це trade-off. Рішення: опціональний бекап ключів через iCloud Keychain / Google Drive за згодою користувача.
Покроковий план впровадження E2E:
- Виберіть бібліотеку Signal Protocol для кожної платформи.
- Налаштуйте сервер для зберігання зашифрованих повідомлень та управління ключами.
- Інтегруйте шифрування/дешифрування на клієнтах.
- Проведіть тест компрометації ключів.
Зберігання та синхронізація історії
Локальна база — Room (Android) / Core Data (iOS). Повідомлення з полями id, conversationId, senderId, encryptedContent, timestamp, status (sent / delivered / read). Синхронізація при перевстановленні: якщо E2E без бекапу — історія недоступна. З бекапом — посторінкове завантаження через cursor-based pagination. Статуси доставки та прочитання — через WebSocket ack. В офлайні накопичуються та відправляються пакетом.
Медіа та файли
Завантаження через окремий HTTP endpoint. Для зображень: спочатку thumbnail (JPEG, 200px, якість 40), потім оригінал. Відео — HLS або progressive download. Chunked upload з відновленням (S3 Multipart Upload). Прогрес через okhttp3.MultipartBody. Кеш через Glide/Kingfisher з LRU-видаленням старих файлів.
Push-сповіщення та бейджі
Для закритого додатку — FCM (Android) / APNs (iOS). На iOS UNNotificationServiceExtension розшифровує E2E перед показом. На Android 13+ запит дозволу POST_NOTIFICATIONS. Бейдж на iOS: UNUserNotificationCenter.setBadgeCount() (з iOS 16) або через push-payload. На Android — ShortcutBadger (лончер-залежний).
Етапи та терміни
| Етап | Зміст | Термін |
|---|---|---|
| Проектування | Архітектура протоколу, E2E-рішення, БД | 2-3 тижні |
| Backend | WebSocket-сервер, API, сховище | паралельно з клієнтом |
| iOS + Android | Реалтайм, UI, медіа, push | 10-14 тижнів |
| E2E-шифрування | Signal Protocol або OMEMO | +3-4 тижні |
| Тестування | Навантажувальне (до 10k юзерів), реалтайм, edge-кейси | 2-3 тижні |
MVP без E2E (базові чати, push, історія) — 3-4 місяці. Повна версія з E2E — 5-7 місяців. Вартість розраховується індивідуально.
Що входить в роботу
- Технічне завдання та архітектурна документація
- Вихідний код під iOS та Android з коментарями
- Інтеграція з вашою IT-інфраструктурою (SSO, API, корпоративна пошта)
- Налаштування CI/CD та публікація в магазинах додатків
- Навчання адміністраторів та користувачів
- Гарантійна підтримка 3 місяці
Чек-лист для перевірки готовності
- [ ] WebSocket-з'єднання в background на iOS та Android
- [ ] APNs та FCM сертифікати
- [ ] Penetration test на E2E
- [ ] Синхронізація історії після перевстановлення
- [ ] Навантажувальне тестування з 5000+ concurrent users
Досвід нашої команди розробників — 10+ років у мобільній розробці, понад 50 корпоративних проєктів. Ми використовуємо Signal Protocol для шифрування та WebSocket API для реалтайму. Інвестиції в розробку окупаються в середньому за 12-18 місяців, а економія на операційних витратах може сягати 40%. Замовте консультацію для оцінки вашого проєкту — отримайте попередню оцінку за 2 дні. Зв'яжіться з нами, щоб обговорити деталі вашого корпоративного месенджера.







