# Получение расширенной информации об ответе стратегии (инструмент тестировщика)

Для проведения расширенного анализа ответов стратегии можно использовать запросы `/recs` с дополнительным параметром `explain=true`.

## Эндпоинт

```
POST https://evs-01.gravityfield.ai/recs
```

> Используется только для отладки стратегий. Для боевой интеграции используйте `https://evs.gravityfield.ai`.

## Обязательные параметры запроса

| Параметр          | Тип     | Описание                                                                                                                                                                                                                                                                                                                              |
| ----------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `uid`             | string  | Уникальный идентификатор пользователя. В случае фронтовой или гибридной интеграции — это значение cookie `slid` на сайте. В случае API-only интеграции — необходимо запросить у команды Gravity Field, зная `user.id`.                                                                                                                |
| `sec`             | string  | Идентификатор секции. Его можно найти в URL аккаунта или стратегии. Пример: `https://app.gravityfield.ai/s/000/dashboard` — `sec = 000`                                                                                                                                                                                               |
| `ses`             | string  | Уникальный идентификатор сессии. Заполняется вручную тестировщиком — любое уникальное значение строки или числа.                                                                                                                                                                                                                      |
| `id`              | string  | Идентификатор стратегии. Число после `edit/` в URL стратегии. Пример: `https://app.gravityfield.ai/s/000/strategies/edit/111` — `id = 111`                                                                                                                                                                                            |
| `explain`         | boolean | Указать `true`, чтобы получить информацию о pipeline стратегии                                                                                                                                                                                                                                                                        |
| `options.context` | object  | Контекст страницы, на которой запрашивается рекомендация. Примеры: `{type: "HOMEPAGE"}`, `{type: "CATEGORY", data: ["Малому и среднему бизнесу"]}`, `{type: "PRODUCT", data: ["XD-154"]}`, `{type: "CART", data: ["XD-154", "DL-5874", "TN-15", "QSD-1581", "XD-15"]}`, `{type: "SEARCH", data: ["search query"]}`, `{type: "OTHER"}` |

## �� Пример запроса

```bash
curl --location 'https://evs-01.gravityfield.ai/recs' --header 'Content-Type: application/json' --header 'Cookie: SLID=C361C172-885C-4462-970D-D96E481EDB57' --data '{
  "uid": "67f7a834139c346f83cf7911",
  "sec": "670ccaae56afcafaf808c146",
  "ses": "100425",
  "id": "680f8e8357e3dc04b907a3e2",
  "explain": true,
  "options": {
    "context": {
      "type": "CART",
      "data": ["1023812"]
    }
  }
}'
```

## Ответ

Ответ включает два блока:

### `slots`

Содержит финальные рекомендованные товары:

```json
"slots": [
  {
    "item": {
      "sku": "52013945",
      "name": "Название товара 52013945",
      "price": "1399",
      "url": "https://site.ru/products/52013945",
      "brand": "Бренд товара 52013945"
    },
    "fallback": false,
    "strId": 4
  }
]
```

### `pipeline`

`pipeline` — это **последовательность этапов**, через которые проходят товары, прежде чем попасть в финальный список рекомендаций. Каждый шаг может включать фильтрацию, fallback-логику, источники и дополнительные правила.

```json
"pipeline": [
  [
    {
      "type": "RecentlyViewed",
      "items": ["72103847", "52013945", "32490811"],
      "steps": [
        {
          "query": {
            "$and": [
              {"price": {"$ne": {"$numberDecimal": "1"}}},
              {"categories": {"$all": ["Категория первого уровня", "Категория второго уровня"]}}
            ]
          },
          "items_in_query": ["72103847", "52013945", "32490811"]
        }
      ]
    },
    {
      "type": "custom post rules",
      "items": ["72103847", "52013945", "32490811"]
    }
  ]
]
```

## ⚠️ Важно

- Если не указать `explain=true` (`explain=false` по умолчанию), в ответе не будет pipeline-информации.
- При отсутствии корректных `uid`, `sec`, `id` в ответ на запрос будет возвращена ошибка 422.

## ❓ FAQ

**Зачем нужен параметр `explain`?**  
Чтобы понять, как именно стратегия фильтрует, сортирует и формирует рекомендации. Используется для отладки и настройки.

**Что такое pipeline?**  
Это список логических шагов, которые выполняет стратегия при формировании выдачи: фильтры, источники, fallback-механизмы и т.п.

**Как проверить конфликт slot rules?**  
Смотрите шаг `custom post rules` в `pipeline`. Если на один слот назначено несколько правил, система будет искать товар, который проходит их **все** одновременно. В этом механизме нет "приоритета" одного slot rule над другим: правила объединяются в одно составное условие. Если подходящий товар не найден, правило для этого слота будет пропущено, а виджет соберётся из остальных товаров.

## См. также

- [Получение рекомендаций: choose](/Integration/api_integration/personalization/choose.md)
- [Идентификация пользователя: как получить uid и session](/Integration/web_integration/Guides/get_slid_uid_session_id.md)
- [Контексты страниц](/Integration/web_integration/page_context.md)
