Passer au contenu

API des Groupes de Contrôle

Un groupe de contrôle est une part réservée des utilisateurs d’une application qui ne reçoit jamais de messages marketing, afin que l’effet de la messagerie puisse être mesuré par rapport à lui. Cette API gère les groupes de contrôle et répond à l’appartenance par utilisateur. Utilisez-la pour reproduire les actions de Paramètres > Groupes de contrôle du Panneau de Contrôle depuis vos propres systèmes, ou pour vérifier si des ID utilisateur spécifiques sont exclus avant un envoi ou une importation.

URL de base

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

Tous les points de terminaison sont servis via HTTPS. Les requêtes et les réponses utilisent application/json sauf indication contraire.

Authentification

Anchor link to

Chaque requête doit inclure un en-tête Authorization avec votre jeton d’API Serveur :

Authorization: Api YOUR_API_TOKEN

Conventions

Anchor link to
  • Nommage des champs : les corps de requête et les paramètres de requête/chemin acceptent le lowerCamelCase (par exemple, controlGroupCode, userIds), et le serveur décode l’une ou l’autre casse. Les réponses sont toujours encodées en utilisant les noms de champs proto, en snake_case (application_id, in_control_group, etc.). Les exemples de réponse et la référence de l’objet Groupe de contrôle ci-dessous utilisent cette casse.
  • code : chaque réponse de groupe de contrôle contient son propre code, généré lors de la Création. Passez ce code en tant que controlGroupCode à Get, UpdatePercentage, UpdateCountries, Rename, Disable, Reshuffle, ForceUpdateCalculation, GetCalculationStatus, GetAnalytics, et CheckControlGroupMembership.
  • Plusieurs groupes : une application peut avoir plusieurs groupes de contrôle. Chaque groupe activé exclut des utilisateurs de tous les envois marketing dans ses propres pays et son propre tag, indépendamment des autres groupes, et les groupes peuvent se chevaucher. Un envoi ne sélectionne pas de groupe. Le groupe avec un name vide est le groupe original de l’application et fonctionne de la même manière.

Réponses d’erreur

Anchor link to
Statut HTTPSignification
400 Bad RequestArgument invalide, tel qu’un percentage en dehors de 1–20, userIds vide ou dépassant 1 000 entrées, un code de pays non reconnu, scopeValues défini sans scopeTag, scopeTag désignant un tag que le compte n’a pas, ou une entrée de scopeValues que UpdateSettings rejette (voir ci-dessous). Également retourné (en tant que FailedPrecondition sur le réseau) par UpdatePercentage, UpdateCountries, UpdateSettings, Disable, Reshuffle, et Delete sur un groupe de contrôle appartenant à l’exclusion propre d’une campagne, conformément à l’avertissement ci-dessous. Reshuffle seul refuse également de cette manière sur un groupe désactivé (percentage 0).
401 UnauthorizedEn-tête Authorization manquant ou invalide.
403 ForbiddenL’application ou le groupe de contrôle n’appartient pas au compte de l’appelant.
404 Not FoundLe groupe de contrôle ou l’application n’a pas été trouvé.
409 ConflictCreate a utilisé un name qui existe déjà dans l’application.
500 Internal Server ErrorÉchec inattendu côté serveur.

Points de terminaison

Anchor link to
MéthodeCheminDescription
GET/api/applications/{code}/control_groupsLister les groupes de contrôle d’une application
POST/api/applications/{code}/control_groupsCréer un groupe de contrôle
GET/api/applications/{code}/control_groups/{control_group_code}Obtenir un seul groupe de contrôle
POST/api/applications/{code}/control_groups/{control_group_code}Redimensionner un groupe de contrôle
POST/api/applications/{code}/control_groups/{control_group_code}/countriesRedéfinir la portée d’un groupe de contrôle à un ensemble de pays
POST/api/applications/{code}/control_groups/{control_group_code}/settingsAppliquer en un seul appel la taille, la portée par pays et par tag, et le mode de durée de vie
POST/api/applications/{code}/control_groups/{control_group_code}/display_nameRenommer un groupe de contrôle
POST/api/applications/{code}/control_groups/{control_group_code}/disableDésactiver un groupe de contrôle
POST/api/applications/{code}/control_groups/{control_group_code}/reshuffleRemanier un groupe de contrôle
POST/api/applications/{code}/control_groups/{control_group_code}/recalculateForcer le recalcul de la taille d’un groupe de contrôle
GET/api/applications/{code}/control_groups/{control_group_code}/calculation_statusSonder un calcul de taille en cours
GET/api/applications/{code}/control_groups/{control_group_code}/analyticsObtenir les analyses Contrôle vs Traitement
GET/api/applications/{code}/control_groups/{control_group_code}/cyclesLister les cycles clos du groupe
POST/api/applications/{code}/control_groups/{control_group_code}/membershipVérifier l’appartenance pour un lot d’ID utilisateur
DELETE/api/applications/{code}/control_groups/{control_group_code}Supprimer un groupe de contrôle

Liste chaque groupe de contrôle configuré pour une application, le groupe original sans nom en premier.

GET /api/applications/{code}/control_groups

Paramètres de chemin

Anchor link to
ParamètreTypeDescription
codestringLe code d’application pour lequel lister les groupes de contrôle.
ChampTypeDescription
control_groupstableau d’objets Groupe de contrôleChaque groupe de contrôle configuré pour l’application.

Crée un groupe de contrôle nommé pour une application et le retourne avec son code généré. Le nouveau groupe exclut des utilisateurs de tous les envois marketing dans ses propres pays et son propre tag, parallèlement aux autres groupes activés de l’application.

POST /api/applications/{code}/control_groups

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
codestringOuiLe code d’application dans lequel créer le groupe.
namestringOuiNom du groupe, jusqu’à 64 caractères et sans deux-points. Doit être unique au sein de l’application. Fait partie de la clé d’appartenance, il ne change donc jamais.
percentageintegerOuiTaille de l’exclusion en pourcentage, de 1 à 20.
segmentstringNonExpression Seglang sur laquelle mesurer le groupe. Omettre pour mesurer sur l’ensemble de la base.
countriestableau de chaînesNonCodes de pays ISO-3166-1 alpha-2 en minuscules pour limiter la portée de l’exclusion. Omettre pour tous les pays. Les codes sont insensibles à la casse en entrée.
scopeTagstringNonUn tag de type chaîne ou booléen auquel limiter l’exclusion, combiné par ET avec countries. Omettre pour aucune portée par tag. Voir Portée par tag ci-dessous.
scopeValuestableau de chaînesVoir noteValeurs de scopeTag qui placent un utilisateur dans la portée. Requis si scopeTag est défini, et doit être vide dans le cas contraire.
displayNamestringNonNom affiché par le Control Panel, jusqu’à 64 caractères. Omettre pour afficher name.
Exemple de requête
Anchor link to
{
"code": "XXXXX-XXXXX",
"name": "Q3 holdout",
"percentage": 10
}

Retourne { "group": { ... } }, le nouvel objet Groupe de contrôle.

Retourne un groupe de contrôle par son code, avec sa taille d’exclusion, sa génération et les décomptes d’utilisateurs associés.

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

Paramètres de chemin

Anchor link to
ParamètreTypeDescription
codestringLe code d’application auquel le groupe appartient.
control_group_codestringLe code du groupe de contrôle.
ChampTypeDescription
groupObjet Groupe de contrôleLe groupe de contrôle demandé.
total_usersintegerTous les utilisateurs de l’application.
control_group_usersintegerUtilisateurs actuellement exclus.
calculation_statusstringTASK_STATUS_NOT_STARTED, TASK_STATUS_IN_PROGRESS ou TASK_STATUS_COMPLETED.
has_databooleanIndique si les chiffres de taille mis en cache sont déjà disponibles.

UpdatePercentage

Anchor link to

Définit le pourcentage d’exclusion (1–20) d’un groupe de contrôle. Le redimensionnement conserve tous les membres existants : l’exclusion s’agrandit ou se rétrécit autour d’eux plutôt que d’être redéfinie. Remplacé par UpdateSettings, qui applique en un seul appel la taille, la portée et le mode de durée de vie, mais toujours pris en charge.

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

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
percentageintegerOuiNouvelle taille d’exclusion en pourcentage, de 1 à 20.

Un objet vide en cas de succès : {}.

UpdateCountries

Anchor link to

Définit les pays auxquels un groupe de contrôle est limité. La modification de la portée redémarre la mesure de l’uplift, car la population comparée change. L’exclusion elle-même n’est pas redéfinie. Remplacé par UpdateSettings, qui définit aussi une portée par tag, mais toujours pris en charge.

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

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
countriestableau de chaînesOuiCodes de pays ISO-3166-1 alpha-2 en minuscules. Une liste vide élargit le groupe à tous les pays. Les codes sont insensibles à la casse en entrée.
Exemple de requête
Anchor link to
{
"countries": ["us", "ca", "gb"]
}

Un objet vide en cas de succès : {}.

UpdateSettings

Anchor link to

Applique en un seul appel la taille, la portée par pays et par tag, et le mode de durée de vie d’un groupe de contrôle. Une modification qui change les utilisateurs exclus ou la durée de l’exclusion (taille, portée, mode, période de renouvellement ou date de fin) clôt le cycle en cours et en démarre un nouveau. Envoyer les valeurs actuelles ne change rien. Refuse un groupe de contrôle appartenant à l’exclusion propre d’une campagne, de la même manière que UpdatePercentage.

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

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
percentageintegerOuiTaille de l’exclusion en pourcentage, de 1 à 20.
countriestableau de chaînesNonCodes de pays ISO-3166-1 alpha-2 en minuscules. Une liste vide élargit le groupe à tous les pays.
scopeTagstringNonUn tag de type chaîne ou booléen auquel limiter l’exclusion, combiné par ET avec countries. Vide supprime la portée par tag. Voir Portée par tag ci-dessous.
scopeValuestableau de chaînesVoir noteValeurs de scopeTag qui placent un utilisateur dans la portée. Requis si scopeTag est défini, et doit être vide dans le cas contraire.
modestringNonDurée de vie de l’appartenance : CONTROL_GROUP_MODE_PERMANENT (par défaut), CONTROL_GROUP_MODE_AUTO_REFRESH ou CONTROL_GROUP_MODE_EXPERIMENT.
refreshPeriodDaysintegerVoir noteNombre de jours entre deux redéfinitions, de 7 à 365. Requis avec CONTROL_GROUP_MODE_AUTO_REFRESH, et doit être omis dans le cas contraire.
endsAtstring (RFC 3339)Voir noteMoment où une expérience s’arrête, au moins 30 jours à l’avance. Requis avec CONTROL_GROUP_MODE_EXPERIMENT, et doit être omis dans le cas contraire.

Chaque champ est appliqué tel qu’envoyé, comme pour UpdateCountries : un countries vide élargit le groupe à tous les pays, et un scopeTag vide supprime la portée par tag.

Retourne { "group": { ... } }, l’objet Groupe de contrôle mis à jour.

Portée par tag

Anchor link to

Un groupe de contrôle peut exclure uniquement les utilisateurs dont la valeur d’un tag de type chaîne ou booléen fait partie d’un ensemble que vous choisissez, combiné par ET avec countries si les deux sont définis. Définissez-la avec Create ou UpdateSettings.

  • scopeTag désigne le tag ; vide signifie aucune portée par tag. Il ne peut pas être Country : la portée par pays utilise countries, pas un tag.
  • scopeValues liste les valeurs de scopeTag qui sont dans la portée. Au moins une est requise lorsque scopeTag est défini, et aucune ne peut être répétée. Les valeurs d’un tag de type chaîne ne peuvent pas être des chaînes vides. Les valeurs d’un tag booléen doivent chacune être "true" ou "false".
  • Un appareil sans valeur pour scopeTag est hors de la portée, comme un appareil sans tag Country.
  • L’appartenance elle-même ne change pas : la formule qui attribue les utilisateurs n’est pas modifiée par la portée. La portée par tag et par pays sont toutes deux une vérification par appareil appliquée en plus, qui restreint les appareils d’un utilisateur sélectionné réellement exclus, et non les utilisateurs que la formule sélectionne.
  • Un tag de niveau utilisateur est copié sur chacun des appareils de cet utilisateur lorsqu’il est défini ; la vérification au niveau de l’appareil ci-dessus couvre donc aussi les tags de niveau utilisateur, et pas seulement ceux de niveau appareil.
  • Modifier scopeTag, ou modifier scopeValues en tant qu’ensemble (un simple changement d’ordre ne compte pas), clôt le cycle en cours avec CONTROL_GROUP_CYCLE_CLOSE_REASON_RESCOPED, comme pour une modification de countries. Désactiver un groupe conserve sa portée par tag, comme il conserve déjà countries.

Définit le nom que le Control Panel affiche pour un groupe de contrôle. name fait partie de la clé d’appartenance et ne change pas : le groupe conserve donc les mêmes utilisateurs et son cycle en cours.

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

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
codestringOuiLe code d’application auquel le groupe appartient.
controlGroupCodestringOuiLe code du groupe de contrôle.
displayNamestringNonNouveau nom, jusqu’à 64 caractères et unique au sein de l’application. Envoyez une chaîne vide pour afficher à nouveau name.

Retourne { "group": { ... } }, l’objet Groupe de contrôle renommé.

Désactiver

Anchor link to

Désactive un groupe de contrôle, en le conservant ainsi que sa génération, de sorte que sa réactivation restaure la même exclusion plutôt que d’en créer une nouvelle.

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

Un objet vide en cas de succès : {}.

Redéfinit l’exclusion d’un groupe de contrôle en incrémentant sa génération. C’est le seul moyen d’obtenir un échantillon différent : l’appartenance est déterministe, donc la désactivation et la réactivation reproduisent exactement le même.

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

ChampTypeDescription
generationintegerLa génération du groupe après le remaniement.

ForceUpdateCalculation

Anchor link to

Démarre un nouveau décompte de la taille d’un groupe de contrôle. Les chiffres précédemment mis en cache continuent d’être servis jusqu’à la fin du nouveau décompte. Sondez GetCalculationStatus pour suivre la progression.

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

Un objet vide en cas de succès : {}.

GetCalculationStatus

Anchor link to

Sonde uniquement les décomptes d’utilisateurs changeants d’un groupe de contrôle pendant l’exécution d’un calcul de taille.

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

ChampTypeDescription
total_usersintegerTous les utilisateurs de l’application.
control_group_usersintegerUtilisateurs exclus, comptés sur l’ensemble de l’application.
calculation_statusstringTASK_STATUS_NOT_STARTED, TASK_STATUS_IN_PROGRESS ou TASK_STATUS_COMPLETED.
has_databooleanIndique si les chiffres de taille mis en cache sont disponibles.

GetAnalytics

Anchor link to

Retourne les analyses précalculées Contrôle vs Traitement pour un groupe de contrôle.

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

Paramètres de requête

Anchor link to
ParamètreTypeRequisDescription
windowDaysstringNonPréréglage de la fenêtre rétrospective : WINDOW_DAYS_3, WINDOW_DAYS_7 ou WINDOW_DAYS_30.
ChampTypeDescription
eventstableau d’objetsUne entrée par événement suivi, chacune avec event, treatment et control (users, conversions, conversion_rate, events_per_user), uplift_pct, incremental_events, percent_of_treatment, z_score, p_value, confidence_pct et significance (SIGNIFICANCE_NOT_ENOUGH_DATA, SIGNIFICANCE_NOT_SIGNIFICANT ou SIGNIFICANCE_SIGNIFICANT).

ListControlGroupCycles

Anchor link to

Liste les cycles clos d’un groupe de contrôle, du plus récent au plus ancien. Chaque cycle est l’appartenance avec laquelle le groupe a fonctionné entre deux modifications de paramètres, avec les paramètres à partir desquels il a été défini. Le cycle en cours (actuel) ne figure pas dans cette liste. Ses paramètres se trouvent sur l’objet Groupe de contrôle lui-même.

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

ChampTypeDescription
cyclestableau d’objets Cycle de groupe de contrôleDu plus récent au plus ancien.

Objet Cycle de groupe de contrôle

Anchor link to
ChampTypeDescription
cycle_numberintegerSéquentiel au sein du groupe ; le cycle_number du groupe lui-même est celui qui suit le dernier cycle clos ici.
modestringMode de durée de vie dans lequel le groupe a fonctionné pendant ce cycle : CONTROL_GROUP_MODE_PERMANENT, CONTROL_GROUP_MODE_AUTO_REFRESH ou CONTROL_GROUP_MODE_EXPERIMENT.
generationintegerLa génération du groupe pendant ce cycle.
percentageintegerTaille de l’exclusion pendant ce cycle.
countriestableau de chaînesPortée par pays pendant ce cycle ; vide correspond à tous les pays.
started_at / ended_atstring (RFC 3339)Période pendant laquelle ce cycle a fonctionné.
close_reasonstringRaison pour laquelle le cycle s’est terminé : CONTROL_GROUP_CYCLE_CLOSE_REASON_ROLLOVER, _EXPIRED, _RESHUFFLED, _RESIZED, _RESCOPED, _MODE_CHANGED ou _DISABLED.
scope_tagstringTag auquel l’exclusion du cycle était limitée, combiné par ET avec countries. Vide en l’absence de portée par tag et pour tout cycle clos avant l’existence de la portée par tag, même si le groupe en a eu une par la suite.
scope_valuestableau de chaînesValeurs de scope_tag qui placent un utilisateur dans la portée pendant ce cycle ; défini uniquement avec scope_tag.

CheckControlGroupMembership

Anchor link to

Indique pour chaque ID utilisateur s’il est actuellement exclu par un groupe de contrôle. L’appartenance est calculée à partir de l’ID seul. Aucun enregistrement utilisateur n’est lu, donc un ID que l’application n’a jamais vu reçoit également une réponse, et un groupe désactivé répond false pour chaque ID plutôt qu’une erreur. Un groupe avec une portée par pays ou par tag n’exclut un utilisateur que si l’un de ses appareils est dans cette portée ; un ID jamais vu (aucun appareil) renvoie donc false ici, alors que le même ID renverrait true sur un groupe sans portée. Utilisez cette méthode au lieu d’exporter tout le groupe pour vérifier les utilisateurs d’un envoi ou d’une importation spécifique.

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

Corps de la requête

Anchor link to
ParamètreTypeRequisDescription
userIdstableau de chaînesOuiID utilisateur à vérifier, au maximum 1 000 par appel.
Exemple de requête
Anchor link to
{
"userIds": ["user-1", "user-2", "user-3"]
}
ChampTypeDescription
userstableau d’objetsUne entrée par ID demandé, dans l’ordre où ils ont été fournis (doublons inclus). Chacune a user_id (chaîne) et in_control_group (booléen).
Exemple de réponse
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 }
]
}

Supprime entièrement un groupe de contrôle. Il cesse d’exclure des utilisateurs, et ses statistiques ne peuvent plus être ouvertes. Les autres groupes de l’application continuent de fonctionner.

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

Un objet vide en cas de succès : {}.

Objet Groupe de contrôle

Anchor link to
ChampTypeDescription
codestringCode du groupe de contrôle (format XXXXX-XXXXX), stable pendant toute la durée de vie du groupe.
namestringNom du groupe, partie de la clé d’appartenance. Vide correspond au groupe original, sans nom, de l’application.
display_namestringNom affiché par le Control Panel. Vide affiche name, et le groupe sans nom comme Global.
segmentstringExpression Seglang sur laquelle le groupe est mesuré ; vide correspond à l’ensemble de la base.
percentageintegerTaille de l’exclusion en pourcentage, de 1 à 20. Zéro signifie que le groupe est désactivé.
enabledbooleanIndique si le groupe exclut actuellement des utilisateurs.
generationintegerIncrémenté à chaque remaniement ; 0 signifie jamais remanié.
last_modified_atstring (RFC 3339)Date de la dernière modification des paramètres du groupe.
last_modified_bystringE-mail de l’utilisateur qui a modifié le groupe en dernier.
application_idintegerID numérique de l’application, la première partie de la clé d’appartenance <application_id>:<generation>:<name>:<user_id> que CheckControlGroupMembership hache pour décider si un utilisateur est exclu.
countriestableau de chaînesCodes de pays ISO-3166-1 alpha-2 en minuscules auxquels l’exclusion est limitée. Vide correspond à tous les pays.
scope_tagstringTag auquel l’exclusion est limitée, combiné par ET avec countries ; vide signifie aucune portée par tag. Voir Portée par tag.
scope_valuestableau de chaînesValeurs de scope_tag qui placent un utilisateur dans la portée ; un tag booléen utilise "true" et "false".

Sujets connexes

Anchor link to