📦 Tracking de pedido en tiempo real
Archivos: rifkings-control-center/src/app/shopify/[orderId]/{page.tsx,TrackingLive.tsx,AutoRefresh.tsx}, src/app/api/shopify/orders/[id]/tracking/route.ts, src/lib/shopify.ts (trackOneGLS) · Estado: ✅ funcionando
Qué hace
En la página de un pedido (Pedidos + Envíos → abrir pedido), el estado del envío se muestra EN VIVO consultando GLS real, y se actualiza solo sin recargar ni salir de la app.
Cómo funciona
1. trackOneGLS(number) en shopify.ts llama por SOAP al endpoint Tracking de ASMRed (GLS) y devuelve {status, label, lastEvent} con los eventos reales de la agencia.
2. La ruta /api/shopify/orders/[id]/tracking saca el tracking_number del pedido (Shopify) y consulta GLS en vivo.
3. TrackingLive.tsx (cliente) hace polling a esa ruta cada 20s y pinta el estado + último evento + indicador "EN VIVO".
4. AutoRefresh.tsx refresca los datos del pedido (pago, fulfillment) cada 30s vía router.refresh().
Datos/APIs
Shopify Admin API (pedido + fulfillments) + GLS ASMRed (GLS_GUID, GLS_WSDL).
Cómo probarlo
curl -s "http://localhost:3000/api/shopify/orders/<ORDER_ID>/tracking"
Debe devolver gls: {status,label,lastEvent} si el pedido tiene número de seguimiento.
Si se rompe / recuperar
- Si no aparece estado: el pedido no tiene
tracking_number(envío sin tracking) — el componente lo indica. - GLS lento/caído: el polling reintenta solo en el próximo ciclo.
Cómo replicarlo
Exponer trackOneGLS → ruta API que une Shopify+GLS → componente cliente con setInterval que hace fetch a la ruta. Misma idea sirve para cualquier transportista con API de tracking.