v1 · vista previa

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

↑ ↓ moverseIntro abrirEsc cerrar

Conceptos

Alertas

Tipos, gravedad y estados de una alerta; la diferencia entre que la sala se haga cargo y que el trabajador vea el aviso; y cómo reconocerla o cerrarla.

En esta página

Una alerta es algo que ha pasado en la planta y que alguien tiene que atender: un SOS, una caída, una entrada donde no se debe, un reloj sin batería o un aviso de terremoto. Es el objeto central de la API.

El objeto

La alerta llega completa en cada webhook (data.alert) y es lo que devuelve GET /v1/alerts/{id}. Los campos que más se usan:

CampoQué es
type, severity, statusQué ha pasado, cómo de grave es y en qué punto de la respuesta está.
titleEl título que lee la sala.
site, zoneDónde. zone puede ser null.
worker, deviceA quién le ha pasado y con qué reloj. null en las alertas de toda la planta.
location, location_withheldDónde está la persona, si la privacidad de la planta deja verlo.
detailsDatos propios de cada tipo.
acknowledged, resolved, assigned_toQuién se ha hecho cargo, quién la ha cerrado y a quién está asignada.
date_created, date_last_modifiedCuándo se creó y cuándo cambió por última vez.
simulatedtrue si viene de un simulacro o de relojes simulados.
panel_urlEnlace a su ficha en el panel de SafeOnuba.

La lista entera, campo a campo, está en el esquema Alert.

Tipos

typeQué significa
sosLa persona ha pedido ayuda desde el reloj, o la sala lo ha lanzado por ella.
fall_detectedEl reloj ha detectado una caída.
restricted_zone_entryEntrada en una zona restringida.
forbidden_zone_entryEntrada en una zona prohibida.
permit_expired_insideEl permiso de trabajo ha caducado con la persona todavía dentro de la zona.
permit_closed_insideEl permiso de trabajo se ha cerrado con la persona todavía dentro de la zona.
heat_stressEstrés térmico: el reloj le ha indicado que pare y descanse.
evacuation_helpDurante una evacuación, la persona dice desde el reloj que no puede salir por su pie o que está ayudando a otra.
worker_call_requestLa persona avisa a la sala desde el reloj. Sin cobertura, el reloj graba un aviso de voz que se escucha en el panel.
device_offlineEl reloj lleva un tiempo sin comunicar.
low_batteryAl reloj le queda poca batería.
earthquakeTerremoto. Es de toda la planta: no lleva worker ni device.
tsunami_riskRiesgo de tsunami. Es de toda la planta: no lleva worker ni device.

Un vehículo cerca no es una alerta

Los avisos de vehículo cerca no generan alertas propias. Van dentro de la alerta de un incidente, en dos listas:

  • nearby: quién había a menos de 100 metros cuando saltó una alerta crítica (SOS o caída), personas o vehículos. Da la distancia, nunca la posición, y no cuenta a quien estaba en una zona de privacidad.
  • vehicle_warnings: los avisos de vehículo cerca que recibió esa persona en la ventana del incidente, con la distancia y si los vio en el reloj.

Detalles de cada tipo

details cambia según type. Por ejemplo, SosDetails dice cómo se pidió el SOS (trigger), ZoneDetails trae el permiso de trabajo que regía (permit_reference) y HazardDetails la magnitud, la distancia y si el aviso es oficial. Las variantes están en AlertDetails.

Gravedad

severityQué significa
lowInformación.
mediumAviso.
highGrave.
criticalCrítica: SOS, caída, «no puedo evacuar».

El filtro severity de GET /v1/alerts y el min_severity de los webhooks son mínimos: high devuelve high y critical.

Estados

statusQué significa
unacknowledgedNadie se ha hecho cargo todavía.
acknowledgedUn operador se ha hecho cargo.
resolvedCerrada.
  • Reconocer asigna la alerta a quien la reconoce si nadie la llevaba. Reconocer no es cerrar: una alerta reconocida sigue marcando a la persona en el mapa hasta que se cierra.
  • Cerrar deja constancia de quién, cuándo y con qué nota, en resolved.
  • Una alerta cerrada puede reabrirse. Se avisa con el evento alert.reopened.

Reconocer y cerrar desde tu sala

PUT /v1/alerts/{id} con el scope alerts:write. El cuerpo:

CampoObligatorioQué es
statusSíacknowledged o resolved.
actorSíEl operador de tu sala: name y, si quieres, external_id.
resolution_reasonNoAl cerrar, por qué. Hasta 200 caracteres.
noteNoUna nota. Hasta 500 caracteres.

El operador es obligatorio porque «reconocida» mide la respuesta de una persona. En la cronología de la alerta queda «Cliente · Operador (vía integración)».

curl -X PUT https://sandbox.api.safeonuba.com/v1/alerts/0f6c2b7e-3a1d-4c55-9b0e-7d2f4a8c1e90 \
  -H "Authorization: Bearer $SAFEONUBA_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "resolved",
    "resolution_reason": "Falsa alarma",
    "note": "Confirmado por radio con el encargado.",
    "actor": { "name": "E. Ejemplo", "external_id": "OP-117" }
  }'

La respuesta es la alerta ya actualizada. Si la transición no es posible —por ejemplo, cerrar o reconocer una alerta ya cerrada— la API responde 409.

Consultar alertas

GET /v1/alerts devuelve las alertas de la más reciente a la más antigua, paginadas. Filtros:

ParámetroQué filtra
site_idUn centro.
typeUn tipo.
statusUn estado.
severityGravedad mínima.
since, untilIntervalo de fechas, en ISO 8601.
limit, cursorPaginación (ver Paginación).

Para seguir las alertas en tiempo real no consultes en bucle: usa webhooks. La lista sirve para cargar el estado al arrancar y para buscar.

Nombres de los trabajadores

Los nombres son opcionales por contrato. Si tu contrato no los incluye, worker.name no aparece y title se compone con el tipo, la zona y el identificador de empresa (external_id), sin nombre. Ver Trabajadores y relojes.