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 |