ブログ

🎯 Gato GraphQLのAppSumoキャンペーンをGato GraphQLとLemon Squeezyで運営する

Leonardo Losoviz
著者: Leonardo Losoviz ·

Gato GraphQLが本日AppSumoにローンチしました! 🙌

要件として、Gato GraphQLチームはAppSumoに10,000件の引き換えコードを送付する必要がありました。これらのコードは、AppSumo(ユーザーが製品の支払いを行う場所)とGato GraphQL(ユーザーがプラグインをダウンロードする場所)の橋渡し役を担います。

ユーザーがコードを引き換えるためにgatographql.comにアクセスすると、対応する「100%割引コード」(一度だけ使用可能で、特定の製品に限定されたもの)を生成し、ユーザーにその割引コードを使ってプラグインを「購入」してもらいます。

AppSumoコードでGato GraphQLを引き換える - 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 #1
  • Appsumo campaign #2
  • Appsumo campaign #3
  • ...
  • Appsumo campaign #{recordNumber}

そして、Appsumo campaign #で検索すると、コードを一覧表示できます:

Lemon Squeezyで生成された割引コード
Lemon Squeezyで生成された割引コード

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

Lemon Squeezyの割引コード
Lemon Squeezyの割引コード

bashスクリプトでクエリを複数回実行する

このクエリは(デフォルトで)LemonSqueezy APIに対して100件の非同期HTTPリクエストを実行し、各リクエストが1件の割引コードを作成します。そのため、クエリを実行すると100件の割引コードが生成されます。

10,000件のリクエストを一度に実行しない理由は、ある時点(500件の呼び出しで確実に)でLemonSqueezy APIが「Too many requests」エラーを返すためです。

そのため、クエリの実行を100件のリクエストのバッチに分割し、その間に遅延を設けています。

最初のステップは、WordPressサイトにpersisted queryを作成し、クエリをコピー&ペーストして公開することです:

Persisted query
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キャンペーンの準備が整いました。

頑張って成功させましょう 🙏


ニュースレターを購読する

Gato GraphQL のすべてのアップデートを把握しましょう。