ДокументацияРуководства
Данные о пользователях
Профиль пользователя — поля, как они влияют на выдачу, что присылать нельзя, контрольная группа и советы по идентификаторам.
События показывают, что пользователь делал. Профиль — то, что ваш сайт знает о нём сам: интересы из анкеты, год рождения, город, подписки на авторов. С профилем пользователь получает персональную выдачу сразу, ещё до накопления истории.
Просмотры, лайки, корзина и покупки — это действия с объектами: их передают событиями и заказами, а не профилем.
Запись профиля: POST /users/profile
curl -X POST https://core.daratech.ru/api/v1/users/profile \
-H "Authorization: Bearer $DARA_KEY" \
-H "Content-Type: application/json" \
-d '{
"user": {"user_id": "u-501"},
"birth_year": 1994,
"city": "Казань",
"country": "Россия",
"interests": ["горные велосипеды", "походы", "фототехника"],
"excluded_interests": ["азартные игры"],
"followed_authors": ["channel-17", "channel-203"],
"attributes": {"plan": "premium", "signup_source": "mobile"}
}'
{"identity": "user", "updated_fields": ["birth_year", "city", "country", "interests", "excluded_interests", "followed_authors", "attributes"]}
Переданные поля заменяются, null очищает поле, непереданные не меняются.
| Поле | Тип | Описание |
|---|---|---|
gender |
male или female |
пол |
birth_year |
int | год рождения, от 1900 до текущего года |
age |
int от 0 до 120 | вместо birth_year: ДАРА пересчитает возраст в год рождения, чтобы он не устаревал |
interests |
до 50 строк до 200 знаков | интересы текстом на любом языке |
excluded_interests |
до 50 строк до 200 знаков | «не интересно» |
followed_authors |
до 500 id | авторы у вас: подписки, любимые каналы и бренды |
hidden_authors |
до 500 id | авторы, которых пользователь скрыл |
city, country |
string до 100 знаков | город и страна; хранятся в нижнем регистре без лишних пробелов |
personalization |
bool | false — пользователь отказался от персонализации |
attributes |
object до 16 КБ | любые ваши данные: хранятся и видны в кабинете, на выдачу пока не влияют |
Правила:
- Без
user_idпрофиль записывается в анонимный профиль — даже если пользователь узнан без входа. На общем устройстве посторонний не должен менять данные аккаунта. - При склейке профиль анонима дополняет профиль пользователя: заполненные поля пользователя не перезаписываются.
- Без подключения DARA Fingerprint профиль только с
fingerprint_uuidотклоняется с кодомno_user.
Пакет — POST /users/profile/batch, до 500 профилей: {"profiles": [{"user": {...}, ...поля}]}. Ответ — {"results": [{"index", "ok", "error"}]}.
Как данные влияют на выдачу
| Данные | Влияние |
|---|---|
interests |
каждый интерес превращается в вектор смысла в течение минуты и участвует в интересах профиля; перевод не нужен — модели многоязычные |
excluded_interests |
объекты, близкие к исключённым интересам, опускаются в выдаче |
followed_authors |
любимые авторы получают максимальную близость — их свежие объекты попадают в ленту |
hidden_authors |
объекты этих авторов не показываются нигде, кроме переранжирования |
birth_year, age |
при включённом фильтре по возрасту объект с отметкой N+ показывается только пользователю не младше N лет; объекты без отметки не фильтруются |
city, country, gender и возраст |
сегменты пользователя: новым пользователям лента подмешивает популярное в их сегменте |
personalization: false |
профиль не строится и не используется, узнавание без входа не работает, выдача неперсональная; события учитываются в статистике объектов и метриках |
attributes |
не влияют на выдачу |
Подробнее о заявленных интересах:
- Лента становится персональной (
mode: personal), когда сумма реальной истории и веса заявленных интересов достигает порога. Вес заявленных интересов — 2,0, этого хватает для персональной ленты сразу после записи профиля. - Вес заявленных интересов уменьшается вдвое за 180 дней с их обновления и падает по мере накопления реальных действий: история пользователя важнее анкеты.
- Сегмент учитывается, когда в нём не меньше 100 пользователей с событиями за 30 дней. Сегменты — страна, город, пол вместе с возрастной группой: до 18, 18–24, 25–34, 35–44, 45–54, 55+.
Фильтр по возрасту и популярное в сегментах включены в проекте по умолчанию и выключаются в настройках выдачи.
Контрольная группа
Чтобы честно измерить, сколько дают данные о пользователях, часть пользователей попадает в контрольную группу: по умолчанию 10 %, в настройках проекта — от 0 до 50 %. Группа выбирается по хешу пользователя и не меняется.
- Контрольная группа получает выдачу без заявленных интересов, любимых авторов и сегментов.
- Скрытые авторы, возраст и отказ от персонализации соблюдаются всегда: это пожелания пользователя, а не улучшение выдачи.
- Метрики — CTR и целевые события на 100 показов — считаются отдельно для основной и контрольной групп и только среди пользователей, о которых вы передали данные. Сравнение — в кабинете, на экране «Данные о пользователях».
Что присылать нельзя
Персональные данные не принимаются. Ключи email, phone, name, first_name, last_name, middle_name, address, birth_date, passport в attributes — без учёта регистра, на любой глубине — дают ответ 422 validation_failed: в details — путь до ключа, например attributes.contacts.email, и код pii_not_allowed. Профиль в этом случае не записывается.
Не кладите персональные данные и в другие поля: в user_id, интересы, id авторов. Для выдачи они не нужны.
Сверка: GET /users/profile
Параметр — user_id, anonymous_id или fingerprint_uuid. Ответ — поля профиля в том виде, в каком их хранит ДАРА, attributes и дата обновления каждого поля. Метод нужен для проверки интеграции.
Советы
user_id— внутренний id пользователя, а не email. Id из вашей базы не меняется, когда пользователь меняет почту, и не раскрывает её. Если других идентификаторов, кроме email, нет, передавайте хеш адреса с постоянной солью вашего сайта — например,sha256("ваша-соль:" + email.lower()).- Семейный аккаунт с несколькими профилями — составной
user_id:u-501:anna,u-501:kids. У каждого профиля своя история, свои интересы и свой возраст, и детский профиль не получает рекомендации взрослого. - Гостевой заказ. На странице оформления передайте в заказе
userсanonymous_idпосетителя, а при подключённом DARA Fingerprint — иfingerprint_uuid. Если после заказа гость зарегистрируется, вызовитеPOST /users/linkс новымuser_idи теми же идентификаторами — заказ перейдёт в аккаунт. - Обновляйте профиль при изменении, а не перед каждым запросом выдачи: запись профиля сама пересчитывает всё нужное.