Cada incidente tiene un chat. Quien lo puede ver lo lee; quien tiene incidents.comment (todos los roles) escribe, también en incidentes terminados, porque un mensaje no cambia el estado. Los mensajes no se editan: el propio se puede borrar durante 5 minutos, para corregir un error sin cambiar lo que otros ya leyeron.
Paso a paso
- PersonaAbre el chat del incidente
Botón "Chat (N)" en la ficha del detalle, o un mensaje del historial (abre el chat en ese mensaje).
?conversacion=1también lo abre. Mientras está abierto, los avisos de mensajes de ese incidente se dan por leídos. - NavegadorPide GET /incidents/{id}/comments
50 por página, del más reciente hacia atrás; "Ver anteriores" pide la página siguiente con
before. - PersonaEscribe y pulsa Enter
Hasta 2.000 caracteres. Shift + Enter hace un salto de línea.
- NavegadorEnvía POST /incidents/{id}/comments
- API¿Menos de 20 mensajes en el minuto?
Límite
comments: 20 por minuto por persona. - API¿Lo ve, no está eliminado y puede comentar?
- Base de datosGuarda el mensaje
En
incident_comments, con FK al incidente y a quien escribe. El detalle cuenta los mensajes (comments_count). - Cola y avisosEmite incident.commented y crea avisos
Tras confirmar. Recibe el aviso quien creó el incidente, el asignado y quienes ya escribieron, nunca quien escribió. Hay un solo aviso de mensajes sin leer por incidente y persona: si ya existe, sube su contador.
- ParticipantesEl mensaje aparece en sus pantallas y en la campana
- PersonaBorra un mensaje propio
El botón solo aparece en los propios y durante 5 minutos (la API lo dice en
actionsde cada mensaje). - API¿Es suyo, no está borrado y tiene menos de 5 min?
- Base de datosLo marca como borrado
El texto se vacía y queda la fecha de borrado; un CHECK de la tabla exige que un mensaje tenga texto o esté borrado, nunca ambos.
Borrar un mensaje (pasos 10 a 12) es un camino aparte, con su propio inicio en la segunda fila del carril Persona. El borrado también se avisa en tiempo real, para que desaparezca de las pantallas abiertas.
Qué ve la persona en cada error
| Código | HTTP | Cuándo | Mensaje en pantalla |
|---|---|---|---|
TOO_MANY_REQUESTS | 429 | Más de 20 mensajes en un minuto | Hiciste demasiados intentos seguidos. Espera {wait} y vuelve a intentarlo. |
COMMENT_NOT_OWN | 403 | Se intenta borrar un mensaje de otra persona | Solo quien escribió un mensaje puede borrarlo. |
COMMENT_DELETE_EXPIRED | 409 | Pasaron más de 5 minutos | Ya pasaron más de 5 minutos desde que escribiste este mensaje, así que no se puede borrar. Si hace falta, escribe una aclaración. |
COMMENT_ALREADY_DELETED | 409 | El mensaje ya estaba borrado | Este mensaje ya estaba borrado. |
RESOURCE_NOT_FOUND | 404 | No puede ver el incidente o está eliminado | No encontramos lo que buscas. Puede que se haya eliminado o que no tengas acceso. |
Dónde está en el código
IncidentConversationyCommentRules: leer, escribir y la ventana de 5 minutos.DatabaseIncidentComments: guarda y emiteIncidentCommented.CommentRequesty el límitecommentsenIncidentServiceProvider.useConversationy el panel del detalle.- Explicación del módulo: Módulo Incidents. Avisos: Notificaciones a participantes.