Plataforma de automação de marketing de afiliados: pega artigos publicados no WordPress e gera, com IA, campanhas de tráfego pago no Google Ads e no Meta Ads — com aprovação humana obrigatória antes de qualquer campanha ir ao ar.
Warning
Projeto de estudo, nunca executado em produção. O código está completo e as integrações são reais (SDKs oficiais do Google Ads, Meta Business, OpenAI e Telegram), mas o sistema nunca foi rodado ponta a ponta contra contas de anúncio reais. As dependências estão nas versões de 2024 — Google e Meta descontinuam versões de API anualmente, então espere precisar atualizar as libs antes que as chamadas de Ads funcionem. Não há testes automatizados. Use como referência de arquitetura, não como produto pronto.
WordPress publica um artigo
│
│ POST /webhook/{secret} · assinado com HMAC-SHA256
▼
Backend FastAPI ──✗ assinatura inválida──▶ 401
│ ✓ salva o artigo, enfileira a geração
▼
Celery (fila: ai) ──▶ GPT-4o
│ headlines, descriptions, keywords, público-alvo
▼
2 campanhas (Google + Meta) com status "pending"
│ notifica no Telegram
▼
Operador revisa no dashboard, edita copy e orçamento, aprova
│
▼
Celery (fila: ads)
├── Google Ads: Budget → Campaign → AdGroup → RSA + Keywords
└── Meta Ads: Campaign → AdSet → Creative → Ad
│ ambas criadas como PAUSED
▼
Celery Beat (de hora em hora) sincroniza métricas
▼
Dashboard: CTR, cliques, gasto, conversões
As campanhas são sempre criadas com status PAUSED nas duas plataformas. Nada começa a
gastar orçamento sem alguém ativar manualmente.
| Pasta | Stack | O que faz |
|---|---|---|
backend/ |
FastAPI · SQLAlchemy 2 (async) · Celery · PostgreSQL · Redis | API REST, workers, integrações |
dashboard/ |
Next.js 14 · TypeScript · Tailwind · Recharts · SWR | Revisão e aprovação de campanhas, gráficos |
wp-plugin/afilibot/ |
PHP (plugin WordPress) | Dispara o webhook, injeta links de afiliado, rastreia cliques |
docker-compose.yml |
Docker Compose | Sobe os 6 serviços |
db (Postgres 16) · redis (7) · backend (:8000) · worker (Celery, filas default,ai,ads,metrics) · beat (agendador) · dashboard (:3000)
cp .env.example .env
# preencha as credenciais — veja a tabela abaixo
docker compose up -d --build- Dashboard: http://localhost:3000
- API + docs OpenAPI: http://localhost:8000/docs
- Health: http://localhost:8000/health
O schema do banco é criado no boot via create_all(). Não há migrations — o alembic
está no requirements.txt mas nunca foi configurado, então qualquer alteração de modelo
depois do primeiro boot exige recriar o volume ou escrever o ALTER na mão.
| Grupo | Chaves | Necessário para |
|---|---|---|
| Banco / fila | DATABASE_URL, CELERY_BROKER_URL |
subir |
| Auth | DASHBOARD_SECRET, SECRET_KEY |
subir |
| OpenAI | OPENAI_API_KEY |
gerar campanhas |
| Google Ads | GOOGLE_ADS_DEVELOPER_TOKEN, CLIENT_ID, CLIENT_SECRET, REFRESH_TOKEN |
lançar no Google |
| Meta Ads | META_APP_ID, META_APP_SECRET, META_ACCESS_TOKEN, META_PAGE_ID |
lançar no Meta |
| Telegram | TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID |
notificações |
Sem as credenciais de Ads o sistema sobe e gera campanhas normalmente — só falha no momento do lançamento, com erro explícito.
Tudo abaixo de /webhook exige Authorization: Bearer <DASHBOARD_SECRET>.
| Método | Rota | Descrição |
|---|---|---|
POST |
/webhook/{webhook_secret} |
Recebe o artigo do WordPress (auth por HMAC, não Bearer) |
GET POST |
/sites/ |
Lista e cadastra sites |
GET PATCH |
/sites/{id} |
Detalhe e edição |
GET |
/campaigns/ |
Lista campanhas |
GET |
/campaigns/{id} |
Detalhe |
POST |
/campaigns/{id}/approve |
Aprova e enfileira o lançamento |
POST |
/campaigns/{id}/reject |
Rejeita |
POST |
/campaigns/{id}/pause |
Pausa |
GET |
/metrics/overview |
KPIs agregados |
GET |
/metrics/campaign/{id} |
Série temporal da campanha |
GET |
/metrics/articles |
Desempenho por artigo |
- Webhook: HMAC-SHA256 por site, header
X-AfiliBot-Signature: sha256=<hash>. - Dashboard/API: um único Bearer token compartilhado (
DASHBOARD_SECRET). Não há usuários, sessões nem tela de login — adequado só para uso pessoal atrás de rede confiável. Exposto na internet, isso precisaria de autenticação real. - O
docker-compose.ymlpublica Postgres (5432) e Redis (6379) no host. Conveniente para desenvolver, remova essas portas antes de qualquer deploy.
- Nunca rodado ponta a ponta contra contas reais.
- Sem testes automatizados.
- Sem migrations (
create_allno boot). - Dependências de 2024; as APIs de Google Ads e Meta provavelmente já mudaram de versão.
- Auth de token único, sem multiusuário.
- Textos da interface e da documentação em português.
USAGE.md— guia de uso, fluxo detalhado, páginas do dashboardDEPLOY.md— arquitetura, deploy, reverse proxy
MIT.
O plugin WordPress em wp-plugin/afilibot/ declara GPL-2.0-or-later no cabeçalho, como
exige o diretório oficial de plugins do WordPress.