# DeskHub **DeskHub** ist ein vollständiges, selbst gehostetes Helpdesk-System. Kunden erstellen und verfolgen Supportanfragen über ein individuell gestaltbares Kundenportal. Das Support-Team bearbeitet Tickets, E-Mails, Aufgaben und Wissensartikel zentral über die Weboberfläche, die Windows-App oder die Android-App. ![DeskHub Kundenportal](DeskHub-Webseite/docs/images/customer-portal.png) **Aktuelle Versionen:** Server **1.1.0** · Chrome-Erweiterung **2.1.1** · WordPress-Plugin **1.3.0** · Android-App **3.5.3** · Windows-Programm **2.12.3** · Minecraft-Plugin **1.2.0** > Diese Anleitung ist auch für Einsteiger geeignet. Über das Inhaltsverzeichnis kommt ihr direkt zum gewünschten Thema. Die Abschnitte [Plugins entwickeln](#plugins-entwickeln) und [API und Webhooks](#api-und-webhooks-für-entwickler) richten sich an Entwickler. ## Funktionen - **Kundenportal** mit Ticket-Erstellung, Ticketstatus, Wissensdatenbank und frei gestaltbaren Seiten - **Digitaler Assistent** im Kundenportal: beantwortet Fragen aus Wissensdatenbank und eigenen Antworten, erstellt auf Wunsch das Ticket, mit Fragen-Log, Rückmeldung 👍/👎 und eigenen Wortgruppen (ohne externen KI-Dienst) - **Mitarbeiterbereich** mit Ticketlisten, Filtern, gespeicherten Ansichten, Zuweisungen und internen Notizen - **Wiedervorlage** („auf später legen“), **Beobachter**, **ähnliche Tickets und Artikel** beim Bearbeiten und **Erinnerung an Kunden** vor dem automatischen Schließen - **Automatik**: Tickets beim Eingang oder Öffnen zuweisen, Status automatisch auf „Offline“, automatische Abmeldung, Ticket-Sperre gegen Doppelbearbeitung - **E-Mail**: Versand über SMTP (auch pro Absenderadresse), automatischer Ticketimport über IMAP - **Abteilungen, Teams und Rollen** mit Berechtigungen, die pro Abteilung unterschiedlich sein können - **SLA-Pläne**, Eskalations- und Ticketregeln, Geschäftszeiten und Feiertage - **Berichte** mit frei zusammenstellbarem Bericht-Baukasten und CSV-Export - **Integrationen**: API-Schlüssel, Webhooks und eine Schnittstelle zum Anlegen von Tickets aus anderen Systemen - **Überwachung**: Warnung bei Störungen des E-Mail-Abrufs, Verbindungsanzeige in den Apps - **Plugins** zum Nachrüsten eigener Funktionen - **Update-Funktion** für Programmdateien und Datenbank, Backups und Datenschutz-Funktionen - **Import aus osTicket** inklusive Abteilungen, Nachrichten und Anhängen - **Windows-Programm und Android-App** mit hellem und dunklem Design, Push-Benachrichtigungen, Verwaltung nach Rechten und Android-**Widget** in drei Größen, direkt aus dem Mitarbeiterbereich herunterladbar - **Minecraft-Plugin** (Paper, Spigot, BungeeCord in einer Datei) zum Melden von Spielern und Problemen als Ticket - **Chrome-Erweiterung** (auch Edge und Brave; Windows, Mac, Linux) mit Ticket-Ansicht, Antworten, Aufgaben, Status, Zähler und Benachrichtigungen; **Windows-Programm auch für Linux und Mac** (Mac nur selbst zu bauen) ## Einblicke ### Demo-Video (mit Beispieldaten) [![DeskHub Demo](DeskHub-Webseite/docs/video/deskhub-demo.gif)](DeskHub-Webseite/docs/video/deskhub-demo.mp4) Klick auf die Vorschau öffnet das Video ([deskhub-demo.mp4](DeskHub-Webseite/docs/video/deskhub-demo.mp4), Full HD, 30 Bilder pro Sekunde, etwa 3:50 Minuten, mit passender Musik). Alle Namen, Tickets und Antworten darin sind erfunden. Es ist eine echte Aufnahme mit Mauszeiger, Tippen und Scrollen: Kundenportal mit digitalem Assistenten, Anmeldung, Übersicht, Ticketliste, Ticket mit Wiedervorlage und Beobachtern, Verwaltung des Assistenten mit Fragen-Log und das Windows-Programm. **Musik und Ton:** Die Musik folgt den Kapiteln des Videos (ruhiger Start, Zupf-Arpeggio im Kundenportal, Beat im Mitarbeiterbereich, voller Klang beim Assistenten, ruhiger im Windows-Programm, Riser und großer Schlussakkord zum Abspann). Dazu kommen leise Tipp-, Klick- und Übergangsgeräusche genau zu den Zeitpunkten der Aufnahme. Alles wird beim Bauen des Videos selbst erzeugt (`tools/demo-video/make_music.js`): reine Synthese aus einer einfachen Akkordfolge, ohne Aufnahmen, Samples oder fremde Melodien. Sie enthält damit nichts von Dritten und ist nicht bei GEMA oder einer anderen Verwertungsgesellschaft angemeldet. Wer das Stück weitergibt, sollte es auch nicht anmelden. ### Digitaler Assistent im Kundenportal [![Digitaler Assistent](DeskHub-Webseite/docs/images/demo-assistent-kunde.png)](DeskHub-Webseite/docs/images/demo-assistent-kunde.png) ### Übersicht im Mitarbeiterbereich [![Übersicht](DeskHub-Webseite/docs/images/demo-uebersicht.png)](DeskHub-Webseite/docs/images/demo-uebersicht.png) ### Ticket mit Wiedervorlage, Beobachtern und passenden Artikeln [![Ticket mit Wiedervorlage](DeskHub-Webseite/docs/images/demo-ticket-wiedervorlage.png)](DeskHub-Webseite/docs/images/demo-ticket-wiedervorlage.png) ### Fragen-Log des Assistenten [![Fragen-Log](DeskHub-Webseite/docs/images/demo-assistent-log.png)](DeskHub-Webseite/docs/images/demo-assistent-log.png) ### Windows-Programm [![Windows-Programm](DeskHub-Webseite/docs/images/demo-windows-ticket.png)](DeskHub-Webseite/docs/images/demo-windows-ticket.png) ### Neues Ticket erstellen [![Neues Ticket erstellen](DeskHub-Webseite/docs/images/new-ticket.png)](DeskHub-Webseite/docs/images/new-ticket.png) ### Kunden-Login [![Kunden-Login](DeskHub-Webseite/docs/images/customer-login.png)](DeskHub-Webseite/docs/images/customer-login.png) ### Mitarbeiter-Login [![Mitarbeiter-Login](DeskHub-Webseite/docs/images/staff-login.png)](DeskHub-Webseite/docs/images/staff-login.png) --- ## Inhaltsverzeichnis - [Was ist was?](#was-ist-was) - [Erstinstallation](#erstinstallation) - [Schnellstart](#schnellstart) - [Anmelden](#anmelden) - [Für Kunden: Ein Ticket erstellen](#für-kunden-ein-ticket-erstellen) - [Für Mitarbeiter: Tickets bearbeiten](#für-mitarbeiter-tickets-bearbeiten) - [Für Admins: Das Adminportal](#für-admins-das-adminportal) - [E-Mails versenden (SMTP)](#e-mails-versenden-smtp) - [E-Mails automatisch abrufen (Postfächer)](#e-mails-automatisch-abrufen-postfächer) - [Automatisierung (Cronjobs)](#automatisierung-cronjobs) - [Status und automatisch Offline](#status-und-automatisch-offline) - [Digitaler Assistent](#digitaler-assistent) - [Wiedervorlage, Beobachter, ähnliche Tickets, Kundenerinnerung](#wiedervorlage-beobachter-ähnliche-tickets-kundenerinnerung) - [Ticket-Sperre und automatische Zuweisung](#ticket-sperre) - [SLA-Pläne](#sla-pläne) - [Gespeicherte Ansichten](#gespeicherte-ansichten) - [Berichte und Bericht-Baukasten](#berichte-und-bericht-baukasten) - [Integrationen: API-Schlüssel und Webhooks](#integrationen-api-schlüssel-und-webhooks) - [Rechte und Rollen](#rechte-und-rollen) - [Überwachung und Störungsmeldungen](#überwachung-und-störungsmeldungen) - [Windows-App und Android-App](#windows-app-und-android-app) - [Update-Hinweis in den Apps](#update-hinweis-in-den-apps) - [Minecraft-Plugin zum Herunterladen](#minecraft-plugin-zum-herunterladen) - [Chrome-Erweiterung](#chrome-erweiterung) - [Windows-Programm für Linux und Mac](#windows-programm-für-linux-und-mac) - [System-Update und Datenbank-Update](#system-update-und-datenbank-update) - [Import aus osTicket](#import-aus-osticket) - [Plugins verwenden](#plugins-verwenden) - [Plugins entwickeln](#plugins-entwickeln) - [Plugin- und Theme-Webseite](#plugin--und-theme-webseite) - [API und Webhooks (für Entwickler)](#api-und-webhooks-für-entwickler) - [Sicherheit und Datenschutz](#sicherheit-und-datenschutz) - [Backup](#backup) - [Demo-Video neu erzeugen](#demo-video-neu-erzeugen) - [Hilfe, etwas funktioniert nicht](#hilfe-etwas-funktioniert-nicht) --- ## Was ist was? DeskHub hat drei Bereiche: | Bereich | Für wen? | Adresse | |---|---|---| | **Kundenportal** | Eure Kunden | `eure-domain.de/` | | **Mitarbeiterbereich** | Support-Team und Admins | `eure-domain.de/staff/` | | **Apps** | Support-Team und Admins am PC und unterwegs | Windows-App, Android-App, Chrome-Erweiterung (WordPress-Plugin und Minecraft-Plugin als Download) | Ein Admin-Konto ist ein Mitarbeiter-Konto mit der Rolle „Admin“. Beim Anmelden gibt es keinen Unterschied, nur bei dem, was man danach sieht. --- ## Erstinstallation **Voraussetzungen** (im Zweifel euren Hosting-Anbieter fragen): - PHP 8.2 oder neuer - Eine MySQL-Datenbank (für kleine Installationen und Tests geht auch SQLite) - PHP-Erweiterung `imap`, wenn E-Mails automatisch abgerufen werden sollen - PHP-Erweiterung `zip` für Theme-Upload, Plugin-Installation und System-Update per ZIP **So geht’s:** 1. Alle DeskHub-Dateien auf den Server hochladen (zum Beispiel per FTP). 2. Im Browser `eure-domain.de/install/` aufrufen. 3. Dem Assistenten folgen: Datenbank-Zugangsdaten, Website-Name, erstes Admin-Konto. 4. Danach unter `eure-domain.de/staff/login.php` mit dem neuen Konto anmelden. Der Assistent prüft zuerst die Voraussetzungen (PHP 8.2, Datenbanktreiber, `openssl`, beschreibbare Ordner; `curl`, `zip` und HTTPS sind empfohlen). Das Admin-Passwort braucht mindestens 10 Zeichen mit Groß- und Kleinbuchstaben, Ziffer und Sonderzeichen. Zum Schluss spielt er alle Datenbank-Änderungen ein, erzeugt den Verschlüsselungsschlüssel und sperrt sich selbst. Fehler bei der Datenbankverbindung werden verständlich erklärt (falsches Passwort, Server nicht erreichbar, Datenbank fehlt). **Ganz wichtig:** Löscht anschließend den Ordner `install` vom Server (oder sperrt ihn). Der Assistent überschreibt eine bestehende Installation nie: Gibt es schon eine `config/config.php` mit Datenbank und Mitarbeiterkonten, zeigt er „Bereits installiert“. Wollt ihr bewusst neu anfangen, legt zuerst ein Backup an und entfernt dann `config/config.php`, `install/.installed` und die Datenbank (bei SQLite die Datei `database/deskhub.sqlite`). --- ## Schnellstart Direkt nach der Installation läuft DeskHub, kann aber noch keine E-Mails verschicken oder abrufen. Arbeitet diese Liste einmal von oben nach unten ab: | # | Was | Wo | Warum | |---|---|---|---| | 1 | **Abteilungen anlegen** (z. B. „Technik“, „Vertrieb“) | Adminportal → Abteilungen | Jedes Ticket gehört zu genau einer Abteilung | | 2 | **SMTP einrichten** (E-Mail-Versand) | Adminportal → Einstellungen → E-Mail | Damit Kunden Bestätigungen bekommen | | 3 | **Postfach einrichten** (E-Mail-Abruf, optional) | Adminportal → Postfächer (Abruf) | Damit eingehende Mails zu Tickets werden | | 4 | **Automatisierung prüfen** | Adminportal → Einstellungen → Cron-Jobs | Damit Versand, Abruf und Prüfungen von selbst laufen | | 5 | **Mitarbeiter anlegen** | Adminportal → Mitarbeiter | Damit nicht nur ihr allein Tickets bearbeitet | --- ## Anmelden Es gibt zwei getrennte Logins: - **Kunden** melden sich unter `/login.php` an (oder erstellen ohne Konto ein Ticket). - **Mitarbeiter und Admins** melden sich unter `/staff/login.php` an. Ein Kunden-Konto hat keinen Zugang zum Mitarbeiterbereich und umgekehrt. --- ## Für Kunden: Ein Ticket erstellen 1. Auf der Startseite **„Neues Ticket eröffnen“** wählen. 2. Name, E-Mail-Adresse und Anliegen eintragen. 3. Nach dem Absenden gibt es eine **Ticketnummer** auf der Seite und per E-Mail. 4. Mit dieser Nummer lässt sich jederzeit unter **„Ticketstatus überprüfen“** nachsehen, ob es eine Antwort gibt, auch ohne Konto. --- ## Für Mitarbeiter: Tickets bearbeiten Im Mitarbeiterbereich gibt es links im Menü: - **Übersicht**: in vier Reitern: **Überblick** (offene, euch zugewiesene, nicht zugewiesene und überfällige Tickets, euer Status und das Team, Gesamtzahlen), **Verlauf** (Ticketaktivität, SLA-Einhaltung, Status und Priorität), **Auswertung** (nach Abteilung, Thema und Mitarbeiter, mit CSV-Export) und **Zufriedenheit** (nur wenn die Abfrage genutzt wird). Der Berichtszeitraum gilt für die letzten drei Reiter - **Tickets**: die komplette Liste mit Suche, Filtern und gespeicherten Ansichten; sortiert nach der **letzten Aktivität** (zuletzt bearbeitete Tickets oben), der Eingang steht beim Darüberfahren in der Spalte „Letzte Aktivität“ - **Aufgaben**: eigene To-dos, unabhängig von Tickets - **Ticket-Ansicht**: links Verlauf und Antwortfeld, rechts die Karten in drei Reitern: **Details** (Eigenschaften, SLA-Fristen, Absender, Kundenbewertung), **Organisation** (zugehörige Probleme, Wiedervorlage und Beobachter, Kollaboratoren, Zeiterfassung) und **Mehr** (passende Artikel und Tickets, Zusammenführen und Löschen, Plugin-Karten). Der gewählte Reiter bleibt beim Neuladen erhalten - **Berichte**: Auswertungen zu Antwortzeiten und Ticketaufkommen - **Sperrliste**: einzelne E-Mail-Adressen oder ganze Mail-Anbieter blockieren - **Verzeichnis**: Kontaktliste aller Kollegen **Vorlagen (Textbausteine):** Im Antwortformular zeigt die Auswahl „Vorlage wählen“ nur Vorlagen, die der **Abteilung des Tickets** zugeordnet sind, dazu die Vorlagen für **alle Abteilungen** (ohne Abteilung angelegt). Beides ist in der Auswahl gruppiert. Zuordnen könnt ihr eine Vorlage unter Adminportal → Vorlagen. **Mehrere Tickets in eine andere Abteilung verschieben:** In der Ticketliste die Tickets markieren, unten bei „Auswahl“ die Abteilung wählen und **„Abteilung ändern“** klicken. Die SLA-Fristen werden nach den Regeln der neuen Abteilung neu berechnet, die Verschiebung steht im Aktivitätsprotokoll jedes Tickets. Verschieben dürfen nur Mitarbeiter mit dem Recht „Tickets übertragen“ und nur in Abteilungen, auf die sie Zugriff haben. Tickets, die schon in der Zielabteilung liegen, oder bei denen das Recht fehlt, werden übersprungen und in der Meldung genannt. In einem Ticket könnt ihr dem Kunden antworten, eine **interne Notiz** hinterlassen (nur das Team sieht sie), den Status ändern, das Ticket zuweisen, lösen oder schließen. Welche dieser Aktionen möglich sind, hängt von eurer Rolle in der Abteilung des Tickets ab. **Signatur beim Antworten wählen:** Im Antwortformular eines Tickets steht unter dem Textfeld die Auswahl **Signatur**: **Meine Signatur**, **Abteilung „…“** (die Signatur der Abteilung des Tickets) oder **Keine Signatur**. Darunter zeigt eine Vorschau genau das, was angehängt wird. Voreingestellt ist wie bisher die eigene Signatur, ersatzweise die der Abteilung. Die Signatur wird nur an öffentliche Antworten angehängt, nicht an interne Notizen. Die Mobile-API nimmt beim Antworten (`POST /api/staff/v1/ticket_message.php`) optional das Feld `signature` mit `own`, `dept` oder `none`. **E-Mail-Signatur:** Unter **Mein Profil → Signatur** stellt ihr den Text ein, der an eure Antworten angehängt wird (Fett, Kursiv, Liste, Link und Bilder). Bilder fügt ihr mit 🖼️ ein, die Größe ändert ihr, indem ihr das Bild anklickt: Mit dem runden Anfasser an der Ecke ziehen (auch mit dem Finger) oder 25 / 50 / 75 % / Original wählen. Das funktioniert in allen Texteditoren mit Bildern, auch bei Abteilungen und Mitarbeiter-Konten der Verwaltung. Bilder in Signaturen müssen über eine https-Adresse erreichbar sein (die Website-URL der Installation muss mit https:// beginnen), sonst blendet der Sicherheitsfilter sie aus. --- ## Für Admins: Das Adminportal Im Menü gibt es den Punkt **„Adminportal“**. Er ist für echte Admins immer sichtbar und für Co-Admins mit passenden Einzelrechten (siehe [Rechte und Rollen](#rechte-und-rollen)). Sieht ein Admin den Punkt nicht: einmal ab- und wieder anmelden und prüfen, ob der Bereich eingeklappt ist (Pfeil daneben). **Verwalten** | Punkt | Wofür | |---|---| | Abteilungen | Themenbereiche, denen Tickets zugeordnet werden; mit Status, Abteilungsleiter, Mitgliedern und SLA-Plan | | Prioritäten / SLA | Dringlichkeitsstufen mit Reaktions- und Lösungszeiten | | SLA-Pläne | Eigene Zeiten pro Abteilung oder Hilfethema | | Hilfethemen | Auswahl, die Kunden beim Ticket-Erstellen sehen, mit Zuordnung zu Abteilung, Priorität und Team | | Ticket-Felder, Benutzerdefinierte Listen | Eigene Zusatzfelder für Tickets | | Vorlagen | Textbausteine für schnelle Antworten | | Seiten | Frei gestaltbare Inhaltsseiten im Kundenportal (z. B. AGB, Impressum) | | E-Mail-Adressen | Absender- und Eingangsadressen, jeweils mit Abteilung, Hilfethema, optional eigenem SMTP und Test-Knopf | | Postfächer (Abruf) | Von wo E-Mails abgerufen werden | | E-Mail-Vorlagen | Texte der automatisch verschickten Mails | | Wissensdatenbank | Öffentliche Hilfe-Artikel für Kunden | | API-Schlüssel, Webhooks | Anbindung anderer Systeme | | Plugins | Zusatzfunktionen installieren und verwalten | **Kunden** | Punkt | Wofür | |---|---| | Kundenverzeichnis | Alle Kunden-Konten im Überblick | | Organisationen | Mehrere Kunden zu einer Firma bündeln | **Agenten** | Punkt | Wofür | |---|---| | Mitarbeiter | Konten anlegen, Abteilungen, Rolle je Abteilung vergeben | | Teams | Mitarbeiter-Gruppen, z. B. für Zuweisungen | | Rollen | Berechtigungssets | **System** | Punkt | Wofür | |---|---| | Admin-Protokoll | Alle wichtigen Änderungen und fehlgeschlagene automatische E-Mails | | Ticket-Regeln | Automatische Aktionen bei neuen Tickets | | Eskalationsregeln | Automatische Aktionen bei überfälligen oder liegengebliebenen Tickets | | Wiederkehrende Tickets | Regelmäßig neu erstellte Tickets (z. B. monatliche Checkliste) | | Zeiterfassung | Erfasste Bearbeitungszeiten einsehen | | Geschäftszeiten | Zeitfenster, in denen die SLA-Uhr läuft, inklusive Feiertage | | Einstellungen | Name, Logo, Zeitzone, E-Mail, Cron-Jobs, Datenschutz, Design u. v. m. | | Backup | Manuelle und automatische Sicherungen | | System-Update | Programm und Datenbank aktualisieren | ### Firmenlogo Unter **Einstellungen → Design → Firmenlogo** ladet ihr euer Logo hoch (PNG, JPG, GIF oder SVG, höchstens 2 MB). Es erscheint im Kundenportal, in den Anmeldeseiten und im Mitarbeiterbereich. Neben dem Logo steht standardmäßig der Name der Installation; mit **„Name neben dem Logo ausblenden“** zeigt DeskHub nur das Logo. Die Vorschau in den Einstellungen hat einen dunklen Hintergrund. Helle Logos sind auf den hellen Seiten des Kundenportals schwer zu erkennen, nehmt dafür lieber eine dunkle oder farbige Variante. ### Favicon Das Symbol im Browser-Tab, in Lesezeichen und auf dem Startbildschirm stellt ihr unter **Einstellungen → Design → Favicon** ein. Erlaubt sind ICO, PNG, JPG, GIF, WebP und SVG (höchstens 1 MB, am besten quadratisch, z. B. 256×256 Pixel). DeskHub prüft den Inhalt, nicht nur die Endung; SVG-Dateien mit Skripten werden abgelehnt. Das Favicon gilt auf allen Seiten (Kundenportal, Mitarbeiterbereich, Anmeldeseiten, Druckansichten). Ohne Favicon verwendet DeskHub das Logo, ohne beides das Standardsymbol. Browser merken sich Symbole hartnäckig: Nach einer Änderung hilft Strg + F5 oder ein neuer Tab. ### Kundenportal-Design (Themes) Unter **Einstellungen → Design** lassen sich mehrere Themes als ZIP-Datei hochladen, aktivieren und löschen. Ein aktiviertes Theme gilt für das ganze Kundenportal. Mit **„Standarddesign nutzen“** wird es wieder deaktiviert. Der Anzeigename wird aus dem Dateinamen der ZIP übernommen; lädt man ein Theme mit gleichem Namen erneut hoch, ersetzt es die vorhandene Version. Fertige Themes (darunter die Saison-Themes **Halloween Nacht** und **Weihnachten Winter**) liegen als ZIP im Ordner `theme/` des Projekts. Außerdem könnt ihr Themes direkt aus dem Katalog der Plugin-Webseite installieren: Auf derselben Seite erscheint unter **„Themes aus dem Katalog“** das Angebot automatisch. Prüfsumme und Signatur (mit dem unter Plugins hinterlegten Herausgeber-Schlüssel) werden vor der Installation geprüft; aktiviert wird das Theme erst, wenn ihr es selbst aktiviert. --- **Im Urlaub keine Benachrichtigungen, die Vertretung bekommt sie stattdessen (ab Server 1.0.59):** Wer den Urlaubsmodus eingeschaltet hat (Profil oder Plugin „Urlaub und Vertretung“), bekommt keine Mails (neues Ticket, überfällig, Erwähnung, Team-Zuweisung, Eskalation an den Bearbeiter), keine Browser-Push-Meldungen und keine Android-Popups. Stattdessen bekommt die Vertretung (auch über Ketten, ohne Doppelte) diese Benachrichtigungen, damit sie die Tickets bearbeiten kann; ohne Vertretung bekommt niemand etwas. Nach dem Urlaub gilt wieder alles wie vorher. Ausgenommen sind Sicherheitsmails (Anmelde-Wächter, Passwort zurücksetzen) und Systemmeldungen an Administratoren (Postfach, Backup). Bei der SLA-Überschreitung geht die Mail an die Vertretung, ohne Vertretung an die Abteilung. ## Anmelde-Wächter (ab Server 1.0.54) Der Wächter schützt die Anmeldung der Mitarbeiter (Web **und** Android-/Windows-App) und ist fest in DeskHub eingebaut. Adminportal → **Anmelde-Wächter**. - **Geräte und Orte merken:** Ein Gerät ist ein Browser (Kennung in einem Cookie `dh_device`) oder eine App (Gerätename). Ein Ort ist das Land (nur wenn Cloudflare es mitschickt) oder sonst das Netz der IP-Adresse. Die erste Anmeldung eines Kontos wird still gemerkt. - **Warnung per Mail:** Bei einem neuen Gerät (und, abschaltbar, bei einem neuen Ort) bekommt der Mitarbeiter eine Mail mit Zeit, Gerät, Ort und IP-Adresse und dem Link **„Das war ich nicht“**. Der Link gilt 7 Tage und einmal. Er macht das Passwort ungültig, beendet alle App-Anmeldungen, vergisst die gemerkten Geräte, beendet laufende Browser-Sitzungen und informiert die Administratoren. Danach legt der Mitarbeiter über „Passwort vergessen?“ ein neues Passwort fest. - **Sperre nach Fehlversuchen:** Standard 5 Fehlversuche, dann 15 Minuten gesperrt (einstellbar, 3 bis 20 Versuche, 5 bis 240 Minuten); gilt für Web und App. Auch falsche 2FA-Codes werden jetzt gebremst. Die Sperre wird einmal je Sperrzeit protokolliert und per Mail an den Kontoinhaber und die Administratoren gemeldet. - **Protokoll:** Jede Anmeldung, jeder Fehlversuch, jede Sperre und jede „Konto gesichert“-Meldung mit Zeit, Konto, Gerät, Ort, IP und Kanal; mit Zählern der letzten 24 Stunden, Filter und Suche. Einträge werden nach 180 Tagen (einstellbar) gelöscht. - **Für jeden Mitarbeiter:** Unter Profil → Sicherheit stehen „Meine Geräte und Anmeldungen“; unbekannte Geräte lassen sich dort entfernen. - **Grenzen:** Ohne Fremddienst gibt es keinen genauen Standort; mobile Netze wechseln das Netz oft, darum lässt sich die Ort-Warnung abschalten. Wer Cookies löscht, gilt als neues Gerät. Die Warn-Mail braucht einen funktionierenden Mailversand (Fehlgeschlagenes landet in der Mail-Warteschlange). Test: `tests/login_guard.php`. ## E-Mails versenden (SMTP) Das ist der wichtigste erste Schritt: Damit Kunden eine Bestätigung mit ihrer Ticketnummer bekommen, muss der E-Mail-Versand eingerichtet sein. 1. Adminportal → **Einstellungen → E-Mail**. 2. Server, Port, Benutzername, Passwort und Absenderadresse eures E-Mail-Anbieters eintragen. Diese Daten findet ihr im Kundenlogin eures Anbieters unter „E-Mail-Konten“ oder „Postfach-Einstellungen“. 3. Auf **„Test-Mail senden“** klicken. Kommt sie an, funktioniert der Versand. **Eigener Versand pro Absenderadresse:** Unter Adminportal → **E-Mail-Adressen** kann jede Adresse einen eigenen SMTP-Server bekommen (Reiter „Abgehend (SMTP)“). Mit **„Testen“** prüft ihr Abruf und Versand jeder Adresse einzeln. Gibt es für eine Adresse keinen eigenen Server, wird der allgemeine verwendet. **Häufigste Stolperfalle:** Die Absenderadresse einer Abteilung muss bei eurem Mail-Anbieter existieren und freigeschaltet sein. Sonst blockt der Anbieter den Versand. Im Zweifel die Adresse deaktivieren oder löschen, dann gilt die Standard-Absenderadresse. Kommt trotz erfolgreicher Test-Mail eine bestimmte automatische Mail nicht an, zeigt das **Admin-Protokoll** die genaue Fehlermeldung des Anbieters. **Port und Verschlüsselung:** „STARTTLS“ gehört zu Port **587**, „SSL/TLS“ zu Port **465**. Beim Umschalten setzt DeskHub den Port selbst, sofern dort noch ein Standardport steht. Passen beide nicht zusammen, nennt die Fehlermeldung genau das. ### Mail-Warteschlange Scheitert der Versand (SMTP-Server nicht erreichbar, falscher Port, Anbieter-Störung), geht die Mail **nicht verloren**: DeskHub speichert sie und versucht es alle paar Minuten erneut, nach 5, 10, 20, 40 und 60 Minuten und dann alle 2 bis 6 Stunden, höchstens 10-mal und höchstens 48 Stunden lang. Danach gilt sie als aufgegeben. - **Ansehen und steuern:** Adminportal → **Mail-Warteschlange** (nur Administratoren). Dort stehen Empfänger, Betreff, Versuche und letzter Fehler; pro Mail „Jetzt senden“ oder „Löschen“, dazu „Alle wartenden jetzt senden“, „Aufgegebene erneut versuchen“ und Aufräumen. Erledigte und aufgegebene Einträge löscht DeskHub nach 30 Tagen von selbst. - **Warnung:** Wartende Mails zeigt die Statusleiste als Warnung, aufgegebene als Fehler. - **Ausschalten:** Mit dem Schalter auf der Seite (Standard: an). - **Nicht in der Warteschlange:** Test-Mails (sie sollen sofort den Fehler zeigen) und Adressen mit der Endung `.invalid`. - **Cron:** Der Job „Mail-Warteschlange“ läuft alle 2 Minuten im eingebauten Hintergrundbetrieb. Mit eigenem Cronjob: `*/5 * * * * php /pfad/zu/deskhub/cron/process_mail_queue.php`. - **Grenzen:** Die Warteschlange hilft bei Störungen des Versandwegs. Eine Mail an eine nicht existierende Adresse nimmt der Server meist an und meldet den Fehler erst später; das kann DeskHub nicht erkennen. Mails stehen vollständig (mit Text) in der Datenbank, das Backup enthält sie also auch. --- ## E-Mails automatisch abrufen (Postfächer) Damit eine Mail an z. B. `support@eure-domain.de` automatisch als Ticket erscheint, braucht DeskHub Zugriff auf das Postfach per **IMAP**. ### Ein Postfach einrichten 1. Adminportal → **Postfächer (Abruf)** → „Neues Postfach“. 2. Server, Port, Benutzername und Passwort eintragen (meist unter „IMAP-Zugang“ beim Anbieter). 3. Optional eine **Standardabteilung** wählen, sonst entscheidet die Empfängeradresse. 4. Speichern und in der Liste auf **„Testen“** klicken. Läuft der Test, ruft DeskHub das Postfach ab, sobald die [Automatisierung](#automatisierung-cronjobs) aktiv ist. ### Mehrere Postfächer Habt ihr getrennte Postfächer pro Abteilung (z. B. `technik@` und `vertrieb@`), legt ihr für jedes ein eigenes Postfach mit eigener Standardabteilung an. DeskHub ruft alle aktiven Postfächer nacheinander ab. ### Eigenes Ticket-Formular pro Abteilung Unter **Abteilungen → Formular** (oder im Reiter „Ticket-Formular“ der Abteilung) kann jede Abteilung ein komplett eigenes Formular bekommen. Ist es aktiv, sieht ein Kunde, der diese Abteilung wählt (direkt oder über ein Hilfe-Thema), nur die dort festgelegten Felder: eigene Felder (Text, Mehrzeilig, Auswahl, Checkbox, Zahl, Datum, mit Pflicht und Reihenfolge), Überschrift, Einleitung, Bezeichnungen von Betreff und Beschreibung, Platzhaltertext und Text des Absende-Knopfs. Betreff und Anhang lassen sich ausblenden (ohne Betreff wird „Anfrage “ verwendet). Die allgemeinen Ticket-Felder und die Felder der Hilfe-Themen gelten dann für diese Abteilung nicht. Name und E-Mail werden immer abgefragt. Abteilungen ohne eigenes Formular nutzen weiter das Standardformular. ### Eine Adresse einer Abteilung zuordnen Läuft alles in einem Sammelpostfach zusammen (z. B. per Weiterleitung), muss DeskHub wissen, welche Empfängeradresse zu welcher Abteilung gehört: - Tragt bei einer Abteilung eine E-Mail-Adresse ein, dann legt DeskHub den Eintrag automatisch an. - Oder legt unter Adminportal → **E-Mail-Adressen** weitere Adressen an, auch mehrere auf einmal (eine pro Zeile). Dort lässt sich zusätzlich ein **Hilfethema** festlegen, das Tickets über diese Adresse automatisch bekommen. Ist eine Adresse nirgends hinterlegt, landet das Ticket in der Standardabteilung. Ist die zugeordnete Abteilung deaktiviert, wird ebenfalls die Standardabteilung genutzt. ### Nach dem Abruf **Tastenkürzel, Bildvorschau, verknüpfte Tickets, Antworten einplanen, Berichte per E-Mail, Datenschutz-Werkzeuge (Server 1.0.68):** - **Tastenkürzel** (`assets/js/staff-shortcuts.js`, in jeder Mitarbeiterseite): In der Ticketliste `j`/`k` wählen, `Enter`/`o` öffnen, `r` öffnen und antworten, `x` ankreuzen, `/` Suche, `n` neues Ticket; im Ticket `j`/`k` durch die Nachrichten, `r` Antwort schreiben, `u` zurück zur Liste; `Strg + Enter` sendet die Antwort; `?` zeigt die Übersicht und erlaubt das Abschalten (gilt nur für diesen Browser). Die Kürzel greifen nicht in Eingabefeldern. - **Bildvorschau** (`assets/js/ticket-lightbox.js`): Ein Klick auf ein Bild im Ticket zeigt es groß, ohne Download; Pfeiltasten blättern, `Esc` schließt, ein Knopf lädt herunter. Ohne JavaScript öffnet der Link das Bild wie zuvor in einem neuen Tab. - **Verknüpfte Tickets** (`includes/ticket_links.php`, Tabelle `ticket_links`): Im Ticket unter „Organisation“ lassen sich beliebige Tickets per Nummer verknüpfen: *verwandt*, *doppelt* oder *blockiert*. Beide Tickets zeigen die Verknüpfung mit der passenden Bezeichnung („Doppelt zu“ / „Hat Duplikat“, „Blockiert“ / „Blockiert durch“). Mitarbeiter sehen nur Tickets ihrer Abteilungen; ein offener Blocker wird als Hinweis angezeigt. Beim Löschen eines Tickets verschwinden dessen Verknüpfungen. - **Antwort einplanen** (`includes/scheduled_replies.php`, Tabelle `scheduled_replies`, Hintergrundjob `cron/send_scheduled_replies.php`, jede Minute): Unter dem Antwortformular „Später senden“ wählt Datum und Uhrzeit (Serverzeit, höchstens 90 Tage voraus). Die Antwort erscheint bis dahin als „Geplante Antworten“ im Ticket und lässt sich vom Verfasser oder einem Administrator abbrechen. Beim Senden gelten Status, Abschlussgrund und Signatur wie beim sofortigen Antworten. Anhänge sind beim Einplanen nicht möglich. Ist das Ticket gelöscht oder der Verfasser deaktiviert, wird nichts gesendet und der Grund gespeichert. - **Berichte per E-Mail** (`includes/report_schedules.php`, Tabelle `report_schedules`, Hintergrundjob `cron/send_report_schedules.php`, alle 5 Minuten): Im Bericht-Baukasten unter „Versand per E-Mail (Zeitplan)“ wird ein gespeicherter Bericht täglich, wöchentlich oder monatlich für einen relativen Zeitraum (gestern, letzte 7 oder 30 Tage, letzte Kalenderwoche, letzter Monat) als Tabelle per Mail gesendet. Berechnet wird mit den Abteilungsrechten des Einrichters. Nicht-Administratoren dürfen nur an aktive Mitarbeiter senden, Administratoren auch an externe Adressen (höchstens 10 Empfänger). „Test senden“ verschickt sofort. **Weniger Mails (ab Server 1.0.70, Datenbank-Update `php_0073`):** Je Zeitplan gibt es drei Schalter, die auch nachträglich umschaltbar sind: *Nur bei Daten* (ein leerer Bericht wird nicht gesendet), *Nur bei Änderung* (gleiche Zahlen wie beim letzten Versand: nichts senden) und, bei „Täglich“, *Nur Mo–Fr*. Die ersten beiden sind für neue und bestehende Zeitpläne standardmäßig an; „Test senden“ sendet immer. Warum nichts kam, steht in der Spalte „Zuletzt“ („Übersprungen: …“). Der Versand nutzt den eingerichteten E-Mail-Weg; ohne ihn steht „Kein Empfänger erreicht“ im Zeitplan. - **Datenschutz-Werkzeuge** (`includes/gdpr.php`, optional): Unter Einstellungen → Datenschutz einschaltbar („Auskunft und Löschung auf Anfrage im Kundenprofil anbieten“, standardmäßig aus). Im Kundenprofil sehen dann nur Administratoren „Alle Daten exportieren (JSON)“ (Stammdaten, alle Tickets mit Nachrichten, Anhangsnamen, Mitleser, Bewertung, Notizen; interne Notizen sind als intern gekennzeichnet, Dateiinhalte fehlen) und „Kundendaten löschen“ (Bestätigung durch Eingabe der E-Mail-Adresse; Tickets bleiben anonymisiert mit Nummer, Betreff, Status und Zeiten; Nachrichten, Dateien und Notizen des Kunden sowie das Konto werden entfernt; offene Tickets nur mit ausdrücklichem Erzwingen). Beides steht im Audit-Log. Dateien, die Mitarbeiter gesendet haben, und Namen in Mitarbeiter-Notizen oder Zitaten bleiben unberührt und sind bei Bedarf von Hand zu prüfen. - Die englische Sprachdatei (`lang-en` 1.1.11) enthält die neuen Texte. Muster mit mehreren Treffern wählt die Übersetzung jetzt nach Länge des Schlüssels, sodass ein spezielles Muster ein allgemeineres nicht mehr überdeckt. **Update überschreibt Dateien unabhängig vom Besitzer (Server 1.0.100):** Gehört eine Datei oder ein ganzer Ordner einem anderen Benutzer (z. B. `root`), ersetzt das Update den obersten nicht beschreibbaren Ordner samt Inhalt durch einen eigenen (umbenennen, kopieren, alten löschen; im beschreibbaren Elternordner geht das unabhängig vom Besitzer der Dateien darin). Voraussetzung: der DeskHub-Hauptordner selbst gehört dem Webserver-Benutzer. `config`, `database`, `uploads`, `backups`, `plugins` und `app_downloads` werden nie umgesetzt. Lässt sich der alte Ordner nicht löschen, bleibt er als `….alt-JJJJMMTT-HHMMSS` liegen (die Update-Meldung nennt ihn, die `.htaccess` sperrt ihn; bitte später per FTP entfernen). **Rechte-Skript (Server 1.0.99, `tools/fix-permissions.sh`, kommt mit jedem Update mit):** Setzt Ordner auf 755, Dateien auf 644, `config/config.php` und die Datenbank auf 640 und prüft am Ende, ob der Webserver in die wichtigen Ordner schreiben darf. Aufruf auf dem Server (SSH oder beim Hoster als geplante Aufgabe): `sh tools/fix-permissions.sh --check` zeigt nur an, was nicht stimmt; `sh tools/fix-permissions.sh` setzt die Rechte; `sh tools/fix-permissions.sh BENUTZER` setzt zusätzlich den Besitzer (nur als root möglich, bei Plesk unter „Geplante Aufgaben“ als Befehl, z. B. `sh /pfad/zu/deskhub/tools/fix-permissions.sh windelweb.org_87bb9o1qa75`). Mit `--group-write` werden 775/664 gesetzt, wenn Webserver und FTP-Benutzer nur über eine Gruppe schreiben. Ändert nur Rechte und Besitzer, löscht nichts. **Nicht auf einem Linux-Server ausprobiert** (getestet nur auf Syntax und auf einer Windows-Kopie); zuerst mit `--check` ansehen. **Ordner mit fremdem Besitzer (Server 1.0.97):** Darf der Webserver in einen Ordner nicht schreiben (er gehört einem anderen Benutzer), liegt der Ordner aber in einem beschreibbaren, ersetzt das Update ihn durch einen eigenen (Inhalt wird kopiert, der alte Ordner gelöscht oder bei Misserfolg als `.alt-…` gemeldet). Die Update-Seite zeigt außerdem den Besitzer der betroffenen Datei und des Ordners. Die Änderungen am Update-Fenster zeigt der Hinweis „Update verfügbar“ (1.0.96). **Vorhandene `.htaccess` bleiben bei Updates erhalten (Server 1.0.95):** Hoster tragen dort eigene Zeilen ein (PHP-Version, Handler); ein Update überschreibt sie nicht mehr. Fehlt eine, wird sie aus dem Paket angelegt. **Das Update ersetzt auch seine eigene Seite (Server 1.0.94):** `staff/update.php` wird bei einem Update als letzte Datei mit ersetzt (bisher musste sie von Hand hochgeladen werden). Fehlermeldungen zu Schreibrechten nennen jetzt Rechte und Beschreibbarkeit einer betroffenen Datei und ihres Ordners. Das Update setzt fehlende Schreibrechte an Dateien, die dem Webserver-Benutzer gehören, selbst (Server 1.0.93). **Update meldet Schreibfehler (Server 1.0.91):** Das System-Update schreibt Dateien, die dem FTP-Benutzer gehören, über eine Hilfsdatei neu und meldet ausdrücklich, wenn Dateien oder `version.php` nicht geschrieben werden konnten (bisher zeigte es trotzdem „Update installiert“ und die Versionsnummer blieb alt). Dann Rechte der Dateien prüfen. **Die Konfiguration bleibt bei jedem Update unangetastet (Server 1.0.90):** Aus dem Update-Paket wird nichts aus `config/` installiert (auch `config.php` nicht, in jeder Schreibweise), ebenso keine `.env`; Datenbank, Plugins, Uploads, Backups und App-Dateien ebenfalls nicht. Test: `tests/update_security.php`. **System-Updates von der Plugin-Webseite (Server 1.0.89):** Adminportal → System-Update holt neue Versionen jetzt zuerst von der Plugin-Webseite (dieselbe Adresse und derselbe Zugangsschlüssel wie der Katalog), **Gitea bleibt Ausweichquelle**: Liefert die Plugin-Webseite nichts oder ist nicht erreichbar, erscheinen die Gitea-Releases wie bisher (auf der Seite steht, woher die Liste kommt). - **Veröffentlichen (Herausgeber):** Plugin-Webseite → Reiter **„DeskHub-Update“** (eigener Reiter, nicht mehr unter Apps; dort stehen auch alle veröffentlichten Versionen), das Projekt-ZIP hochladen. Die Version wird aus `version.php` im Paket gelesen (eine eingetippte hat Vorrang), die Plugin-Webseite **signiert das Paket selbst** mit ihrem Signierschlüssel (Nachricht wie bei `tools/release-sign.php`); `.sig`-Datei und Gitea-Release sind dafür nicht mehr nötig. Ältere Versionen bleiben für „Bestimmte Version installieren“ erhalten (die letzten 20). - **Installieren:** DeskHub lädt die Liste (`app-release.php?platform=server&list=1`), danach Paket (`&version=…&download=1`), prüft **SHA-256 und Signatur** (mit eingebautem Herausgeber-Schlüssel Pflicht; Paket ohne gültige Signatur oder mit falscher Prüfsumme wird abgelehnt und im Admin-Protokoll vermerkt) und installiert wie bisher mit Backup und Datenbank-Update. - **Wichtig für die Umstellung:** Die Plugin-Webseite muss die neue Fassung haben (`app-release.php`, `inc/lib.php`, `admin.php`) und dort muss mindestens eine Version von „DeskHub-Server“ liegen, sonst nimmt DeskHub weiter Gitea. Server mit einer Version vor 1.0.89 kennen die neue Quelle nicht und müssen einmal wie bisher (Gitea oder Upload) auf 1.0.89 gebracht werden. Test: `tests/update_security.php`, `tests/plugin_website_apps.php`. **Nicht gegen die echte Plugin-Webseite ausprobiert.** **Plugin-Updates mit einem Klick (Server 1.0.88):** „Jetzt aktualisieren“ an einem installierten Plugin installiert die neue Version aus dem Katalog sofort (Prüfsumme und Signatur wie bei der Installation), statt in den Reiter „Plugin hinzufügen“ zu springen. Im Hinweis „Updates verfügbar“ aktualisiert „Jetzt aktualisieren“ bzw. „Alle aktualisieren“ alle Plugins auf einmal; ein fehlgeschlagenes Update wird gemeldet und stoppt die anderen nicht. Test: `tests/plugins.php`. **Apps und Sprachpaket zu den neuen Rechten (Server 1.0.87, Windows-Programm 2.12.3, Android-App 3.5.3, `lang-en` 1.1.19):** - **Windows-Programm und Android-App** kennen alle 44 Rechte. Der **Rollen-Editor** zeigt sie in den Gruppen und mit den Beschriftungen vom Server (Fallback für ältere Server) und kreuzt für jede Rolle die **wirksamen** Rechte an (Standardwerte für Rechte, die in der Rolle noch fehlen; neue Rollen beginnen mit den Standardrechten). Bisher hätte das Speichern in der App solche Standardrechte stillschweigend abgeschaltet. Die Schnittstelle `roles.php` liefert dafür `effectivePermissions`, `permissionLabels` und `permissionGroups`. - **Rechte wirken in den Apps wie im Web:** „E-Mails abrufen“ (`fetch_mail`), „Für alle Mitarbeiter sichtbar“ bei gespeicherten Ansichten und Berichten (`share_views`), die **Sperrliste** (`manage_banlist`, nicht mehr nur für Administratoren), die **Automatisierung** (`manage_automation`) und das **Ändern des Status der Kollegen** (`manage_availability`). Wer eines dieser Rechte hat, sieht die Verwaltung, auch ohne Administrator zu sein. - **Englisch:** `lang-en` 1.1.19 übersetzt alle Rechte mit Erklärungen, die Rollen-Vorlagen, die Rollen-Seite, die Hilfe-Seite und viele ältere Rückfragen und Beschriftungen (3901 Texte). Die Wörterbücher von Windows-Programm und Android-App enthalten die Rechte-Texte ebenfalls. **Nicht übersetzt** bleiben Daten (Namen, Tickets), die Texte der automatischen Mails und die Handbuch-PDF. Test: `tests/lang_en_rights.php`. - Beide Apps sind mit derselben Signatur gebaut wie bisher und lassen sich über die alte Version installieren (Android: `versionCode` 57). **Nicht auf Geräten ausprobiert:** geprüft sind die Windows-Oberflächentests (114), die Android-Unit-Tests und die Signatur des Pakets; bitte nach dem Update den Rollen-Editor und eine Rolle mit nur einem Recht auf einem echten Gerät ansehen. Die Chrome-Erweiterung (2.1.1) ist unverändert. **Vordefinierte Rollen (Server 1.0.86, Datenbank-Update `php_0076`):** Bei Installation und Update legt DeskHub elf fertige Rollen an, die ihr wie jede andere Rolle **ändern oder löschen** könnt (Adminportal → Rollen, gekennzeichnet als „vordefiniert“): **Co-Administrator** (alle vergebbaren Rechte), **Support-Manager**, **IT / Technik**, **Teamleitung**, **Support 2nd Level**, **Support 1st Level**, **Redaktion (Wissen und Inhalte)**, **Auswertung / Controlling**, **Teamverwaltung / Schichtplanung**, **Aushilfe / Praktikant** und **Nur lesen**. Die Rechte jeder Rolle stehen in `permission_presets()` (`includes/permissions.php`) und stehen im Formular auch als „Vorlage laden“ zur Verfügung (dort zusätzlich „Mitarbeiter“ = Standardrechte). Vorhandene Rollen werden nie verändert: Gibt es schon eine Rolle gleichen Namens (Groß-/Kleinschreibung egal), bleibt sie wie sie ist. Eine gelöschte vordefinierte Rolle kommt nicht von selbst wieder; auf der Rollen-Seite legt der Knopf **„Fehlende Rollen anlegen“** (nur Administratoren) genau die fehlenden nach. Der „Co-Administrator“ ist **kein** echter Administrator: Einstellungen, Backup, System-Update, Plugins, API-Schlüssel, Webhooks, Import und Sicherheitsprüfung bleiben gesperrt. Test: `tests/default_roles.php`. **Rechte neu geordnet (Server 1.0.85, `includes/permissions.php`):** Alle Rechte stehen in einem **Katalog** (`permission_catalog()`: Gruppe, Beschriftung, Hinweis, Standardwert, Adminportal-Bereich ja/nein). Es gibt jetzt **44 Rechte** statt 25. `default_permissions()`, `admin_section_permissions()`, die Rollen-Seite, die Mitarbeiter-Übersicht, die App-Schnittstelle (`me.php`, `roles.php`) und der Menüaufbau lesen alle aus diesem Katalog; ein neues Recht wird nur dort eingetragen. - **Neue Rechte:** Zusammenführen und teilen, Verknüpfen, Sperrliste und Absender sperren, Tickets als CSV exportieren, E-Mails jetzt abrufen, Ansichten teilen, Berichte per E-Mail versenden, Kundenprofile ansehen (Tickets) sowie für das Adminportal: Kundenverzeichnis, Textbausteine (das bisher vorhandene Recht gilt jetzt wirklich), Ticket-Felder und Listen, Ticket-Vorlagen, Ticket-Regeln und wiederkehrende Tickets, Seiten, Sprachen, Statusseite, Mail-Warteschlange, Anmelde-Wächter ansehen, Problemmanagement, Status und Schichten der Kollegen, Hilfe und Handbuch. Bisher waren diese Seiten fest nur für echte Administratoren oder für alle offen. - **Nichts bricht:** Eine gespeicherte Rolle behält ihre Werte. Fehlt ein **altes** Recht in einer Rolle, gilt wie bisher „nein“; fehlt ein **neues**, gilt der Standardwert (was bisher jeder durfte, bleibt erlaubt; neue Adminbereiche sind aus). Eine ältere App, die ein neues Recht nicht kennt, lässt es beim Speichern einer Rolle unverändert. - **Sammelaktionen** in der Ticketliste prüfen jetzt die Rechte je Ticket und Abteilung (Zuweisen, Priorität, Status, Löschen, Absender sperren); bisher konnte jeder Mitarbeiter per Sammelaktion löschen. - **Rollen-Seite:** Rechte in sieben Gruppen mit Erklärung, „Alle/Keine“ je Gruppe, Vorlagen (Mitarbeiter, Nur lesen, Teamleitung, Support-Manager), Zähler und eine **Rechte-Übersicht** (Tabelle Rolle × Recht). Wer kein Administrator ist, kann keine Rechte vergeben, die er selbst nicht hat (keine Hochstufung über Rollen). - **Weiterhin nur echte Administratoren:** Einstellungen, Backup, System-Update, Plugins, API-Schlüssel, Webhooks, osTicket-Import, Sicherheitsprüfung, die Einstellungen des Anmelde-Wächters (inkl. „Passkeys erlauben“, Protokoll leeren) und die Datenschutz-Löschfunktionen. - **Apps:** Die Schnittstelle liefert alle 44 Rechte, `permissionLabels` und `permissionGroups`. Das Windows-Programm zeigt die Beschriftungen vom Server an; im Rollen-Editor der Android-App erscheinen die neuen Rechte erst mit einer neuen App-Version (bis dahin bleiben sie beim Speichern erhalten). Tests: `tests/permissions.php`, `tests/permissions_web.php`. **Hilfe-Seite für Administratoren mit Handbuch (Server 1.0.84, `staff/help.php`, `includes/manual_file.php`):** Adminportal → **System → Hilfe** (nur echte Administratoren, auch Co-Admins sehen sie nicht). Die Seite hat das **Handbuch (PDF)** zum Herunterladen mit Größe, Stand, Version und SHA-256-Prüfsumme, eine **Kurzhilfe** („Erste Schritte“ mit Sprungmarken, „Wenn etwas nicht funktioniert“) und die Daten dieser Installation (Version, PHP, Website-URL). Das Handbuch **kommt mit dem Update**: Die Datei `docs/DeskHub-Handbuch.pdf` gehört zum Programmpaket (der Ordner `docs/` ist für den Webserver gesperrt, ausgeliefert wird sie nur über die Hilfe-Seite an Administratoren). Es gibt deshalb keinen Upload. Das System-Update installiert diese eine Datei (alle anderen Dateien in `docs/` werden wie bisher übersprungen, Regel in `update_path_is_skipped()`). **Beim Veröffentlichen einer Version** die aktuelle Fassung aus `release/DeskHub-Handbuch.pdf` (erzeugt mit `tools/manual/`) nach `DeskHub-Webseite/docs/DeskHub-Handbuch.pdf` kopieren; fehlt sie, zeigt die Seite „nicht vorhanden“. Die Datei ist rund 18 MB und vergrößert das Update-Paket entsprechend. Test: `tests/help_page_web.php`. **Neues Mail-Design (Server 1.0.80, `includes/mailer.php`):** Alle System-Mails (Ticket erstellt, neue Antwort, neues Ticket, SLA überschritten, Chat-Verlauf, Erinnerung, Passwort zurücksetzen, Anmelde-Wächter, Abmelden, Zufriedenheit u. a.) haben einen neuen Rahmen: breiterer Kopf mit Name oder **Logo** (das Firmenlogo aus Einstellungen → Design, wenn eine https-Adresse oder ein Pfad auf dem Server gesetzt ist; „Name neben dem Logo ausblenden“ gilt auch hier), Überschrift je Mail, Ticketnummer als **volle Karte mit Farbbalken**, Antworttext als Zitatkasten, ein **großer Knopf** (in Outlook als echter Knopf über VML, sonst als abgerundeter Link) und eine ruhige Fußzeile. Der Aufbau ist tabellenbasiert mit Inline-Styles und 600 px Breite, die auf dem Handy schrumpft; Flexbox, `