Ir para o conteúdo

Robô Updater — Worker veggi-meta-updater

O robô que alimenta tudo. Busca Meta, RD CRM, VTEX e Google Ads, calcula os KPIs e grava um JSON único no KV. A dashboard e o Consultor só leem o que ele deixou pronto.

Item Valor
Worker veggi-meta-updater
URL veggi-meta-updater.veggiageral.workers.dev
Código worker/src/index.js (1.682 linhas)
KV binding VEGGI_DATA — 02f925d798f44173b1f0f2b9ea45c4db
Variável RECENT_MONTHS = 4
Secrets META_TOKEN, RD_CRM_TOKEN, UPDATE_KEY, credenciais VTEX

Dois crons, de propósito

crons = ["30 8 * * *", "0 9 * * *"]
Horário UTC Brasília O que faz
08:30 05:30 Lê os pedidos da VTEX
09:00 06:00 Busca Meta + CRM e publica a dashboard já com esses pedidos

Por que separado

A Cloudflare limita chamadas externas por execução, e juntas as duas tarefas estouravam o teto — a conta B2B chegou a sumir da dashboard por isso. Não junte os dois crons de volta.

Rotas

Todas exigem ?key=UPDATE_KEY, exceto /carrinho.

Endereço base

https://veggi-meta-updater.veggiageral.workers.dev

As rotas abaixo são o caminho depois desse endereço.

Rota O que faz
/update Dispara a rodada completa. Atalho: atualizar-online.bat
/google-ads POST — o script do Google Ads publica aqui todo dia. GET mostra o que chegou
/carrinho Público de propósito — quem chama é o site da loja
/vtex-ingest Leitura da VTEX sob demanda
/vtex-backfill Varre o histórico. Cada chamada tem 50 sub-requisições próprias, então dá para "comer" o histórico chamando várias vezes seguidas
/vtex-diagnostico Só lê pedidos e conta quantos vieram com UTM. Não grava nada
/vtex-pedidos Lista pedido a pedido — para separar bot de cliente real na unha
/vtex-teste Testa a conexão. Diz onde está o erro sem revelar segredo (só formato e tamanho)

O /carrinho é público e tem que continuar assim

Quem chama é o site da loja, no navegador do cliente. Qualquer segredo colocado ali apareceria no código-fonte da página. Usar a chave do robô seria grave: ela dispara atualização e abre o diagnóstico de pedidos.

O que ele monta

  1. Meta Graph API v21.0 — insights por campanha nas 4 contas; conjuntos, anúncios, targeting e criativo só da B2B.
  2. Meta, série diária — 90 dias mais duas janelas de 7 dias fechadas, para a aba Diário. Roda em bloco try próprio: se falhar, só o Diário fica sem dado.
  3. RD CRM — negociações dos últimos RECENT_MONTHS=4 meses, mescladas com crm_history, já marcando quais passaram da carência de 20 dias.
  4. VTEX — pedidos com a UTM lida do marketingData.
  5. Google Ads — o que o script da conta publicou em /google-ads.

O CRM real

Uma negociação conta como "Facebook pago" se a origem for FB pago ou se o campo personalizado "Campanha Meta" estiver preenchido. Agrega por campanha, conjunto e anúncio.

Contas de anúncio lidas

479831619185445 · 324110141957198 (B2C) · 488240501947012 (B2B) · 1302256973566265

O detalhamento por conjunto e anúncio é só da B2B.

O KV VEGGI_DATA

Chave Quem grava Conteúdo
latest Este worker Tudo que a dashboard e o consultor mostram
crm_history Este worker Histórico mensal do CRM, mesclado a cada rodada
consultor_memory Worker MCP Memória do consultor — este worker não toca
cd "C:\Projetos\veggi-ads-dashboard\worker"
npx wrangler kv key get latest --binding=VEGGI_DATA --remote

Cruzamento por nome

orders.byCampaign/byAdset/byAd e sessoes.* são chaveados pelo mesmo normCamp() (decodifica URL, +→espaço, minúsculas). Mudar a normalização de um lado mata o cruzamento em silêncio — não dá erro, os números só param de bater.

Deploy

cd "C:\Projetos\veggi-ads-dashboard\worker"
npx wrangler deploy                    # atalho: publicar-robo.bat
npx wrangler secret put META_TOKEN
npx wrangler secret put RD_CRM_TOKEN
npx wrangler secret put UPDATE_KEY     # atalho: definir-chave-robo.bat

Diagnóstico

Sintoma Causa provável e ação
Uma conta sumiu da dashboard Teto de sub-requisições da Cloudflare estourado. Foi por isso que os crons foram separados — conferir se alguém os juntou
Dados parados no dia anterior O cron não rodou. Disparar /update?key=... e ver os logs em Workers → Observability
CRM real zerado RD_CRM_TOKEN expirado, ou o campo "Campanha Meta" parou de ser preenchido nas LPs
Pedidos da VTEX não aparecem Rodar /vtex-teste?key=... — ele aponta onde está o erro sem revelar segredo
Gasto na Meta mas nenhum pedido etiquetado Anúncio sem UTM. Confirmar com /vtex-diagnostico?key=..., que conta quantos pedidos vieram com UTM
Google Ads sem dados O script na conta do Google parou. Ver Rastreamento
Aba Diário sem dado, resto OK Comportamento esperado: a série diária tem bloco try isolado