Saltar al contenido principal

Notifications System


Propósito y alcance del sistema

Trak envía las notificaciones a través del servicio AWS SNS en conjunto de AWS Lambda para enviar notificaciones por HTTPs a cada cliente con una firma SHA1withRSA para su verificación.

Image

Para más información consultar:
https://docs.aws.amazon.com/sns/latest/dg/welcome.html
https://docs.aws.amazon.com/sns/latest/dg/sns-http-https-endpoint-as-subscriber.html

Nota: Este sistema está en continua evolución. Para asegurar la versión más reciente, contactar con soporte@trak.es.


Configuración y requerimientos

Suscripción a las notificaciones

Para activar o desactivar la recepción de notificaciones el cliente deberá comunicarlo por el buzón de soporte soporte@trak.es o su personal de contacto en Trak, el cliente debe proporcionar un punto de conexión donde hacer las llamadas, así como la clave de acceso.

Ejemplo punto de conexión: https://api.test.com/api/v2/trak/notificaciones/
Ejemplos claves de acceso:
"apikey 1234xxxxx"
"Bearer 1234xxxxx"
"Basic 1234xxxxx"

Recepción de las notificaciones

Una vez activado la recepción de notificaciones, Trak enviará notificaciones de todo los eventos existentes que ocurran en la plataforma, el cliente tendrá que filtrar y usar aquellos que les convenga.

Formato de la notificación

Formato de la petición será similar a la siguiente, donde se incluyen las cabeceras HTTP y el formato JSON de la petición:

POST / HTTP/1.1
Content-Length: 1596
Content-type: application/json
X-Amz-Sns-message-type: SubscriptionConfirmation
X-Amz-Sns-message-id: aa3999bb-286e-4cc3-ad6a-761be641b0f5
X-Amz-Sns-Topic-Arn: arn:aws:sns:us-west-2:123456789012:MyTopic
Host: ec2-50-17-44-49.compute-1.amazonaws.com
Connection: Keep-Alive
user-Agent: Amazon Simple Notification Service Agent
Accept-Encoding: gzip,deflate
{
"type" : "Notification",
"messageId" : "da41e39f-ea4d-435a-b922-c6aae3915ebe",
"TopicArn" : "arn:aws:sns:us-west-2:123456789012:MyTopic",
"Subject" : "test",
"message" : "<TRAK-PLAYLOAD-JSON>",
"Timestamp" : "2012-04-25T21:49:25.719Z",
"SignatureVersion" : "1",
"Signature" : "EXAMPLElDMXvB8r9R83tGoNn0ecwd5UjllzsvSvbItzfaMpN2nk5HVSw7XnOn/49IkxDKz8YrlH2qJXj2iZB0Zo2O71c4qQk1fMUDi3LGpij7RCW7AW9vYYsSqIKRnFS94ilu7NFhUzLiieYr4BKHpdTmdD6c0esKEYBpabxDSc=",
"SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-f3ecfb7224c7233fe7bb5f59f96de52f.pem",
"UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:123456789012:MyTopic:2bcfbf39-05c3-41de-beaa-fcfcc21c8f55"
}

El contenido del mensaje de la notificación se enviará, como JSON, dentro del campo "message" : "<TRAK-PLAYLOAD-JSON>", el siguiente formato:

{
"message": "Mensaje",
"severity": "urgent",
"day": "2014-11-14 09:03:42.466716+00:00",
"receiver": "physio",
"user": "xxxxxxx",
"type": "email",
"code": "NOT-001",
}

Notificaciones

Las notificaciones están diseñadas para informar, advertir o alertar a los usuarios que emplean Trak, ya sean profesionales sanitarios o pacientes. Los eventos se generan cuando se cumplen ciertas condiciones o acontecimientos dentro de la app. Por ejemplo, si un paciente no realiza una sesión programada, se generará una notificación para su fisioterapeuta, quien podrá tomar las acciones necesarias para asegurar el buen manejo de sus pacientes.

La integración de las notificaciones en el sistema del cliente puede ayudar a los responsables del centro o negocio a tener una visión global del uso de la aplicación por parte de los usuarios, permitiéndoles detectar anomalías, identificar usos indebidos o extraer métricas de uso.

Criticidad de la notificación

Trak clasifica las notificaciones por 3 tipos de gravedad, esta información normalmente viene en el cuerpo del JSON como "severity"

🔵 Info:

Son aquellos eventos informativos. Por ejemplo, recuperación de sesión, usuario sin protocolo activo, etc.

🟠 Warning

Son aquellos eventos que pueden indicar un futuro problema, a los que hay que prestar atención pero su gestión no es urgente. Por ejemplo, mensaje nuevo en el chat, facilidad de ejecución de ejercicio.

🔴 Urgent

Son aquellos eventos que deben de ser gestionados inmediatamente. Por ejemplo, empeoramiento de las sesiones, 5 sesiones consecutivas sin realizar, etc.

Codificación

Cada evento tiene un código único que le sirve al cliente para quue pueda identificar de forma rápida si la notificación tiene interés para ellos, tienen el siguiente formato: NOT-001, NOT-002. El cliente deberá hacer la comprobación al inicio y descartar con respuesta de status 200 aquellas notificaciones que no les interese.

Notificaciones para profesionales sanitarios

Notificación NOT-001

  • Severity: 🔴 Urgent
  • Descripción: Empeoramiento en la sesión del MM/DD/YYYY
  • Payload JSON:
    {
    "message": "Empeoramiento en la sesión del <DD/MM>",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-001"
    }

Notificación NOT-002

  • Severity: 🔴 Urgent
  • Descripción: 5 sesiones sin hacer seguidas
  • Payload JSON:
    {
    "message": "5 últimas sesiones sin realizar <ID_SESSION>",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "email",
    "code": "NOT-002"
    }

Notificación NOT-003

  • Severity: 🔴 Urgent
  • Descripción: El usuario saltó el ejercicio X por dolor
  • Payload JSON:
    {
    "message": "El usuario ha saltado el ejercicio <nombre-ejercicio> por dolor",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-003"
    }

Notificación NOT-004

  • Severity: 🟠 Warning
  • Descripción: El usuario dice X por el chat, respondele
  • Payload JSON:
    {
    "message": "<message>",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-004"
    }

Notificación NOT-005

  • Severity: 🟠 Warning
  • Descripción: El usuario ha indicado extrema dificultad para acabar los ejercicios en la sesión del DD/MM
  • Payload JSON:
    {
    "message": "Mucho esfuerzo en la sesión del <DD/MM>",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-005"
    }

Notificación NOT-006

  • Severity: 🟠 Warning
  • Descripción: El usuario ha indicado extrema facilidad para realizar los ejercicios en la sesión del DD/MM
  • Payload JSON:
    {
    "message": "Poco esfuerzo en la sesión del <DD/MM>",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-006"
    }

Notificación NOT-008

  • Severity: 🟠 Warning
  • Descripción: Mensaje escrito por el paciente en el EVA al finalizar la sesión
  • Payload JSON:
    {
    "message": "<message>",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-008"
    }

Notificación NOT-009

  • Severity: 🔵 Info
  • Descripción: Sesión del día DD/MM recuperada
  • Payload JSON:
    {
    "message": "Sesión del <DD/MM> recuperada",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-009"
    }

Notificación NOT-010

  • Severity: 🔵 Info
  • Descripción: Usuario sin protocolo activo. Genera un protocolo o dale de alta
  • Payload JSON:
    {
    "message": "Paciente sin protocolo activo (<ID_SESSION>: Ninguno)",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "email",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-010"
    }

Notificación NOT-014

  • Severity: 🟠 Warning
  • Descripción: El paciente usa el botón para pedir más ejercicios
  • Payload JSON:
    {
    "message": "Me gustaría recibir más ejercicios",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador paciente>",
    "type": "chat",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-014"
    }

Notificación NOT-015

  • Severity: 🔵 Info
  • Descripción: Reporte de resultados (pdf)
  • Payload JSON:
    {
    "message": "Reporte de <identificador paciente>",
    "file": "https:presigned.s3.url.report.com",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "user": "<identificador paciente>",
    "type": "report",
    "episode": "213313",
    "encounter": "1232131",
    "code": "NOT-015"
    }

Notificación NOT-016

  • Severity: 🔴 Urgent
  • Descripción: Este usuario aún no ha entrado a la plataforma. Hace 2 días que se le dio acceso.
  • Payload JSON:
    {
    "message": "Este usuario aún no ha entrado a la plataforma. Hace 2 días que se le dio acceso.",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-016"
    }

Notificación NOT-017

  • Severity: 🔴 Urgent
  • Descripción: Este usuario aún no ha entrado a la plataforma. Hace más de 6 días que se le dio acceso
  • Payload JSON:
    {
    "message": "Este usuario aún no ha entrado a la plataforma. Hace más de 6 días que se le dio acceso.",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "email",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-017"
    }

Notificación NOT-018

  • Severity: 🔴 Urgent
  • Descripción: Este usuario aún no ha entrado a la plataforma. Hace más de 12 días que se le dio acceso
  • Payload JSON:
    {
    "message": "Este usuario aún no ha entrado a la plataforma. Hace más de 12 días que se le dio acceso.",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "email",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-018"
    }

Notificación NOT-019

  • Severity: 🔴 Urgent
  • Descripción: Este usuario aún no ha entrado a la plataforma. Hace más de 20 días que se le dio acceso
  • Payload JSON:
    {
    "message": "Este usuario aún no ha entrado a la plataforma. Hace más de 20 días que se le dio acceso.",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "email",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-019"
    }

Notificación NOT-020

  • Severity: 🟠 Warning
  • Descripción: El usuario no ha hecho la sesión del día DD/MM
  • Payload JSON:
    {
    "message": "Sesion del <YYYY-MM-DD> no completada",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-020"
    }

Notificación NOT-021

  • Severity: 🟠 Warning
  • Descripción: El usuario ha indicado extremo dolor para acabar los ejercicios en la sesión del DD/MM
  • Payload JSON:
    {
    "message": "Mucho dolor en la sesión del <DD/MM>",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-021"
    }

Notificación NOT-022

  • Severity: 🔵 Info
  • Descripción: Sesión de rehabilitación finalizada
  • Payload JSON:
    {
    "message": "Sesión de rehabilitación finalizada",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "user": "<identificador paciente>",
    "type": "notification",
    "episode": "213313",
    "encounter": "1232131",
    "code": "NOT-022"
    }

Notificación NOT-024

  • Severity: 🟠 Warning
  • Descripción: El usuario saltó el ejercicio X
  • Payload JSON:
    {
    "message": "El usuario ha saltado el ejercicio <nombre-ejercicio>",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "notification",
    "code": "NOT-024"
    }

Notificación NOT-025

  • Severity: 🟠 Warning
  • Descripción: Ejercicio saltado
  • Payload JSON:
    {
    "message": "El usuario ha saltado el ejercicio <nombre-ejercicio>",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "notification",
    "code": "NOT-025"
    }

Notificación NOT-026

  • Severity: 🟠 Warning
  • Descripción: Bajo tiempo en cámara
  • Payload JSON:
    {
    "message": "Bajo tiempo en cámara en la sesión del día {{date}}",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "notification",
    "code": "NOT-026"
    }

Notificación NOT-027

  • Severity: 🟠 Warning
  • Descripción: Menos del 70% de ejercicios completados
  • Payload JSON:
    {
    "message": "Sesion del día {{date}} con menos del 70% de ejercicios completados",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador physio que comparte>",
    "type": "notification",
    "code": "NOT-027"
    }

Notificación NOT-028

  • Severity: 🔵 Info
  • Descripción: Usuario compartido contigo
  • Payload JSON:
    {
    "message": "Fisioterapeuta {{physio_username}} ha compartido el usuario {{user_username}} contigo",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "notification",
    "code": "NOT-028"
    }

Notificación NOT-029

  • Severity: 🔵 Info
  • Descripción: Protocolo compartido contigo
  • Payload JSON:
    {
    "message": "Fisioterapeuta {{physio_username}} ha compartido el protocolo {{protocol_title}} contigo",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio that shared>",
    "user": "<identificador physio que comparte>",
    "type": "notification",
    "code": "NOT-029"
    }

Notificación NOT-030

  • Severity: 🔵 Info
  • Descripción: Ejercicio compartido contigo
  • Payload JSON:
    {
    "message": "Fisioterapeuta {{physio_username}} ha compartido el ejercicio {{exercise_name}} contigo",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador physio que comparte>",
    "type": "notification",
    "code": "NOT-030"
    }

Notificación NOT-031

  • Severity: 🟠 Warning
  • Descripción: Ejercicio saltado por cansancio
  • Payload JSON:
    {
    "message": "El usuario ha saltado el ejercicio <nombre-ejercicio> por cansancio",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "notification",
    "code": "NOT-031"
    }

Notificación NOT-032

  • Severity: 🟠 Warning
  • Descripción: Ejercicio saltado por velocidad no adecuada
  • Payload JSON:
    {
    "message": "El usuario ha saltado el ejercicio <nombre-ejercicio> por velocidad no adecuada",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "notification",
    "code": "NOT-032"
    }

Notificación NOT-033

  • Severity: 🔵 Info
  • Descripción: Sesión de rehabilitación completada
  • Payload JSON:
    {
    "message": "El usuario {{patient}} ha completado una sesión de rehabilitación ({{date}})",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "notification",
    "code": "NOT-033"
    }

Notificación NOT-034

  • Severity: 🔵 Info
  • Descripción: Protocolo a 3 días de finalizar
  • Payload JSON:
    {
    "message": "El protocolo con id: {id_protocol} de {name} se acabará en menos de tres días ({date})",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "physio",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "notification",
    "code": "NOT-034"
    }

Notificaciones para pacientes

Notificación NOT-007

  • Severity: 🟡 Warning
  • Descripción: El usuario no ha hecho la sesión del día DD/MM
  • Payload JSON:
    {
    "message": "Sesión del <YYYY-MM-DD> no completada. Tienes dos días para recuperarla",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "patient",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "type": "chat",
    "code": "NOT-007"
    }

Notificación NOT-011

  • Severity: 🔴 Urgent
  • Descripción: Hoy tiene sesión (también por email)
  • Payload JSON:
    {
    "message": "Tiene sesión el <DD-MM-YYYY>",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "patient",
    "physio": "<identificador physio>",
    "user": "<identificador patient>",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "type": "email",
    "code": "NOT-011"
    }

Notificación NOT-012

  • Severity: 🔴 Urgent
  • Descripción: Aún puedes recuperar tu sesión (también por email)
  • Payload JSON:
    {
    "message": "<YYYY-MM-DD>: Opción a recuperar la sesión del <YYYY-MM-DD>",
    "severity": "urgent",
    "day": "<DD-MM-YYYY>",
    "receiver": "patient",
    "physio": "<identificador physio>",
    "user": "<identificador paciente>",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "type": "email",
    "code": "NOT-012"
    }

Notificación NOT-013

  • Severity: 🟠 Warning
  • Descripción: Tu fisioterapeuta dice X, respondele
  • Payload JSON:
    {
    "message": "<message>",
    "severity": "warning",
    "day": "<DD-MM-YYYY>",
    "receiver": "patient",
    "physio": "<identificador physio>",
    "user": "<identificador paciente>",
    "type": "chat",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-013"
    }

Notificación NOT-023

  • Severity: 🔵 Info
  • Descripción: Acceso a Trak
  • Payload JSON:
    {
    "message": "Bienvenido! Has sido dado de alta en Trak. Esperamos que tengas una buena rehabilitación",
    "severity": "info",
    "day": "<DD-MM-YYYY>",
    "receiver": "patient",
    "physio": "<identificador physio>",
    "user": "<identificador paciente>",
    "type": "email",
    "episode": "<identificador episode>",
    "encounter": "<identificador encounter>",
    "code": "NOT-023"
    }

Notificaciones generales

Notificación NOT-045

  • Severity: 🔵 Info
  • Descripción: Sesión empezada, el usuario ha comenzado una sesión
  • Payload JSON:
    {
    "message": "Sesion started",
    "code": "NOT-045",
    "severity": "info",
    "sesion_id": "<identificador de la sesión>",
    "with_ai": "<con inteligencia artificial o no (Boolean)>",
    "date": "<YYYY-MM-DD HH:MM:SS(UTC)>",
    "user": "<identificador paciente>",
    "physio": "<identificador physio>",
    "protocol_info": {
    "id": "<identificador del protocolo>",
    "title": "<título del protocolo>",
    "num_exercise": "<cantidad de ejercicios en el protocolo>"
    }
    }

Notificación NOT-046

  • Severity: 🔵 Info
  • Descripción: Ejercicio empezado
  • Payload JSON:
    {
    "message": "Ejercicio empezado",
    "code": "NOT-046",
    "severity": "info",
    "sesion_id": "<identificador de la sesión>",
    "with_ai": "<con inteligencia artificial o no (Boolean)>",
    "date": "<YYYY-MM-DD HH:MM:SS(UTC)>",
    "user": "<identificador paciente>",
    "physio": "<identificador physio>",
    "exercise_info": {
    "id": "<identificador del ejercicio>",
    "name": "<nombre del ejercicio>",
    "sets": "<series configurado para el ejercicio>",
    "reps": "<repeticiones configurado para el ejercicio>>"
    },
    "protocol_info": {
    "id": "<identificador del protocolo>",
    "title": "<título del protocolo>",
    "num_exercise": "<cantidad de ejercicios en el protocolo>"
    }
    }

Notificación NOT-047

  • Severity: 🔵 Info
  • Descripción: Ejercicio terminado
  • Payload JSON:
    {
    "message": "Ejercicio finalizado",
    "code": "NOT-047",
    "severity": "info",
    "sesion_id": "<identificador de la sesión>",
    "with_ai": "<con inteligencia artificial o no (Boolean)>",
    "date": "<YYYY-MM-DD HH:MM:SS(UTC)>",
    "user": "<identificador paciente>",
    "physio": "<identificador physio>",
    "exercise_info": {
    "id": "<identificador del ejercicio>",
    "name": "<nombre del ejercicio>",
    "sets": "<series configurado para el ejercicio>",
    "reps": "<repeticiones configurado para el ejercicio>>"
    },
    "protocol_info": {
    "id": "<identificador del protocolo>",
    "title": "<título del protocolo>",
    "num_exercise": "<cantidad de ejercicios en el protocolo>"
    }
    }