Перейти к содержанию

API Контрольных групп

Контрольная группа — это удержанная часть пользователей приложения, которая никогда не получает маркетинговые сообщения, что позволяет измерять эффект от рассылок в сравнении с ней. Этот API управляет контрольными группами и отвечает на запросы о членстве для каждого пользователя. Используйте его, чтобы дублировать действия из раздела Настройки > Контрольные группы в Control Panel из ваших собственных систем или чтобы проверять, находятся ли конкретные User ID в удержанной группе перед отправкой или импортом.

Базовый URL

Anchor link to
https://rpc-api.svc-nue.pushwoosh.com

Все конечные точки обслуживаются по HTTPS. Запросы и ответы используют application/json, если не указано иное.

Аутентификация

Anchor link to

Каждый запрос должен содержать заголовок Authorization с вашим токеном Server API:

Authorization: Api YOUR_API_TOKEN

Соглашения

Anchor link to
  • Именование полей: тела запросов и параметры пути/запроса принимают lowerCamelCase (например, controlGroupCode, userIds), и сервер десериализует любой из этих регистров. Ответы всегда сериализуются с использованием имен полей proto в snake_case (application_id, in_control_group и так далее). Примеры ответов и справочник по объекту контрольной группы ниже используют этот регистр.
  • code: каждый ответ контрольной группы содержит собственный код, сгенерированный при Create. Передавайте этот код как controlGroupCode в Get, UpdatePercentage, UpdateCountries, Rename, Disable, Reshuffle, ForceUpdateCalculation, GetCalculationStatus, GetAnalytics и CheckControlGroupMembership.
  • Несколько групп: у приложения может быть несколько контрольных групп. Каждая включенная группа удерживает пользователей от каждой маркетинговой отправки в пределах своих стран и тега, независимо от других групп, и группы могут пересекаться. Отправка не выбирает группу. Группа с пустым name — исходная группа приложения, и работает так же.

Ответы об ошибках

Anchor link to
HTTP-статусЗначение
400 Bad RequestНедопустимый аргумент, например, percentage вне диапазона 1–20, userIds пуст или содержит более 1000 записей, нераспознанный код страны, scopeValues без scopeTag, scopeTag с названием тега, которого нет в аккаунте, или значение в scopeValues, которое отклоняет UpdateSettings (см. ниже). Также возвращается (как FailedPrecondition при передаче) методами UpdatePercentage, UpdateCountries, UpdateSettings, Disable, Reshuffle и Delete для контрольной группы, которая принадлежит собственной удержанной группе кампании, согласно предупреждению ниже. Только Reshuffle также отклоняет запрос таким образом для отключенной (percentage 0) группы.
401 UnauthorizedОтсутствует или недействителен заголовок Authorization.
403 ForbiddenПриложение или контрольная группа не принадлежат аккаунту вызывающей стороны.
404 Not FoundКонтрольная группа или приложение не найдены.
409 ConflictПри Create использовано name, которое уже существует в приложении.
500 Internal Server ErrorНеожиданный сбой на стороне сервера.

Конечные точки

Anchor link to
МетодПутьОписание
GET/api/applications/{code}/control_groupsПолучить список контрольных групп приложения
POST/api/applications/{code}/control_groupsСоздать контрольную группу
GET/api/applications/{code}/control_groups/{control_group_code}Получить одну контрольную группу
POST/api/applications/{code}/control_groups/{control_group_code}Изменить размер контрольной группы
POST/api/applications/{code}/control_groups/{control_group_code}/countriesОграничить контрольную группу набором стран
POST/api/applications/{code}/control_groups/{control_group_code}/settingsПрименить размер, область действия по странам и тегу и режим срока действия одним вызовом
POST/api/applications/{code}/control_groups/{control_group_code}/display_nameПереименовать контрольную группу
POST/api/applications/{code}/control_groups/{control_group_code}/disableОтключить контрольную группу
POST/api/applications/{code}/control_groups/{control_group_code}/reshuffleПерераспределить контрольную группу
POST/api/applications/{code}/control_groups/{control_group_code}/recalculateПринудительно пересчитать размер контрольной группы
GET/api/applications/{code}/control_groups/{control_group_code}/calculation_statusОпросить статус выполняющегося расчета размера
GET/api/applications/{code}/control_groups/{control_group_code}/analyticsПолучить аналитику “Контрольная группа vs. Тестовая группа”
GET/api/applications/{code}/control_groups/{control_group_code}/cyclesПолучить список закрытых циклов группы
POST/api/applications/{code}/control_groups/{control_group_code}/membershipПроверить членство для пакета User ID
DELETE/api/applications/{code}/control_groups/{control_group_code}Удалить контрольную группу

Получение списка

Anchor link to

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

GET /api/applications/{code}/control_groups

Параметры пути

Anchor link to
ПараметрТипОписание
codestringКод приложения, для которого нужно получить список контрольных групп.

Ответ

Anchor link to
ПолеТипОписание
control_groupsмассив объектов контрольной группыВсе контрольные группы, настроенные для приложения.

Создание

Anchor link to

Создает именованную контрольную группу для приложения и возвращает ее со сгенерированным кодом. Новая группа удерживает пользователей от каждой маркетинговой отправки в пределах своих стран и тега, наряду с другими включенными группами приложения.

POST /api/applications/{code}/control_groups

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
codestringДаКод приложения, в котором создается группа.
namestringДаНазвание группы, до 64 символов и без двоеточия. Должно быть уникальным в пределах приложения. Входит в ключ членства, поэтому никогда не меняется.
percentageintegerДаРазмер удержанной группы в процентах, 1–20.
segmentstringНетВыражение Seglang для измерения группы. Опустите, чтобы измерять по всей базе.
countriesмассив строкНетКоды стран в нижнем регистре по стандарту ISO-3166-1 alpha-2 для ограничения удержанной группы. Опустите для всех стран. Коды нечувствительны к регистру на входе.
scopeTagstringНетСтроковый или булев тег, которым ограничивается удержанная группа, объединяется с countries по AND. Опустите, чтобы не ограничивать по тегу. См. Область действия по тегу ниже.
scopeValuesмассив строкСм. примечаниеЗначения scopeTag, при которых пользователь попадает в область действия. Обязательно, если задан scopeTag, и должно быть пустым в противном случае.
displayNamestringНетНазвание, которое показывает Control Panel, до 64 символов. Опустите, чтобы показывать name.
Пример запроса
Anchor link to
{
"code": "XXXXX-XXXXX",
"name": "Q3 holdout",
"percentage": 10
}

Ответ

Anchor link to

Возвращает { "group": { ... } }, новый объект контрольной группы.

Получение

Anchor link to

Возвращает одну контрольную группу по ее коду, с ее размером удержания, поколением и количеством пользователей.

GET /api/applications/{code}/control_groups/{control_group_code}

Параметры пути

Anchor link to
ПараметрТипОписание
codestringКод приложения, к которому принадлежит группа.
control_group_codestringКод контрольной группы.

Ответ

Anchor link to
ПолеТипОписание
groupОбъект контрольной группыЗапрошенная контрольная группа.
total_usersintegerВсе пользователи в приложении.
control_group_usersintegerПользователи, находящиеся в удержанной группе.
calculation_statusstringTASK_STATUS_NOT_STARTED, TASK_STATUS_IN_PROGRESS или TASK_STATUS_COMPLETED.
has_databooleanДоступны ли кэшированные данные о размере.

Изменение процента

Anchor link to

Устанавливает процент удержания (1–20) для одной контрольной группы. При изменении размера все существующие участники сохраняются: удержанная группа растет или сокращается вокруг них, а не пересоздается. Заменен методом UpdateSettings, который применяет размер, область действия и режим срока действия одним вызовом, но по-прежнему поддерживается.

POST /api/applications/{code}/control_groups/{control_group_code}

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
percentageintegerДаНовый размер удержанной группы в процентах, 1–20.

Ответ

Anchor link to

Пустой объект в случае успеха: {}.

Изменение стран

Anchor link to

Устанавливает страны, на которые распространяется одна контрольная группа. Изменение области действия перезапускает измерение прироста, так как сравниваемая популяция меняется. Сама удержанная группа не пересоздается. Заменен методом UpdateSettings, который также задает область действия по тегу, но по-прежнему поддерживается.

POST /api/applications/{code}/control_groups/{control_group_code}/countries

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
countriesмассив строкДаКоды стран в нижнем регистре по стандарту ISO-3166-1 alpha-2. Пустой список расширяет группу обратно на все страны. Коды нечувствительны к регистру на входе.
Пример запроса
Anchor link to
{
"countries": ["us", "ca", "gb"]
}

Ответ

Anchor link to

Пустой объект в случае успеха: {}.

Обновление настроек

Anchor link to

Применяет размер контрольной группы, область действия по странам и тегу и режим срока действия одним вызовом. Изменение, которое меняет, кого удерживают или как долго (размер, область действия, режим, период обновления или дата окончания), закрывает текущий цикл и начинает новый. Отправка текущих значений ничего не меняет. Отклоняет контрольную группу, которая принадлежит собственной удержанной группе кампании, так же, как UpdatePercentage.

POST /api/applications/{code}/control_groups/{control_group_code}/settings

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
percentageintegerДаРазмер удержанной группы в процентах, 1–20.
countriesмассив строкНетКоды стран в нижнем регистре по стандарту ISO-3166-1 alpha-2. Пустой список расширяет группу обратно на все страны.
scopeTagstringНетСтроковый или булев тег, которым ограничивается удержанная группа, объединяется с countries по AND. Пустое значение снимает ограничение по тегу. См. Область действия по тегу ниже.
scopeValuesмассив строкСм. примечаниеЗначения scopeTag, при которых пользователь попадает в область действия. Обязательно, если задан scopeTag, и должно быть пустым в противном случае.
modestringНетСрок действия членства: CONTROL_GROUP_MODE_PERMANENT (по умолчанию), CONTROL_GROUP_MODE_AUTO_REFRESH или CONTROL_GROUP_MODE_EXPERIMENT.
refreshPeriodDaysintegerСм. примечаниеЧисло дней между перераспределениями, 7–365. Обязательно для CONTROL_GROUP_MODE_AUTO_REFRESH, в остальных случаях должно быть опущено.
endsAtstring (RFC 3339)См. примечаниеКогда эксперимент отключается, не менее чем через 30 дней. Обязательно для CONTROL_GROUP_MODE_EXPERIMENT, в остальных случаях должно быть опущено.

Каждое поле применяется так, как отправлено, как и в UpdateCountries: пустой countries расширяет группу обратно на все страны, а пустой scopeTag снимает ограничение по тегу.

Ответ

Anchor link to

Возвращает { "group": { ... } }, обновленный объект контрольной группы.

Область действия по тегу

Anchor link to

Контрольная группа может удерживать только тех пользователей, значение одного строкового или булева тега которых входит в выбранный вами набор, в сочетании с countries по AND, если заданы оба. Задается через Create или UpdateSettings.

  • scopeTag называет тег; пустое значение означает отсутствие ограничения по тегу. Это не может быть Country: ограничение по стране задается через countries, а не тегом.
  • scopeValues перечисляет, какие значения scopeTag входят в область действия. Если задан scopeTag, нужно указать хотя бы одно значение, повторяться они не могут. Значения строкового тега не могут быть пустыми строками. Каждое значение булева тега должно быть "true" или "false".
  • Устройство без значения scopeTag находится вне области действия, так же как устройство без тега Country.
  • Само членство не меняется: формула, которая назначает пользователей, область действия не затрагивает. Ограничения по тегу и по стране — это проверка каждого устройства поверх формулы: она сужает, какие из устройств выбранного пользователя действительно исключаются, а не то, кого выбирает формула.
  • Тег уровня пользователя копируется на каждое устройство этого пользователя при его установке, поэтому проверка на уровне устройства выше охватывает и теги уровня пользователя, а не только теги уровня устройства.
  • Изменение scopeTag или изменение scopeValues как набора (одна лишь перестановка не считается) закрывает текущий цикл с причиной CONTROL_GROUP_CYCLE_CLOSE_REASON_RESCOPED, так же как изменение countries. Отключение группы сохраняет ее ограничение по тегу, как и countries.

Переименование

Anchor link to

Задает название, которое Control Panel показывает для одной контрольной группы. name входит в ключ членства и не меняется, поэтому группа сохраняет тех же пользователей и текущий цикл.

POST /api/applications/{code}/control_groups/{control_group_code}/display_name

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
codestringДаКод приложения, к которому принадлежит группа.
controlGroupCodestringДаКод контрольной группы.
displayNamestringНетНовое название, до 64 символов, уникальное в пределах приложения. Отправьте пустую строку, чтобы снова показывать name.

Ответ

Anchor link to

Возвращает { "group": { ... } }, переименованный объект контрольной группы.

Отключение

Anchor link to

Отключает одну контрольную группу, сохраняя ее и ее поколение, чтобы при повторном включении восстановилась та же удержанная группа, а не создавалась новая.

POST /api/applications/{code}/control_groups/{control_group_code}/disable

Ответ

Anchor link to

Пустой объект в случае успеха: {}.

Перераспределение

Anchor link to

Пересоздает удержанную группу для одной контрольной группы путем инкремента ее поколения. Это единственный способ получить другую выборку: членство детерминировано, поэтому отключение и повторное включение воспроизводит точно ту же самую группу.

POST /api/applications/{code}/control_groups/{control_group_code}/reshuffle

Ответ

Anchor link to
ПолеТипОписание
generationintegerПоколение группы после перераспределения.

Принудительный пересчет

Anchor link to

Запускает новый подсчет размера одной контрольной группы. Ранее кэшированные числа продолжают использоваться до завершения нового подсчета. Опрашивайте GetCalculationStatus для отслеживания прогресса.

POST /api/applications/{code}/control_groups/{control_group_code}/recalculate

Ответ

Anchor link to

Пустой объект в случае успеха: {}.

Получение статуса расчета

Anchor link to

Опрашивает только изменяющиеся счетчики пользователей одной контрольной группы во время выполнения расчета размера.

GET /api/applications/{code}/control_groups/{control_group_code}/calculation_status

Ответ

Anchor link to
ПолеТипОписание
total_usersintegerВсе пользователи в приложении.
control_group_usersintegerПользователи в удержанной группе, подсчитанные по всему приложению.
calculation_statusstringTASK_STATUS_NOT_STARTED, TASK_STATUS_IN_PROGRESS или TASK_STATUS_COMPLETED.
has_databooleanДоступны ли кэшированные данные о размере.

Получение аналитики

Anchor link to

Возвращает предварительно рассчитанную аналитику “Контрольная группа vs. Тестовая группа” для одной контрольной группы.

GET /api/applications/{code}/control_groups/{control_group_code}/analytics

Параметры запроса

Anchor link to
ПараметрТипОбязательныйОписание
windowDaysstringНетПредустановка окна ретроспективы: WINDOW_DAYS_3, WINDOW_DAYS_7 или WINDOW_DAYS_30.

Ответ

Anchor link to
ПолеТипОписание
eventsмассив объектовОдна запись на каждое отслеживаемое событие, каждая с event, treatment и control (users, conversions, conversion_rate, events_per_user), uplift_pct, incremental_events, percent_of_treatment, z_score, p_value, confidence_pct и significance (SIGNIFICANCE_NOT_ENOUGH_DATA, SIGNIFICANCE_NOT_SIGNIFICANT или SIGNIFICANCE_SIGNIFICANT).

Получение списка циклов

Anchor link to

Возвращает закрытые циклы одной контрольной группы, самые новые первыми. Каждый цикл — это членство, с которым группа работала между двумя изменениями настроек, вместе с настройками, по которым оно было сформировано. Текущий (выполняющийся) цикл в этот список не входит. Его настройки находятся в самом объекте контрольной группы.

GET /api/applications/{code}/control_groups/{control_group_code}/cycles

Ответ

Anchor link to
ПолеТипОписание
cyclesмассив объектов цикла контрольной группыСамые новые первыми.

Объект цикла контрольной группы

Anchor link to
ПолеТипОписание
cycle_numberintegerПорядковый номер в пределах группы; собственный cycle_number группы следует за последним закрытым здесь.
modestringРежим срока действия, в котором группа работала в этом цикле: CONTROL_GROUP_MODE_PERMANENT, CONTROL_GROUP_MODE_AUTO_REFRESH или CONTROL_GROUP_MODE_EXPERIMENT.
generationintegerПоколение группы в этом цикле.
percentageintegerРазмер удержанной группы в этом цикле.
countriesмассив строкОбласть действия по странам в этом цикле; пустое значение означает все страны.
started_at / ended_atstring (RFC 3339)Когда выполнялся этот цикл.
close_reasonstringПочему цикл завершился: CONTROL_GROUP_CYCLE_CLOSE_REASON_ROLLOVER, _EXPIRED, _RESHUFFLED, _RESIZED, _RESCOPED, _MODE_CHANGED или _DISABLED.
scope_tagstringТег, которым была ограничена удержанная группа цикла, объединяется с countries по AND. Пусто, если ограничения по тегу не было, и для каждого цикла, закрытого до появления ограничения по тегу, даже если оно появилось у группы позже.
scope_valuesмассив строкЗначения scope_tag, при которых пользователь попадал в область действия в этом цикле; задается только вместе с scope_tag.

Проверка членства в контрольной группе

Anchor link to

Сообщает для каждого User ID, находится ли он в данный момент в удержанной группе. Членство вычисляется только на основе ID. Запись пользователя не считывается, поэтому ответ будет дан и для ID, которого приложение никогда не видело, а для отключенной группы будет возвращено false для каждого ID, а не ошибка. Группа с ограничением по стране или тегу удерживает пользователя, только если одно из его устройств входит в эту область, поэтому невиданный ID (вообще без устройства) возвращается там как false, хотя тот же ID вернулся бы как true для группы без ограничений. Используйте этот метод вместо экспорта всей группы для проверки пользователей конкретной отправки или импорта.

POST /api/applications/{code}/control_groups/{control_group_code}/membership

Тело запроса

Anchor link to
ПараметрТипОбязательныйОписание
userIdsмассив строкДаUser ID для проверки, не более 1000 за один вызов.
Пример запроса
Anchor link to
{
"userIds": ["user-1", "user-2", "user-3"]
}

Ответ

Anchor link to
ПолеТипОписание
usersмассив объектовОдна запись на каждый запрошенный ID, в том порядке, в котором они были переданы (включая дубликаты). Каждая запись содержит user_id (string) и in_control_group (boolean).
Пример ответа
Anchor link to
{
"users": [
{ "user_id": "user-1", "in_control_group": false },
{ "user_id": "user-2", "in_control_group": true },
{ "user_id": "user-3", "in_control_group": false }
]
}

Удаление

Anchor link to

Полностью удаляет контрольную группу. Она перестает удерживать пользователей, а ее статистику больше нельзя открыть. Остальные группы приложения продолжают работать.

DELETE /api/applications/{code}/control_groups/{control_group_code}

Ответ

Anchor link to

Пустой объект в случае успеха: {}.

Объект контрольной группы

Anchor link to
ПолеТипОписание
codestringКод контрольной группы (формат XXXXX-XXXXX), стабильный на протяжении всего времени существования группы.
namestringНазвание группы, входит в ключ членства. Пустое значение означает исходную, безымянную группу приложения.
display_namestringНазвание, которое показывает Control Panel. Пустое значение показывает name, а безымянная группа отображается как Global.
segmentstringВыражение Seglang, по которому измеряется группа; пустое значение означает всю базу.
percentageintegerРазмер удержанной группы в процентах, 1–20. Ноль означает, что группа отключена.
enabledbooleanУдерживает ли группа в данный момент пользователей.
generationintegerИнкрементируется при каждом перераспределении; 0 означает, что перераспределение никогда не производилось.
last_modified_atstring (RFC 3339)Время последнего изменения настроек группы.
last_modified_bystringEmail пользователя, который последним изменил группу.
application_idintegerЧисловой ID приложения, первая часть ключа членства <application_id>:<generation>:<name>:<user_id>, который хэширует CheckControlGroupMembership для определения, находится ли пользователь в удержанной группе.
countriesмассив строкКоды стран в нижнем регистре по стандарту ISO-3166-1 alpha-2, на которые распространяется удержанная группа. Пустое значение означает все страны.
scope_tagstringТег, которым ограничена удержанная группа, объединяется с countries по AND; пустое значение означает отсутствие ограничения по тегу. См. Область действия по тегу.
scope_valuesмассив строкЗначения scope_tag, при которых пользователь попадает в область действия; для булева тега используются "true" и "false".

Связанные материалы

Anchor link to