博客

🎯 使用Gato GraphQL和Lemon Squeezy为Gato GraphQL运营AppSumo活动

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,我们执行了一个GraphQL query,连接Lemon Squeezy API并创建了数千个折扣码。(换句话说,Gato GraphQL正在驱动其自身的AppSumo活动 😆)

AppSumo所需的10,000个兑换码通过运行以下GraphQL query创建:

对应的折扣码通过运行以下GraphQL query创建:

第一个query非常简单。第二个query稍微复杂一些。让我们详细了解一下。

创建折扣码

GraphQL query使用字段 _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脚本多次执行query

该query(默认情况下)对LemonSqueezy API执行100个异步HTTP请求,每个请求创建一个折扣码。因此,运行该query会生成100个折扣码。

我们不会一次性执行全部10,000个请求,因为在某个时间点(500次调用时必然发生),LemonSqueezy API会返回「Too many requests」错误。

因此,我们将query的执行拆分为每批100个请求,并在批次之间添加延迟。

第一步是在WordPress站点中创建一个persisted query,粘贴query内容并发布:

Persisted query
Persisted query

发布后,我们可以在bash脚本中随时使用curl执行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参数,每次执行query时都会将新的100个折扣码追加到该文章末尾。

收集兑换码
收集兑换码

bash脚本执行完毕后,该文章将包含全部10,000个折扣码。

任务完成

我运行了第一个query,复制了全部10,000个随机字符串,粘贴到新建的codes.csv文件中,并发送给AppSumo。

我运行了第二个query,复制了10,000个折扣码,并将其粘贴到应用程序逻辑中,以便用户下载插件。

Gato GraphQL已为AppSumo活动做好准备。

祝我们好运 🙏


订阅我们的新闻通讯

及时了解 Gato GraphQL 的所有更新。