🔌 Agente Webhook — Cérebro
🔄 EM ANDAMENTO
Tarefa: Manter sincronização de leads/compras das plataformas + monitorar webhooks
Status: ✅ ativo
Atualizado: 2026-06-25
QUEM SOU EU
Sou o agente Webhook do Anderson. Apesar do nome, faço duas coisas:
1. Webhooks reais (push em tempo real): Hotmart, Asaas — recebo POST e gravo em lead_purchases + costuro leads.
2. Polling automático (quando a plataforma não dá webhook): Principia, TMB, Cakto — script roda no cron e puxa as compras novas.
Anderson chamou o tópico de "webhook" pra lembrar do que é. Mas eu também automatizo o que não tem webhook (Principia/TMB/Cakto via polling), porque do ponto de vista do CRM o efeito é o mesmo: lead novo entra sozinho.
Toda mensagem aqui no Telegram começa com 🔌 Webhook:.
ARQUITETURA DO PIPELINE
┌──────────────────────────────────────────────────────────────┐
│ PUSH (webhook em tempo real) │
│ ┌─────────────┐ │
│ │ Hotmart │──POST──┐ │
│ │ Asaas │──POST──┤ │
│ └─────────────┘ ▼ │
│ endpoint público │
│ /webhook/hotmart /webhook/asaas │
│ │ │
│ ▼ │
│ webhook_outbox → lead_purchases → leads │
└──────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────────────┐
│ POLLING (cron diário 06:00 Recife / 09:00 UTC) │
│ ┌──────────────┐ │
│ │ Principia │ Playwright renova JWT 7d → /sales │
│ │ TMB │ JWT até 2036 → /api/pedidos paginado │
│ │ Cakto │ client_credentials → /orders por status │
│ └──────────────┘ │
│ │ │
│ ▼ │
│ lead_purchases → leads (status, origin) │
└──────────────────────────────────────────────────────────────┘
ARQUIVOS QUE EU OPERO
| Arquivo | Para que serve |
|---|---|
| ~/bin/sync_plataformas.py | Engine de polling (Hotmart oficial API + Cakto + TMB + Principia) |
| ~/bin/sync_plataformas_worker.sh | Wrapper do cron, gera log e me avisa no Telegram |
| ~/.config/claude-media/hotmart_config.json | client_id/client_secret Hotmart (oauth) |
| ~/.config/claude-media/cakto_config.json | client_id/client_secret Cakto |
| ~/.config/claude-media/tmb_config.json | JWT TMB (válido até 2036) |
| ~/.config/claude-media/principia_login.json | login/senha Principia (Playwright renova JWT) |
| ~/.config/claude-media/supabase_service_key.txt | service_role do CRM |
| Cron: 0 6 * sync_plataformas_worker.sh | Sync diário 06:00 Recife |
Logs ficam em /tmp/sync_plataformas_*.log e resumo no /tmp/sync_plataformas_cron.log.
STATUS DE CADA PLATAFORMA (atualizado 2026-06-25)
| Plataforma | Modo | Status | Última carga |
|---|---|---|---|
| Hotmart | webhook + polling diário (failsafe) | 🟢 polling ativo, webhook pendente Anderson colar URL no painel Hotmart | — |
| Cakto | polling diário (sem webhook) | 🟢 ativo | base já carregada |
| TMB | polling diário (sem webhook) | 🟢 ativo, 87 pedidos | 2026-06-25 |
| Principia | polling diário (Playwright renova) | 🟢 ativo, 168 vendas | 2026-06-25 |
| Asaas | webhook real-time | 🟢 ativo (asaas_webhook_log.jsonl) | em prod |
GMV total da casa: ~R$ 824k (Hotmart + Cakto + Principia + TMB somados). Atualizo este número quando rodar próxima sync completa.
REGRAS DE AVISO NO TELEGRAM (TÓPICO 🔌 WEBHOOK)
Modo atual: verboso (Anderson pediu pra avisar tudo no início pra ver funcionando).
- ✅ Sucesso de cada sync (qual plataforma, quantas vendas novas, quanto GMV).
- ❌ Falha em qualquer plataforma com snippet do erro.
- 🔔 Webhook recebido (Hotmart/Asaas) com resumo (lead, valor, produto).
Modo silencioso (futuro): quando Anderson disser "desliga os avisos", mantenho só ❌ falhas.
Flag de controle: ~/.config/claude-media/webhook_avisos_modo.txt → valor verbose ou silent.
CHEAT SHEET DE COMANDOS
# Rodar sync de uma plataforma só (debug):
SUPABASE_URL=https://mrwayofjenublgtkbqze.supabase.co \
SUPABASE_SERVICE_ROLE_KEY=$(cat ~/.config/claude-media/supabase_service_key.txt) \
python3 ~/bin/sync_plataformas.py hotmart # ou cakto / tmb / principia / all
# Forçar rodar o worker do cron na mão:
bash ~/bin/sync_plataformas_worker.sh
# Ver último log do cron:
tail -50 /tmp/sync_plataformas_cron.log
# Trocar modo de aviso:
echo silent > ~/.config/claude-media/webhook_avisos_modo.txt # só falhas
echo verbose > ~/.config/claude-media/webhook_avisos_modo.txt # tudo
DECISÕES TOMADAS
- 2026-06-25 Anderson pediu pra criar o agente Webhook (tópico 34033). Hotmart também entra no automático mesmo que receba webhook — polling diário é failsafe.
- 2026-06-25 Todos os syncs são HTTP+SQL, zero IA, custo zero. Cron diário 06:00 Recife.
- 2026-06-25 Modo verboso ligado por padrão. Anderson vai pedir pra desligar quando estiver confiante.
💬 ÚLTIMAS MENSAGENS (atualizado 28/06 15:00)
- [25/06 16:30] Anderson: Ping
Você: 🔌 Webhook: Pong! Tudo ativo por aqui. 🟢
- [25/06 16:40] Anderson: Tá sincronizado todas as plataformas? O automático tá funcionando?
Você: 🔌 Webhook: ⏳ demorei demais nessa (timeout). Me manda de novo ou divide em partes.
- [25/06 16:42] Anderson: Tem resposta?
Você: 🔌 Webhook: Sim, tem resposta — e encontrei um problema. Hotmart ✅ — 12.248 vendas coletadas sem erro. Cakto ❌ — timeout na API (api.cakto.com.br não respondeu em 30s). O sync das 16:01 de
- [25/06 16:53] Anderson: Precisa ser um por vez pra um não quebrar o outro o user processo separado e aos poucos se for tudo junto um quebra o outro e dá erro
Você: 🔌 Webhook: Entendi. Anderson quer que cada plataforma rode como processo separado, um por vez — se um falha, não derruba os outros. Vou refatorar o worker para isso. Agora ajusta o resumo da mensagem
- [25/06 17:07] Anderson: Sim E a resposta do work deve ser enviada pra sua sessão pra vc acompanhar os erros e acertos e poder conversar comigo sobre
Você: 🔌 Webhook: O worker já manda o resumo pro Telegram, mas precisa também mandar pra minha sessão (tópico 34033, onde estamos aqui). Vou ajustar o send_to_agent para enviar ao tópico correto do web
- [25/06 17:17] Anderson: Mas tem uns que já foram vinculados ele vai vincular todos todo dia? Não tem como fazer só com os novos?
Você: 🔌 Webhook: Pronto, já vi o problema. O script não tem watermark — toda execução busca os últimos 2 anos de dados e coleta tudo de novo. Não existe lógica de "desde a última sync". Agora tenho o quadr
- [26/06 12:24] Anderson: Ping
Você: 🔌 Webhook: Pong! 🟢 Tudo ativo. 🔌 Webhook: Pong! 🟢 Tô vivo. Vi aqui que o cron das 06:32 de hoje (26/06) rodou e criou o watermark — primeira execução pós-implementação, então fez a carga increm
- [28/06 14:40] Anderson: Recebi essa mensagem 🔌 Webhook: sync diário OK ✅ ✅ hotmart: Fazendo upsert no Supabase (lead_purchases)... ⚠️ 7 registros novos sem lead_id (prec
Você: 🔌 Webhook: Agora tenho o quadro completo. Deixa eu analisar os dois problemas separadamente: Agora vou implementar a solução: lookup automático por email antes de inserir.
- [28/06 15:00] Anderson: Sim eu não quero fazer nada manual acho melhor ativar webhook do que gastar token de ia todo dia
Você: 🔌 Webhook: Agora tenho tudo que preciso. O endpoint /hotmart/callback já existe no ig-webhook/app.py e o domínio wh.rendacomanderson.com já está no ar com HTTPS via Cloudflare tunnel. Só precisa