OmniFlow — общие сведения о платформе

OmniFlow — омниканальная платформа обработки обращений клиентов. Звонки, чаты и мессенджеры принимаются одним ядром, распределяются по операторам и сценариям и попадают в одну историю обращений. Телефония — один из каналов, а не отдельный продукт: у неё своя граница с интернетом (SIP-фронт и медиа), но решения о звонке принимает то же ядро, что и о чате.

Эта страница — обзор: из чего платформа состоит, как проходит звонок, как разделены организации. Практические шаги — в двух инструкциях: проверка платформы в готовой организации (ничего не устанавливая) и от установки до первого звонка. Если что-то пошло не так — частые проблемы и как их решить.


Из чего состоит платформа

Снаружи Вход на сервер (открыт в интернет) Внутри сервера (снаружи не виден) Телефоны и софтфоны Провайдеры связитранки, городские номера Браузерпанель, софтфон оператора Мессенджеры и чаты SIP-фронтKamailio: регистрация, защита Медиа-проксиrtpengine: голос через NAT Веб-интерфейсnginx: панель, API, приём чатов Медиа-движокAsterisk: мосты, звук, запись Ядрооркестрация обращений,вход, права, настройки Стратегиисценарии: IVR, очереди, боты Шина сообщений (NATS) База данныхPostgreSQL Хранилищезаписи и файлы (S3) сигнализация и управление голос внутренние компоненты общаются только через шину
Компоненты платформы. Открыты в интернет только SIP-фронт, медиа-прокси и веб-интерфейс.
Компонент Что делает
SIP-фронт (Kamailio) принимает телефоны, софтфоны и провайдеров связи: регистрация, проверка паролей, защита от подбора паролей и флуда. О бизнес-логике не знает ничего
медиа-прокси (rtpengine) пропускает голос между интернетом и медиа-движком, в том числе когда телефон за NAT
медиа-движок (Asterisk) соединяет разговоры, проигрывает звук, пишет разговор. Из интернета недоступен
ядро ведёт обращение от начала до конца: куда направить звонок или сообщение, какому оператору или сценарию, что записать в историю. Здесь же вход в панель, права пользователей и все настройки
стратегии сценарии обработки обращений — голосовое меню, очередь, бот, обзвон. Отдельные сервисы: подключаются к шине и работают через тот же программный интерфейс, что и панель
шина сообщений (NATS) единственный путь между компонентами: они обмениваются командами и событиями, а не вызывают друг друга напрямую. Поэтому компонент можно вынести на отдельный сервер, не меняя кода
база данных (PostgreSQL) настройки, пользователи, история обращений
хранилище (S3) записи разговоров и файлы (звуки сценариев, вложения)
веб-интерфейс (nginx) панель администратора, супервизора и оператора в браузере; программный интерфейс; приём сообщений от провайдеров чатов

Все компоненты поставляются как образы Docker. Сторонние компоненты перечислены с версиями и лицензиями в составе поставки. Компоненты под GPL и LGPL (Asterisk, Kamailio, rtpengine, ffmpeg) собираются из исходных текстов, которые опубликованы вместе с каждой версией.


Как проходит звонок

1 2 3 4 5 6 7 8 Телефон 701 Телефон 702 SIP-фронт Медиа-движок Ядро История звонковфакты звонка, таймлайн Хранилищезапись разговора Голос между телефонами идёт через медиа-прокси, решения о звонке принимает только ядро
Звонок с линии 701 на линию 702. Номера на стрелках — шаги из списка ниже.
  1. Телефон 701 отправляет вызов на SIP-фронт. Тот проверяет, что телефон зарегистрирован и пароль верный.
  2. SIP-фронт передаёт вызов медиа-движку. Сам он не решает, куда звонок пойдёт.
  3. Медиа-движок сообщает ядру о новом звонке.
  4. Ядро решает, что делать: находит адресата по маршрутам организации (здесь — линия 702) и поручает медиа-движку её вызвать. Вместо линии это может быть очередь операторов, сценарий или внешний номер.
  5. Медиа-движок вызывает 702 через SIP-фронт.
  6. Телефон 702 звонит. После ответа медиа-движок соединяет стороны, голос идёт через медиа-прокси.
  7. Каждый шаг звонка ядро записывает фактом в историю: кто звонил, куда, когда ответили, сколько длился разговор. Из фактов складывается таймлайн в карточке звонка.
  8. Разговор пишется по дорожке на каждого участника. После отбоя записи уходят в хранилище, и в карточке звонка появляется проигрыватель.

Чат проходит тот же путь, только без SIP-фронта и медиа: сообщение приходит через веб-интерфейс, ядро направляет его оператору или сценарию, переписка попадает в ту же историю.


Организации и пользователи

Одна установка OmniFlow Администратор установки (организация system): заводит организации, видит состояние платформы Организация «А» Организация «Б» Организация expert свои пользователи и ролисвои линии, номера, очередисвои звонки, чаты, записи свои пользователи и ролисвои линии, номера, очередисвои звонки, чаты, записи свои пользователи и ролисвои линии, номера, очередисвои звонки, чаты, записи Общие: SIP-фронт, медиа, ядро, база, хранилище — данные внутри разделены по организациям
Организации делят одну установку, но не видят данных друг друга.

Одна установка обслуживает несколько организаций (в технических текстах — «тенантов»). У каждой свой код латиницей: он же SIP-домен её телефонов (у линии 701 организации expert адрес 701@expert). У каждой свои пользователи, линии, транки, маршруты, очереди, сценарии и своя история обращений.

Изоляция обеспечивается не интерфейсом, а устройством платформы, в три слоя:

Роли пользователей организации:

Роль Что может
оператор принимает звонки и чаты, работает в панели оператора
супервизор видит работу операторов и очередей своей организации, вмешивается в неё
администратор настраивает свою организацию: линии, транки, маршруты, очереди, пользователи

Администратор служебной организации system — администратор всей установки: он заводит организации и видит состояние платформы целиком.


Защита


Установка и обновление

Пошагово — от установки до первого звонка. Полное руководство администратора — файл INSTALL.md, который установщик кладёт рядом с установкой.