Как мы сделали аудиозвонки в приложении для сотрудников

Меня зовут Ильдар, я техлид в команде Центра развития финансовых технологий (ЦРФТ) Россельхозбанка. Сегодня расскажу о том, как мы внедрили функцию аудиозвонков в наш корпоративный мессенджер для сотрудников.

Немного о проекте

Мы делаем приложение для сотрудников группы РСХБ, которое позволяет получить доступ к популярным корпоративным функциям: новостной ленте, кадровым сервисам, рабочему календарю, справочнику сотрудников и еще многим другим полезным вещам, которые делают рутинные процессы проще и быстрее. Так, например, мессенджер позволяет сотрудникам осуществлять быструю коммуникацию без использования внешних мессенджеров (WhatsApp и Telegram). Сразу отмечу, что это разработка на основе OpenSource-решения, а именно сервера Synapse от Matirx.

Ожидаемо, что теперь сотрудникам нужны были и звонки внутри приложения. На этом мы призадумались: можем ли мы реализовать эту функцию?…

…конечно, можем!

У нас уже был наработки в этом направлении: наша команда flutter-разработки уже проводила проверку гипотезы и нам надо было только всё соединить воедино. Но вот вопрос, с чего стоит начать?…

…конечно, со встречи!

С которой, к слову, мы ушли вот с такой картинкой:

Как это работает?

Описание работы:

  1. Когда пользователь хочет совершить звонок — он переходит в чат с тем, с кем хочет связаться.

  2. В чате он нажимает на кнопку вызова абонента.

  3. После чего отправляется запрос в матрикс на получения данных о сервере-ретрансляторе (стрелка 1).

  4. Матрикс возвращает мобильному приложению (МП) исходящего абонента информацию для подключения к серверу-ретранслятору.

  5. МП исходящего абонента отправляет запрос в Matrix на отправку в чат с вызываемого абонента служебного сообщения (не отображается пользователю) с информацией по подключению к серверу ретранслятору (стрелка 2).

  6. МП звонящего абонента отправляет запрос в Backend приложения для отправки в МП вызываемого абонента silent push-уведомления с информацией, в каком чате находятся данные для подключения к звонку (стрелка 3).

  7. Backend приложения «Цифровой офис сотрудника» отправляет silent push-уведомление в МП вызываемого абонента (стрелка 4).

  8. МП вызываемого абонента получает push-уведомление, забирает информацию из служебного сообщения чата и отображает пользователю звонок (стрелка 5).

  9. Если МП вызываемого абонента отвечает на звонок, то переходим к пункту 10. В противном случае звонок отклоняется.

  10. МП вызываемого и МП звонящего абонента обращаются к серверу-ретранслятору для получения информации об установлении соединения (стрелка 6).

  11. Матрикс отправляет сообщение в чат с вызываемым абонентом.

На фронте мобильного приложения есть flutter-библиотека для работы с Matrix, где также перечислены методы для осуществления функции аудиозвонков, поэтому тут мы использовали существующий пакет, и немного посмотрели реализацию в других проектах

© Habrahabr.ru