Как готовить коллтрекинг: опыт Циан

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Привет!

Меня зовут Слава, я тимлид одной из продуктовых команд в Циан, которая развивает коллтрекинг. Сегодня хочу рассказать, как читателю Хабра завести коллтрекинг в своем проекте, с какими возможными трудностями предстоит столкнуться и о чем точно стоит подумать заранее.

Итак, снимайте трубку — у вас входящий звонок на линии!

Разберемся с понятиями


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

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

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

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

С чего начать


Если бы у меня была возможность вернуться назад, то первое, что бы я сделал — это явно договорился с провайдером о соглашении уровня обслуживания (service level agreement, SLA) и прописал его в юридическом договоре.

Чтобы построить такое соглашение, нужно тщательно выбрать технические индикаторы (service level indicator, SLI), наиболее точно описывающее здоровье провайдера. Например, индикаторами могут быть задержка выполнения запроса, количество запросов в секунду, количество ошибок или доступность сервиса.

Для индикаторов определяются цели (service level objective, SLO) — те значения, которые партнер обязуется нам предоставить. Например, если в качестве одного из индикаторов мы выбрали задержку выполнения запроса, то в качестве цели мы можем принять, что средняя задержка выполнения запроса должна быть меньше 200 мс. Или так: средняя задержка выполнения запроса должна лежать в диапазоне от 200 до 300 мс для 90-й персентили.

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

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

Что у провайдера внутри


Провайдер — это телеком-компания, которая возьмет на себя всю нелегкую работу по обеспечению связи. У провайдеров как правило есть свои телекоммуникационные вышки (соты, отсюда название сотовая связь), которые обеспечивают покрытие сетью радиодоступа (radio access network, RAN). RAN это первый большой логический компонент сети любого провайдера. Если не вдаваться в подробности, то укрупненно картинка выглядит так.



Пользователи мобильных устройств постоянно перемещаются от вышки к вышке. Очевидно, что обеспечить при этом беспрерывную передачу голосового трафика – задача нетривиальная. Топология динамической маршрутизации – то, за что вы будете платить, а взамен получать простой API для интеграции.

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

Налаживаем интеграцию


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



Напротив внешнего API провайдера мы выставляем свой небольшой микросервис, который сглаживал бы все шероховатости и приводил всех провайдеров к одному виду: минимально необходимый набор методов с одинаковыми интерфейсами.

Всех провайдеров в свою очередь прячем за одним фасадом, который предоставляет понятный API для внутренних микросервисов-клиентов:

  • установка и снятие переадресации,
  • получение звонков,
  • получение записей разговоров,
  • работа с черным списком.

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

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

Типичные проблемы



За все время развития коллтрекинга в Циан мы сталкивались с разными проблемами, напрямую влияющими на наш конечный продукт. О некоторых из них мы подумали заранее, некоторые оказались целым открытием. В каждом отдельном случае приходилось решать, что делать как с продуктовой, так и с технической точки зрения.

Нецелевые звонки


Вы размещаете объявление о продаже машины и с нетерпением ждете первых звонков. И они действительно скоро случаются. Звонит банк и предлагает взять кредит. Звонят коллекторы и предлагают кредит вернуть. Микрозайм хочет дать денег. Вас спрашивают по вопросу скупки металла. Почему-то купить вашу машину никто не торопится.

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

Обрыв звонка


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

Такие обращения, как правило, мы сразу адресуем провайдеру: нужно анализировать граф прохождения вызова, разбираться, через сети каких еще операторов связи проходит конкретный проблемный звонок и нет ли у пользователя собственной программной или аппаратной АТС (автоматической телефонной станции, используется, например, для организации работы колл-центра).

Также стоит проверить самый очевидный случай — а до оригинального номера пользователя вообще можно дозвониться? Если нет, то чуда не произойдет — через подменный вызовы проходить тоже не будут. Мы это делаем первым шагом — сотрудники клиентской службы Циан делают пробный звонок на оригинальный номер и проверяют его доступность.

Массовый спам-обзвон


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

Сначала стоит попробовать локализовать проблему. Мы в Циан сталкивались с массовыми спам-обзвонами по конкретному региону. Каковы причины и цели таких обзвонов — разбираться придется позже, а сейчас действовать нужно быстро. Нужно добавлять все выявленные номера прозвонщика в черный список и блокировать вызовы на уровне сети провайдера.

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

Кажется, весь регион лежит


Не кажется. У оператора связи тоже могут быть инциденты на его платформе, и нужно быть к ним готовым. Если выяснили, что какая-то часть номеров недоступна для звонка и решение проблемы затягивается — отключайте эти подменные номера. В Циан мы для себя решили — пусть лучше некоторое время на сайте будет показываться оригинальный номер пользователя, чем клиент будет терять свои целевые звонки.

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

Как мониторить


Мониторинг — отдельная большая сторона вопроса, которая будет определять скорость обнаружения и реакции на проблемы. Ниже кратко посмотрим, на чем мы фокусируемся в Циан.

Объем пула


Первая важная метрика — объем пула номеров, доступного сейчас для подмены. Из-за особенностей тарификации в каждом регионе у нас свой пул, следовательно, своя метрика.

Есть две крайности, и обе плохие. Это слишком большой запас свободных номеров и слишком маленький запас. Единственный плюс большого запаса — они не закончатся быстро. Но за них все еще придется платить. По теории ограничений Эльяху М. Голдратта это Inventory, от которого нужно избавляться, чтобы быть эффективным.

На пути к избавлению от лишнего Inventory можно перестараться и оставить слишком мало запаса. Тогда, возможно, ночью, придет алерт о том, что номеров не осталось вообще. Дальнейшее развитие событий будет зависеть от бизнес-процесса. Если подмена номера – обязательный шаг при публикации, то отсутствие номеров может стать проблемой. Но устранить ее быстро не получится. Во-первых, ночью у саппорта провайдера может быть увеличенное время реакции (это должно быть явно прописано в договоре), а во-вторых, подключение и отгрузка новой порции номеров – процесс не быстрый, может растягиваться до двух недель.

Ответ находится где-то посередине. Вообще, когда и сколько заказывать — это классическая задача теории массового обслуживания. Мы приняли гибкую систему управления пулами в зависимости от конкретного региона и делаем дозаказ номеров при достижении 80% объема загрузки.

Количество звонков


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

Аномалии как в большую, так и в меньшую сторону не всегда могут означать проблему. Сильное по сравнению с обычным уровнем снижение количества звонков может объясняться выходными днями или государственными праздниками, а неожиданно резкий всплеск — маркетинговой кампанией, которую проводят коллеги из другого отдела. Но если изменение происходит без видимых на то причин — это повод задуматься и поговорить об этом с провайдером.

В конкретный час мы считаем отклонение количества звонков от медианы за 7 предыдущих недель в этот же час по региону. Если отклонение слишком высокое (как в большую, так и в меньшую сторону) — анализируем это с провайдером.

Еще полезно смотреть на отношение успешных звонков ко всем остальным. График с одной стороны показывает аномалии в моменте, а с другой – общий наклон тренда. Сильное падение доли успешных звонков – показатель массовости проблемы и призыв к действию.

Время подачи


В Циан замена номера встроена в процесс публикации объявления. Для нас важно не показывать на объявлении оригинальные номера, чтобы обеспечить защиту от прозвона. Но также важно публиковать объявления быстро.

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

Кул сторис


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

Как мы коллтрекинг автотестами тестировали


Мы решили покрывать автотестами весь процесс подмены. Чтобы не тратить дорогие подменные номера завели фейковые с отдельным провайдером — Qa Provider. Написали тесты и начали их гонять каждый час.

Через какое-то время возникла проблема — в некоторых регионах стали заканчиваться номера. Решили ее стандартным путем — дозаказали дополнительные пулы и добавили их в свою номерную емкость. Но номера быстро кончились опять.

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

Выяснилось — из-за ошибки в коде автотесты не использовали фейковый Qa Provider, а подключали настоящие подменные номера. Поскольку тесты запускались часто, израсходовать пул любого объема им не составляло труда.

Баг пофиксили, номера освободили. Тестировать на боевых номерах, конечно, хорошо, но дорого!

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


Верхнеуровнево все проблемы с коллтрекингом у нас можно разделить на две категории: проблемы в нашей интеграции (например, API вызываются неправильно) и проблемы на стороне провайдера (звонки не проходят).

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

Запилили отдельную админку коллтрекинга, подготовили разъясняющие статьи с контактными лицами провайдеров, подготовили красочную презентацию и отправились с этим в клиентскую.
Эффект был ошеломительный. Особенно удачным было наглядное демо с использованием старого советского красного дискового телефона для демонстрации, как происходит переадресация вызова.

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

Заключение


Коллтрекинг, несомненно, дает новые инструменты и открывает широкие возможности. Поддерживать его работу непросто, но если все делать аккуратно и заранее знать, какие проблемы ждут на пути – можно доставлять своему пользователю сервис высочайшего качества, решающий одновременно и его проблемы, и задачи бизнеса.
Источник: https://habr.com/ru/company/cian/blog/505536/


Интересные статьи

Интересные статьи

Ведущий архитектор, Java Champion, член программного комитета JUG.RU и организатор крупнейшей IT-конференции на Балканах. Это не команда крутого стартапа. Это роли одного человека – Мити Александ...
В 2019 году популярность фреймворка Vue невероятно сильно выросла. Количество еженедельных загрузок Vue удвоилось: в прошлом году это было 600 тысяч, а теперь это 1.2 миллиона. Долгожданная треть...
Добрый день. Хочу поделиться опытом работы на позиции PhD student в Германии, а также рассказать об основных критериях, которые нужны в CV для успешного прохождения собеседования с профессором...
У меня есть маленькая библиотека StreamEx, которая расширяет возможности Java 8 Stream API. Библиотеку я традиционно собираю через Maven, и по большей части меня всё устраивает. Однако вот захоте...
Не так давно одна фирма предложила мне провести стажировку, потому что слышала хорошие отзывы о моих учениках. Взять новичков, поработать с ними месяц, а потом отправить на боевой проект — гд...