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.
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"
Son aquellos eventos informativos. Por ejemplo, recuperación de sesión, usuario sin protocolo activo, etc.
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.
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"
}