import { ContentHeader } from "@/components/layout/ContentHeader"; import { EmailFormular, WebhookFormular, type EmailWerte, type WebhookWerte, } from "@/components/benachrichtigungen/KanalFormulare"; import { Badge } from "@/components/ui/Badges"; import { Card } from "@/components/ui/Card"; import { prisma } from "@/lib/db"; import { formatDatumZeit } from "@/lib/format"; import { kanalLoeschen, testSenden, zusammenfassungJetztSenden, zusammenfassungSpeichern, } from "@/server/actions/benachrichtigungen"; import type { EmailKonfiguration, WebhookKonfiguration } from "@/server/notifications/kanaele"; export const metadata = { title: "Benachrichtigungen" }; export default async function BenachrichtigungenSeite() { const [kanaele, protokoll, einstellung] = await Promise.all([ prisma.benachrichtigungskanal.findMany({ orderBy: { erstelltAm: "asc" } }), prisma.benachrichtigung.findMany({ orderBy: { erstelltAm: "desc" }, take: 20 }), prisma.einstellung.findUnique({ where: { schluessel: "zusammenfassung" } }), ]); const emailKanal = kanaele.find((kanal) => kanal.typ === "EMAIL"); const webhookKanal = kanaele.find((kanal) => kanal.typ === "WEBHOOK"); const emailKonfiguration = emailKanal?.konfiguration as unknown as EmailKonfiguration | undefined; const webhookKonfiguration = webhookKanal?.konfiguration as unknown as WebhookKonfiguration | undefined; const zeitraum = (einstellung?.wert as { zeitraum?: string } | null)?.zeitraum ?? "aus"; const emailWerte: EmailWerte = { id: emailKanal?.id ?? null, name: emailKanal?.name ?? "E-Mail", aktiv: emailKanal?.aktiv ?? true, host: emailKonfiguration?.host ?? "", port: emailKonfiguration?.port ?? 587, benutzer: emailKonfiguration?.benutzer ?? "", absender: emailKonfiguration?.absender ?? "", empfaenger: emailKonfiguration?.empfaenger?.join(", ") ?? "", passwortGesetzt: Boolean(emailKonfiguration?.passwort), }; const webhookWerte: WebhookWerte = { id: webhookKanal?.id ?? null, name: webhookKanal?.name ?? "Webhook", aktiv: webhookKanal?.aktiv ?? true, url: webhookKonfiguration?.url ?? "", geheimnisGesetzt: Boolean(webhookKonfiguration?.geheimnis), }; return ( <>
) : null } >

Für Microsoft 365: Server smtp.office365.com, Port 587, Benutzer und Absender identisch mit dem Postfach. Das Passwort wird in der Datenbank gespeichert und nie wieder angezeigt.

) : null } >

Verschickt JSON mit Betreff, Text und strukturierten Feldern – damit lassen sich Matrix, Zabbix oder Home Assistant anbinden.

{protokoll.map((eintrag) => ( ))} {protokoll.length === 0 ? ( ) : null}
Zeitpunkt Weg Empfänger Betreff Status
{formatDatumZeit(eintrag.erstelltAm)} {eintrag.kanal === "EMAIL" ? "E-Mail" : "Webhook"} {eintrag.empfaenger} {eintrag.betreff ?? "–"} {eintrag.status === "GESENDET" ? ( Gesendet ) : eintrag.status === "FEHLGESCHLAGEN" ? ( <> Fehlgeschlagen
{eintrag.fehler}
) : ( Wartend )}
Noch nichts versendet.
); }