Blog

🎯 Executando uma campanha AppSumo para Gato GraphQL, com Gato GraphQL e Lemon Squeezy

Leonardo Losoviz
Por Leonardo Losoviz ·

Gato GraphQL está sendo lançado hoje no AppSumo! 🙌

Como requisito, a equipe do Gato GraphQL precisou enviar 10.000 códigos de resgate ao AppSumo. Esses códigos são a ponte entre o AppSumo (onde o usuário paga pelo produto) e o Gato GraphQL (onde o usuário faz o download do plugin).

Quando o usuário acessa gatographql.com para resgatar os códigos, geramos um correspondente "código de desconto de 100%" (resgatável apenas uma vez e restrito a esse produto específico), e fazemos o usuário "comprar" o plugin usando o código de desconto.

Resgatando Gato GraphQL com o código AppSumo - O código de desconto de 100% é aplicado automaticamente

Os milhares de códigos de desconto precisavam ser criados com antecedência e armazenados em nosso provedor de marketplace, o Lemon Squeezy.

O Lemon Squeezy permite criar descontos via sua API. Como o Gato GraphQL possui um HTTP Client, executamos uma query GraphQL que se conecta à API do Lemon Squeezy e cria os milhares de códigos de desconto. (Em outras palavras, Gato GraphQL está alimentando sua própria campanha AppSumo 😆)

Os 10.000 códigos de resgate para o AppSumo foram criados executando esta query GraphQL:

Os correspondentes códigos de desconto foram criados executando esta query GraphQL:

A primeira query é bem simples. A segunda é um pouco mais complexa. Vamos explorá-la com mais detalhes.

Criando o código de desconto

A query GraphQL usa o campo _generateRandomString para gerar o código de desconto como uma string aleatória, usando os caracteres ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.

O código também é prefixado com um namespace (via a variável $codePrefix), para corresponder a um produto e nível específicos.

Por exemplo, o namespace APSMV1T1 significa:

  • Campanha AppSumo
  • Produto Variation 1
  • Tier 1

Todos os códigos de desconto também recebem um nome descritivo único, para nos ajudar a encontrá-los no painel do Lemon Squeezy:

  • Appsumo campaign #1
  • Appsumo campaign #2
  • Appsumo campaign #3
  • ...
  • Appsumo campaign #{recordNumber}

Então, pesquisando por Appsumo campaign #, podemos visualizar os códigos:

Códigos de desconto gerados no Lemon Squeezy
Códigos de desconto gerados no Lemon Squeezy

E clicando em qualquer um deles, vemos que ele se aplica a um único produto e variação:

Código de desconto no Lemon Squeezy
Código de desconto no Lemon Squeezy

Executando a query várias vezes via script bash

A query executa (por padrão) 100 requisições HTTP assíncronas contra a API do LemonSqueezy, com cada requisição criando um único código de desconto. Portanto, executar a query produzirá 100 códigos de desconto.

Não executamos todas as 10.000 requisições de uma só vez porque, em algum momento (certamente com 500 chamadas), a API do LemonSqueezy retorna um erro "Too many requests".

É por isso que dividimos a execução da query em lotes de 100 requisições e adicionamos um intervalo entre eles.

O primeiro passo é criar uma query persistida em nosso site WordPress, copiar/colar a query e publicá-la:

Persisted query
Persisted query

Uma vez publicada, podemos executar a query persistida quando quisermos dentro de um script bash usando curl, fornecendo as variáveis GraphQL como parâmetros para a URL da query persistida.

Este script em lote executa a query persistida 100 vezes (100 x 100 = 10.000), passando as variáveis apropriadas para cada requisição e aguardando 30 segundos entre elas (aqui está o código para os primeiros 300 códigos de desconto):

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}"
# ...

Coletando todos os códigos gerados

Como operamos em nosso site WordPress, podemos convenientemente criar um post para coletar todos os códigos de desconto recém-gerados.

Fornecendo um parâmetro $postId, toda vez que a query é executada ela irá acrescentar os novos 100 códigos ao final desse post.

Coletando os códigos de resgate
Coletando os códigos de resgate

Ao final da execução do script bash, o post conterá todos os 10.000 códigos.

A tarefa está concluída

Executei a primeira query, copiei todas as 10.000 strings aleatórias, colei em um novo arquivo codes.csv e enviei para o AppSumo.

Executei a segunda query, copiei os 10.000 códigos de desconto e os colei na lógica da minha aplicação para que o usuário pudesse fazer o download do plugin.

Gato GraphQL está pronto para a campanha AppSumo.

Nos deseje boa sorte 🙏


Assine nossa newsletter

Fique por dentro de todas as atualizações do Gato GraphQL.