Notifications de bureau via HTTP.
Envoyez des notifications de bureau Linux à n'importe quel affichage de conteneur avec un simple HTTP POST. Le serveur de notifications appelle notify-send sur l'affichage X11 de votre conteneur — déclenchez, récupérez l'historique ou diffusez en temps réel.
# Envoyer une notification à l'affichage 0
curl -X POST ".../notify"
-d '["display":"0","summary":"Build Complete","urgency":"normal"]'
# Réponse
["message":"Notification sent successfully","success":true]
Trois étapes. Un appel HTTP chacune.
Chaque notification suit le même cycle de vie : la déclencher, récupérer l'historique ou la diffuser en temps réel, puis la rejeter quand c'est fait.
Déclencher
POST /notify envoie un appel notify-send à l'affichage X11 cible. Fournissez display, summary, et optionnellement urgency, body, expire_time ou icon.
{"display":"0",
"summary":"Build Complete",
"urgency":"normal"}
'{'"success":true'}'
Récupérer ou diffuser
GET /[display] récupère l'historique des notifications avec des filtres optionnels limit, since, username et session. Connectez-vous via WebSocket à /stream?displays=0 pour les mises à jour en temps réel.
curl ".../0?limit=50"
# Or open a WebSocket
new WebSocket(
"wss://.../stream?displays=0"
)
Rejeter
POST /dismiss marque les IDs de notification comme rejetés — ils sont filtrés des réponses GET suivantes. DELETE /dismiss efface l'état rejeté, les rendant à nouveau visibles.
# Dismiss by ID
POST /dismiss
{"displayId":"0",
"notificationIds":[10,11,12]}
# Clear dismissed state
DELETE /dismiss?displayId=0
low. normal. critical.
Trois niveaux d'urgence correspondent directement au comportement de notify-send. Choisissez le bon et le démon de notifications s'occupe du reste.
Se rejette rapidement. Définissez expire_time: 3000 pour les tâches en arrière-plan, la télémétrie ou les pings informatifs qui ne doivent pas interrompre la concentration.
"urgency": "low",
"expire_time": 3000
Standard. Par défaut quand urgency est omis. Le démon de notifications l'affiche au délai configuré et le rejette automatiquement.
"urgency": "normal"
// par défaut — omettez pour utiliser ceci
Persistant — nécessite un rejet manuel. Définissez expire_time: 0 pour les défaillances système, les erreurs de build ou tout ce qui nécessite une action immédiate.
"urgency": "critical",
"expire_time": 0
Récupérer l'historique ou diffuser en temps réel.
Deux canaux de lecture répondent à des besoins différents : REST pour les journaux d'audit et les requêtes ponctuelles, WebSocket pour les tableaux de bord et les moniteurs en temps réel.
Récupère l'historique des notifications pour un affichage. Filtrez par limit, horodatage since, username ou ID de session. Utilisez pour les journaux d'audit, les requêtes ponctuelles et le traitement par lots.
# get last 50 for display 0
curl ".../0?limit=50"
# time-filtered
curl ".../0?since=1749025000000"
Tableau JSON d'objets notification avec id, summary, urgency, timestamp et icon_url.
Abonnez-vous à un ou plusieurs affichages avec displays=0,:1,2 ou displays=all. Reçoit les messages push à leur arrivée. Utilisez pour les tableaux de bord et la surveillance en temps réel.
# 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 ] ] poussé à chaque nouvelle notification.
Des pipelines de build aux jobs ML.
Partout où un processus longue durée doit signaler son achèvement ou son échec, un simple HTTP POST suffit.
Alertes CI/CD
Les builds longue durée se terminent. HTTP POST déclenche une notification sur l'affichage du conteneur — visible dans toute session d'affichage active.
Surveillance système
Les alertes serveur sont routées vers une notification de bureau sur l'affichage X11 du conteneur, visible dans toute session d'affichage active.
Tâches longue durée
Exports de données, rendu vidéo, entraînement de modèles ML, achèvement de sauvegardes — notifiez à la fin sans polling.
Workflows automatisés
Les jobs cron, tâches planifiées et scripts d'automatisation notifient l'affichage du conteneur à l'achèvement ou en cas d'échec.
8 Endpoints. Un serveur de notifications.
Déclenchez, récupérez, diffusez et rejetez les notifications de bureau — plus les icônes et la surveillance de santé — tout sur HTTP brut.
Déclencher
{count, plural, =1 {# endpoint} other {# endpoints}'}POST .../api/v1/notifications/notify → {"success":true}
Récupérer & Diffuser
{count, plural, =1 {# endpoint} other {# endpoints}'}GET .../api/v1/notifications/{display}?limit=50&since=...
Icônes
{count, plural, =1 {# endpoint} other {# endpoints}'}GET .../api/v1/notifications/icons/{iconId} → image/png
Santé & Métriques
{count, plural, =1 {# endpoint} other {# endpoints}'}GET .../api/v1/notifications/health → {"status":"UP"}
Les notifications sont à un HTTP POST.
Tout script, service ou automatisation capable de faire une requête HTTP peut envoyer une notification de bureau à l'affichage de votre conteneur.