Blog

🎯 Een AppSumo-campagne uitvoeren voor Gato GraphQL, met Gato GraphQL en Lemon Squeezy

Leonardo Losoviz
Door Leonardo Losoviz ·

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.

Gato GraphQL inwisselen met de AppSumo-code - De 100% kortingscode wordt automatisch toegepast

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 #1
  • Appsumo campaign #2
  • Appsumo campaign #3
  • ...
  • Appsumo campaign #{recordNumber}

Door te zoeken op Appsumo campaign # kunnen we de codes bekijken:

Gegenereerde kortingscodes in Lemon Squeezy
Gegenereerde kortingscodes in Lemon Squeezy

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

Kortingscode in Lemon Squeezy
Kortingscode in Lemon Squeezy

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:

Persisted query
Persisted query

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.

De inwisselcodes verzamelen
De inwisselcodes verzamelen

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 🙏


Abonneer je op onze nieuwsbrief

Blijf op de hoogte van alle updates over Gato GraphQL.