🎯 Chạy chiến dịch AppSumo cho Gato GraphQL, với Gato GraphQL và Lemon Squeezy
Gato GraphQL ra mắt hôm nay trên AppSumo! 🙌
Theo yêu cầu, đội ngũ Gato GraphQL phải gửi 10.000 mã đổi thưởng cho AppSumo. Các mã này là cầu nối giữa AppSumo (nơi người dùng thanh toán cho sản phẩm) và Gato GraphQL (nơi người dùng tải plugin về).
Khi người dùng đến gatographql.com để đổi mã, chúng tôi tạo ra một "mã giảm giá 100%" tương ứng (chỉ có thể dùng một lần và chỉ áp dụng cho sản phẩm cụ thể đó), rồi để người dùng "mua" plugin bằng mã giảm giá đó.
Hàng nghìn mã giảm giá phải được tạo trước và lưu trữ tại nhà cung cấp marketplace của chúng tôi, Lemon Squeezy.
Lemon Squeezy cho phép tạo mã giảm giá qua API của nó. Vì Gato GraphQL có HTTP Client, chúng tôi đã thực thi một GraphQL query kết nối với API của Lemon Squeezy và tạo ra hàng nghìn mã giảm giá đó. (Nói cách khác, Gato GraphQL đang tự vận hành chiến dịch AppSumo của chính mình 😆)
10.000 mã đổi thưởng cho AppSumo được tạo ra bằng cách chạy GraphQL query này:
Các mã giảm giá tương ứng được tạo ra bằng cách chạy GraphQL query này:
Query đầu tiên khá đơn giản. Query thứ hai phức tạp hơn một chút. Hãy cùng khám phá chi tiết hơn.
Tạo mã giảm giá
GraphQL query sử dụng field _generateRandomString để tạo mã giảm giá dưới dạng chuỗi ngẫu nhiên, sử dụng các ký tự ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.
Mã còn được thêm tiền tố namespace (thông qua biến $codePrefix), để khớp với sản phẩm và bậc cụ thể.
Chẳng hạn, namespace APSMV1T1 có nghĩa là:
- Chiến dịch AppSumo
- Sản phẩm Variation 1
- Tier 1
Tất cả mã giảm giá cũng được đặt một tên mô tả duy nhất, giúp chúng tôi tìm thấy chúng trong dashboard của Lemon Squeezy:
Appsumo campaign #1Appsumo campaign #2Appsumo campaign #3- ...
Appsumo campaign #{recordNumber}
Sau đó, tìm kiếm Appsumo campaign #, chúng tôi có thể xem các mã:

Và khi nhấp vào bất kỳ mã nào, chúng tôi thấy rằng mã áp dụng cho một sản phẩm và biến thể duy nhất:

Thực thi query nhiều lần qua một bash script
Query thực thi (mặc định) 100 yêu cầu HTTP bất đồng bộ tới API LemonSqueezy, mỗi yêu cầu tạo một mã giảm giá duy nhất. Do đó, chạy query sẽ tạo ra 100 mã giảm giá.
Chúng tôi không thực thi tất cả 10.000 yêu cầu cùng một lúc vì tại một thời điểm nào đó (chắc chắn là với 500 lần gọi), API LemonSqueezy sẽ trả về lỗi "Too many requests".
Đó là lý do chúng tôi chia việc thực thi query thành các batch gồm 100 yêu cầu và thêm khoảng dừng giữa các batch.
Bước đầu tiên là tạo một persisted query trên trang WordPress của chúng tôi, sao chép/dán query vào và xuất bản:

Sau khi xuất bản, chúng tôi có thể thực thi persisted query tùy ý trong một bash script bằng cách dùng curl, cung cấp các biến GraphQL dưới dạng tham số cho URL của persisted query.
Batch script này thực thi persisted query 100 lần (100 x 100 = 10.000), truyền các biến thích hợp cho mỗi yêu cầu và chờ 30 giây giữa các lần (đây là code cho 300 mã giảm giá đầu tiên):
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}"
# ...Thu thập tất cả các mã đã tạo
Vì chúng tôi đang vận hành trên trang WordPress của mình, chúng tôi có thể tiện lợi tạo một bài viết để thu thập tất cả các mã giảm giá vừa được tạo.
Cung cấp tham số $postId, mỗi lần query được thực thi, nó sẽ thêm 100 mã mới vào cuối bài viết đó.

Sau khi bash script hoàn tất, bài viết sẽ chứa toàn bộ 10.000 mã.
Nhiệm vụ hoàn thành
Tôi chạy query đầu tiên, sao chép toàn bộ 10.000 chuỗi ngẫu nhiên, dán vào file codes.csv mới và gửi cho AppSumo.
Tôi chạy query thứ hai, sao chép 10.000 mã giảm giá và dán chúng vào logic của ứng dụng để cho phép người dùng tải plugin về.
Gato GraphQL đã sẵn sàng cho chiến dịch AppSumo.
Chúc chúng tôi may mắn 🙏