🎯 Gato GraphQLのAppSumoキャンペーンをGato GraphQLとLemon Squeezyで運営する
Gato GraphQLが本日AppSumoにローンチしました! 🙌
要件として、Gato GraphQLチームはAppSumoに10,000件の引き換えコードを送付する必要がありました。これらのコードは、AppSumo(ユーザーが製品の支払いを行う場所)とGato GraphQL(ユーザーがプラグインをダウンロードする場所)の橋渡し役を担います。
ユーザーがコードを引き換えるためにgatographql.comにアクセスすると、対応する「100%割引コード」(一度だけ使用可能で、特定の製品に限定されたもの)を生成し、ユーザーにその割引コードを使ってプラグインを「購入」してもらいます。
数千件の割引コードは事前に作成し、マーケットプレイスプロバイダーであるLemon Squeezyに保存しておく必要がありました。
Lemon SqueezyはそのAPIを通じて割引を作成できます。Gato GraphQLにはHTTP Clientが備わっているため、Lemon Squeezy APIに接続して数千件の割引コードを作成するGraphQLクエリを実行しました。(言い換えれば、Gato GraphQL自身のAppSumoキャンペーンをGato GraphQLが動かしているということです 😆)
AppSumo用の10,000件の引き換えコードは、次のGraphQLクエリを実行して作成しました:
対応する割引コードは、次のGraphQLクエリを実行して作成しました:
最初のクエリは非常にシンプルです。2番目のクエリは少し複雑です。詳しく見ていきましょう。
割引コードの作成
GraphQLクエリはフィールド _generateRandomStringを使用して、ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789の文字を用いてランダムな文字列として割引コードを生成します。
コードには名前空間も付加されます($codePrefix変数を通じて)。これは特定の製品とティアに対応させるためです。
たとえば、名前空間APSMV1T1は次を意味します:
- AppSumoキャンペーン
- Variation 1製品
- Tier 1
すべての割引コードには、Lemon Squeezyのダッシュボードで見つけやすいように、固有のわかりやすい名前が付けられます:
Appsumo campaign #1Appsumo campaign #2Appsumo campaign #3- ...
Appsumo campaign #{recordNumber}
そして、Appsumo campaign #で検索すると、コードを一覧表示できます:

そのいずれかをクリックすると、単一の製品とバリエーションに適用されることがわかります:

bashスクリプトでクエリを複数回実行する
このクエリは(デフォルトで)LemonSqueezy APIに対して100件の非同期HTTPリクエストを実行し、各リクエストが1件の割引コードを作成します。そのため、クエリを実行すると100件の割引コードが生成されます。
10,000件のリクエストを一度に実行しない理由は、ある時点(500件の呼び出しで確実に)でLemonSqueezy APIが「Too many requests」エラーを返すためです。
そのため、クエリの実行を100件のリクエストのバッチに分割し、その間に遅延を設けています。
最初のステップは、WordPressサイトにpersisted queryを作成し、クエリをコピー&ペーストして公開することです:

公開後は、curlを使ってbashスクリプト内で任意のタイミングにpersisted queryを実行でき、GraphQL変数をpersisted queryのURLパラメーターとして渡すことができます。
このバッチスクリプトは、persisted queryを100回実行し(100 × 100 = 10,000)、各リクエストに適切な変数を渡し、間隔を30秒空けます(最初の300件の割引コードのコードはこちらです):
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}"
# ...生成されたすべてのコードの収集
WordPressサイト上で作業しているため、新たに生成されたすべての割引コードを収集するための投稿を便利に作成できます。
$postIdパラメーターを指定することで、クエリが実行されるたびに新しい100件のコードがその投稿の末尾に追記されます。

bashスクリプトの実行が完了すると、投稿にはすべての10,000件のコードが含まれます。
タスクの完了
最初のクエリを実行し、10,000件のランダムな文字列をすべてコピーして、新しいcodes.csvファイルに貼り付け、AppSumoに送付しました。
2番目のクエリを実行し、10,000件の割引コードをコピーして、ユーザーがプラグインをダウンロードできるようにアプリケーションのロジックに貼り付けました。
Gato GraphQLはAppSumoキャンペーンの準備が整いました。
頑張って成功させましょう 🙏