v1 · vista previa

Prueba con webhook firma, alert.created, location_withheld o 429.

↑ ↓ moverseIntro abrirEsc cerrar

Funcionamiento

Privacidad y seguridad

La API ve lo mismo que una persona del panel con esos permisos. Posiciones solo cuando la planta lo permite, nunca constantes vitales, y cada petición registrada.

En esta página

Esta página es para el equipo técnico que integra, y también para el comité de empresa, la representación de los trabajadores o el delegado de protección de datos que tiene que saber qué sale de la planta y a dónde va. Todo lo que aquí se dice se cumple por diseño en la propia API, no depende de que el integrador se porte bien.

La API ve lo mismo que el panel, ni más ni menos

Una integración no es una puerta trasera. La API ve exactamente lo que vería una persona del panel de SafeOnuba con esos mismos permisos:

  • el mismo nivel de privacidad de la planta;
  • las mismas zonas de privacidad;
  • el mismo alcance por contrata: lo que esa identidad no ve, para la API no existe (responde 404).

Y los scopes limitan todavía más: un token sin positions:read no ve ninguna posición, aunque la planta la dejara ver.

Posiciones: solo cuando la planta lo permite

Cada planta elige su nivel de privacidad. El de serie es «Solo en emergencia»: la posición de una persona solo se ve cuando tiene una alerta abierta a partir de cierta gravedad, durante una evacuación o con una solicitud aprobada en el panel.

Cuando la posición existe pero la privacidad no deja verla, la alerta llega igual, sin la posición y con location_withheld: true. Tampoco se ve en el panel.

Cada posición que la API entrega con una alerta detrás queda registrada en esa alerta, en «Quién ha visto su posición».

Detalle técnico: Posiciones.

Zonas de privacidad

En las zonas de privacidad —vestuarios, comedores— no se registra la posición. La API da el nombre y el tipo de esas zonas, pero no su polígono. Y quien estaba en una de ellas no cuenta en nearby, la lista de quién había cerca de un incidente.

Nunca hay constantes vitales

La API no entrega constantes vitales, ni de una persona ni agregadas. Ningún campo lleva pulso, temperatura corporal ni nada que se derive de ellos.

Una alerta de estrés térmico dice lo que se le ha indicado al trabajador en su reloj (parar y descansar), el índice de calor de la planta y los minutos al sol. Nada que salga de su cuerpo.

Nombres opcionales

Los nombres de los trabajadores son opcionales por contrato. Sin ellos, cada persona se identifica solo por el código que ya usa su empresa (external_id), y los títulos de las alertas se componen sin nombre.

Quién tiene acceso, y por qué, a la vista

  • Cada cliente de la API lo damos de alta nosotros, con un motivo que queda registrado.
  • Cada petición queda registrada.
  • La planta lo ve en su panel, en Ajustes → Integraciones: quién tiene acceso, a qué y con qué motivo.
  • Las acciones desde la sala del cliente llevan nombre. Reconocer o cerrar una alerta por la API exige el operador que lo hace, y la cronología de la alerta lo muestra como «Cliente · Operador (vía integración)».

Qué no hace la API

  • No abre evacuaciones. El sistema puede proponerlas; las decide siempre una persona en el panel.
  • No se puede usar desde un navegador. No tiene CORS: las llamadas salen del servidor del cliente, que es donde viven las credenciales.

Seguridad del transporte y de las credenciales

  • Todo el tráfico va cifrado con TLS, también los webhooks: un destino solo puede ser una URL https en una dirección pública, y no se siguen redirecciones.
  • Los tokens duran una hora y se revocan al instante si se da de baja al cliente.
  • Los secretos se enseñan una sola vez, tanto el client_secret como el secreto de firma de cada webhook, y los dos se pueden rotar sin cortes.
  • Cada webhook va firmado con HMAC-SHA256 y un timestamp, y el receptor rechaza lo que no cuadre o tenga más de 5 minutos (ver Verificar la firma).

Preguntas que suele hacer un comité

¿Puede la empresa seguir a un trabajador por la API? Solo si la planta ha elegido un nivel de privacidad que lo permita en el panel, y con los mismos límites. Con «Solo en emergencia», que es el de serie, la API no ve la posición de nadie que no tenga una emergencia abierta.

¿Puede la integración saber cómo está de salud alguien? No. No hay constantes vitales en la API, ni sueltas ni agregadas.

¿Cómo sabemos quién está conectado? En el panel, Ajustes → Integraciones: quién, a qué y con qué motivo. Y cada petición queda registrada.

¿Y si la integración reconoce o cierra una alerta? Queda en la cronología de la alerta con el nombre del operador que lo hizo y la marca «vía integración».