🎯 Een AppSumo-campagne uitvoeren voor Gato GraphQL, met Gato GraphQL en Lemon Squeezy
Gato GraphQL lanceert vandaag in AppSumo! 🙌
Als vereiste moest het Gato GraphQL-team 10.000 inwisselcodes naar AppSumo sturen. Deze codes vormen de brug tussen AppSumo (waar de gebruiker voor het product betaalt) en Gato GraphQL (waar de gebruiker de plugin downloadt).
Wanneer de gebruiker naar gatographql.com komt om de codes in te wisselen, genereren we een bijbehorende "100% kortingscode" (slechts eenmalig inwisselbaar en beperkt tot dat specifieke product), en laten we de gebruiker de plugin "kopen" met de kortingscode.
De duizenden kortingscodes moesten van tevoren worden aangemaakt en opgeslagen bij onze marketplace-provider, Lemon Squeezy.
Lemon Squeezy maakt het mogelijk om kortingen aan te maken via zijn API. Omdat Gato GraphQL een HTTP-client heeft, hebben we een GraphQL-query uitgevoerd die verbinding maakt met de Lemon Squeezy API en de duizenden kortingscodes aanmaakt. (Met andere woorden, Gato GraphQL drijft zijn eigen AppSumo-campagne aan 😆)
De 10.000 inwisselcodes voor AppSumo werden aangemaakt door deze GraphQL-query uit te voeren:
De bijbehorende kortingscodes werden aangemaakt door deze GraphQL-query uit te voeren:
De eerste query is heel eenvoudig. De tweede is iets complexer. Laten we die nader bekijken.
De kortingscode aanmaken
De GraphQL-query gebruikt veld _generateRandomString om de kortingscode als een willekeurige string te genereren, met de tekens ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.
Aan de code wordt ook een naamruimte-prefix toegevoegd (via de variabele $codePrefix), om te passen bij een specifiek product en niveau.
Naamruimte APSMV1T1 betekent bijvoorbeeld:
- AppSumo-campagne
- Variation 1-product
- Tier 1
Alle kortingscodes krijgen ook een unieke beschrijvende naam, zodat we ze makkelijk kunnen terugvinden in het Lemon Squeezy-dashboard:
Appsumo campaign #1Appsumo campaign #2Appsumo campaign #3- ...
Appsumo campaign #{recordNumber}
Door te zoeken op Appsumo campaign # kunnen we de codes bekijken:

Als je op een van de codes klikt, zie je dat die van toepassing is op één product en variant:

De query meerdere keren uitvoeren via een bash-script
De query voert (standaard) 100 asynchrone HTTP-verzoeken uit tegen de LemonSqueezy API, waarbij elk verzoek één kortingscode aanmaakt. Het uitvoeren van de query levert dus 100 kortingscodes op.
We voeren niet alle 10.000 verzoeken tegelijk uit, omdat de LemonSqueezy API op een gegeven moment (zeker bij 500 aanroepen) een "Too many requests"-fout geeft.
Daarom splitsen we de uitvoering van de query op in batches van 100 verzoeken en voegen we een vertraging toe tussen de batches.
De eerste stap is het aanmaken van een persisted query op onze WordPress-site, de query kopiëren/plakken en publiceren:

Eenmaal gepubliceerd kunnen we de persisted query naar wens uitvoeren binnen een bash-script met curl, waarbij we de GraphQL-variabelen meegeven als parameters in de URL van de persisted query.
Dit batchscript voert de persisted query 100 keer uit (100 x 100 = 10.000), geeft de juiste variabelen door aan elk verzoek en wacht 30 seconden tussen de verzoeken (hier is de code voor de eerste 300 kortingscodes):
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}"
# ...Alle gegenereerde codes verzamelen
Omdat we op onze WordPress-site werken, kunnen we handig een bericht aanmaken om alle nieuw gegenereerde kortingscodes te verzamelen.
Door een parameter $postId op te geven, worden de nieuwe 100 codes elke keer dat de query wordt uitgevoerd aan het einde van dat bericht toegevoegd.

Aan het einde van het uitvoeren van het bash-script bevat het bericht alle 10.000 codes.
De taak is voltooid
Ik heb de eerste query uitgevoerd, alle 10.000 willekeurige strings gekopieerd, ze in een nieuw bestand codes.csv geplakt en naar AppSumo gestuurd.
Ik heb de tweede query uitgevoerd, de 10.000 kortingscodes gekopieerd en ze in de logica van mijn applicatie geplakt zodat de gebruiker de plugin kan downloaden.
Gato GraphQL is klaar voor de AppSumo-campagne.
Wens ons succes 🙏