Как мы смогли обзвонить 1,5 млн абонентов за несколько часов

 И снова здравствуйте. Продолжаем разговор о разработке и совершенствовании нашей высоконагруженной платформы, с рассказом об интересных кейсах, проблемах и их решении.

Сегодня поговорим о создании с нуля платформы, которая дает возможность обзвонить 1 500 000 абонентов всего за несколько часов. В свое время бизнес-отдел поставил такую задачу и нам нужно было ее решить в сжатые сроки. Все самое интересное о решении этой задачи  - под катом.

Коротко - об особенностях работы платформы

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

Главная наша особенность - работа в real-time режиме. Поэтому многие проблемы, которые являются незначительными и не очень заметными в других компаниях, для нас смерти подобны. Простой пример - страничка стала загружаться не за 100 мс, как обычно, а за 200 мс. В обычной ситуации это мало кого волнует - да, проблема есть, но она не критична. Ее замечают и исправляют через несколько часов, а то и дней. А у нас даже в случае очень незначительного увеличения задержки сразу падает качество - вне зависимости от причины проблемы, будь то троттлинг сети или что-то еще.

Для решения подобных проблем мы использовали горизонтальное масштабирование - есть пулы, в них - сервера, которые отрабатывают основной поток данных. Серверов много, мы можем масштабировать производительность системы отрабатывая очень большое количество звонков. Кроме того, у нас две базы данных - одна с быстрыми запросами и относительно небольшим объемом хранимой информации и вторая - относительно "медленная", с большим объемом данных.

Как все начиналось

Работали мы, недавние девопсы, вдвоем с коллегой. Точнее, начинали разработку вдвоем. Я занимался сборкой CMS, системой управления самой платформой, статистикой и отчетами. Все работы по системному администрированию, деплою и инсталляции выполняли сами. Потом команда увеличилась - взяли девопса, а потом начали набирать людей в команду. Сейчас на фронтенде работает 5-6 человек, на бекенде - 8 человек. Команду набрали примерно за два года.

После того, как платформа была готова, почти сразу запустили пилот на обзвон 10 тысяч клиентов. Запущен он был уже на второй день после готовности первой версии платформы. Тогда мы управляли голосовым потоком, используя FreeSwitch и сторонний MRCP-сервер.

Но почти сразу стало ясно, что так жить нельзя - при использовании стороннего  MRCP-сервера бесконечно расширяться было сложно. Нужны были дополнительные лицензии, причем много. А их стоимость нельзя назвать низкой. Если использовать просто сервер - то все отлично, но для наших целей был необходим плагин к серверу. Плагин называется UMS Transcribe Plugin, а нужен он для распознавания речи. Все бы ничего, но стоит он $50 за канал. А когда нужно несколько тысяч каналов, как в нашем случае, то такой вариант не очень подходит.

Приняли решение написать собственный медиасервер, отказавшись от стороннего MRCP-сервера. Если интересуют подробности причин отказа, то об этом можно почитать в другой статье в нашем блоге.

Свою реализацию мы написали за несколько месяцев, разработав сервер с нуля. Недостатки стороннего MRCP-сервера мы превратили в достоинства собственного продукта, который получил:

Еще один огромный плюс в том, что в случае появления проблем, ошибок, мы быстро находим причину, поскольку сами все писали и прекрасно знаем архитектуру сервера. Когда использовали стороннее решение, было гораздо сложнее, поскольку не сразу можно было понять, на чьей стороне проблема - нашей или стороннего сервера. А если представить себе ситуацию, что завтра нужно выкатывать решение, а сегодня мы пытаемся решить проблему, то можно себе представить, насколько все это было непросто.

Масштабирование сервиса и основные проблемы

После того, как была готова уже третья версия платформы, нам неожиданно быстро пришлось масштабироваться. Причина - срочная задача от бизнес-отдела обзвонить 1,5 миллиона абонентов за несколько часов. Мы быстро все масштабировали, но в ходе решения этой задачи возникло несколько проблем:

В ходе разработки платформы мы использовали Kubernetes для автомасштабирования нод с медиа серверами под нагрузкой.

Что касается MRCP, то при его создании реализовали распознавание яндекса, гугла, плюс добавили свой ASR. Сейчас у нас еще свои intent-классификатор и другие компоненты. Живет и работает третья версия системы уже несколько месяцев.

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

В качестве вывода

В ходе решения поставленной задачи мы вынесли для себя два главных вывода по работе с highload-системами нашего профиля.

Основной - разносить быстрые запросы и БД отдельно от статистики, отчетов и медленных БД. Делать это нужно сразу, а не когда-нибудь потом. Часто разработчики, даже опытные, не обращают особого внимания на потребление ресурсов. Система проходит тесты, нагрузочное тестирование, а потом начинаются проблемы. Решить все это можно, но нервов и ресурсов придется потратить порядочно.

Еще один - использовать горизонтальное масштабирование, а не изобретать велосипед. Этот метод проверен и работает, так что рекомендую использовать именно его.

@neuroonet
19.10.2021 15:54 UTC
Первоисточник

Комментарии

@Ad_fesha
19.10.2021 11:01 UTC
+3

Объем действительно впечатляет!
Главное что б спамеры, со своей рекламой, не доросли до подобных решений. Антиспам уже не всегда справляется....

@PhoenixMSTU
19.10.2021 11:37 UTC
+9

Так они наполовину спамеры и есть. Вот список клиентов с их сайта:

  • МИНЗДРАВ МОСКОВСКОЙ ОБЛАСТИ ... помогает жителям Московской области вызвать врача на дом. (Не спам, ок)

  • МЕГАФОН ИСПОЛЬЗУЕТ ГОЛОСОВЫХ РОБОТОВ ДЛЯ МАСШТАБИРОВАНИЯ ТЕЛЕМАРКЕТИНГОВЫХ КАМПАНИЙ Оптимизация процесса информирования и удержания клиентов, допродажа услуг абонентам. (Скорее всё же спам)

  • ЛИДОГЕНЕРАЦИЯ: ХОЛОДНЫЙ ОБЗВОН С ПРЕДЛОЖЕНИЕМ О ПОКУПКЕ НЕДВИЖИМОСТИ Оптимизация процесса привлечения клиентов, рост продаж. (100% спам)

  • УВЕЛИЧЕНИЕ ЭФФЕКТИВНОСТИ НАЙМА В КОМПАНИИ Назначение интервью, напоминание и перенос, в случае необходимости ведение кандидата. (Не спам)

20.10.2021 15:04 UTC
+1

Не нужно бросаться голословными обвинениями и называть нашу компанию спамерами. Здорово, что вы зашли на наш сайт. Тогда, должно быть, вы обратили внимание на раздел с упоминаниями СМИ о нас и успели ознакомиться с нашими продуктами, ведь на данных страницах есть ряд интересных кейсов о внедрении и преимуществах наших голосовых помощников. Конкретно этот кейс на 1,5 млн связан не с запросом спам-звонков, а с оповещением абонентов одного из крупных телеком-операторов.

Кроме того, приводим немалый список сценариев, которые реализуются посредством наших платформы и решений на ее базе, и речь не только об исходящих звонках, но и входящем трафике:

  • Обработка до 80% входящих обращений без переключения на человека-оператора, таким образом конечный клиент нашего заказчика моментально может получить ответы на свои вопросы, не ожидания на линии по 15-20 минут

  • Для сервисных компании можно настроить оповещение клиентов о статусе заказа и сроках доставки в ПВЗ. Также помочь клиенту записаться на услугу, подобрав удобные дату и время

  • Провести опрос, напомнить о встрече

  • Осуществить мониторинг качества обслуживания, и на основе полученных оценок от клиента тем самым улучшить клиентский опыт

  • Подобрать кандидатов на вакансию: проверить внесенные данные резюме или анкеты, пригласить на собеседование, сопроводить на всех этапах воронки приема на работу, тем самым оперативно закрыть вакансии массового найма

  • Разработать персонального голосового ассистента, который может принимать звонки, когда абонент недоступен или не может разговаривать… И это только малая доля того, чем занимается компания, в которой я работаю. А клиентов у нас не 1 и не 2, а сотни и сценарии использования продуктов разные и интересные. 

Если говорить про юридические аспекты, потому что здесь речь в комментарии как раз про них, то уверены, что каждая компания следит за тем, чтобы все согласия от клиентов / абонентов у них были.

21.10.2021 03:58 UTC
0

оповещением абонентов одного из крупных телеком-операторов.

О каком оповещении речь?

Обработка до 80% входящих обращений без переключения на человека-оператора, таким образом конечный клиент нашего заказчика моментально может получить ответы на свои вопросы, не ожидания на линии по 15-20 минут

Не моментально, а видимо через 10-15 минут выборов вариантов меню и пробивания к живому оператору? Не знаю какие конкретно у Вас голосовые помощники, но если у Вас нет простой альтернативы переключиться на живого человека - то лучше уж спамили бы, так хоть пожаловаться можно было бы

Провести опрос, напомнить о встрече

Как это работает на входящем трафике?

@Goodwinnew
19.10.2021 11:30 UTC
+12

срочная задача от бизнес-отдела обзвонить 1,5 миллиона абонентов за несколько часов

эти 1,5 млн чел давали согласие на получение рекламных звонков?

@AlexeyGorovoy
19.10.2021 11:33 UTC
+1

Ну это наверное не к техническому специалисту вопрос

19.10.2021 12:10 UTC
+1

К нему самому.

19.10.2021 12:47 UTC
+2

Это вопрос, который технический специалист должен задавать себе. Сейчас рынок вроде позволяет выбирать проекты и не принимать участие в создании этически сомнительных решений.

При том что рассылка спама - это вообще один самых невинных из кейсов по этике в сфере AI/ML.

19.10.2021 13:20 UTC
0

Мне почему-то кажется, что в современном мире сложно найти бизнес, в котором есть айти и который не совершает этически сомнительных действий.

19.10.2021 15:02 UTC
0
20.10.2021 15:06 UTC
+1

Не знаю, где вы тут увидели этически сомнительное решение. Тем более рассылка спама - такими вещами не занимаемся. 

В команде собраны специалисты, которые разделяют ценности и миссию компании. Продукты помогают автоматизировать рутинные задачи. Видели когда-нибудь оператора колл-центра после 8ми-часовой смены, которому необходимо было обзвонить абонентскую базу и оповестить об обновлении, скажем, условии тарифного плана? Он измотан, так как ему пришлось на протяжении всего рабочего времени повторять одну и ту же фразу каждому клиенту. От такой монотонной и изматывающей работы можно в робота превратиться в скором времени. Полагаю, что в разы хуже, когда оператор-человек обзванивает должников по кредиту и слышит в свой адрес не самые приятные слова. Уж лучше пускай этот удар берет на себя наш цифровой агент :) А сотрудники колл-центров будут помогать с нестандартными запросами.

Про этику можем поговорить вот под этой нашей публикацией

@neuroonet
20.10.2021 15:05 UTC
+1

Почему вы решили, что эти звонки были рекламными? Данная статья носит сугубо техническое описание того, как команда разработки смогла оперативно масштабировать платформу под рост абонентской базы клиента в разы.

@as_victor03
19.10.2021 12:16 UTC
+3
Я бы за такую работу не взялся ни за какие деньги… Даже технический специалист должен иметь принципы…
@Bedal
19.10.2021 15:00 UTC
-3
Экий coming out… Впервые поставил минус с формулировкой «личная неприязнь».
@neuroonet
20.10.2021 15:07 UTC
+2

А в чем конкретно она выражается? Ведь данная статья носит сугубо техническое описание того, как команда разработки смогла оперативно масштабировать платформу под рост абонентской базы клиента в разы.

20.10.2021 16:27 UTC
-2
Вы остальные комменты читали? Вот потому, что у меня такое же ощущение.
@vanero
19.10.2021 15:08 UTC
+1

Свой mrcp сервер это 5! А вот обзвонить 1.5кк номеров за 2 часа (cps=~200) может любая нормальная платформа, проблемы скорее возникнут у провайдера и sbc ))