Upload via GUI (1 Datei)

This commit is contained in:
2026-10-28 07:55:34 +00:00
parent e18614672f
commit 2837074176
+27 -11
View File
@@ -4,7 +4,7 @@
![DeskHub Kundenportal](DeskHub-Webseite/docs/images/customer-portal.png)
**Aktuelle Versionen:** Server **1.0.47** · Android-App **3.4.4** · Windows-Programm **2.11.0** · Minecraft-Plugin **1.0.0**
**Aktuelle Versionen:** Server **1.0.50** · Android-App **3.4.5** · Windows-Programm **2.11.1** · Minecraft-Plugin **1.1.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.
@@ -284,6 +284,19 @@ Das ist der wichtigste erste Schritt: Damit Kunden eine Bestätigung mit ihrer T
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)
@@ -384,6 +397,7 @@ Der Quelltext von DeskHub ist deutsch. Jede weitere Sprache ist ein Plugin („S
- **Aufbau eines Sprachpakets:** `plugin.json` (mit `"language": {"code":"fr","name":"Français","flag":"flag.svg","strings":"strings.json"}`, ohne Berechtigungen), `plugin.php` (leer), `flag.svg` (SVG oder PNG, höchstens 40 KB) und `strings.json`. Schlüssel = deutscher Text, Wert = Übersetzung; `{}` steht für wechselnde Teile („Willkommen, {}“ → „Welcome, {}“), `{#}` nur für Zahlen, `{1}`/`{2}` in der Übersetzung ändern die Reihenfolge.
- **Wie übersetzt wird:** die fertige Seite wird durchsucht (Text zwischen Tags, `placeholder`/`title`/`alt`, Knopf-Beschriftungen, Texte in `confirm()`/`alert()`); ein Schlüssel muss dem deutschen Text genau entsprechen (Leerraum zählt nicht). Was nicht übersetzt ist, bleibt deutsch. Bei Deutsch läuft nichts davon, die Seiten kommen unverändert.
- **Sammelmodus für Übersetzer:** Adminportal → Sprachen → „Sammelmodus“ merkt sich die Texte aller besuchten Seiten; „Vorlage laden“ liefert eine fertige `strings.json` mit allen Texten (Bereits Übersetztes ist eingetragen, der Rest leer).
- **Übersetzungen in den Plugins (neu, ab Server 1.0.50):** Jedes Plugin bringt seine Texte selbst mit: Datei `lang/<Sprachcode>.json` im Plugin-Ordner (zum Beispiel `lang/en.json`, gleiches Format wie `strings.json`: Schlüssel = deutscher Text, Wert = Übersetzung, `{}` und `{#}` für wechselnde Teile). Wird eine Sprache gewählt, lädt DeskHub diese Dateien aller **aktiven** Plugins zusätzlich zum Sprachpaket; steht ein Text in beiden, gilt der aus dem Sprachpaket. **Eine neue Sprache** braucht damit nur das Sprachpaket und je Plugin eine Datei `lang/<Code>.json`; Plugins ohne Datei bleiben in dieser Sprache deutsch. Adminportal → Sprachen zeigt als Tabelle, welches Plugin für welche Sprache Texte mitbringt. Auch Plugin-Name, Beschreibung und Menüpunkt lassen sich so übersetzen (Schlüssel = der Text aus `plugin.json` bzw. `plugin_register_menu`). Alle mitgelieferten Plugins haben eine `lang/en.json` (Stand: Seiten, Beschriftungen, Meldungen; Texte, die ein Plugin per Discord, Telegram oder E-Mail an Kunden schickt, bleiben deutsch). Ältere Server ignorieren die Dateien einfach.
- **Stand English:** Kundenportal vollständig, Mitarbeiterbereich: Navigation, Seitentitel, Beschriftungen, Knöpfe, Meldungen und Rückfragen. Lange Hilfetexte in den Einstellungen und alle Daten (Tickets, Namen, E-Mail-Texte) bleiben deutsch. Nicht enthalten: Android-App, Windows-Programm und die Texte der automatischen E-Mails.
## Sprachen der Apps (Deutsch und English)
@@ -675,7 +689,7 @@ Katalog und Schlüssel sind **fest in DeskHub eingebaut** (`includes/catalog_def
### Mitgeliefertes Plugin: Tagesbericht per E-Mail
Unter `Plugins/plugins/tagesbericht-1.0.0.zip` (im Projektordner neben `DeskHub-Webseite/`) liegt ein fertiges Plugin. Es schickt Mitarbeitern jeden Morgen eine Übersicht: offene, unzugewiesene, überfällige und eigene Tickets, Zugänge und Erledigungen der letzten 24 Stunden sowie die fünf ältesten offenen Tickets. Jeder sieht nur Tickets seiner Abteilungen.
Unter `Plugins/plugins/tagesbericht-1.0.1.zip` (im Projektordner neben `DeskHub-Webseite/`) liegt ein fertiges Plugin. Es schickt Mitarbeitern jeden Morgen eine Übersicht: offene, unzugewiesene, überfällige und eigene Tickets, Zugänge und Erledigungen der letzten 24 Stunden sowie die fünf ältesten offenen Tickets. Jeder sieht nur Tickets seiner Abteilungen.
Nach Installation und Aktivierung findet ihr im Menü den Punkt **„Tagesbericht“**: Dort schaltet ihr den Versand ein, legt Uhrzeit, Werktage und Empfänger fest und könnt einen **Testbericht** an euch schicken. Voraussetzung ist der eingerichtete E-Mail-Versand.
@@ -685,20 +699,20 @@ Diese Plugins liegen als Zip unter `Plugins/plugins/`. **Alle außer dem Discord
| Plugin | Zip | Berechtigungen | Was es tut |
|---|---|---|---|
| **Anhänge-Virenscan** | `virenscan-1.2.0.zip` | hooks.tickets, hooks.cron, ui.menu, db.migrations | Prüft Anhänge neuer Tickets und Antworten und sperrt gefährliche Dateien (Quarantäne, interne Notiz, Tag „Virus-Verdacht“, Mail an den Administrator). **Braucht nichts auf dem Server:** Die eingebaute Dateianalyse erkennt Programme und Skripte, getarnte Dateien (zum Beispiel eine .exe als PDF), doppelte Endungen, Office-Makros, PDF-Tricks, Skripte in HTML/SVG und Archive mit solchen Dateien. Optional gleicht eine **Hash-Abfrage bei VirusTotal** (nur der SHA-256-Wert, kostenloser Schlüssel) Dateien mit bekannter Schadsoftware ab; ClamAV wird zusätzlich genutzt, falls es schon installiert ist. Erkennt keine ganz neuen Viren in normal aussehenden Dokumenten. Menüpunkt im Adminportal, nur für Administratoren. |
| **Spam- und Missbrauchsfilter** | `spamfilter-1.0.0.zip` | hooks.tickets, ui.menu, ui.sidebar, db.migrations | Bewertet jedes neue Ticket mit Punkten (Phishing-Wendungen, Marken-Nachahmung im Absendernamen, Link-Verkürzer, Wegwerf-Adressen, Wiederholungen/Kampagnen; bekannte Absender bekommen Abzug). Ab 70 Punkten wird das Ticket automatisch als Spam abgelegt, ab 35 erhält es den Tag „Spam-Verdacht“. Freigabe- und Sperrliste, eigene Wörter, Protokoll mit Knöpfen „Kein Spam“ / „Doch Spam“ und eine Bewertung in der Seitenleiste des Tickets. |
| **Discord- und Telegram-Bot** | `community-bot-1.0.1.zip` | **api.public**, hooks.tickets, ui.menu, db.migrations | Mitglieder legen mit `/ticket` im Discord oder in Telegram ein Ticket an, bekommen die Ticketnummer zurück und werden bei Antworten und bei Lösung benachrichtigt. Weitere Befehle: `/status`, `/antwort`. Der Server nimmt die Anfragen direkt entgegen (kein eigener Bot-Server); Anfragen werden per Signatur (Discord) bzw. Geheimtoken (Telegram) geprüft. Je Person gilt eine Obergrenze pro Stunde. Discord braucht die PHP-Erweiterung **sodium**. Einrichtung (Anwendungs-ID, Public Key, Bot-Token) auf der Plugin-Seite. |
| **Urlaub und Vertretung** | `vertretung-1.0.0.zip` | hooks.tickets, hooks.cron, ui.menu, db.migrations | Mitarbeiter tragen Abwesenheit mit Vertretung ein. Zum Beginn gehen ihre offenen Tickets an die Vertretung, neue Tickets ebenfalls (auch bei der automatischen Zuweisung der Abteilung), am Ende kommen die noch offenen Tickets zurück. Setzt dafür den Urlaubsstatus im Profil. Braucht den Cron-Aufruf bzw. den Pseudo-Cron. |
| **Schichtübergabe** | `schichtuebergabe-1.1.3.zip` | hooks.cron, ui.menu, ui.sidebar, db.migrations | Am Ende der Schicht schreibt ein Mitarbeiter eine kurze Notiz (für alle oder nur eine Abteilung). Die nächste Schicht sieht sie sofort nach der Anmeldung als deutlichen Hinweis oben auf jeder Seite (rot bei wichtigen Notizen, mit Text und Link), außerdem als „neu“-Zähler im Menü und, wenn wichtig, in der Seitenleiste jedes Tickets. Der Hinweis oben braucht die aktuellen DeskHub-Dateien (`staff/_header.php`, `includes/plugins.php`), sonst bleiben Zähler und Seitenleiste. Der Verfasser sieht, wer sie gelesen hat (auch als Bestätigung auf der Übersicht). Alte Notizen werden automatisch gelöscht (Frist nur für Administratoren). Für Mitarbeiter und Administratoren. |
| **Störungsmitteilung und Rundmail** | `rundmail-1.0.0.zip` | hooks.cron, ui.menu, db.migrations | Eine Nachricht an viele Kunden gleichzeitig, zum Beispiel bei Wartung oder Ausfall. Empfänger: Kunden mit offenen Tickets, einer Abteilung oder einer Organisation. Mit Vorlagen, Empfängerprüfung, Probemail und Protokoll; jede Mail geht einzeln raus, der Versand läuft im Hintergrund. Mitarbeiter schreiben nur an Kunden ihrer eigenen Abteilungen (höchstens 200 Empfänger, 5 Rundmails pro Stunde). Für Mitarbeiter und Administratoren. |
| **Website- und Server-Überwachung** | `ueberwachung-1.1.1.zip` | hooks.cron, ui.menu, db.migrations | Prüft Webseiten, Ports und Zertifikate. Bei Ausfall (nach 2 Fehlschlägen in Folge) oder einem Zertifikat, das in 14 Tagen abläuft, legt das Plugin ein Ticket an und schickt eine Mail; nach der Behebung kommt die Entwarnung und das Ticket wird gelöst. Der je Ziel eingestellte Prüfabstand (ab 1 Minute) wird eingehalten: Der Hintergrunddienst von DeskHub läuft jede Minute, mit dem echten Server-Cronjob (Einstellungen → Cron-Jobs → „Neu installieren / aktualisieren“) auch nachts ohne Besucher, sonst nur solange die Seite aufgerufen wird. Für ältere Dateien liegt ein eigener Cronjob bei (`plugins/ueberwachung/cron.php`). Menüpunkt im Adminportal, nur für Administratoren. |
| **Datenschutz** | `datenschutz-1.2.0.zip` | hooks.cron, ui.menu, db.migrations | Kundendaten aus Tickets ohne Registrierung werden nach einer frei wählbaren Frist (Tage, Wochen, Monate oder Jahre; Standard 30 Tage nach dem Schließen) unwiderruflich anonymisiert. Welche Daten, bestimmen Sie selbst: nur Name, nur E-Mail-Adresse, beides oder komplett (auch IP, Mitleser, Zusatzfelder, Nachrichten und Anhänge). Daten registrierter Kunden bleiben bis zur Löschung auf Antrag, die der Administrator mit einem Klick ausführt. Die automatische Anonymisierung ist nach der Installation **aus** und muss bewusst eingeschaltet werden. Menüpunkt im Adminportal, nur für Administratoren. |
| **Anhänge-Virenscan** | `virenscan-1.2.1.zip` | hooks.tickets, hooks.cron, ui.menu, db.migrations | Prüft Anhänge neuer Tickets und Antworten und sperrt gefährliche Dateien (Quarantäne, interne Notiz, Tag „Virus-Verdacht“, Mail an den Administrator). **Braucht nichts auf dem Server:** Die eingebaute Dateianalyse erkennt Programme und Skripte, getarnte Dateien (zum Beispiel eine .exe als PDF), doppelte Endungen, Office-Makros, PDF-Tricks, Skripte in HTML/SVG und Archive mit solchen Dateien. Optional gleicht eine **Hash-Abfrage bei VirusTotal** (nur der SHA-256-Wert, kostenloser Schlüssel) Dateien mit bekannter Schadsoftware ab; ClamAV wird zusätzlich genutzt, falls es schon installiert ist. Erkennt keine ganz neuen Viren in normal aussehenden Dokumenten. Menüpunkt im Adminportal, nur für Administratoren. |
| **Spam- und Missbrauchsfilter** | `spamfilter-1.0.2.zip` | hooks.tickets, ui.menu, ui.sidebar, db.migrations | Bewertet jedes neue Ticket mit Punkten (Phishing-Wendungen, Marken-Nachahmung im Absendernamen, Link-Verkürzer, Wegwerf-Adressen, Wiederholungen/Kampagnen; bekannte Absender bekommen Abzug). Ab 70 Punkten wird das Ticket automatisch als Spam abgelegt, ab 35 erhält es den Tag „Spam-Verdacht“. Freigabe- und Sperrliste, eigene Wörter, Protokoll mit Knöpfen „Kein Spam“ / „Doch Spam“ und eine Bewertung in der Seitenleiste des Tickets. |
| **Discord- und Telegram-Bot** | `community-bot-1.0.2.zip` | **api.public**, hooks.tickets, ui.menu, db.migrations | Mitglieder legen mit `/ticket` im Discord oder in Telegram ein Ticket an, bekommen die Ticketnummer zurück und werden bei Antworten und bei Lösung benachrichtigt. Weitere Befehle: `/status`, `/antwort`. Der Server nimmt die Anfragen direkt entgegen (kein eigener Bot-Server); Anfragen werden per Signatur (Discord) bzw. Geheimtoken (Telegram) geprüft. Je Person gilt eine Obergrenze pro Stunde. Discord braucht die PHP-Erweiterung **sodium**. Einrichtung (Anwendungs-ID, Public Key, Bot-Token) auf der Plugin-Seite. |
| **Urlaub und Vertretung** | `vertretung-1.0.1.zip` | hooks.tickets, hooks.cron, ui.menu, db.migrations | Mitarbeiter tragen Abwesenheit mit Vertretung ein. Zum Beginn gehen ihre offenen Tickets an die Vertretung, neue Tickets ebenfalls (auch bei der automatischen Zuweisung der Abteilung), am Ende kommen die noch offenen Tickets zurück. Setzt dafür den Urlaubsstatus im Profil. Braucht den Cron-Aufruf bzw. den Pseudo-Cron. |
| **Schichtübergabe** | `schichtuebergabe-1.1.4.zip` | hooks.cron, ui.menu, ui.sidebar, db.migrations | Am Ende der Schicht schreibt ein Mitarbeiter eine kurze Notiz (für alle oder nur eine Abteilung). Die nächste Schicht sieht sie sofort nach der Anmeldung als deutlichen Hinweis oben auf jeder Seite (rot bei wichtigen Notizen, mit Text und Link), außerdem als „neu“-Zähler im Menü und, wenn wichtig, in der Seitenleiste jedes Tickets. Der Hinweis oben braucht die aktuellen DeskHub-Dateien (`staff/_header.php`, `includes/plugins.php`), sonst bleiben Zähler und Seitenleiste. Der Verfasser sieht, wer sie gelesen hat (auch als Bestätigung auf der Übersicht). Alte Notizen werden automatisch gelöscht (Frist nur für Administratoren). Für Mitarbeiter und Administratoren. |
| **Störungsmitteilung und Rundmail** | `rundmail-1.0.1.zip` | hooks.cron, ui.menu, db.migrations | Eine Nachricht an viele Kunden gleichzeitig, zum Beispiel bei Wartung oder Ausfall. Empfänger: Kunden mit offenen Tickets, einer Abteilung oder einer Organisation. Mit Vorlagen, Empfängerprüfung, Probemail und Protokoll; jede Mail geht einzeln raus, der Versand läuft im Hintergrund. Mitarbeiter schreiben nur an Kunden ihrer eigenen Abteilungen (höchstens 200 Empfänger, 5 Rundmails pro Stunde). Für Mitarbeiter und Administratoren. |
| **Website- und Server-Überwachung** | `ueberwachung-1.1.2.zip` | hooks.cron, ui.menu, db.migrations | Prüft Webseiten, Ports und Zertifikate. Bei Ausfall (nach 2 Fehlschlägen in Folge) oder einem Zertifikat, das in 14 Tagen abläuft, legt das Plugin ein Ticket an und schickt eine Mail; nach der Behebung kommt die Entwarnung und das Ticket wird gelöst. Der je Ziel eingestellte Prüfabstand (ab 1 Minute) wird eingehalten: Der Hintergrunddienst von DeskHub läuft jede Minute, mit dem echten Server-Cronjob (Einstellungen → Cron-Jobs → „Neu installieren / aktualisieren“) auch nachts ohne Besucher, sonst nur solange die Seite aufgerufen wird. Für ältere Dateien liegt ein eigener Cronjob bei (`plugins/ueberwachung/cron.php`). Menüpunkt im Adminportal, nur für Administratoren. |
| **Datenschutz** | `datenschutz-1.2.1.zip` | hooks.cron, ui.menu, db.migrations | Kundendaten aus Tickets ohne Registrierung werden nach einer frei wählbaren Frist (Tage, Wochen, Monate oder Jahre; Standard 30 Tage nach dem Schließen) unwiderruflich anonymisiert. Welche Daten, bestimmen Sie selbst: nur Name, nur E-Mail-Adresse, beides oder komplett (auch IP, Mitleser, Zusatzfelder, Nachrichten und Anhänge). Daten registrierter Kunden bleiben bis zur Löschung auf Antrag, die der Administrator mit einem Klick ausführt. Die automatische Anonymisierung ist nach der Installation **aus** und muss bewusst eingeschaltet werden. Menüpunkt im Adminportal, nur für Administratoren. |
**Hinweis zur Berechtigung `api.public`:** Sie erlaubt einem Plugin eine ohne Anmeldung erreichbare Adresse (`/api/public/v1/plugin_webhook.php?p=<plugin>&e=<name>`). Der Bot prüft jede Anfrage selbst; trotzdem solltet ihr diese Berechtigung nur Plugins geben, denen ihr vertraut.
### Mitgeliefertes Plugin: Synology NAS Backup (WebDAV)
Unter `Plugins/plugins/nas-backup-2.6.3.zip` liegt ein Plugin, das die Backups eures Servers automatisch auf eine Synology NAS (oder einen anderen WebDAV-Server) kopiert. Es ist aufgebaut wie das Plugin „Tagesbericht“: Es braucht nur die Standard-Berechtigungen **hooks.cron** und **ui.menu** und verändert nichts am Kern von DeskHub. Installation: Adminportal → Plugins → Zip hochladen → Berechtigungen bestätigen → aktivieren. Danach gibt es auf der Seite **Backup** den Reiter **„Synology NAS Backup“** (kein eigener Menüpunkt in der Seitenleiste; nur Administratoren sehen ihn). Dafür braucht das Plugin keine zusätzliche Berechtigung.
Unter `Plugins/plugins/nas-backup-2.6.5.zip` liegt ein Plugin, das die Backups eures Servers automatisch auf eine Synology NAS (oder einen anderen WebDAV-Server) kopiert. Es ist aufgebaut wie das Plugin „Tagesbericht“: Es braucht nur die Standard-Berechtigungen **hooks.cron** und **ui.menu** und verändert nichts am Kern von DeskHub. Installation: Adminportal → Plugins → Zip hochladen → Berechtigungen bestätigen → aktivieren. Danach gibt es auf der Seite **Backup** den Reiter **„Synology NAS Backup“** (kein eigener Menüpunkt in der Seitenleiste; nur Administratoren sehen ihn). Dafür braucht das Plugin keine zusätzliche Berechtigung.
**Auf der Synology einrichten:**
1. Paket **„WebDAV Server“** installieren und **HTTPS (Port 5006)** aktivieren.
@@ -733,6 +747,8 @@ Gut zu wissen:
## Plugins entwickeln
**Übersetzungen:** Ein Plugin kann seine Texte in `lang/<Sprachcode>.json` (zum Beispiel `lang/en.json`) übersetzen, ohne dass dafür am Sprachpaket etwas geändert werden muss. Format und Wirkung stehen unter „Mehrsprachigkeit“ weiter oben; ein Beispiel liegt in `Plugins/plugin-beispiel/lang/en.json`. Tipp: Sammelmodus einschalten (Adminportal → Sprachen), die Plugin-Seiten durchklicken und über „Vorlage laden“ alle noch fehlenden Texte als fertige Vorlage herunterladen.
Dieser Abschnitt richtet sich an Entwickler. Ein vollständiges, lauffähiges Beispiel liegt in `Plugins/plugin-beispiel/`, ein praxisnahes in `Plugins/plugins/tagesbericht/` (jeweils im Projektordner neben `DeskHub-Webseite/`).
### Aufbau