Компания продаёт и обслуживает клиентов сразу в пяти местах, менеджеров четверо.
Avito, WhatsApp, VK, Telegram и почта - на каждый канал своя вкладка в браузере.
Сообщение приходило в ту вкладку, которая в этот момент была свёрнута, и висело час-полтора.
На Avito это дороже всего - скорость ответа там влияет на показы объявления.
Один и тот же человек писал сначала на Avito, потом в WhatsApp, и менеджер заново спрашивал, что ему нужно.
Кто с кем переписывается, было непонятно, двое могли ответить одному клиенту разное.
Просили одно окно, где видно все диалоги и видно, кто на них сидит.
Веб-приложение: FastAPI на бэке, React на фронте, PostgreSQL, очередь на Redis, всё в Docker на VPS.
Каждый канал - отдельный коннектор со своим клиентом и своими лимитами, наружу все отдают одинаковое сообщение.
Avito, VK и Telegram приходят вебхуками, WhatsApp через провайдера, почта забирается по IMAP раз в минуту.
Единый список диалогов, канал виден значком у аватарки, непрочитанные сверху, фильтры по каналу и по менеджеру.
Один клиент склеивается по нормализованному телефону и почте, номер беру из переписки или из заказа, то-есть Avito и WhatsApp с одним номером - одна карточка.
Карточка справа от переписки - контакты, все прошлые обращения по любому каналу, заказы, метки и заметки менеджеров.
Шаблоны быстрых ответов с подстановкой имени и товара, вставляются по слэшу и первым буквам, без мыши.
Распределение - новый диалог уходит свободному менеджеру по очереди, руководитель может перекинуть на другого.
Таймер без ответа: 15 минут на Avito и 30 на остальных каналах, просрочка красит диалог и уходит уведомлением руководителю в Telegram.
Фото, документы и голосовые складываю в S3 и раздаю по своей ссылке - у каналов ссылки на медиа живут недолго.
Права простые: менеджер видит свои диалоги и общую очередь, руководитель - все диалоги и отчёты.
Отчёт по скорости ответа - среднее и медиана первого ответа по каналу, по менеджеру и по часам дня, выгрузка в Excel.
Отправка идёт через очередь с паузами и ретраями, так-же на каждый канал свой лимит - иначе ловишь блокировку номера.
Пять вкладок закрылись, все четверо сидят в одном окне и не переключаются.
Средний первый ответ на Avito за месяц работы ушёл с примерно 40 минут на 8, эскалаций к руководителю осталось 3-4 в неделю.
Повторное обращение больше не начинается с нуля, вся история клиента лежит в карточке независимо от канала.
Видно нагрузку - у кого 20 активных диалогов, а у кого 6, и руководитель раскидывает их руками.
Исходники, доступ к серверу и инструкция по подключению нового канала и правке шаблонов остались у заказчика.
После приёмки добавил быстрый поиск по всей переписке и авто-ответ в нерабочее время для Avito.
Скрины единого окна, карточки клиента и отчёта по скорости ответа приложены к работе.