Saltar a contenido

Notificaciones Socket - Incidencias

Documentación de eventos Socket.IO para notificaciones en tiempo real de incidencias de fichaje.

Evento Global

El backend emite un único evento global incident_notification en la sala correspondiente. El frontend distingue el tipo por el campo type en la data.

socket.on("incident_notification", (data) => {
  switch (data.type) {
    case "new_incident":
      // Nueva incidencia creada
      break;
    case "admin_reply":
      // Admin respondió
      break;
    // ...
  }
});

Salas de Escucha

Sala Quién se une Descripción
admins Usuarios con rol admin (automático) Recibe todas las notificaciones de incidencias
employee:{id} Empleado (automático al hacer join) Recibe respuestas de admin y cambios de estado
incident_chat:{id} Usuario que entra al chat Recibe mensajes en tiempo real del chat

Tipos de Notificación

type Destino Descripción
new_incident admins Nueva incidencia creada
new_message admins, incident_chat Empleado envió mensaje
incident_resolved admins Incidencia cerrada
admin_reply employee, incident_chat Admin respondió al hilo
status_changed employee Cambio de estado de incidencia

Payload

interface IncidentNotificationPayload {
  type: "new_incident" | "new_message" | "admin_reply" | "status_changed" | "incident_resolved";
  incidentId: number;
  employeeId?: number;
  employeeName?: string;
  incidentType?: string;
  message?: string;       // Mensaje completo (solo en chat)
  preview?: string;       // Primeros 100 caracteres
  senderType?: "user" | "admin";
  status?: string;
  reviewStatus?: string;
  timestamp: Date;
  data?: {
    checkInType?: "start" | "end";
    adminName?: string;
    changedBy?: "admin" | "system";
  };
}

Cómo Conectarse

// 1. Conectarse al socket
const socket = io("https://api.ejemplo.com");

// 2. Unirse a salas (auto-join a "admins" si tiene rol)
socket.emit("join", { employeeId: 123 });

// 3. Unirse a chat de incidencia específica
socket.emit("join_incident_chat", { incidentId: 456 });

// 4. Escuchar notificaciones
socket.on("incident_notification", (data) => {
  console.log(`[${data.type}]`, data);
});

// 5. Salir del chat de incidencia
socket.emit("leave_incident_chat", { incidentId: 456 });

Eventos de Chat

Además de incident_notification, se emiten estos eventos en la sala del chat:

Evento Descripción
user_joined_chat Usuario se unió al chat
user_left_chat Usuario salió del chat