🎯 Eine AppSumo-Kampagne für Gato GraphQL durchführen, mit Gato GraphQL und Lemon Squeezy
Gato GraphQL startet heute auf AppSumo! 🙌
Als Voraussetzung musste das Gato GraphQL-Team 10.000 Einlösecodes an AppSumo senden. Diese Codes bilden die Brücke zwischen AppSumo (wo der Nutzer das Produkt kauft) und Gato GraphQL (wo der Nutzer das Plugin herunterlädt).
Wenn der Nutzer auf gatographql.com kommt, um die Codes einzulösen, erstellen wir einen entsprechenden „100%-Rabattcode" (nur einmal einlösbar und auf das jeweilige Produkt beschränkt) und lassen den Nutzer das Plugin mit dem Rabattcode „kaufen".
Die Tausenden von Rabattcodes mussten im Voraus erstellt und bei unserem Marketplace-Anbieter Lemon Squeezy gespeichert werden.
Lemon Squeezy ermöglicht die Erstellung von Rabatten über seine API. Da Gato GraphQL einen HTTP-Client besitzt, haben wir eine GraphQL-Query ausgeführt, die sich mit der Lemon Squeezy-API verbindet und die Tausenden von Rabattcodes erstellt. (Mit anderen Worten: Gato GraphQL treibt seine eigene AppSumo-Kampagne an 😆)
Die 10.000 Einlösecodes für AppSumo wurden durch Ausführen dieser GraphQL-Query erstellt:
Die entsprechenden Rabattcodes wurden durch Ausführen dieser GraphQL-Query erstellt:
Die erste Query ist sehr einfach. Die zweite ist etwas komplexer. Lass uns sie genauer betrachten.
Den Rabattcode erstellen
Die GraphQL-Query verwendet das Feld _generateRandomString, um den Rabattcode als zufällige Zeichenkette zu generieren, mit den Zeichen ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.
Dem Code wird außerdem ein Namespace vorangestellt (über die Variable $codePrefix), um einem bestimmten Produkt und einer bestimmten Stufe zu entsprechen.
Der Namespace APSMV1T1 bedeutet beispielsweise:
- AppSumo-Kampagne
- Produkt Variation 1
- Tier 1
Allen Rabattcodes wird außerdem ein eindeutiger beschreibender Name gegeben, damit wir sie im Lemon Squeezy-Dashboard leicht finden können:
Appsumo campaign #1Appsumo campaign #2Appsumo campaign #3- ...
Appsumo campaign #{recordNumber}
Wenn wir dann nach Appsumo campaign # suchen, können wir die Codes anzeigen:

Und wenn wir auf einen davon klicken, sehen wir, dass er für ein einzelnes Produkt und eine einzelne Variation gilt:

Die Query mehrfach über ein Bash-Skript ausführen
Die Query führt (standardmäßig) 100 asynchrone HTTP-Anfragen gegen die LemonSqueezy-API aus, wobei jede Anfrage einen einzelnen Rabattcode erstellt. Das Ausführen der Query erzeugt also 100 Rabattcodes.
Wir führen nicht alle 10.000 Anfragen auf einmal aus, weil die LemonSqueezy-API ab einem bestimmten Punkt (sicher bei 500 Aufrufen) einen „Too many requests"-Fehler produziert.
Deshalb teilen wir die Ausführung der Query in Batches von 100 Anfragen auf und fügen dazwischen eine Verzögerung ein.
Der erste Schritt besteht darin, eine persisted query auf unserer WordPress-Website zu erstellen, die Query einzufügen und zu veröffentlichen:

Nach der Veröffentlichung können wir die persisted query jederzeit in einem Bash-Skript mit curl ausführen und dabei die GraphQL-Variablen als Parameter an die URL der persisted query übergeben.
Dieses Batch-Skript führt die persisted query 100 Mal aus (100 x 100 = 10.000), übergibt die passenden Variablen an jede Anfrage und wartet 30 Sekunden dazwischen (hier der Code für die ersten 300 Rabattcodes):
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 generierten Codes sammeln
Da wir auf unserer WordPress-Website arbeiten, können wir bequem einen Beitrag erstellen, um alle neu generierten Rabattcodes zu sammeln.
Durch Angabe eines $postId-Parameters fügt die Query bei jeder Ausführung die neuen 100 Codes am Ende dieses Beitrags an.

Am Ende der Ausführung des Bash-Skripts enthält der Beitrag alle 10.000 Codes.
Die Aufgabe ist erledigt
Ich habe die erste Query ausgeführt, alle 10.000 zufälligen Zeichenketten kopiert, in eine neue Datei codes.csv eingefügt und an AppSumo gesendet.
Ich habe die zweite Query ausgeführt, die 10.000 Rabattcodes kopiert und sie in die Logik meiner Anwendung eingefügt, damit der Nutzer das Plugin herunterladen kann.
Gato GraphQL ist bereit für die AppSumo-Kampagne.
Wünscht uns viel Glück 🙏