Tracking en Tiempo Real
Sistema de seguimiento en vivo usando WebSocket. Los clientes pueden rastrear sus pedidos sin autenticación desde que salen de cocina hasta que llegan a su puerta.
💡 Clave: El sistema usa WebSocket (Socket.IO) para actualizaciones instantáneas. Sin recargar la página, el estado del pedido se actualiza automáticamente en todos los dispositivos conectados.
¿Cómo Funciona el Tracking?
URL de Seguimiento Pública
/[slug]/track/[código-pedido]Ejemplo: https://mirestaurante.com/mi-negocio/track/ORD-2025-001
- ✓ Acceso sin login: El cliente solo necesita el código del pedido
- ✓ Actualizaciones automáticas: WebSocket mantiene la página sincronizada
- ✓ Mobile-friendly: Optimizado para teléfonos móviles
- ✓ Timeline visual: Muestra el progreso paso a paso
Tecnología: WebSocket (Socket.IO)
Arquitectura de Conexión
Namespace:
/ordersRooms (Salas):
store:[tenantSlug]- Todos los pedidos de una tiendaorder:[código]- Seguimiento de un pedido específicocadete:[id]- Notificaciones a un cadete específico
Eventos Principales:
order:statusCambio de estado del pedidoorder:assignedPedido asignado a cadeteorder:deliveredPedido entregadocadete:statusCadete online/offlineEstados del Pedido (Timeline)
Pedido Recibido
Estado: pending
Tu pedido ha sido recibido y está esperando confirmación.
Confirmado
Estado: confirmed
El restaurante confirmó tu pedido.
En Preparación
Estado: preparing
La cocina está preparando tu pedido.
Listo
Estado: ready
Tu pedido está listo y esperando al repartidor.
En Camino
Estado: out_for_delivery
El repartidor está en camino a tu dirección.
Entregado
Estado: delivered
Tu pedido ha sido entregado. ¡Buen provecho!
Flujo de Actualización en Tiempo Real
Ejemplo: Cliente rastreando su pedido
1. Cliente abre página de tracking
GET /mi-negocio/track/ORD-2025-001- Carga el estado actual del pedido desde BD
- Establece conexión WebSocket
- Se une a la sala
order:ORD-2025-001
2. Cocina marca pedido como "Listo"
PATCH /orders/:id { status: "ready" }- Backend actualiza la base de datos
- Backend emite evento WebSocket
socket.to('order:ORD-2025-001').emit('order:status', { status: 'ready' })3. Página del cliente se actualiza automáticamente
- Timeline avanza al paso "Listo"
- Sin recargar la página
- Instantáneo (milisegundos)
4. Admin asigna cadete
PATCH /orders/:id/assign-cadete- Backend asigna y cambia estado a "out_for_delivery"
- Emite evento a múltiples salas
socket.to('order:ORD-2025-001').emit('order:status', { status: 'out_for_delivery' })5. Página del cliente actualiza nuevamente
- Timeline avanza a "En Camino"
- Puede mostrar nombre/vehículo del cadete
Beneficios del Sistema WebSocket
✅ Para Clientes
- • Información siempre actualizada
- • No necesitan recargar la página
- • Experiencia fluida y moderna
- • Reduce ansiedad de espera
✅ Para el Restaurante
- • Menos llamadas preguntando por estado
- • Transparencia total del proceso
- • Mejor experiencia del cliente
- • Menos costos de servidor (vs polling)
Compartir el Link de Tracking
Hay varias formas de compartir el enlace de seguimiento con el cliente:
1. Email Automático
Cuando el pedido es confirmado, el sistema puede enviar un email con el link de tracking.
2. WhatsApp Manual
Copia el link y envíalo por WhatsApp al cliente.
Hola! Tu pedido #ORD-2025-001 está en proceso. Rastréalo aquí: https://...3. SMS (si configurado)
Integración con servicio SMS para enviar el link automáticamente.
Consideraciones Técnicas
Reconexión Automática
Si el cliente pierde conexión (ej: entra en un túnel), Socket.IO se reconecta automáticamente cuando vuelve la señal.
Fallback a HTTP Polling
En redes restrictivas que bloquean WebSocket, Socket.IO automáticamente cambia a long-polling HTTP.
Sin Autenticación Requerida
Las páginas de tracking son públicas. Solo necesitas el código del pedido (que solo conoce el cliente).
Mejores Prácticas
✅ Comparte temprano: Envía el link de tracking cuando confirmes el pedido, no cuando esté listo.
✅ Actualiza rápido: Cambia los estados apenas ocurran para mantener al cliente informado.
✅ Comunicación clara: Los nombres de estados deben ser fáciles de entender para clientes.
¿Te fue útil este artículo?