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 |