# 🔌 Создание API-кампании в Gravity Field

Эта инструкция поможет продактам, маркетологам и разработчикам создать и запустить API-кампанию — кампанию, где контент возвращается в виде JSON, а рендеринг реализуется на стороне клиента (вашего сайта или приложения).


# 🧠 Когда использовать API-кампании?

API-кампании подходят, если:

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

В отличие от Web-кампаний, в API-кампаниях нет визуального редактора. Всё отображение реализуется вашей командой на стороне клиента.


# 🛠 Перед началом убедитесь, что:


# 📌 Шаги создания API-кампании

# 1️⃣ Создание кампании

  1. Перейдите в раздел Campaigns → API Campaigns.
  2. Нажмите Создать кампанию.
  3. Укажите:
Поле Описание
Название кампании Отображается в списке кампаний.
Комментарий и лейблы Удобно для навигации и фильтрации.
Status Статус кампании:
Active — будет доступна в API
Draft — черновик
Paused — временно отключена
API-селектор Уникальное имя для вызова кампании через API.
Группа селекторов Позволяет вызывать несколько кампаний одним запросом.
Тип кампании Custom JSON или Recommendations JSON.

# 2️⃣ Настройка сценария (Experience)

Сценарий управляет условиями показа (для кого и когда):

  • Нажмите Add experience
  • Укажите:
    • Название сценария (например: «Для новых пользователей»)
    • Таргетинг (по сегменту, странице, времени и т.п.)
    • При необходимости — расписание показа (Set Schedule)

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


# 3️⃣ Создание вариации

Каждый сценарий может включать одну или несколько вариаций (например, для A/B теста).

Вариация содержит:

Настройка Описание
Метод тестирования A/B или динамическое распределение
Ключевая метрика Для выбора победителя теста (например, конверсия, CTR)
Stickiness Привязка вариации к сессии или пользователю
Окно атрибуции Период, когда действие пользователя будет учтено
Минимальная длительность Чтобы не завершать тест слишком рано

# 4️⃣ Настройка содержимого вариации

Нажмите ✏️ Edit, чтобы задать JSON-ответ:

  • Для Custom JSON: вы указываете произвольный объект.
  • Для Recommendations JSON: выбираете стратегию рекомендаций, а JSON содержит список товаров.

💡 Можно использовать переменные — например, для заголовка или изображения — и редактировать их в интерфейсе без правки кода. Подробнее: Переменные в вариациях


# 5️⃣ Предпросмотр и тестирование

Хотя в API-кампаниях нет встроенного визуального предпросмотра, вы можете:

  • Отправить тестовый choose-запрос через Postman или curl.
  • Проверить, что API возвращает нужный JSON.
  • Убедиться, что клиентское приложение отображает результат корректно.

# 6️⃣ Активация и публикация кампании

Для полноценного запуска нужно активировать и сценарий, и кампанию:

  • Установите статус сценария (Experience) в Active.
  • Установите статус кампании в Active.
  • Нажмите кнопку Опубликовать в верхней панели, чтобы применить изменения.

⚠️ Если сценарий активен, но сама кампания — в черновике, кампания показываться не будет.


# 🔄 Пример запроса и ответа

# 📤 Запрос

Для получения кампании из API Gravity Field необходимо отправить запрос в endpoint choose. В запросе должен быть указан селектор кампании, который вы задали при создании кампании.

Пример запроса вызывающего кампанию с селектором PDP Recs Block 1:

{
    "user": {
        "slid": "639c83a421b4a8749306d566" // идентификатор пользователя из одноимённой куки
    },
    "session": {
        "sl": "996C20A3-28A6-4DA0-8F19-6721332D19D4" // идентификатор сессии из куки _slsession
    },
    "context": {
        "page": { // контекст страницы
            "type": "PRODUCT", 
            "data": [ 
                "894"
            ],
            "lng": "34567890",
            "location": "https://shop.biz/nice-shirt-p76311.html",
            "referrer": "https://google.cz",
            "locale": "de_DE"
        },
        "device": {
            "userAgent": "Mozilla/5.0 (Linux; U; Android 8.1.0; zh-CN; EML-AL00 Build/HUAWEIEML-AL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/57.0.2987.108 baidu.sogo.uc.UCBrowser/11.9.4.974 UWS/2.13.1.48 Mobile Safari/537.36 AliApp(DingTalk/4.5.11) com.alibaba.android.rimet/10487439 Channel/227200 language/zh-CN",
            "ip": "192.168.0.1"
        }
    },
    "selector": {
        "names": [
            "PDP Recs Block 1" // селектор вызываемой кампании, можно запрашивать сразу несколько
        ]
    },
    "options": {
        "isImplicitPageview": true, // если на странице нет скрипта, отправка просмотра страницы в аналитику платформы
        "recsProductData": {
            "skusOnly": true, // указание (не) возвращать информацию о товарах из фида
            "fieldFilter": ["fieldFilter"] // дополнительные фильтры
        }
    }
}

# 🔸 Ответ

{
    "choices": [
        {
            "id": "65cdf9ec260afb0c050cd2e0", // идентификатор кампании
            "name": "PDP Recommendations Block 1", // название кампании
            "type": "RECS_DECISION", // тип ответа
            "variations": [
                {
                    "id": "65cdf9ec260afb0c050cd2e7", // идентификатор стратегии
                    "name": "Popularity", // тип стратегии
                    "payload": {
                        "type": "RECS", // тип кампании
                        "data": { 
                            "custom": { // JSON с переменные из вариации, заведенными в интерфейсе
                                "title": "Популярные товары"
                            },
                            "slots": [ // массив с рекомендованными товарами (только для рекомендательных кампаний)
                                {
                                    "sku": "19874", // идентификатор товара, как в фиде
                                    "productData": {},
                                    "slotId": "65cdf9ec260afb0c050cd2e0:65cdf9ec260afb0c050cd2e9:65cdf9ec260afb0c050cd2e3:65cdf9ec260afb0c050cd2e7:651c3871d5f72ba433096868:650dabce812954894a00a248:0:19874:0:3:0", // идентификатор слота, нужно возвращать в вызовах в engagememnt: SLOT_CLICK
                                    "fallback": false // информация о том, сработала целевая стратегия или произошёл фолбек в резервную
                                },
                                {
                                    "sku": "19794",
                                    "productData": {},
                                    "slotId": "65cdf9ec260afb0c050cd2e0:65cdf9ec260afb0c050cd2e9:65cdf9ec260afb0c050cd2e3:65cdf9ec260afb0c050cd2e7:651c3871d5f72ba433096868:650dabce812954894a00a248:0:19794:0:3:1",
                                    "fallback": false
                                },

...

"groups": [],
            "decisionId": "65cdf9ec260afb0c050cd2e0:65cdf9ec260afb0c050cd2e9:65cdf9ec260afb0c050cd2e3:65cdf9ec260afb0c050cd2e7" // идентификатор ответа, нужно возвращать в вызовах в engagememnt: WRIMP и CLICK (для рекомендаций CLICK не используется)
        }
    ],
    "session": {
        "sl": "98EC002F-E3EF-49FD-B845-71E88E7CD58A" // идентификатор сессии
    },
    "cookies": [
        {
            "name": "_slsession",
            "value": "98EC002F-E3EF-49FD-B845-71E88E7CD58A", // сессионная кука для установки в браузер пользователя
            "maxAge": "1800"
        }
    ]
}

# Финальный чек-лист для успешного запуска

Перед публикацией убедитесь, что выполнены все шаги:

  • Получен API-ключ
  • Создана кампания с нужным типом и задан API-селектор
  • Добавлен хотя бы один сценарий с таргетингом
  • Настроены вариации с JSON-содержимым
  • Проведено тестирование API-ответа
  • Активированы сценарий и кампания
  • Кампания опубликована

# 📚 Полезные материалы