Infraestrutura Edge Server-Side

Meta CAPI Gateway Zero Custo em Cloudflare Workers

Código oficial de Cloudflare Worker para rodar a API de Conversões do Meta no plano gratuito (até 100.000 requisições/dia), eliminando servidores pagos de terceiros.

Comparativo de Economia

Stape.io / AWS: US$ 20 a US$ 100/mês por cliente (R$ 1.200 a R$ 6.000/ano desperdiçados em infraestrutura de servidores).

Cloudflare Workers: R$ 0,00 (Plano Free inclui 100.000 requisições diárias com latência global abaixo de 20ms).

🚀 Edge Hashing: O worker criptografa e-mails e telefones em SHA-256 diretamente na borda da CDN antes de enviar à API do Meta.

Código worker.js (Edge Meta CAPI)

Cloudflare Workers v2026
export default { async fetch(request, env) { if (request.method !== 'POST') { return new Response('Meta CAPI Gateway Active', { status: 200 }); } try { const data = await request.json(); const pixelId = env.PIXEL_ID || data.pixel_id; const accessToken = env.ACCESS_TOKEN || data.access_token; // Hash SHA-256 nativo via Web Crypto async function hash(str) { if (!str) return undefined; const buf = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(str.trim().toLowerCase())); return Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join(''); } const clientIp = request.headers.get('cf-connecting-ip'); const userAgent = request.headers.get('user-agent'); const payload = { data: [{ event_name: data.event_name, event_time: Math.floor(Date.now() / 1000), event_id: data.event_id, event_source_url: data.event_source_url, action_source: "website", user_data: { em: await hash(data.email), ph: await hash(data.phone), client_ip_address: clientIp, client_user_agent: userAgent, fbp: data.fbp, fbc: data.fbc }, custom_data: data.custom_data }] }; const metaUrl = `https://graph.facebook.com/v19.0/${pixelId}/events?access_token=${accessToken}`; const metaRes = await fetch(metaUrl, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); return new Response(await metaRes.text(), { status: metaRes.status, headers: { 'Content-Type': 'application/json' } }); } catch (err) { return new Response(JSON.stringify({ error: err.message }), { status: 500 }); } } };
Falar no WhatsApp