Soporte/Guías de proxy
Guías de proxy

Proxy de Flowsery Analytics con FastAPI

Enruta Flowsery Analytics a través de tu servidor FastAPI para evitar la interferencia de los adblockers y capturar datos de visitantes más precisos.

1. Instala las dependencias

Terminal
pip install fastapi uvicorn httpx

2. Configura el proxy

Agrega lo siguiente a tu aplicación FastAPI:

Python
from fastapi import FastAPI, Request
from fastapi.responses import Response
import httpx
 
app = FastAPI()
 
def get_client_ip(request: Request) -> str:
    """Resolve the actual visitor IP address"""
    # Prefer Cloudflare's CF-Connecting-IP if available
    if cf_connecting_ip := request.headers.get("cf-connecting-ip"):
        return cf_connecting_ip
 
    # Then X-Real-IP
    if x_real_ip := request.headers.get("x-real-ip"):
        return x_real_ip
 
    # Fall back to X-Forwarded-For (first entry)
    if x_forwarded_for := request.headers.get("x-forwarded-for"):
        return x_forwarded_for.split(",")[0].strip()
 
    # Last resort: direct connection host
    return request.client.host if request.client else ""
 
@app.get("/js/main.js")
async def proxy_script():
    async with httpx.AsyncClient() as client:
        response = await client.get('https://cdn.flowsery.com/main.js')
        return Response(
            content=response.content,
            media_type='application/javascript',
            headers={
                'Cache-Control': 'public, max-age=31536000'
            }
        )
 
@app.post("/api/track")
async def proxy_events(request: Request):
    body = await request.json()
 
    # Determine the origin from the request or construct it from the base URL
    origin = request.headers.get('origin') or str(request.base_url).rstrip('/')
 
    # Resolve visitor IP for accurate geolocation
    client_ip = get_client_ip(request)
 
    async with httpx.AsyncClient() as client:
        headers = {
            'Content-Type': 'application/json',
            'User-Agent': request.headers.get('user-agent'),
            'Origin': origin,
            'x-forwarded-for': client_ip
        }
 
        if client_ip:
            # CRITICAL: Flowsery reads this as the authoritative visitor IP. Without it, every visitor resolves to your server's region.
            headers['x-flowsery-real-ip'] = client_ip
 
        response = await client.post(
            'https://analytics.flowsery.com/analytics/events',
            json=body,
            headers=headers
        )
        return Response(
            content=response.content,
            media_type='application/json',
            status_code=response.status_code
        )
 
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

Nota: Si tu aplicación ya tiene un endpoint /api/track, usa el atributo data-api en la etiqueta del script de Flowsery Analytics para dirigir los eventos a otra ruta. Por ejemplo, data-api="/flowsery-events" enviará los datos a /flowsery-events.

Importante: Si todos los visitantes aparecen en la misma ubicación en tu panel, confirma que el encabezado x-flowsery-real-ip se esté estableciendo con la IP real del visitante, no con la del servidor proxy, al reenviar solicitudes al endpoint /events de Flowsery Analytics. Si FastAPI está detrás de otro proxy, como Cloudflare o Vercel, request.client.host será la IP del proxy ascendente, así que debes leer directamente cf-connecting-ip o x-real-ip.

3. Modifica la etiqueta del script

Reemplaza el snippet original de Flowsery Analytics por la versión con proxy:

HTML
<script defer data-fl-website-id="flid_******" src="/js/main.js"></script>

4. Despliega

Después de desplegar tu servidor, la configuración del proxy se activa automáticamente.

Confirmar que funciona

Para validar que el proxy funciona correctamente:

  1. Navega a tu sitio web.
  2. Abre las herramientas de desarrollo del navegador y ve a la pestaña Network.
  3. Verifica que las solicitudes de analítica se sirvan desde tu dominio y no desde analytics.flowsery.com.