Cashback

Персонализированные предложения кэшбэка

Возвращает список категорий кэшбэка, персонализированных для текущего пользователя.

Pipeline:

  1. Загрузка профиля пользователя → DslContext (age, city, country, sex, role, registration_days)
  2. Получение всех ACTIVE категорий + привязанных DSL-правил
  3. Фильтрация через DSL engine — правила таргетинга (AGE >= 18 AND CITY IN ("Москва"))
  4. ML-ранжирование через POST /ml/score (3-retry, 150/300/450ms backoff, math fallback)
  5. Сортировка по rate_permille DESC

DSL-фильтрация:

  • Категория без привязанных правил → доступна всем
  • Правило с is_default=true → всегда проходит
  • Пустой или "true" DSL → всегда проходит
  • Иначе: парсинг + evaluation DSL-выражения против профиля

ML scoring:

  • Успех: source = "ml", ставка из rate_permille, объяснение из explanation
  • Fallback: source = "math_fallback", ставка = budget_weight × 60% + capacity × 40%
get/api/v1/cashback/offers

Request

  • Base URL: http://158.160.83.199:8000
  • URL: http://158.160.83.199:8000/api/v1/cashback/offers
  • Auth: HTTP bearer

Response

Персонализированные предложения

user_idstring uuid required

UUID пользователя

total_eligibleinteger required

Кол-во категорий, прошедших DSL-фильтрацию

sourcestring required

Источник скоринга: ml | math_fallback | none | dsl_filtered

Example response

{
  "offers": [
    {
      "name": "Рестораны",
      "subname": "Кафе и рестораны",
      "short_description": "5% кэшбэк на рестораны",
      "icon_ref": "restaurant",
      "budget_remaining_rub": 45000,
      "rate_permille": 50,
      "expected_cost_rub": 500,
      "explanation": "Высокая активность в категории, оптимальный бюджет",
      "rank": 1,
      "source": "ml"
    }
  ],
  "total_eligible": 8,
  "source": "ml"
}

Changes

No recorded changes to this operation across all 1 revision of this API.