Como meu bot do twitter alcançou 300k de impressões sem gastar nada
Introdução
Como bom programador e entusiasta de academia, decidi criar um bot que monitorasse as creatinas disponíveis na Growth, uma loja de suplementos. O meu objetivo era ter esse serviço de maneira gratuita e receber as notificações em alguma rede social, pela conveniência.
(está desativo por conta da mudança na api do twitter)
https://twitter.com/tem_creatina
O que aconteceu com o bot em 3 meses de funcionamento?
Para a minha surpresa, muitas pessoas não conseguiam comprar creatina, pois o estoque sempre se esgotava muito rápido. O resultado disso foi um impressionante número de 300 mil impressões em tweets nos últimos 91 dias, além de muitos likes e retweets. E o custo total da aplicação foi de R$ 0.
(o gasto com creatina foi de uns R$ 300 hehehe)
Funcionamento geral do bot
- É executado em um cron a cada 10 minutos;
- Realiza o scrapping com o cheerio em 4 páginas simultaneamente;
- Envia a notificação simultaneamente para dois lugares (Twitter e Discord).
A execução simultânea tem o objetivo de evitar a execução prolongada, prevenindo gastos com serverless.
Infraestrutura do bot
Basicamente: serverless, vercel e upstash :)
gasto: R$ 0
serverless
Esse recurso facilita nosso trabalho ao criar uma aplicação no AWS Lambda. O template que utilizei para iniciar a aplicação pode ser encontrado aqui: https://www.serverless.com/examples/aws-node-scheduled-cron
O template usado para agendar a execução da aplicação(cron):
org: xmatheus
app: scraper
service: scraper
frameworkVersion: '3'
provider:
name: aws
runtime: nodejs14.x
environment:
consumer_key:
consumer_secret:
access_token:
access_token_secret:
functions:
rateHandler:
handler: handler-tem-creatina.run
events:
- schedule: rate(10 minutes)
Vercel
gasto: R$ 0
O Discord permite a geração de um webhook para postar mensagens em um canal, facilitando a integração de bots. Ao todo, foram criadas 5 páginas utilizando Nextjs para o front e backend.
Páginas:
- Uma principal que coleta e envia os webhooks;
- Quatro páginas de redirecionamento (links que o bot gera e insere nas notificações enviadas).
As páginas de redirecionamento servem para acompanhar a quantidade de cliques nos links gerados pelo bot. A Vercel fornece analytics para isso.
Ex.:
página de coleta do webhook: https://creatina.xmatheus.dev/discord
Banco de dados redis com o upstash
gasto: R$ 0
O Upstash é um banco de dados serverless que cobra por comando. Basicamente, você tem 10 mil comandos para usar por dia, depois disso, é cobrado. O bot utilizou apenas 1,7 mil comandos durante 2 meses (antes não tinha a notificação pelo Discord).
O Upstash é usado em duas situações:
1 - Quando o usuário salva o webhook;
2 - Quando o bot busca todos os webhooks para notificar os canais.
Código e libs
Utilizei javascript, cheerio, twit e ioredis. Ainda vou disponibilizar um template do código do bot, mas de maneira geral o template do serverless funciona muito bem.
Conclusão
Use esta postagem como inspiração para criar aquele bot que você sempre imaginou, mas nunca tirou do papel. Aproveite, pois demorará um tempo até que sua aplicação cresça e seja cobrado por algum dos serviços utilizados. No entanto, tome cuidado e leia atentamente as páginas de pricing desses serviços.
Essa é uma das minhas primeiras aplicações que geram interações com pessoas aleatórias da internet, achei isso muito legal.
Ex.:
Infelizmente o twiter mudou os planos da API e, por enquanto, o bot está suspenso :/
Discordão da massa segue 100% :)
meu github: @xmatheus