Lancer des tests A/B depuis la CLI

La CLI Adapty gère les tests A/B de paywalls ou de flows depuis le terminal, sous le topic adapty ab-tests. Vous pouvez créer un test en brouillon, le démarrer sur un placement pour une audience donnée, l’arrêter avec un gagnant, remplacer un test en cours par une version modifiée, et archiver les anciens tests.

Utilisez-le pour laisser un agent IA exécuter vos tests, scripter un test sur plusieurs applications, ou démarrer ou arrêter un test sans ouvrir le tableau de bord.

Un test standard répartit les utilisateurs d’une audience sur un placement entre deux ou plusieurs paywalls, ou entre deux ou plusieurs flows. Pour effectuer un test sur plusieurs placements, utilisez un test crossplacement dans le tableau de bord. Les commandes ab-tests ne renvoient pas les résultats des tests. Pour consulter les résultats, comme la probabilité d’être le meilleur, utilisez le tableau de bord : Résultats et métriques des tests A/B. Pour lire les analyses des utilisateurs d’un test, filtrez les commandes d’analyse selon la dimension A/B tests de adapty analytics catalog.

Avant de commencer

Le topic ab-tests utilise la même installation et la même connexion que le reste du CLI. Si vous ne l’avez pas encore configuré, suivez les étapes 1 et 2 du guide de démarrage rapide. Le topic nécessite la version 0.14.0 ou ultérieure du CLI. Pour voir votre version, exécutez adapty --version.

Chaque commande prend l’UUID de l’application dans --app. Pour le trouver, exécutez :

adapty apps list

Un test utilise du contenu qui existe déjà :

  • Flows : Un flow ne rejoint un test A/B que s’il est publié. Un flow en brouillon, ou un flow avec des modifications non publiées, est refusé. Pour publier un flow, exécutez adapty flows publish.
  • Paywalls : Pour créer un paywall à partir de produits déjà présents dans Adapty, exécutez adapty paywalls create. Pour donner un nouveau design à un paywall, utilisez le Paywall Builder.
  • Placements : Un test A/B de paywall s’exécute sur un placement de paywall, et un test de flow sur un placement de flow. Pour créer un placement, exécutez adapty placements create. Votre application n’affiche rien depuis un nouveau placement tant que son code ne récupère pas ce placement.
  • Segments : Pour exécuter un test uniquement pour certains utilisateurs, créez d’abord un segment avec adapty segments create.

Pour ces commandes, voir la référence des commandes.

Lister et consulter des tests

list affiche les tests A/B de flow sauf si vous passez --type paywall. Pour voir tous les tests d’une app, exécutez la commande une fois pour chaque type :

adapty ab-tests list --app <app-id> --type flow --page-size 100
adapty ab-tests list --app <app-id> --type paywall --page-size 100

Un test peut se trouver dans l’un de ces états : draft, live, completed, inactive ou archived.

Pour consulter un test avec ses variantes, exécutez :

adapty ab-tests get --app <app-id> <test-id>

Dans get --json, segment_ids correspond à l’audience du test : [] signifie Tous les utilisateurs, et null signifie qu’aucune audience n’a encore été définie. Chaque variante a son weight et l’ID du paywall ou du flow. Pour identifier une variante, utilisez paywall_title ou flow_name. Le title de la variante est vide sauf si vous en avez défini un.

Créer un test

Un nouveau test est un brouillon. Aucun utilisateur ne voit un brouillon, vous pouvez donc en créer et en modifier un à tout moment.

  1. Trouvez les ID du contenu à tester avec adapty paywalls list ou adapty flows list.

  2. Créez le brouillon avec deux bras ou plus. Chaque bras correspond à un paywall ou un flow avec un poids. Le poids représente le pourcentage d’utilisateurs qui voient ce bras, et la somme des poids doit être égale à 100 :

    adapty ab-tests create --app <app-id> --title "Annual vs monthly" \
      --goal "More revenue per user" --placement <placement-id> \
      --paywalls '[{"paywall_id":"<paywall-a>","weight":50},{"paywall_id":"<paywall-b>","weight":50}]'

    --placement est requis. Un test de paywall nécessite un placement de paywall, et un test de flow nécessite un placement de flow. Pour un test de flow, passez --flows avec flow_id dans chaque bras à la place. Un bras peut aussi avoir un title, par exemple "title":"A".

  3. Vérifiez le brouillon avec ab-tests get.

Le placement d’un brouillon est simplement planifié. create peut également prendre une audience planifiée, avec --segment ou --all-users. Ces valeurs planifiées n’ont aucun effet sur les utilisateurs. Lorsque vous démarrez le test, passez le placement et l’audience à start à nouveau.

Démarrer un test

Warning

Cette action est irréversible. Dès le démarrage du test, les utilisateurs de l’audience concernée ne voient plus leur paywall ou flow actuel.

Pour démarrer un brouillon, indiquez le placement et une audience : --all-users, ou --segment avec un identifiant de segment :

adapty ab-tests start --app <app-id> <test-id> --placement <placement-id> --segment <segment-id>

Le CLI affiche ce que le démarrage implique et demande Apply? [y/N] avant d’envoyer quoi que ce soit. L’endroit où le test s’exécute dépend des audiences du placement :

  • Le placement a une audience pour ce segment (ou pour tous les utilisateurs) : le test s’exécute sur cette audience. Un test en cours sur cette audience s’arrête et passe à l’état completed.
  • Le placement n’a pas d’audience pour ce segment : start ajoute une nouvelle audience avec la priorité la plus haute sur le placement. Les utilisateurs de ce segment qui correspondent actuellement à une autre audience basculent dans le test.

Pour donner au test une priorité inférieure à celle d’une autre audience, commencez par ajouter le segment en tant qu’audience avec cette priorité. Attribuez-lui le paywall ou le flow que ces utilisateurs voient actuellement, puis démarrez le test sur cette audience. Voir Modifier la priorité d’une audience.

Une modification sur une audience de segment peut prendre jusqu’à 20 minutes pour atteindre tous les utilisateurs.

Seul un test en brouillon peut démarrer. Pour relancer un test, créez-en un nouveau : lisez l’ancien test avec get, puis créez un test avec les mêmes bras via create.

Modifier un test

update renvoie l’intégralité du test. Passez tous les indicateurs à chaque fois, y compris le --placement obligatoire. Si vous omettez un indicateur, Adapty efface sa valeur : par exemple, l’objectif ou l’audience prévue.

adapty ab-tests update --app <app-id> <test-id> --title "Annual vs monthly, Q4" \
  --goal "More revenue per user" --placement <placement-id> \
  --paywalls '[{"paywall_id":"<paywall-a>","weight":70},{"paywall_id":"<paywall-b>","weight":30}]'

Sur un test en cours, update modifie uniquement le titre et l’objectif. Passez les arms, le placement et l’audience exactement tels que get les retourne ; d’autres arms ou un autre placement seront refusés. Le test conserve son heure de démarrage, et les utilisateurs gardent leurs arms. Vous ne pouvez pas modifier un test terminé ou archivé.

Pour changer les arms ou les pondérations d’un test en cours, remplacez-le. replace correspond à l’action Modify dans le tableau de bord :

adapty ab-tests replace --app <app-id> <test-id> --title "Annual vs monthly v2" \
  --placement <placement-id> \
  --paywalls '[{"paywall_id":"<paywall-a>","weight":80},{"paywall_id":"<paywall-b>","weight":20}]'

Le test actif s’arrête et passe à l’état completed, et ses résultats restent associés à son ID. Un nouveau test avec un nouvel ID démarre sur la même audience, et Adapty réassigne chaque utilisateur de l’audience à un groupe. Si vous indiquez un placement différent dans --placement, Adapty déplace l’audience vers ce placement. Vous ne pouvez pas déplacer un test Tous les utilisateurs.

Arrêter un test

stop met fin au test. Vous choisissez ce que les utilisateurs de son audience voient ensuite. Passez exactement l’un de ces flags :

FlagAprès l’arrêt
--winner <id>Toute l’audience voit l’une des variantes du test. Passez l’ID du paywall ou du flow de la variante.
--other <id>Toute l’audience voit un paywall ou un flow qui ne faisait pas partie du test, du même type que le test.
--no-contentL’audience quitte le placement, et ses utilisateurs accèdent à la prochaine audience correspondante. Refusé pour un test portant sur tous les utilisateurs.
adapty ab-tests stop --app <app-id> <test-id> --winner <paywall-b>

Le test passe à l’état completed. Pour tester à nouveau les mêmes variantes, créez un nouveau test, comme décrit dans Démarrer un test. Pour choisir le gagnant, consultez Résultats et métriques du test A/B.

Archiver un test

Vous pouvez archiver n’importe quel test qui n’est pas en cours. Pour archiver un test en cours, arrêtez-le d’abord. Un test archivé ne peut pas être restauré.

adapty ab-tests archive --app <app-id> <test-id>

Confirmation dans les scripts et les agents

start, stop, replace, et archive sont des actions irréversibles : chacune affiche ce qu’elle va faire avant d’envoyer quoi que ce soit. La manière dont elle demande confirmation dépend du contexte d’exécution :

Mode d’exécutionCe qui se passe
Dans un terminalLe CLI affiche l’effet et demande Apply? [y/N]. Si vous répondez y ou yes, le CLI envoie la requête. Pour toute autre réponse, le CLI quitte avec le code 1 et n’envoie rien.
Avec --yesLe CLI envoie la requête sans demander de confirmation.
Avec --json, dans un pipe, ou sans terminalLe CLI n’envoie rien et quitte avec le code 6. Le message d’erreur décrit l’effet.

Ainsi, un script ou un agent peut d’abord lire l’effet d’une commande : l’exécuter sans --yes, lire le message, puis la relancer avec --yes seulement après qu’une personne a approuvé cet effet.

Erreurs

Code de sortieCauseQue faire
1Vous avez répondu autre chose que y à l’invite. Rien n’a été envoyé.Relancez la commande si c’était votre intention.
2Le CLI a rejeté la saisie avant l’envoi : UUID invalide, bras qui ne sont pas un tableau JSON, un bras sans ID ou avec un poids non entier, --paywalls et --flows tous les deux présents ou tous les deux absents, ou deux options d’arrêt.Corrigez le flag mentionné dans le message.
3Vous n’êtes pas connecté, ou votre utilisateur Adapty n’a pas accès à l’application.Connectez-vous avec adapty auth login et trouvez l’ID de l’application dans adapty apps list.
4Adapty a refusé la requête. Le message en indique la raison.Consultez Messages d’Adapty.
5Le CLI n’a pas pu joindre Adapty.Vérifiez votre connexion et relancez la commande.
6Une commande irréversible a été exécutée sans --yes et sans personne pour répondre. Rien n’a été envoyé.Lisez l’effet décrit dans le message, puis relancez la commande avec --yes.
130Vous avez appuyé sur Ctrl+C à l’invite. Rien n’a été envoyé.—

Messages d’Adapty

MessageQue faire
The sum of the weights must equal 100, but has N.Modifiez les poids pour qu’ils totalisent 100.
Flow(<id>) must be published before adding to AB test.Publiez le flow, puis relancez la commande.
Paywalls cannot be changed in non-draft ab tests. ou Placement cannot be changed in non-draft ab tests.Transmettez les arms et le placement tels que get les retourne, ou utilisez replace.
AB Test from default audience can not be stopped.Un test sur tous les utilisateurs nécessite un paywall ou un flow après l’arrêt : utilisez --winner ou --other.
AB Test to stop must be live.Seul un test en cours peut être arrêté ou remplacé.
Live Ab Test can not be deleted.Arrêtez le test avant de l’archiver.

Référence des commandes

Chaque commande prend --app, l’UUID de l’application issu de adapty apps list. Toutes les commandes sauf list prennent l’identifiant du test en argument.

ab-tests list

FlagRequisDescription
--typeNonflow (par défaut) ou paywall.
--stateNonlive, draft, completed, inactive ou archived.
--placementNonUniquement les tests de ce placement (ID). Répétez le flag pour plusieurs placements.
--segmentNonUniquement les tests qui s’exécutent pour exactement ce segment (ID). Répétez le flag pour plusieurs segments.
--searchNonUniquement les tests dont le titre contient ce texte.
--pageNonNuméro de page. Par défaut : 1.
--page-sizeNonTests par page, jusqu’à 100. Par défaut : 20.

ab-tests get

Retourne le test avec ses variantes. Ne prend pas d’autres drapeaux.

ab-tests create

FlagRequisDescription
--titleOuiTitre du test.
--paywallsL’un des deuxVariantes d’un test A/B de paywall, en JSON : [{"paywall_id":"<id>","weight":50,"title":"A"}, …]. title est optionnel.
--flowsL’un des deuxVariantes d’un test A/B de flow, en JSON, avec flow_id à la place de paywall_id.
--goalNonCe que le test est censé démontrer.
--placementOuiPlacement prévu pour le test (ID). Un test de paywall nécessite un placement de paywall, et un test de flow nécessite un placement de flow.
--segmentNonPlanifier le test pour un segment (ID). Incompatible avec --all-users.
--all-usersNonPlanifier le test pour tous les utilisateurs.

ab-tests update

Prend les mêmes options que create, et --placement est obligatoire. Un option non renseignée est effacée. Sur un test en cours, seuls --title et --goal peuvent être modifiés. Repasser le même placement et la même audience.

ab-tests start

IndicateurRequisDescription
--placementOuiPlacement sur lequel lancer le test (ID).
--segmentL’un ou l’autreLancer le test pour un segment (ID).
--all-usersL’un ou l’autreLancer le test pour tous les utilisateurs.
--yes, -yNonDémarrer sans confirmation. Requis avec --json ou dans un pipe.

ab-tests stop

FlagRequisDescription
--winnerL’un des troisAfficher le paywall ou flow de cette variante (ID) à toute l’audience.
--otherL’un des troisAfficher un paywall ou flow qui ne faisait pas partie du test (ID).
--no-contentL’un des troisRetirer l’audience du placement. Refusé pour un test Tous les utilisateurs.
--yes, -yNonArrêter sans confirmation. Requis avec --json ou dans un pipe.

ab-tests replace

FlagRequisDescription
--titleOuiTitre du nouveau test.
--placementOuiPlacement du nouveau test (ID). Un placement différent déplace l’audience vers ce placement.
--paywalls ou --flowsOuiVariantes du nouveau test, comme dans create.
--goalNonCe que le nouveau test est censé démontrer.
--yes, -yNonRemplacer sans confirmation. Requis avec --json ou dans un pipe.

Le nouveau test hérite de l’audience du test qu’il remplace, donc replace ne prend pas de flag d’audience.

ab-tests archive

FlagRequisDescription
--yes, -yNonArchiver sans confirmation. Requis avec --json ou dans un pipe.

Et ensuite ?