Схема sigmaUserData
sigmaUserData {
  {
    userId?: string | number                    // например, clientId из счетчика google analytics 
    profileId?: string | number                 // например, ID пользователя при регистрации 
    deviceId?: string | number                  // например, ID устройства с которого зашел пользователь
    ip?: string                                 // ip для определения гео локации (geo) 
    email?: string                              // email
    appVersion?: string | number                // версия приложения, только для платформ Android и ios
    geo?: object {                              // гео локация 
      country?: string
      code?: string
      state?: string
      city?: string
    };
    browser?: object {                          // название и версия браузера, только для платформы web
      name?: string 
      version?: string | number
    };
    os?: object {                               // название и версия операционной системы, только для платформы web
      name?: string 
      version?: string | number 
    };
    custom?: object {  
      [key: string]: string | number | boolean  // поле с произвольным ключ: значение
    };
    deviceCategory?: string                     //  устройство с которого зашел пользователь (web, mobile, tablet) только для платформы web
    url?: string                                // весь URL https://www.ya.ru/cart/?param=1
    pathname?: string                           // строка пути (относительно хоста) /cart   
    query?: string                              // часть адреса после символа ? ?param=1
    domain?: string                             // домен (hostname) www.ya.ru
    platform?: string                           // фильтр по платформе. Настраивается в админ-панели при создании фича флага или эксперимента. Доступные  платформы 'web', 'android', 'ios'
    ua?: string                                 // user-agent. Если передать, SDK автоматически подставит значения в browser, os. Приоритет у browser и os выше. Если не передать, SDK сама попробует определить user-agent (например вызвать API на клиенте)
  },
    getAllUserExperiments?: boolean             // получить все эксперименты (формат: <название>.<вариант> разделитель: |)
    cacheTTL?: number                           // указывает через какой промежуток времени обновить данные. Измеряется в секундах. Меньше 10 поставить нельзя
    includeForceUser?: [                        // добавить пользователя в принудительный список эксперимента / экспериментов. Если указан второй параметр — индекс группы, пользователь будет добавлен в принудительный список группы.
    { 
      experimentId: string,
      groupIndex?: number,
    },
  ]
}
Эксперименты и фича-флаги с гео-локацией
Есть два способа работы с экспериментами и ФФ, в которых есть условия на гео:
- 
Передавать гео-данные пользователя в объект
userData. Данные можно получить сторонним сервисом, но в таком случае, необходимо, чтобы наименование было идентично тому, что будет указано в условиях эксперимента / фф.Пример:
curl
--location 'https://api.expf.ru/api/v1/user/estimate/all' \
--header 'token: <TOKEN>' \
--header 'Content-Type: application/json'
--data '{
"sigmaUserData": {
"userId": "1",
"geo": { "city": "Perm", "country": "Russian Federation" }
}
}' - 
Передавать
ipпольз ователя в объектuserData. SDK сделает запрос по ip, результат запишет в кэш.Пример:
curl
--location 'https://api.expf.ru/api/v1/user/estimate/all' \
--header 'token: <TOKEN>' \
--header 'Content-Type: application/json'
--data '{
"sigmaUserData": {
"userId": "1",
"ip": "5.140.69.184"
}
}' 
Не рекомендуется передавать в объект userData одновременно два свойства: geo и ip.
Если переданы два свойства, приоритет будет у ip, все что передано в свойство geo будет проигнорировано.
Разбор URL в sigmaUserData
Если в значение sigmaUserData.url передать полный URL-адрес, estimate попытается разбить его на составляющие и автоматически заполнит поля: sigmaUserData.domain, sigmaUserData.pathname, sigmaUserData.query. При этом, если явно передать, например, sigmaUserData.pathname — приоритет будет у переданного значения sigmaUserData.pathname, и оно не перезапишется.
Если переданный URL-адрес не является валидным, estimate его проигнорирует.
Пример валидного URL-адреса: http://example.org, https://example.org/url?a=b&b=c
  curl 
  --location 'https://api.expf.ru/api/v1/user/estimate/all' \
  --header 'token: <TOKEN>' \
  --header 'Content-Type: application/json'
  --data '{
      "sigmaUserData": {
          "userId": "1",
          "url": "https://example.org/url?a=b&b=c"
      }
  }'