Привет Хабр! Меня зовут Вячеслав Сухоруков, я backend-инженер в отделе разработки. Платформа аналитики в Авито. В этой статье я рассказываю о том, как мы писали сервис Marketing Manager (MM) для размещения данных в рекламных системах. Вы узнаете, что умеет наш менеджер, как это работает и как это решение экономит время маркетологов.
В «Авито» мы привлекаем ликвидность с внешних рекламных площадок и оптимизируем этот процесс за счет возврата инвестиций (ROI, возврат инвестиций). Для этого мы передаем в рекламные системы целевые события, например контакты по статье (статья — реклама, товар и т. д.). А они, в свою очередь, используют эти данные на аукционе в реальном времени для пользователя.
Для решения этой проблемы мы разработали услугу «Менеджер по маркетингу». Оно позволит отправлять данные на основе аналитических событий, происходящих на платформе Авито, напрямую в рекламные системы, без стороннего маркетингового кода внутри и с возможностью обогащения данных аналитическими моделями.
Содержание
Проблемы с текущим подходом к стороннему SDK
Все существующие проблемы подхода, от которых мы хотим отойти, можно сгруппировать в три группы:
Согласованность данных:
-
источником событий часто является микросервис, а не фасад;
-
Оптимизируем под прокси-метрики, а не целевые, т.е. мы можем инициировать отправку только на основе действий, происходящих в пользовательском интерфейсе;
-
Мы не учитываем антиботовые механизмы.
Ресурсы и трудности:
-
предварительная поддержка сторонних библиотек и доработка мероприятий после каждого выпуска продукта;
-
отсутствие ресурсов для развития маркетинга. Проблема в том, что продуктовые команды удаляют функции, покрывают их событиями потока посещений, и тогда остается серая зона. Либо маркетинг обнаруживает это постфактум и требует дополнительных ресурсов на разработку, либо мы просто берем существующие события кликстрима и с помощью ММ передаем их нужной рекламной системе;
-
Высокий ТТМ, цикл релизов со 100% развертыванием на iOS/Android — от 2 месяцев.
Пояснение по второму пункту, о нехватке ресурсов. Здесь есть две проблемы:
-
маркетологу необходимо знать, что появилась новая функция;
-
Маркетинговому аналитику необходимо найти ресурсы для добавления стороннего кода для своей маркетинговой компании.
По умолчанию Teams охватывает функции с помощью потока кликов, а маркетинговые аналитики могут использовать MM для повторного использования данных и отправки их в рекламную систему.
Риски:
-
закрытие внешних инструментов из-за санкций. Наша платформа позволяет максимально быстро переключить поток событий на альтернативный инструмент;
-
риски конкурентного шпионажа;
-
Ухудшение показателей производительности и наличие стороннего SDK «зоопарка» влияют на время загрузки страницы, увеличивают TTI и генерируют дополнительные сетевые запросы.
Менеджер по маркетингу — это платформа, с помощью которой вы можете настраивать, фильтровать, обогащать и отправлять сообщения на основе событий потока кликов во внешние рекламные системы (далее — учетные записи) практически в реальном времени. Отправка может включать поля событий, помеченные как неличные данные. О событиях кликстрима и многом другом мы уже говорили в статье, посвященной аналитическая платформа регистрации событий.
![Архитектура высокого уровня Архитектура высокого уровня](https://habrastorage.org/getpro/habr/upload_files/3bf/8f9/637/3bf8f963762cbc4b31a5d72ad734f34f.png)
Схема работы
События из источников отправки (сервисы, интерфейсы, мобильные приложения) собираются через поток кликов, а затем проходят через основную задачу обогащения флинка и задачу обогащения службы Marketing Manager. После этого они классифицируются по темам: для каждого рабочего стола отдельная тема. При чтении событий из темы для аккаунта создается сообщение на основе события и связанных с ним правил трансформации. Затем сообщение отправляется на аккаунт.
Гарантии и ограничения
Гарантии доставки — хотя бы один раз («хотя бы один раз»). Переживаем аварию за 2 дня без потерь, реализовав сохранение Kafka. Если возникнут проблемы в приемных или в конвейере обогащения, мы постараемся отправить мероприятие бесконечно. Это позволяет пережить значительный период министерской нестабильности, но накладывает определенные ограничения:
-
события дублируются;
-
Если возникнут проблемы в офисе, мы не пропустим мероприятия; поэтому мероприятие может «приехать» в офис с опозданием. Если событие не будет отправлено в течение 2 дней, оно будет потеряно. Это достигается путем настройки политики ожидания отправки запросов во внешнюю систему.
Гарантия очистки Антибот — для платформы работает стандартная чистка потоковым антиботом. Стриминговый антибот — это флинковое задание, включающее в себя десятки эвристик, рассчитываемых в реальном времени. Эта работа с помощью flink разработана командой обработки потока кликов, и вы также можете узнать больше об этом продукте в их статьях.
Возможности инструмента
-
экспорт определенных событий, собранных с помощью потока кликов, в учетные записи без необходимости многократного вызова SDK. Мы используем его только для создания идентификатора клиента;
-
настроить экспортированные сообщения на основе данных о событиях;
-
фильтрация экспортируемых данных на двух уровнях (учетная запись и сообщение). Фильтрация на уровне аккаунта может быть полезна, если вам не нужны события со всех платформ (desktop_site, mobile_site, iOS, Android). Фильтрация на уровне сообщений может потребоваться, если в событии есть определенные данные, требующие дополнительной логики фильтрации;
-
управлять активностью отправки через панель администратора;
-
контролировать поток отправляемых данных;
-
поддержка различных рекламных систем и возможность быстрой передачи отправлений при необходимости.
Пример экспорта в VK Ads
В рамках перехода со стороннего SDK на S2S-события маркетинговой команде необходимо было настроить экспорт данных, зафиксированных в событиях кликстрима, на десктопную и мобильную версии сайта Авито.
Сначала мы создали фильтр для всего аккаунта (скриншот ниже), который просматривает все входящие события и проверяет, что значение системного поля business_platform равно одному из значений: Desktop_site или mobile_site.
![Фильтр уровня шкафа Фильтр уровня шкафа](https://habrastorage.org/getpro/habr/upload_files/b17/16e/c57/b1716ec572534487df921da37edb54e4.png)
Второй шаг — мы приступили к настройке экспортируемых сообщений на основе схемы кабинета. Схема — это, по сути, тело запроса, отправленного в учетную запись. Схема системы создается разработчиками, реализующими поддержку новой учетной записи.
В результате нам удалось создать n-ное количество сообщений на основе событий кликстрима для экспорта в VK Ads.
![Таблица экспортированных сообщений с основной информацией Таблица экспортированных сообщений с основной информацией](https://habrastorage.org/getpro/habr/upload_files/486/ae1/d0c/486ae1d0cc55023820a7524845397cc1.png)
Конфигурацию экспортируемого сообщения можно разделить на следующие блоки (даже если это происходит на одной странице):
1) введите имя, выберите событие и выберите шаблон:
![Форма создания нового сообщения Форма создания нового сообщения](https://habrastorage.org/getpro/habr/upload_files/9f5/e82/815/9f5e8281553122336683dc91e0764853.png)
2) после выбора схемы ниже отобразятся ее поля, которые вам необходимо будет заполнить, выбрав и настроив одно из предложенных действий (три скриншота ниже). Действие с точки зрения интерфейса — это виджет, который позволяет вам определить логику, с помощью которой будет устанавливаться значение поля схемы на основе данных события (полей). С точки зрения серверной части, это код, который обрабатывает эти события и записывает их в поле схемы, которое необходимо отправить.
![Список полей схемы, для которых необходимо настроить действия Список полей схемы, для которых необходимо настроить действия](https://habrastorage.org/getpro/habr/upload_files/68f/f43/f7d/68ff43f7d74d7f9222b8b6d66a3e8123.png)
![Пример действия, выбранного для поля «u» Пример действия, выбранного для поля «u»](https://habrastorage.org/getpro/habr/upload_files/c76/1a2/b69/c761a2b699d62655cd612932c9ec315b.png)
![Пример действия, выбранного и настроенного для поля «u» Пример действия, выбранного и настроенного для поля «u»](https://habrastorage.org/getpro/habr/upload_files/e78/187/577/e781875771b6c080b693c20141d7e3e5.png)
3) после заполнения полей страница станет доступна для сохранения и значки ключей рядом с ней станут синими.
![Полностью готовая схема Полностью завершенная схема](https://habrastorage.org/getpro/habr/upload_files/60e/63f/663/60e63f6637b0ce87287c31536abb2b85.png)
4) чтобы сохранить и начать отправку, необходимо поставить галочку активности и нажать кнопку «Сохранить».
Выводы и проекты
Появление ММ позволило маркетологам проверить ряд гипотез, связанных с переходом от SDK к S2S (сервер к серверу) и сделать следующие выводы:
-
События S2S — эффективная альтернатива событиям SDK; они не ухудшают ключевые показатели маркетинговой команды;
-
стратегии, основанные на динамической ценности (взвешенный покупатель) не дали ожидаемых результатов, было решено отказаться от использования таких стратегий в наших кампаниях.
Помимо выводов, полученных на основе проверенных гипотез, был решен ряд вопросов. А внедрение ММ позволило:
-
отказаться от ненужного кода на фронтах;
-
сократить ТТМ настройки экспорта с двух месяцев (цикл релиза на iOS/Android) до нескольких дней;
-
предоставить гарантию очистки ленты роботами через онлайн-антибот.
В наши планы входит поддержка перехода со стороннего SDK на S2S для всех мероприятий, где это возможно. Во время поддержки мы ожидаем незначительных улучшений, могут быть ошибки и пожелания по функциям.
Спасибо, что уделили время этой статье! Если у вас есть вопросы или вы хотите поделиться опытом разработки и использования менеджеров, подобных нашему ММ — добро пожаловать в комментарии.
Также подпишитесь на Телеграм-канал АвитоТехТам мы подробнее рассказываем о профессиональном опыте наших инженеров, проектах и работе на Авито, а также анонсируем встречи и статьи.