Skip to content

Таргетинг

Таргетинг определяет, какие пользователи увидят фичу. можно. использует контекстные правила (constraints), сегменты и процентный роллаут для точного управления аудиторией.

Как работает таргетинг

При оценке флага SDK последовательно проверяет:

  1. Флаг включён? — если флаг (или стратегия) выключен, вернуть false
  2. Контекстные правила — все заданные правила должны совпасть (логическое И)
  3. Сегменты — хотя бы один сегмент должен совпасть (логическое ИЛИ)
  4. Если заданы и правила, и сегменты — достаточно совпадения любого из них (ИЛИ)
  5. Процентный роллаут — детерминированное распределение через MurmurHash32
  6. По умолчанию — если ничего не задано, вернуть true
graph TD
    CTX[Контекст запроса] --> EN{Флаг включён?}
    EN -->|Нет| FALSE[false]
    EN -->|Да| HAS_RULES{Есть контекстные<br/>правила?}
    HAS_RULES -->|Да| EVAL_RULES[Проверка всех правил<br/>AND-логика]
    HAS_RULES -->|Нет| HAS_SEG{Есть сегменты?}
    EVAL_RULES --> RULES_OK{Все правила<br/>совпали?}
    RULES_OK -->|Нет| HAS_SEG
    RULES_OK -->|Да| PCT[Процентный роллаут]
    HAS_SEG -->|Да| EVAL_SEG[Проверка сегментов<br/>OR-логика]
    HAS_SEG -->|Нет| PCT
    EVAL_SEG --> SEG_OK{Хотя бы один<br/>сегмент совпал?}
    SEG_OK -->|Нет| HAS_RULES
    SEG_OK -->|Да| PCT
    PCT --> TRUE[true]

Контекстные правила

Каждое правило — это сравнение поля контекста со значением через оператор. Все правила внутри стратегии объединяются логическим И.

json
{
  "field": "country",
  "operator": "in",
  "values": ["RU", "BY", "KZ"]
}

Тип контекста (contextType) определяет, как оператор интерпретирует значение. Полная матрица совместимости операторов и типов — Контексты.

Сегменты

Сегмент — переиспользуемая группа пользователей со своим набором контекстных правил. Внутри сегмента все правила — AND-логика. Стратегия может ссылаться на несколько сегментов — достаточно совпадения любого из них (OR-логика). Подробнее — Сегменты.

Преимущества сегментов

ПреимуществоОписание
Единая точка правдыИзменили сегмент — все флаги автоматически обновились
DRYНе повторяете одни и те же правила на каждом флаге
АудитВидно, кто и когда изменил состав сегмента

Процентный роллаут

Детерминированное распределение через хеширование:

hash = MurmurHash32(flagKey + идентификатор) % 100
if hash < percentage → enabled

Один и тот же идентификатор всегда получает одинаковый результат для одного флага. В качестве идентификатора используется userId, затем sessionId; если не передан ни один — SDK использует автоматически сгенерированный стабильный anonymousId.

Важно: Если опция stickyAnonId отключена и идентификатор не передан, хеш считается только по ключу флага — все анонимные пользователи попадают в одну группу (либо все получают фичу, либо никто). SDK выводит предупреждение в лог. Подробнее — Роллаут.

При 100% роллауте фича включена для всех; при 0% — выключена.

Как сочетаются условия и сегменты

Одна стратегия может содержать и контекстные условия, и сегменты одновременно:

  • Достаточно пройти хотя бы что-то одно — условия ИЛИ любой из сегментов
  • Не пройдено ни условий, ни сегментов → флаг возвращает false (роллаут не применяется)
  • Пройдено → применяется процентный роллаут

Что дальше?

  • Роллаут — процентная раскатка и стратегии
  • Сегменты — переиспользуемые группы пользователей
  • Флаги — типы флагов и жизненный цикл
  • SDK: Обзор — как SDK оценивает правила локально

Released under the BSL 1.1 License.