Notificaciones de escritorio vía HTTP.
Envía notificaciones de escritorio Linux a cualquier display de contenedor con una sola HTTP POST. El servidor de notificaciones llama a notify-send en el display X11 de tu contenedor: dispara, consulta el historial o transmite en vivo.
# Enviar una notificación al display 0
curl -X POST ".../notify"
-d '["display":"0","summary":"Build Complete","urgency":"normal"]'
# Respuesta
["message":"Notification sent successfully","success":true]
Tres pasos. Una llamada HTTP cada uno.
Cada notificación sigue el mismo ciclo de vida: dispárala, consulta el historial o transmítela en vivo, luego descártala cuando hayas terminado.
Disparar
POST /notify envía una llamada a notify-send al display X11 de destino. Suministra display, summary y opcionalmente urgency, body, expire_time o icon.
# Fire a notification
POST /notify
{"display":"0",
"summary":"Build Complete",
"urgency":"normal"}
'{'"success":true'}'
Consultar o transmitir
GET /[display] recupera el historial de notificaciones con filtros opcionales de limit, since, username y session. Conéctate vía WebSocket a /stream?displays=0 para actualizaciones en tiempo real.
curl ".../0?limit=50"
# Or open a WebSocket
new WebSocket(
"wss://.../stream?displays=0"
)
Descartar
POST /dismiss marca IDs de notificación como descartadas: se filtran en respuestas GET posteriores. DELETE /dismiss borra el estado de descartado, haciéndolas visibles de nuevo.
# Dismiss by ID
POST /dismiss
{"displayId":"0",
"notificationIds":[10,11,12]}
# Clear dismissed state
DELETE /dismiss?displayId=0
low. normal. critical.
Tres niveles de urgencia se mapean directamente al comportamiento de notify-send. Elige el correcto y el daemon de notificaciones hace el resto.
Se descarta rápidamente. Pon expire_time: 3000 para tareas en segundo plano, telemetría o pings informativos que no deben interrumpir el trabajo.
"urgency": "low",
"expire_time": 3000
Estándar. Por defecto cuando se omite urgency. El daemon de notificaciones la muestra en el timeout configurado y la descarta automáticamente.
"urgency": "normal"
// default — omit to use this
Persistente: requiere descarte manual. Pon expire_time: 0 para fallos del sistema, errores de build o cualquier cosa que necesite acción inmediata.
"urgency": "critical",
"expire_time": 0
Consulta el historial o transmite en vivo.
Dos canales de lectura para necesidades diferentes: REST para logs de auditoría y consultas puntuales, WebSocket para dashboards y monitores en tiempo real.
Obtiene el historial de notificaciones de un display. Filtra por limit, marca de tiempo since, username o session ID. Úsalo para logs de auditoría, consultas puntuales y procesamiento en lote.
# get last 50 for display 0
curl ".../0?limit=50"
# time-filtered
curl ".../0?since=1749025000000"
Array JSON de objetos de notificación con id, summary, urgency, timestamp y icon_url.
Suscríbete a uno o más displays con displays=0,:1,2 o displays=all. Recibe mensajes push en cuanto llegan. Úsalo para dashboards y monitorización en tiempo real.
# open a WebSocket
const ws = new WebSocket(
"wss://.../stream?displays=0"
)
# on message
ws.onmessage = (e) => {
const msg = JSON.parse(e.data)
// msg.type === 'notification'
}
[ type: "notification", data: [ id, summary, urgency, timestamp ] ] enviado con cada nueva notificación.
Desde pipelines CI/CD hasta trabajos ML.
En cualquier lugar donde un proceso de larga duración necesite señalar completado o fallo, una HTTP POST es todo lo que se necesita.
Alertas CI/CD
Las builds de larga duración completan. HTTP POST dispara una notificación en el display del contenedor, visible en cualquier sesión de display activa.
Monitorización del sistema
Las alertas del servidor se enrutan a una notificación de escritorio en el display X11 del contenedor, visible en cualquier sesión de display activa.
Tareas de larga duración
Exportaciones de datos, renderizado de vídeo, entrenamiento de modelos ML, finalización de copias de seguridad: notifica cuando termina sin necesidad de sondeo.
Flujos de trabajo automatizados
Los trabajos cron, tareas programadas y scripts de automatización notifican al display del contenedor al completar o fallar.
8 Endpoints. One Notification Server.
Trigger, fetch, stream, and dismiss desktop notifications — plus icons and health monitoring — all over plain HTTP.
Trigger
{count, plural, =1 {# endpoint} other {# endpoints}'}POST .../api/v1/notifications/notify → {"success":true}
Fetch & Stream
{count, plural, =1 {# endpoint} other {# endpoints}'}GET .../api/v1/notifications/{display}?limit=50&since=...
Icons
{count, plural, =1 {# endpoint} other {# endpoints}'}GET .../api/v1/notifications/icons/{iconId} → image/png
Health & Metrics
{count, plural, =1 {# endpoint} other {# endpoints}'}GET .../api/v1/notifications/health → {"status":"UP"}
Las notificaciones están a una HTTP POST de distancia.
Cualquier script, servicio o automatización que pueda hacer una solicitud HTTP puede enviar una notificación de escritorio al display de tu contenedor.