# Управление rule-based действиями

Rule-based действие — это «жёстко прописанная» персонализация: один сценарий с одним набором изменений, без ML и без вариантов. Применяется ко всем пользователям, попавшим под условие показа.

База: https://api.sales-ninja.me/public/api/v1/manage/rule-based-actions

HTTP Что делает
GET / Список.
POST /list Список со сложным фильтром.
GET /{id} Полная сущность.
POST / Создать.
PUT /{id} Обновить (полная замена).
DELETE /{id} Удалить.

# Тело

{
  "title": "Промо-баннер на ЧП",
  "state": "Working",
  "scope": "Web",
  "slotFrom": 0,
  "slotTo": 100,
  "goals": [{"goalId":"299837db-9b51-45a4-996b-844d3fd05bbd"}],
  "option": {
    "title": "Промо",
    "isWorking": true,
    "modifications": [
      { "type": "InsertHtml",
        "actionJson": {
          "selector": ".checkout-header",
          "position": "afterend",
          "html": "<div class=\"promo\">−10% по промокоду SPRING</div>"
        } }
    ]
  },
  "displayCondition": {
    "operator": "And",
    "left":  { "fieldCode": "page_url",       "operation": "Contains", "value": "/checkout" },
    "right": { "fieldCode": "device_kind",    "operation": "Equal",    "value": "Desktop"  }
  }
}

# Ключевые отличия

  • Один-единственный option (а не массив variants[]). Это и есть применяемое изменение.
  • ML-параметров нет: rule-based не учится, он либо применяется (если условие соблюдено), либо нет.
  • displayCondition.target = Default.

# Поля option

Поле Описание
id UUID существующего option; null — будет создан.
title Название (виден только в админке).
isWorking Активен ли.
customScript Произвольный JS (только scope: "Web").
redirectTo Куда редиректить (только scope: "Web").
modifications Список модификаций — структура та же, что у персонализаций.

# Ответ

{
  "ruleBasedActionId": "8f3a1e4b-…"
}

# Интеграционные модификации

Внутри option.modifications[] можно вызывать API внешних систем — см. JS-действия в персонализациях (формат тот же).