Привет, Хабр! Меня зовут Андрей, я старший менеджер проектов в ЮMoney, эксперт в области разработки инструментов для клиентского сервиса и compliance-отчётности. Моя команда занимается разработкой и сопровождением внутренних инструментов для поддержки операционной деятельности ЮMoney. В статье я расскажу, как мы создавали и внедряли собственный SIP-клиент в контакт-центре.

Как устроена архитектура телефонии в компании

Для обработки обращений пользователей (почта, чаты, звонки) мы используем решение собственной разработки — контакт-центр (КЦ).

Ядро телефонии — сервер Asterisk, проверенное опенсорс-решение. К нему подключаются SIP-клиенты, в том числе решение нашей собственной разработки, а с внешней стороны Asterisk соединён с провайдерами (Ростелеком, МТС).

КЦ интегрирован с Asterisk через AMI (Asterisk Mangment Interface), с помощью которого сервер КЦ управляет звонками: ставит в очередь, переводит, удерживает, отслеживает состояние очередей.

Общая схема телефонии
Общая схема телефонии

Как операторы работали раньше

Когда-то на столах операторов стояли стационарные телефоны Yealink и Cisco, а на компьютерах — приложение microSIP. Все устройства подключались к серверу Asterisk, но телефония не была интегрирована с другими инструментами.

Оператору приходилось постоянно переключаться между множеством окон. А хелпдеск-инженеры конфигурировали клиент телефонии на каждое рабочее место.

Рабочий интерфейс оператора в прошлом
Рабочий интерфейс оператора в прошлом

В процессе перевода b2b-поддержки из 1С CRM в КЦ мы выявили ключевые проблемы. Помимо большого количества рабочих окон и программ, это:

  • Сложность идентификации клиента. Номер просто отображался в SIP-панели. Его нужно было копировать и вручную искать клиента в базе.

  • Медленная работа десктопного приложения 1С.

  • Неудобные интерфейсы телефонии в CRM, которые нельзя было доработать.

  • Отсутствие сквозной статистики с другими каналами коммуникации.

Нам нужно было:

  • Объединить работу оператора в едином окне КЦ.

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

  • Добавить инструменты статистики: теги, комментарии, сквозную историю коммуникаций.

  • Связать профиль клиента в КЦ с CRM.

  • Отказаться от платных SIP-клиентов, снизить вендор-зависимость и санкционные риски.

Решить эти задачи можно, только если встроить SIP-клиент в интерфейс КЦ. Так мы начали разработку собственного решения.

Разработка SIP-клиента в контакт-центре

Для команды это был RND-проект: раньше мы не разрабатывали фронтенд для телефонии. Для начала нужно было выбрать библиотеку для работы с SIP на JavaScript. Мы изучили доступные решения и выбрали JsSip — легковесную опенсорс-библиотеку с активной поддержкой сообщества.

С какими сложностями столкнулись и как их решили

1. Бесшовная авторизация в Asterisk при входе в КЦ. Раньше в чужих SIP-клиентах авторизация в Asterisk проходила по логину и паролю, которые хранились на клиенте и передавались операторам вручную. Мы реализовали механизм авторизации:

  • В SIP-протоколе используется аутентификация Digest/MD5.

  • При создании нового пользователя Asterisk сохраняет и передаёт хеш на сервер КЦ через API.

  • Из-за требований безопасности архитекторы запретили хранить MD5-хеш в БД, так как ключ можно перебрать по словарю. Мы стали шифровать хеш с помощью секрета из vault, а результат записывать в БД. При каждой авторизации хеш расшифровывается в памяти приложения.

2. Множество вкладок в браузере. Если оператор закрывал вкладку браузера с SIP-клиентом, соединение с Asterisk обрывалось. Что мы сделали:

  • Вынесли клиент в отдельное окно браузера без адресной строки и закладок.

  • Добавили предупреждение при закрытии.

  • Настроили автоматический перезапуск окна, если вкладку всё равно закрыли, но при этом открыта любая страница КЦ.

3. Доступ к микрофону. В первых версиях клиента приложение запрашивало доступ к микрофону при запуске, но операторы могли проигнорировать запрос. Это приводило к проблемам во время звонка с клиентом. Что мы сделали:

  • Добавили проверку доступа при каждом старте клиента. Если доступ не предоставлен, появляется сообщение об ошибке.

  • Внедрили корпоративный Yandex Browser для централизованного управления настройками.

Результаты внедрения

  • Появилось единое окно для коммуникаций с пользователями в общей дизайн-системе. Это сократило число ошибок операторов и трудозатраты на идентификацию клиента и перевод звонков.

  • Снизили расходы на поддержку панели телефонии в CRM и сопровождение сторонних клиентов.

  • Доля звонков, привязанных к профилю клиента, выросла с 40% до 80%.

  • Появилась возможность собирать детальную статистику по тематикам обращений и нагрузке на операторов.

Итоги

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


Буду рад ответить на ваши вопросы и обменяться опытом: какие функции вы бы добавили в такой самописный SIP-клиент в первую очередь?