đŻ Lancer une campagne AppSumo pour Gato GraphQL, avec Gato GraphQL et Lemon Squeezy
Gato GraphQL se lance aujourd'hui sur AppSumo ! đ
En tant qu'exigence, l'Ă©quipe Gato GraphQL a dĂ» envoyer 10 000 codes de rachat Ă AppSumo. Ces codes constituent le pont entre AppSumo (oĂč l'utilisateur paie le produit) et Gato GraphQL (oĂč l'utilisateur tĂ©lĂ©charge le plugin).
Lorsque l'utilisateur vient sur gatographql.com pour échanger les codes, nous générons un « code de réduction de 100 % » correspondant (utilisable une seule fois et limité à ce produit spécifique), et faisons « acheter » le plugin à l'utilisateur en utilisant le code de réduction.
Les milliers de codes de rĂ©duction ont dĂ» ĂȘtre créés Ă l'avance, et stockĂ©s chez notre fournisseur de marketplace, Lemon Squeezy.
Lemon Squeezy permet de crĂ©er des rĂ©ductions via son API. Comme Gato GraphQL dispose d'un HTTP Client, nous avons exĂ©cutĂ© une requĂȘte GraphQL qui se connecte Ă l'API de Lemon Squeezy et crĂ©e les milliers de codes de rĂ©duction. (En d'autres termes, Gato GraphQL alimente sa propre campagne AppSumo đ)
Les 10 000 codes de rachat pour AppSumo ont Ă©tĂ© créés en exĂ©cutant cette requĂȘte GraphQL :
Les codes de rĂ©duction correspondants ont Ă©tĂ© créés en exĂ©cutant cette requĂȘte GraphQL :
La premiĂšre requĂȘte est trĂšs simple. La seconde est un peu plus complexe. Explorons-la plus en dĂ©tail.
Création du code de réduction
La requĂȘte GraphQL utilise le champ _generateRandomString pour gĂ©nĂ©rer le code de rĂ©duction sous forme de chaĂźne alĂ©atoire, en utilisant les caractĂšres ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.
Le code est également préfixé par un espace de noms (via la variable $codePrefix), afin de correspondre à un produit et un niveau spécifiques.
Par exemple, l'espace de noms APSMV1T1 signifie :
- Campagne AppSumo
- Produit Variation 1
- Tier 1
Tous les codes de réduction reçoivent également un nom descriptif unique, pour nous aider à les retrouver dans le tableau de bord Lemon Squeezy :
Appsumo campaign #1Appsumo campaign #2Appsumo campaign #3- ...
Appsumo campaign #{recordNumber}
En recherchant Appsumo campaign #, nous pouvons visualiser les codes :

En cliquant sur l'un d'eux, on voit qu'il s'applique Ă un seul produit et une seule variation :

ExĂ©cution de la requĂȘte plusieurs fois via un script bash
La requĂȘte exĂ©cute (par dĂ©faut) 100 requĂȘtes HTTP asynchrones contre l'API LemonSqueezy, chaque requĂȘte crĂ©ant un seul code de rĂ©duction. Ainsi, exĂ©cuter la requĂȘte produira 100 codes de rĂ©duction.
Nous n'exĂ©cutons pas les 10 000 requĂȘtes en une seule fois car, Ă un moment donnĂ© (certainement avec 500 appels), l'API LemonSqueezy produit une erreur « Too many requests ».
C'est pourquoi nous divisons l'exĂ©cution de la requĂȘte en lots de 100 requĂȘtes, et ajoutons un dĂ©lai entre eux.
La premiĂšre Ă©tape consiste Ă crĂ©er une Persisted queries sur notre site WordPress, copier/coller la requĂȘte, et la publier :

Une fois publiée, nous pouvons exécuter la persisted query à volonté dans un script bash en utilisant curl, en fournissant les variables GraphQL comme paramÚtres à l'URL de la persisted query.
Ce script exĂ©cute la persisted query 100 fois (100 x 100 = 10 000), en passant les variables appropriĂ©es Ă chaque requĂȘte, et en attendant 30 secondes entre chacune (voici le code pour les 300 premiers codes de rĂ©duction) :
curl --user "{username}:{applicationPassword}" "https://my-wp-site.com/graphql-query/create-redemption-codes-for-appsumo-in-lemonsqueezy/?codePrefix=APSMV1T1&storeID={storeId}&variantIDs[]={productVariantId}&lemonSqueezyAccessToken={accessToken}&postId={postId}"
sleep 30
curl --user "{username}:{applicationPassword}" "https://my-wp-site.com/graphql-query/create-redemption-codes-for-appsumo-in-lemonsqueezy/?firstRecordNumber=101&codePrefix=APSMV1T1&storeID={storeId}&variantIDs[]={productVariantId}&lemonSqueezyAccessToken={accessToken}&postId={postId}"
sleep 30
curl --user "{username}:{applicationPassword}" "https://my-wp-site.com/graphql-query/create-redemption-codes-for-appsumo-in-lemonsqueezy/?firstRecordNumber=201&codePrefix=APSMV1T1&storeID={storeId}&variantIDs[]={productVariantId}&lemonSqueezyAccessToken={accessToken}&postId={postId}"
# ...Collecte de tous les codes générés
Comme nous opérons sur notre site WordPress, nous pouvons commodément créer un article pour collecter tous les codes de réduction nouvellement générés.
En fournissant un paramĂštre $postId, chaque fois que la requĂȘte est exĂ©cutĂ©e, elle ajoutera les 100 nouveaux codes Ă la fin de cet article.

à la fin de l'exécution du script bash, l'article contiendra les 10 000 codes.
La tĂąche est accomplie
J'ai exĂ©cutĂ© la premiĂšre requĂȘte, copiĂ© les 10 000 chaĂźnes alĂ©atoires, les ai collĂ©es dans un nouveau fichier codes.csv, et l'ai envoyĂ© Ă AppSumo.
J'ai exĂ©cutĂ© la deuxiĂšme requĂȘte, copiĂ© les 10 000 codes de rĂ©duction, et les ai collĂ©s dans la logique de mon application pour que l'utilisateur puisse tĂ©lĂ©charger le plugin.
Gato GraphQL est prĂȘt pour la campagne AppSumo.
Souhaitez-nous bonne chance đ