Ir para o conteúdo

Cloudflare — Workers, Pages e KV

O Cloudflare é a camada de entrada e entrega do ecossistema Veggi.

Componentes

Componente Nome Domínio Papel
Worker nfe nfe@nfe.grupoveggi.com.br Recebe e-mails com NF-e e repassa XML para o n8n
Worker drive drive.grupoveggi.com.br Serve portal de download e API de token
Pages connect-hub hub.grupoveggi.com.br Portal React onde o cliente visualiza e seleciona as fotos
KV Namespace DOWNLOAD_STORAGE Cache de tokens de acesso (TTL 45 dias)

Worker: nfe

Trigger: E-mail recebido em nfe@nfe.grupoveggi.com.br
Variável secreta: NFE_WEBHOOK_URL — URL do webhook n8n

Parseia o MIME do e-mail, extrai os anexos XML e faz POST para o webhook do n8n.

Warning

O Worker nunca chama setReject(). Mesmo em caso de erro, o e-mail é aceito e o erro é apenas logado — evita bounces no ERP.

Worker: drive

Domínio: drive.grupoveggi.com.br
Variáveis: DRIVE_SECRET = veggi-drive-2026-xpto · KV binding: DOWNLOAD_STORAGE

Rota Método Função
/api/token/{token} GET Retorna dados do pedido pelo token (usada pelo Pages)
/file-proxy?path=... GET Proxy reverso para arquivos no Backblaze B2 (cache 1h)
/entrega POST Recebe seleção de arquivos, gera token temporário de download
/{token} GET Página HTML com botão para baixar ZIP
/{token}?download=1 GET Executa download do ZIP no navegador (client-zip)

Warning

Mover DRIVE_SECRET de "Texto não criptografado" para "Secreto" no painel do Cloudflare.

Pages: connect-hub

Repositório: veggidocs/seller-share-vault · Branch: main
Deploy: automático a cada push no main (~1 minuto)

Para atualizar o frontend: fazer push no branch main. O deploy ocorre automaticamente.

KV: DOWNLOAD_STORAGE

Namespace ID: 837948d5f1f64663850322a0ef69b9e3

Estrutura de um registro (chave = token, TTL = 45 dias):

{
  "token": "abc123xyz...",
  "numero_nf": "70570",
  "arquivos": [
    {
      "nome": "foto1.jpg",
      "path": "pasta/foto1.jpg",
      "nome_produto": "Pijama Turma da Bia"
    }
  ],
  "expires_at": "2025-05-01T00:00:00.000Z",
  "total_fotos": 5,
  "cliente_nome": "Nome do Cliente",
  "view_url": "https://hub.grupoveggi.com.br/?token=abc123xyz...",
  "zip_url": "https://drive.grupoveggi.com.br/abc123xyz..."
}

Diagnóstico Cloudflare

Sintoma Causa provável e ação
NF-e enviada mas n8n não recebe Verificar logs do Worker nfe em Cloudflare → Observability → Logs
Link do cliente retorna 404 Token não existe ou expirou no KV. Usar WF2 (Revalidação)
Download ZIP falha Verificar se os paths no KV batem com a estrutura do bucket B2
Erro de autenticação no /entrega Header X-Drive-Secret errado. O Pages deve enviar DRIVE_SECRET = veggi-drive-2026-xpto
Portal não abre / erro 500 Verificar último deploy em Workers & Pages → connect-hub → Implantações