Notificaciones

De Plataforma COA Crowd
Saltar a: navegación, buscar

Dentro del header se encuentra un icono con una campana, esta es la sección de notificaciones para el usuario en sesión, mediante este sistema el usuario puede recibir notificaciones que le informen diferentes sucesos.

La forma en como este componente funciona es mediante un sistema pull activo para obtener las notificaciones, cada 50segundos se hace una petición al servicio layer-api-handler-service, que es aquí donde se crean, gestionan y se desechan las notificaciones, el sistema de notificaciones dentro de este servicio esta diseñado para crear notificaciones de forma individual para cada usuario.

Las notificaciones son almacenadas en la base de datos Redis, donde cada usuario tiene su propia cola de notificaciones.

Wiki-notificaciones-01.png

Las acciones que pueden detonar la creación de una notificación y que esta le llegue a un usuario son las siguientes:

  • Des asignación de una tarea por inactividad: cuando un usuario se encuentra dentro de una tarea y este se queda inactivo por un periodo determinado, el header tiene la capacidad de detectarlo y des asignarle la tarea al usuario, esto con la finalidad de que la tarea vuelva a estar disponible y otro usuario la pueda tomar y sea resuelta. Cuando esto pasa se crea una notificación que le indica al usuario que la tarea en la que se encontraba le fue des asignada por inactividad.
  • Des asignación manual de una tarea: Si un usuario se encuentra dentro de una tarea y un usuario con acceso al monitor de tareas, entra al detalle de una tarea y le des asigna la tarea al primer usuario, se creara una notificación para el usuario con la tarea avisando le que le fue des asignada la tarea y lo redireccionara al Listener, donde estará a la espera de una nueva tarea.

Wiki-notificaciones-02.png

Al presionar la campana del header, aparecerá una nueva ventana donde se mostrara una lista de notificaciones, las cuales cuentan con una X en la parte superior derecha de cada notificación, la cual sirve para eliminar cada notificación correspondientemente. También existe un botón con dos flechas en circulo, la funcionalidad de este botón es obtener una actualización de las notificaciones del usuario al instante, ya que de forma pasiv se buscan nuevas notificaciones cada 50 segundos, pero si se desea obtener las notificaciones en el momento, al presionar el botón se actualizara la lista de notificaciones.

Estructura de una notificacion

Las notificaciones tienen una estructura definida, que es la que se muestra en el siguiente json:

 [
   {
       "id": "7fb15c19-7e07-4f13-80ce-b5fbae7bc878",
       "additionalProperties": {
           "taskId": "s-1-a2295155-8fd3-4164-a138-71fed52c7395",
           "status": 0
       },
       "message": "Se te ha desasignado manualmente la tarea s-1-a2295155-8fd3-4164-a138-71fed52c7395",
       "action": "redirect",
       "active": false,
       "date": "2021-11-26T18:33:39.897+00:00"
   }
 ]

Debido a que los usuarios pueden tener mas de una notificación a la vez, lo que se recibe al consultar las notificaciones de un usuario es un arreglo. Dentro de este arreglo se repite la misma estructura para cada notificación pero cada una con un información diferente, lo componentes de la estructura de la notificación son los siguientes:

  • id: es el identificador único de la notificación.
  • additionalProperties: es información opcional que dependiendo del tipo de notificación puede variar.
  • message: es el texto principal de la notificación, el mensaje que se le quiere dar al usuario.
  • action: este valor de igual manera es opcional, un posible valor para este campo es "redirect", que indica que una vez quye al usuario le llegue esta notificación por primera vez, será refeccionado a algún lugar especificado en el campo additionalProperties, actualmente solo es posible redireccionar al usuario al listener con estatus 0 o 1, para que quede en los estatus no disponible o disponible, dependiendo de a originacion de la notificación.
  • active: este campo indica si la notificación ha sido consumida o no, en el caso de que una notificación tenga el action redirect, esta acción de sacar al usuario de la tarea en la que se encuentra, solamente ocurrirá una vez, cuando el usuario estaba en la tarea y fue redireccionado al listener, si por alguna razón el usuario vuelve a tener esa tarea y no ha desechado la notificación, esta acción no volverá a pasar porque este valor habra cambiado a false, denotando que su efecto ya fue aplicado y no volverá a ocurrir el action.
  • date: fecha y hora en la cual la notificación fue creada.

Creación, obtención, actualización y eliminación

Las notificaciones son gestionadas por el servicio layer-api-event-handler, mediante este sistema de notificaciones se pueden realizar las siguientes acciones para una notificación:

Creación

Para la creación de una notificación se necesita el siguiente endpoint PUT:

/state/add_notification

Ademas necesita el siguiente body:

 {
   "workerId": "823dea19-5b46-433e-9a5e-25f6678d1cd0",
   "data": {
       "message": "tarea des asignada",
       "action": "redirect",
       "additionalProperties": {
           "taskId": "s-1-27091529-319b-485c-bffe-3005d5931550"
       }
   }
 }

Donde en el campo workerId debe de ir el id del usuario al que se le quiere mandar la notificación

Obtención

Para obtener la lista de todas las notificaciones de un usuario se utiliza el siguiente endpoint GET:

/state/get_all_notification?workerId=[id del worker]

Que recibe como único parámetro el id del worker del cual se quiere obtener la lista de notificaciones.

Actualización

En el caso de una notificación con action redirect, en donde se debe ejecutar esta accion y una vez que fue consumida no debe volver a pasar, es necesario modificar una notificación existente para cambiar el campo de active de true a false, para ello se debe utilizar el siguiente endpoint PUT:

/state/modify_notification?workerId=[id del worker]&id=[id de la notificación]

Eliminación

Por ultimo, para evitar que un usuario acumule una gran cantidad de notificaciones, existe la posibilidad de eliminar estas, cada notificación en la parte superior derecha cuenta con un botón con una X, la cual al momento de presionarla, la notificación se eliminara y no volverá a salir, para ello es necesario utilizar el siguiente endpoint DELETE

/state/delete_notification?workerId=[id del worker]&id=[id de la notificacion]

Donde se reciben dos parámetros, el id de la notificación que se quiere eliminar y el id del worker al cual pertenece tal notificacion.