# Управление A/B-тестами
CRUD над A/B-тестами. Логически и по форме тела A/B-тест очень похож на персонализацию — те же варианты, те же модификации, тот же контракт условий показа. См. сначала общие правила.
База: https://api.sales-ninja.me/public/api/v1/manage/ab-tests
| HTTP | Что делает |
|---|---|
GET / | Список A/B-тестов. |
POST /list | Список со сложным фильтром. |
GET /{id} | Полная сущность. |
POST / | Создать. |
PUT /{id} | Обновить. |
DELETE /{id} | Удалить. |
# Тело запроса
{
"title": "Цвет кнопки 'Купить'",
"state": "Working",
"scope": "Web",
"optimizationMetric": "ConversionCount",
"slotFrom": 0,
"slotTo": 100,
"goals": [{"goalId":"299837db-9b51-45a4-996b-844d3fd05bbd"}],
"stoppingStrategy": {
"type": "FixedSampleSize",
"minSessions": 5000
},
"isSmart": false,
"pessimizeControlGroup": false,
"protectAgainstChanges": false,
"onlyForManualCalling": false,
"mlModelAtributionType": "FirstSession",
"variants": [
{ "title": "Контроль", "isOriginal": true, "isWorking": true, "modifications": [] },
{ "title": "Зелёная", "isOriginal": false, "isWorking": true, "modifications": [
{ "type": "ChangeStyle",
"actionJson": {"selector": ".buy", "property": "background-color", "value": "#0a8"} }
]}
],
"displayCondition": {
"fieldCode": "page_url",
"operation": "Contains",
"value": "/product/"
}
}
# Ключевые отличия от персонализации
| Поле | A/B-тест | Персонализация |
|---|---|---|
stoppingStrategy | Есть. Описывает, когда тест считается завершённым. | Нет. |
| ML-модель | Не учится «выбирать вариант» — просто меряет разницу. | Учится. |
| Контрольный вариант | Обязательно, и доля группы фиксируется заранее. | Опционально. |
displayCondition.target | Default | PersonalizationWeb |
# stoppingStrategy
Объект с одним из значений type:
type | Что значит | Параметры |
|---|---|---|
Manual | Никакого автостопа, оператор останавливает вручную. | — |
FixedSampleSize | Остановиться после набора нужного объёма выборки. | minSessions |
BayesianProbability | Остановиться, когда вероятность победителя достигает порога. | threshold (0…1) |
ConfidenceInterval | Остановиться, когда доверительный интервал стал уже порога. | widthThreshold |
Точный список доступных стратегий и их параметры зависят от конфигурации проекта — стартовать имеет смысл с
Manual или FixedSampleSize.
# variants[] и variants[].modifications[]
Идентичны структуре персонализации — см. Управление персонализациями.
# Ответ при сохранении
{
"abTestId": "12d4f8b1-1234-4ab6-aa00-1234abcd5678",
"variantIds": ["..."],
"displayConditionId": "...",
"createdAbTest": true,
"createdVariantIds": ["..."]
}
# cURL — создать
curl -X POST "https://api.sales-ninja.me/public/api/v1/manage/ab-tests" \
-H "X-SN-TOKEN: $SN_TOKEN" \
-H "Content-Type: application/json" \
-d @ab-test.json
# Интеграционные модификации
Внутри variants[].modifications[] можно вызывать API внешних систем — см.
JS-действия в персонализациях (формат тот же).