🎯 使用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,我们执行了一个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 #1Appsumo campaign #2Appsumo campaign #3- ...
Appsumo campaign #{recordNumber}
然后,搜索Appsumo campaign #即可查看这些折扣码:

点击其中任意一个,可以看到它适用于单个产品和变体:

通过bash脚本多次执行query
该query(默认情况下)对LemonSqueezy API执行100个异步HTTP请求,每个请求创建一个折扣码。因此,运行该query会生成100个折扣码。
我们不会一次性执行全部10,000个请求,因为在某个时间点(500次调用时必然发生),LemonSqueezy API会返回「Too many requests」错误。
因此,我们将query的执行拆分为每批100个请求,并在批次之间添加延迟。
第一步是在WordPress站点中创建一个persisted query,粘贴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活动做好准备。
祝我们好运 🙏