Benachrichtigungen
Libre WebUI führt einen dauerhaften Benachrichtigungseingang je Benutzer, damit Teamaktivitäten – Erwähnungen, Direktnachrichten, Freigaben, fehlgeschlagene Automatisierungen und Kalendererinnerungen – Menschen auch bei geschlossener Seite erreichen.
Der Eingang
Benachrichtigungen sind zuerst Datenbankzeilen: Titel und Text werden verschlüsselt gespeichert, auf 500 je Benutzer begrenzt (älteste werden entfernt) und können mit einem optionalen Quellschlüssel dedupliziert werden. Wiederholtes Veröffentlichen wird so zu einem Eintrag statt zu Klingelspam. Die REST-Oberfläche listet, zählt Ungelesene, markiert eine oder alle als gelesen und löscht.
Live-Übertragung nutzt den dauerhaften Benutzerstrom notify:<userId> über
GET /api/notifications/events (SSE). Die Identität stammt aus der authentifizierten
Sitzung, nie aus Clienteingaben. Der SQL-Eingang bleibt die Wahrheitsquelle: Ein
verpasstes Ereignis wird durch Lesen der Liste wiederhergestellt, nicht durch
Wiederholung des Stroms.
Auslöser
| Typ | Auslöser |
|---|---|
channel-dm | Jemand sendet dir eine Direktnachricht |
channel-mention | Jemand macht ein @mentions oder antwortet auf deine Nachricht |
channel-invite | Du wirst zu einem Kanal hinzugefügt |
share | Jemand gibt eine Ressource für dich frei |
automation-failed | Eine deiner Automatisierungen schlägt fehl (sofern nicht abbestellt) |
calendar-reminder | Der Erinnerungszeitpunkt eines Ereignisses wird erreicht |
work-run-finished | Einer deiner eingestellten Work-Agenten schließt eine Ausführung ab |
work-run-attention | Ein eingestellter Agent hält für Eingabe an oder stößt auf einen Fehler |
work-takeover | Ein Work-Agent bittet dich, seinen Bildschirm zu übernehmen |
work-approval | Ein Work-Lauf wartet auf deine Freigabe einer wirksamen Aktion |
system | Instanzweite Mitteilungen |
Benachrichtigungen gehen immer nur an den betroffenen Benutzer. Die Erwähnung eines Benutzernamens, der nicht Mitglied ist, erzeugt nichts.
Ausgehende Webhooks
Administratoren können Webhook-Ziele für Teamereignisse registrieren.
- Ausgang geschützt. Ziele unterliegen derselben Richtlinie wie Werkzeugserver:
exakte URL, keine Umleitungen und keine privaten oder linklokalen Adressen, sofern
ein Host nicht ausdrücklich über
TOOLS_PRIVATE_NETWORK_ALLOWLISTfreigegeben wurde. Hostnamen werden bei jeder Übertragung neu aufgelöst und geprüft. - Signiert. Mit konfiguriertem Geheimnis trägt jede Übertragung
X-Libre-Signature: sha256=<hmac>, berechnet über den exakten Body. - Redigiert. Der Umschlag enthält Ereignisart, Benachrichtigungstyp, Titel, Kennungen und Zeitstempel. Texte, Nachrichteninhalte, Prompts und Dokumente verlassen die Instanz nie.
- Dauerhaft. Übertragungen laufen als dauerhafte Jobs mit begrenzten Versuchen; 5xx wird wiederholt, 4xx gilt als Urteil des Empfängers und wird abgeschlossen.
- Begrenzt. Jedes Ziel abonniert bestimmte Typen (oder
*).
Browser-Push
Einstellungen → Benachrichtigungen registriert den Browser für Web Push, sodass Erwähnungen, Freigaben, Erinnerungen und abgeschlossene Arbeit das Gerät auch bei geschlossener Registerkarte erreichen. Die Implementierung ist standardisiert und eigenständig:
- VAPID (RFC 8292). Der Server signiert jede Übertragung mit einem ES256-
Schlüsselpaar, das einmal erzeugt und verschlüsselt gespeichert oder mit
VAPID_PUBLIC_KEY/VAPID_PRIVATE_KEYfestgelegt wird (VAPID_SUBJECTsetzt den Kontakt-Claim). Abgesehen vom Push-Endpunkt des Browseranbieters sind keine Drittbibliothek oder Dienstkonten beteiligt. - Verschlüsselte Nutzlast (RFC 8291). Jede Nachricht wird mit aes128gcm für die Geräteschlüssel verschlüsselt, bevor sie die Instanz verlässt. Der Push-Dienst leitet nicht lesbaren Chiffretext weiter.
- Pro Gerät und sitzungsgebunden. Ein Abonnement gehört dem erstellenden Browser und dessen Authentifizierungssitzung. Abmelden (oder „andere Sitzungen abmelden“) entfernt die Registrierung. Endpunkte werden verschlüsselt mit einem schlüsselgebundenen Suchtoken gespeichert und müssen öffentliche HTTPS-Ziele sein.
- Dauerhaft. Push-Übertragungen sind dauerhafte Jobs mit begrenzten Versuchen. Meldet der Dienst ein verschwundenes Abonnement (404/410), wird es gelöscht.
- Die Nutzlast enthält Titel, optionalen Text, Typ und Ziellink mit derselben Redaktionsgrenze wie der Eingang.
Push erfordert die Produktionsanwendung (der Service Worker registriert sich nur dort) und einen sicheren Ursprung. Derselbe Service Worker liefert Offline-Hülle und Installierbarkeit: Das Manifest macht Libre WebUI installierbar, Navigation greift offline auf die gespeicherte Hülle zurück und gehashte Build-Ressourcen werden unveränderlich zwischengespeichert. API-Verkehr wird nie gecacht.
Grenzen
- Benutzereinstellungen pro Typ sind noch nicht implementiert. Automatisierungen beachten ihre eigene Einstellung, und das Verlassen eines Kanals stoppt dessen Benachrichtigungen.