← Все проектыПроект / Автоматизация кампаний

Сервис создания креативов по спортивным событиям

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

PythonCeleryRedisFastAPIPostgreSQLPlaywrightDuckDBAngular
О проекте

Что делает сервис

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

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

Кто пользуется

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

Что на входе
  • Формат и язык кампании, аудитория и правила выбора события.
  • Данные спортивного фида: команды, время начала и статус матча.
  • Текстовый шаблон, HTML-шаблон изображения и связанные материалы.
Что на выходе
  • Текст и изображение для подходящего события.
  • Созданный или обновлённый креатив в рекламной платформе.
  • Состояние паузы или повтора, если события нет либо внешний запрос завершился ошибкой.
Условия работы системы
  • У кампаний разные аудитории, языки и форматы креативов.
  • Запросы к спортивному фиду и рекламной платформе учитывают лимиты этих сервисов.
  • Если подходящего матча нет, действующий креатив можно приостановить.
  • Оператор видит показатели кампаний и ошибки задач в одном интерфейсе.
01 / Как работает сервис

Спортивный матч → креатив → рекламная кампания

Карта процессаСплошная линия: обычный ход · пунктир: повтор или возврат
Карта процесса: pushКарта показывает последовательность работы, решения и альтернативные маршруты.
ВХОДНастройки кампанииФормат, язык и правила выбора
СЕРВИСПолучить спортивный фидОбщий кэш и лимиты провайдера
РАЗВИЛКАЕсть подходящее событие?Временное окно, коды команд и приоритеты
РЕЗУЛЬТАТПриостановить креативПодходящего события нет
ШАГПодставить данныеЛокализованный текст и безопасная подстановка
СЕРВИССобрать изображениеБраузер преобразует HTML-шаблон в PNG
СЕРВИССоздать и загрузитьЗапрос к рекламной платформе
РАЗВИЛКАРезультат публикацииУспех или ошибка внешнего API
РЕЗУЛЬТАТКреатив обновлёнЛокальное состояние кампании обновлено
ШАГУдалить частичный результатПопытка компенсации после ошибки
  1. ВХОДНастройки кампании

    Формат, язык и правила выбора

    ДалееПолучить спортивный фид
  2. СЕРВИСПолучить спортивный фид

    Общий кэш и лимиты провайдера

    ДалееЕсть подходящее событие?
  3. РАЗВИЛКАЕсть подходящее событие?

    Временное окно, коды команд и приоритеты

    даПодставить данные
    нет событияПриостановить креатив
  4. РЕЗУЛЬТАТПриостановить креатив

    Подходящего события нет

  5. ШАГПодставить данные

    Локализованный текст и безопасная подстановка

    ДалееСобрать изображение
  6. СЕРВИССобрать изображение

    Браузер преобразует HTML-шаблон в PNG

    ДалееСоздать и загрузить
  7. СЕРВИССоздать и загрузить

    Запрос к рекламной платформе

    ДалееРезультат публикации
  8. РАЗВИЛКАРезультат публикации

    Успех или ошибка внешнего API

    готовоКреатив обновлён
    ошибкаУдалить частичный результат
  9. РЕЗУЛЬТАТКреатив обновлён

    Локальное состояние кампании обновлено

  10. ШАГУдалить частичный результат

    Попытка компенсации после ошибки

    повторСоздать и загрузить
Стрелки показывают направление работы; подписи на ветках объясняют решения, ошибки и повторы.
02 / Архитектура системы

Основные части и их роль

Campaign configuration

Настройка кампании

Оператор выбирает аудиторию, язык, формат и правила обновления.

Как устроено

Backend поддерживает создание, изменение, копирование кампаний и пакетную загрузку из таблицы.

Redis / shared cache

Получение фида

Worker получают актуальные спортивные данные без лишнего повторения одного запроса.

Как устроено

Кэш объединяет одновременные запросы к одному фиду. Redis-лимитер согласует частоту и число запросов между worker.

Time / team priorities

Выбор события

Кампания выбирает событие по временному окну и приоритетам.

Как устроено

Кандидаты проверяются по кодам команд, включающим и исключающим окнам, упорядоченным приоритетам. Отсутствие события отличается от сбоя провайдера.

Templates / Chromium

Сборка креатива

Из выбранного события собираются локализованный текст и изображение.

Как устроено

Спортивный текст использует плейсхолдеры и проверку длины. HTML-шаблоны экранируют значения и рендерятся в PNG через Chromium. Для промотекстов есть отдельный API генератора.

External ad API

Синхронизация материалов

Система создаёт внешний креатив, загружает материалы и активирует его.

Как устроено

Сервис создаёт объявление, загружает изображение и связывает его с кампанией в приложении.

Celery / reconciliation

Обновление кампании

Изменение событий запускает обновление; отсутствие подходящих событий может приостановить креативы.

Как устроено

История задач и выбранное событие определяют, когда обновить, приостановить или снова активировать креатив.

Analytics / notifications

Контроль работы

Операторы изучают показатели кампаний и ошибки задач.

Как устроено

DuckDB и Pandas подготавливают отчёты по кампаниям. В журнале задач и уведомлениях видны повторы и окончательные ошибки.

03 / Детали реализации

Инженерные решения

01

Согласовать нагрузку на API

Общий контроль запросов и single-flight кэш учитывают нагрузку разных worker.

02

Описать жизненный цикл креатива

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

03

Разделить способы генерации

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

Разработка приложений для бизнеса

Есть задача для разработки?

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