🎯 Prowadzenie kampanii AppSumo dla Gato GraphQL, z Gato GraphQL i Lemon Squeezy
Gato GraphQL jest dziś dostępny w AppSumo! 🙌
Jako wymóg, zespół Gato GraphQL musiał wysłać do AppSumo 10 000 kodów do realizacji. Te kody są pomostem między AppSumo (gdzie użytkownik płaci za produkt) a Gato GraphQL (gdzie użytkownik pobiera wtyczkę).
Gdy użytkownik przychodzi na gatographql.com, aby zrealizować kody, generujemy odpowiedni „kod rabatowy 100%" (możliwy do zrealizowania tylko raz, ograniczony do konkretnego produktu) i pozwalamy użytkownikowi „kupić" wtyczkę przy użyciu tego kodu rabatowego.
Tysiące kodów rabatowych musiały zostać utworzone z wyprzedzeniem i przechowane u naszego dostawcy marketplace, Lemon Squeezy.
Lemon Squeezy umożliwia tworzenie rabatów przez swoje API. Ponieważ Gato GraphQL posiada HTTP Client, wykonaliśmy query GraphQL, która łączy się z API Lemon Squeezy i tworzy tysiące kodów rabatowych. (Innymi słowy, Gato GraphQL napędza własną kampanię AppSumo 😆)
10 000 kodów do realizacji dla AppSumo zostało utworzonych poprzez uruchomienie tej query GraphQL:
Odpowiednie kody rabatowe zostały utworzone poprzez uruchomienie tej query GraphQL:
Pierwsza query jest bardzo prosta. Druga jest nieco bardziej złożona. Przyjrzyjmy się jej dokładniej.
Tworzenie kodu rabatowego
Query GraphQL używa pola _generateRandomString do generowania kodu rabatowego jako losowego ciągu znaków, używając znaków ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.
Do kodu dodawany jest również prefiks przestrzeni nazw (za pomocą zmiennej $codePrefix), aby dopasować go do konkretnego produktu i poziomu.
Na przykład przestrzeń nazw APSMV1T1 oznacza:
- Kampania AppSumo
- Produkt Variation 1
- Tier 1
Wszystkie kody rabatowe otrzymują również unikalną opisową nazwę, aby ułatwić ich odnalezienie w panelu Lemon Squeezy:
Appsumo campaign #1Appsumo campaign #2Appsumo campaign #3- ...
Appsumo campaign #{recordNumber}
Wyszukując Appsumo campaign #, możemy przeglądać kody:

Klikając na dowolny z nich, widzimy, że odnosi się do jednego produktu i wariantu:

Wielokrotne wykonywanie query przez skrypt bash
Query wykonuje (domyślnie) 100 asynchronicznych żądań HTTP do API LemonSqueezy, gdzie każde żądanie tworzy jeden kod rabatowy. W związku z tym uruchomienie query spowoduje utworzenie 100 kodów rabatowych.
Nie wykonujemy wszystkich 10 000 żądań naraz, ponieważ w pewnym momencie (na pewno przy 500 wywołaniach) API LemonSqueezy zwraca błąd „Too many requests".
Dlatego dzielimy wykonanie query na partie po 100 żądań i dodajemy opóźnienie między nimi.
Pierwszym krokiem jest utworzenie persisted query na naszej stronie WordPress, skopiowanie/wklejenie query i jej opublikowanie:

Po opublikowaniu możemy wykonywać persisted query według potrzeb w skrypcie bash przy użyciu curl, podając zmienne GraphQL jako parametry do URL persisted query.
Ten skrypt wsadowy wykonuje persisted query 100 razy (100 x 100 = 10 000), przekazując odpowiednie zmienne do każdego żądania i czekając 30 sekund między nimi (oto kod dla pierwszych 300 kodów rabatowych):
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}"
# ...Zbieranie wszystkich wygenerowanych kodów
Ponieważ działamy na naszej stronie WordPress, możemy wygodnie utworzyć post, aby zebrać wszystkie nowo wygenerowane kody rabatowe.
Podając parametr $postId, za każdym razem gdy query jest wykonywana, dołącza nowe 100 kodów na końcu tego posta.

Po zakończeniu wykonywania skryptu bash, post będzie zawierał wszystkie 10 000 kodów.
Zadanie wykonane
Uruchomiłem pierwszą query, skopiowałem wszystkie 10 000 losowych ciągów znaków, wkleiłem je do nowego pliku codes.csv i wysłałem do AppSumo.
Uruchomiłem drugą query, skopiowałem 10 000 kodów rabatowych i wkleiłem je do logiki mojej aplikacji, aby użytkownik mógł pobrać wtyczkę.
Gato GraphQL jest gotowy na kampanię AppSumo.
Życzycie nam powodzenia 🙏