Глава 1. Входные данные
Предпосылки к созданию платформы «Era»
-
Санкции, совпровождающие нашу Родину, рост стоимости западных продуктов и их поддержки, объявленный Правительством РФ курс на импортозамещение.
-
Возросшее количество запросов на поставку коммуникационных решений от крупных организаций, не способных быть удовлетворенными односерверным решением (до 1000 абонентов).
-
Рост количества запросов на продукты класса UC (unified communications), организацию сервисов омни-канального обслуживания, ВКС.
-
За пару десятилетий произошло укрупнение ряда компаний и их большей частью стихийная автоматизация. Как результат накопились большие объемы разносортного оборудования и софта, отвечающих за коммуникации. Они "как-то" работают, будучи кем-то когда-то настроенными, но не поддерживаются или поддерживаются с недостаточным качеством и не имеют возможности быть адаптированы к новым задачам. По известным данным ежедневно выходит из строя несколько наименований оборудования. В крупных компаниях, где одномоментная замена невозможна, но связь является стратегическим ресурсом, это своего рода рулетка. Управление таким материальным активом осуществляется с помощью армий администраторов, распределенных по стране и имеющих разрозненные знания. Среди таких активов обнаруживаются в том числе продукты ушедших с отечественного рынка компаний.
-
Массовый отказ от западных решений в пользу свободно распространяемого ПО.
-
Развитие технологий ускоряется, коммуникации все больше становятся основой деятельности и проникают в глубинные бизнес-процессы, все больше интегрируясь с другими инструментами.
Требуется решение, готовое к функциональному развитию, архитектура которого позволяет без потери управляемости и стройности объединять результаты работы разных команд, работающих в разных технологиях и с разной скоростью, которое горизонтально масштабируется до размеров 1 000 000+ абонентов и пользователей.
Основные задачи платформы «Era»
-
Серверная распределенная платформа для телефонии и смежных бизнес-задач (call-центр, Omni, UC и др.), решаемых на ее основе.
-
Позволяет обслуживать большое количество территориально распределенных подразделений корпорации с большими требованиями к отказоустойчивости.
-
Поддерживает разделение на несколько независимых компаний с независимым управлением данными, обслуживаемых на одной физической инфраструктуре.
-
Может интегрироваться и использоваться из произвольных CRM в качестве среды обеспечения коммуникаций.
-
Настраивается, мониторится и управляется через открытый API, постепенно обретает собственное клиентское приложение, работающее через тот же API.
-
Поддерживает привычные крупному сектору телефонные сервисы.
-
Управляемый масштаб 1000+. Методики увеличения масштаба.
-
Управляемая доступность 99,(9)%. Методики увеличения доступности.
-
Разнесение по территориально распределенным площадкам с сохранением их работоспособности при сетевой недоступности.
-
Возможность разделить и объединить точку управления (один админ на все, или в каждом домене отдельный админ).
-
Поддержка встраивания в другие продукты.
-
Возможность функционального расширения в корпоративном направлении, SaaS, PaaS.
-
No-Code и Low-Code инструменты создания информационных систем, бесшовно связанных с коммуникационными процессами.
-
No-Code и Low-Code инструменты создания сценариев: обслуживания, бизнес-процессов, обмена данными, ETL.
-
RAD-конструктор информационно-коммуникационных систем.
Требования
Базовые функциональные требования
-
Полная поддержка протокола SIP.
-
Регистрация телефонов под учетными записями пользователей.
-
Звонки между пользователями, удержания, переводы, перехваты.
-
Второй входящий вызов при активном разговоре.
-
Redial на номер предыдущего абонента.
-
Подключение к внешним АТС и провайдерам с регистрацией и без с возможностью подмены номеров.
-
Конференц-связь на телефоне.
-
Серверная конференц-комната (>100 абонентов).
-
Селекторные совещания с голосованиями (>100 абонентов).
-
IVR-сценарии обслуживания голосовых звонков с поддержкой распознавания и синтеза речи.
-
Управление данными через API.
-
Мониторинг активности и доступности через API.
-
Двухшаговая маршрутизация звонков на основе правил с поддержкой регулярных выражений, масок, табличных фильтров и модификаторов.
-
Ведение лог-журналов по звонкам, сценариям, бизнес-логике.
-
Интеграция с LDAP.
-
Централизованное обновление.
-
Групповые номера.
-
Поддержка очередей.
-
Поддержка множественных вызовов.
-
Сохранение событий телефонии и данных, отправка в брокер.
-
Сохранение записи разговоров.
-
Поддержка приложений софтфонов.
-
Поддержка софтфонов в браузерах.
-
Виртуализация: несколько независимых компаний на одной инфраструктуре.
-
Механизмы уведомления внешних систем о событиях.
-
Поддержка видео-звонков.
-
Управление звонками через API.
-
Управление моделью данных с подписками на изменения.
-
Поддержка различных хранилищ и протоколов.
-
Подключение к почтовым ящикам.
-
Подключение к мессенджерам.
-
Боты автоматизированного обслуживания текстовых и голосовых каналов.
-
Поддержка и управление доступностью сторонних микросервисов и веб-приложений.
-
Снифферы из внешних сетей не получают ответов от системы и не проявляют к ней интереса.
Нефункциональные требования
Перечислены атрибуты качества в порядке убывания приоритета – драйверы архитектуры.
-
Масштабируемость/расширяемость
-
Доступность/Надежность
-
Изменяемость/Модифицируемость
-
Скорость разработки
-
Соответствие стандартам
-
Производительность
-
Сопровождаемость
-
Защищенность от атак
-
Документированность
-
Интегрируемость
Выборочные сценарии к атрибутам качества
-
Произвольный SIP телефон подключается к системе за 2 минуты, регистрируется и имеет возможность совершать и принимать звонки, удерживать, переводить.
-
При произвольном выключенном сервере абонент набирает номер и совершает успешный вызов и соединение с другим абонентом.
-
При наличии 1000 активных разговоров абонент набирает номер и соединяется с другим абонентом.
-
При наличии 200 cps абонент набирает номер и соединяется с другим абонентом.
-
После выключения любого сервера телефон остается зарегистрированным, и на учетную запись можно позвонить без значимых задержек.
-
Система развернута в Москве и Казани. Связь между городами отсутствует. Абонент в Казани регистрируется и звонит другому абоненту в Казани. Абонент в Москве регистрируется и звонит другому абоненту Москвы.
-
После восстановления связи между городами абонент в Москве набирает номер казанского абонента и соединяется с ним.
-
Администратор разворачивает площадку в Новосибирске менее чем за 1 час при наличии серверов и плана развертки.
-
Сотрудник поддержки в течение часа выявляет причину падения сервера.
-
Сотрудник поддержки в течение часа выявляет причину неудачи в совершении звонка.
-
Злоумышленник в 56-й раз пробует зарегистрироваться или позвонить под несуществующей учетной записью или с неверным паролем в течение 30 секунд. Система не отвечает ему и блокирует IP адрес на нижнем уровне на 20 минут. Последующие запросы злоумышленника не получают ответов и создают десятикратно меньшую нагрузку на процессоры серверов системы.
-
Администраторы двух независимых организаций договариваются, настраивают маршруты каждый в своем рабочем кабинете в течение 1 минуты и делают возможным звонить пользователям из первой во вторую.
-
Во время телефонного разговора выключается любой сервер, и связь не рвется, звук пропадает не более чем на 1 секунду.
-
Один сервер обслуживает 200 одновременных звонков без потерь и задержек при cps 10 в секунду.
-
В конференцию заходит 201й пользователь менее чем за 3 секунды и слышит говорящего абонента, его тоже все слышат.
-
Программист добавляет новый компонент сценария менее чем за 1 день.
-
Программист добавляет новый микросервис сценария менее чем за 1 день.
-
Произвольная Web CRM система подключает API системы на базе «Era» менее чем за 1 неделю.
-
Администратор добавляет 1 сервер в кластер на сайте и увеличивает производительность на 100 cps / 200 одновременных звонков / 1000 BLF в секунду / 1000 регистраций в секунду.
-
Во время перезагрузки любого сервера абонент производит вызов и совершает звонок с задержкой не более 5 секунд.
-
Во время телефонного разговора связь с внешними устройствами пропала. Разговор завершается сервером принудительно в течение 2 часов, запись разговора оказывается в хранилище в течение 2 часов.
-
MVP системы управления заявками или хелпдеск создается менее чем за 8 часов.
-
MVP пакета информационной системы на основе объектной модели из 10 классов и 50 требований создается менее чем за 20 часов.
-
Табличный отчет, диаграмма по агрегированным данным, дашборд с показателями на основе данных в объектной модели создается за 30 минут.
Более подробно сценарии к атрибутам качества сформулированы в wiki.
Технические требования
-
Поддержка протокола SIP/2.0 по UDP, TCP, TLS, WebSocket, WebSocket secure.
-
Поддержка RTP, DTLS (в том числе для WebRTC).
-
HTTP, HTTPS, WebSocket API.
-
Поддержка требований различных SIP провайдеров:
-
требующих отправки медиа-трафика с адреса подключенного устройства;
-
запрещающих REFER;
-
требующих отправки запросов от единой учетной записи;
-
ограничивающих количество одновременных диалогов;
-
требующих поддержки OPTIONS или осуществления встречных пингов через OPTIONS.
-
-
Поддержка различных SIP устройств (то есть ориентация на самый базовый набор RFC для SIP)
-
не поддерживающих согласование нескольких кодеков;
-
не умеющих работать с NAT и подменять медиа-адрес-порт в SDP;
-
не понимающих русского языка;
-
не умеющих перерегистрироваться по запросу.
-
-
Поддержка широкополосных кодеков (Speex, OPUS).
-
Поддержка голосовых кодеков g.711a, g.711u, g.729ab, g722, g726, gsm610, iLBC.
-
Поддержка видео кодеков H.263, H.264, VP8/VP9.
-
Использование свободнораспространяемой БД PostgreSQL, в том числе установленной у заказчика.
-
Поддержка распределения на несколько площадок.
-
Поддержка независимой работы площадок в случае отсутствия связи между ними.
-
Поддержка архитектуры x64.
-
Кроссплатформенность: поддержка Linux, Windows, виртуальных машин VMWare, HyperV.
-
Поддержка многопроцессорных систем (NUMA и пр).
-
Поддержка поставки в docker-контейнере.
-
Следующая глава: Базовые категории и используемые технологии
-
Предыдущая глава: Введение