Ir ao conteúdo principal
2026

Deals channel bot for Telegram

Next.js
Drizzle ORM
PostgreSQL
Telegram Bot API
GraphQL
Docker
Vitest
TypeScript

Descrição

Um bot que cuida sozinho de um canal de ofertas no Telegram. A cada meia hora ele busca produtos na API de afiliados da Shopee, descarta os que não passam num corte de qualidade, pontua o resto e publica o melhor com foto e link rastreado. Um painel pequeno mostra quem entrou e saiu, os cliques por dia e as ofertas mais clicadas.

Funcionalidades

  • Ofertas pontuadas por vendas, nota, desconto e comissão, cada critério normalizado contra o resto do lote
  • Um corte antes de qualquer pontuação: nota 4,5 ou mais, pelo menos 100 vendidos, 15% de desconto e uma lista de palavras bloqueadas comparada por palavra inteira e sem acento
  • Nenhum produto se repete em 14 dias, e dois posts seguidos nunca vêm da mesma categoria
  • Um redirecionador de link curto que conta cliques e ignora os robôs de pré-visualização do Telegram, do WhatsApp e de outros apps
  • Cole um link da Amazon, da Shopee ou do Mercado Livre e a loja é detectada e o link de afiliado conferido antes de publicar
  • Um painel com membros, entradas e saídas, a curva de 30 dias e as cinco ofertas mais clicadas, nos temas claro e escuro

Desafios

  • Assinar cada requisição à API GraphQL da Shopee com um SHA-256 de app id, timestamp, payload e segredo, e transformar em exceção de verdade os erros que voltam dentro do corpo da resposta
  • Guardar um histórico de membros que o Telegram não guarda: uma foto diária da contagem mais um webhook que registra cada entrada e saída
  • Escolher num catálogo de uns mil produtos sem publicar sempre o mesmo punhado

Aprendizados

  • Que a pré-visualização de um link é uma requisição como qualquer outra, então um contador de cliques sem filtro de user-agent conta o app de chat antes de contar uma pessoa
  • Que as vendas precisam de um log antes de normalizar, senão um produto com dez mil pedidos achata nota e desconto do lote inteiro
  • Que conferir um deploy uma vez só, logo depois de subir, dá 502 num container saudável porque o proxy chega a ele alguns segundos depois; o script de deploy agora espera um 200