expert Helpdesk
Macht aus Postfächern einen Helpdesk. Eingehende Mail wird zum Ticket, Kundenantworten landen am bereits vorhandenen Ticket, und Ihre Mitarbeiter antworten von der Ticketseite aus — in Redmine, im Mail-Thread des Kunden.
Die meisten Helpdesk-Aufbauten in Redmine brechen an derselben Stelle: Der Kunde antwortet, und aus der Antwort wird ein zweites Ticket. Dieses Plugin übergibt jede eingehende Nachricht an Redmines eigenen MailHandler — damit verhalten sich In-Reply-To-Header und [#id]-Betreffmuster exakt so wie bei Redmines eingebauter Mailverarbeitung, Anhänge eingeschlossen. Alles Weitere setzt darauf auf.
Was es kann
Mail rein
Eine Mail kommt an, ein Ticket entsteht
Jedes Projekt zeigt auf eigene Postfächer und legt fest, was neue Tickets bekommen: Tracker, Priorität, Status — und was mit Absendern geschieht, die kein Redmine-Konto haben. Die Originalnachricht wird als .eml am Ticket archiviert, und die Signaturlogos und Screenshots, die Mailprogramme als [cid:image001.png] referenzieren, werden auf den Anhang umgeschrieben, den Redmine gerade gespeichert hat. Das Ticket liest sich damit wie die Mail — und nicht wie eine Reihe von Platzhaltern. Ging die Mail auch an weitere Personen, öffnet eine Pille An +1 | CC +2 neben dem Absender alle An- und CC-Adressen, das eigene Postfach als dieses Postfach markiert — so sehen Sie sofort, ob der Kunde gleich drei Support-Adressen angeschrieben oder Kollegen in Kopie genommen hat. Antworten im Verlauf tragen dieselbe Pille.
Mail raus
Dem Kunden vom Ticket aus antworten
Das normale Redmine-Notizfeld, dazu ein Panel, das es als echte Mail über das Postfach selbst versendet — eine Kopie landet in „Gesendet“, und das Postfach enthält damit beide Hälften des Gesprächs. Zitieren Sie die Originalmail oder den ganzen Verlauf (private Notizen niemals), fügen Sie eine gespeicherte Antwortvorlage mit bereits aufgelösten Makros ein, ziehen Sie Inline-Bilder hinein, und lassen Sie An/CC/BCC aus den Projektkontakten vervollständigen. Wen der Kunde in An oder Cc hatte, ist einen Klick entfernt. Solange die Antwort eingeschaltet ist, trägt der ganze Block einen Warnrahmen in einer Farbe Ihrer Wahl — niemand hält ihn für eine interne Notiz.
KI-Entwürfe
Eine erste Antwort aus Tickets, die Sie schon gelöst haben
Eine Schaltfläche in der Notiz-Werkzeugleiste entwirft die Antwort aus der Wissensbasis des Projekts — als normale Antwort, als Schritt-für-Schritt-Anleitung, kurz und knapp oder als höfliche Nachfrage nach den fehlenden Angaben. Der Entwurf nennt die gelösten Tickets, auf denen er beruht, und ohne Treffer über der Relevanzschwelle verweigert er, statt zu raten. Wer einen unbearbeiteten Entwurf senden will, wird vorher gefragt. Ein optionaler Cross-Encoder sortiert die Treffer der Wissensbasis vorher neu. Standardmäßig aus, wie jede KI-Funktion hier.
Anhänge
Das Signaturlogo einmal sperren, nicht auf jedem Ticket löschen
Mailprogramme legen jedes Signaturlogo, jedes Icon und jedes Zählpixel als Anhang ab — der eine Screenshot, auf den es ankommt, geht darin unter. Sperren entfernt eine Datei von allen Tickets des Projekts — nachdem es Ihnen gesagt hat, wie viele Kopien das sind — und hält sie ab dann aus eingehenden Mails heraus. Verglichen wird der Inhalt (SHA-256), nicht der Name: Outlook nennt jedes eingebettete Bild image001.png, und eine Sperre nach Namen würde früher oder später einen echten Screenshot treffen.
Jeder Anbieter
Microsoft 365 — oder jeder IMAP-Server
Jedes Postfach wählt sein eigenes Backend: Microsoft Graph für Microsoft 365, oder klassisches IMAP zum Empfangen und SMTP zum Senden für Google Workspace, Exchange on-premises, Dovecot, Zimbra und jeden gewöhnlichen Hoster. Authentifiziert wird mit OAuth2/XOAUTH2 in drei Varianten — nur Anwendung, einmalige Zustimmung, Dienstkonto — wobei Benutzername und Passwort über TLS weiterhin möglich bleiben, wo es kein OAuth2 gibt. Ein Verbindungstest prüft Host, TLS und Anmeldung vor dem Speichern und listet die sichtbaren Ordner auf.
SLA
Fristen in Arbeitsminuten, nicht in Kalenderstunden
Reaktions- und Lösungsziele werden gegen die Arbeitstage und Geschäftszeiten des jeweiligen Projekts gemessen, mit Ausnahmen je Priorität für die Tickets, die nicht warten können. Beide Uhren erscheinen als Ampel-Chips am Ticket und als sortierbare Spalten in der Ticketliste, sodass sich eine Warteschlange auf einen Blick nach Dringlichkeit ordnen lässt. Überschreitungen melden sich über einen Cron-Endpunkt an eine Eskalationsadresse, und ein eigener Reiter stellt die SLA-Erfüllung im Zeitverlauf dar.
Auswertung
Wohin die Zeit tatsächlich geht
Ein Reiter „Ticket-Statistik“ für jedes Helpdesk-Projekt, mit oder ohne SLA, hinter einer eigenen Berechtigung — Sie können ihn einer Teamleitung geben und sonst niemandem. Volumen, Erstreaktions- und Lösungszeiten, Verweildauer je Status, Wiedereröffnungen, Gesprächslänge, eine Tabelle je Mitarbeiter und eine je Kunde, Stoßzeiten nach Stunden und Wochentagen — auf Kalenderzeit oder auf den Geschäftszeiten des Projekts.
Kunden
Jeder Absender wird zum Kontakt
Absender werden automatisch gespeichert und je Projekt mit Firma, Telefon und Ticketanzahl gelistet. Die Ticketseite bekommt eine Kundenkarte mit den früheren Tickets und den bereits gesendeten Antworten, die Ticketliste sortierbare Spalten Kunde und Kunden-E-Mail samt passendem Filter — und jedem manuell angelegten Ticket lässt sich ein Kontakt zuordnen, wahlweise mit gleich versendeter erster Mail.
Optional
KI-Zusammenfassungen und Wissensbasis, standardmäßig aus
Ein schwer lesbarer weitergeleiteter Verlauf lässt sich von OpenAI, Anthropic oder jedem selbst betriebenen OpenAI-kompatiblen Endpunkt zu einer privaten internen Notiz zusammenfassen. Gelöste Tickets können zu einer Wissensbasis je Projekt destilliert werden — Qdrant oder pgvector — aus der neue Mails Lösungsvorschläge beziehen, streng getrennt, sodass ein Projekt nie die Einträge eines anderen sieht. Eine separate Vollständigkeitsprüfung fragt beim Kunden nach den Angaben, die ein einzeiliges „Drucker kaputt“ offengelassen hat. Alles davon wird deaktiviert ausgeliefert, alles läuft in Hintergrundjobs, und die KI-Pfade scheitern sicher.
Wissensbasis
Korrigieren, was die Wissensbasis gelernt hat
Ein extrahiertes Paar aus Problem und Lösung ist nur so gut wie das Ticket, aus dem es stammt — und den Text im Vektorspeicher zu korrigieren hilft nicht, der Vektor bleibt der aus den alten Worten berechnete. Ein Reiter Wissensbasis je Projekt listet die Einträge mit Statusfilter und Volltextsuche; wird ein freigegebener Eintrag bearbeitet, wird er sofort neu eingebettet. Einträge lassen sich freigeben, ablehnen, von Hand zu einem Ticket anlegen oder löschen, und der Index des Projekts lässt sich im Hintergrund neu aufbauen, mit Qdrant wie mit pgvector. Das Urteil eines Menschen bleibt stehen: Wird das Ticket wieder geöffnet und erneut geschlossen, überschreibt das keinen korrigierten oder abgelehnten Eintrag. Drei Berechtigungen trennen Lesen, Bearbeiten und Verwalten.
Umstieg
Von RedmineUP kommen, ohne die Historie zu verlieren
Liegen die Tabellen von RedmineUPs redmine_contacts und redmine_contacts_helpdesk noch in der Datenbank, bieten die Plugin-Einstellungen an, die Kontakte samt Kundenzuordnung alter Tickets zu importieren und die Original-Mails vom RedmineUP-eigenen Ticket an das Redmine-Ticket umzuhängen, wo dieses Plugin sie anzeigt. Beides geht je Projekt — die Auswahlseite zeigt vorher, wie viele Kontakte oder Mails jeweils betroffen sind — und läuft als Hintergrundjob mit Fortschrittsseite, denn ein echter Datenbestand dauert länger, als jeder Browser wartet. Für ein Projekt, das noch mit dem RedmineUP-Helpdesk arbeitet, holt An RedmineUP zurückgeben seine Mails wieder zurück.
Warum dieses
- Verträgt sich mit dem, was schon läuft. Zwei Kern-Helper werden über die ursprüngliche Methode erweitert statt über
prepend/super— genau damit das Plugin neben älteren Plugins bestehen kann, die dieselben Helper peralias_method_chainerweitern. - Die Zuordnung von Antworten wird nicht neu erfunden. Das Threading macht Redmines
MailHandler, es verhält sich also wie der Rest Ihres Redmine ohnehin. - Nichts wird stillschweigend erneut verarbeitet. Verarbeitete Mail wandert in einen Zielordner, abgewiesene in „übersprungen“, Fehler in „fehlgeschlagen“. Eine kaputte Nachricht bricht niemals den ganzen Abruf ab.
- Zugangsdaten werden verschlüsselt abgelegt und sind über die REST-API nur schreibbar — ein Client Secret lässt sich setzen, aber nie wieder auslesen.
- Kein eigener Scheduler. Der Abruf ist ein Knopf oder ein per API-Schlüssel gesicherter Endpunkt, auf den Sie Cron oder einen Kubernetes-CronJob richten. Ihre Zeitsteuerung bleibt Ihre.
- Upgrades, ohne eine Mail mittendrin abzuschneiden. Ein Wartungsmodus — per Schalter oder mit einem API-Aufruf aus Ihrem Upgrade-Skript — pausiert jeden Abruf, und ein bereits laufender Abruf hört vor der nächsten Nachricht auf. Ein Status-Endpunkt meldet
safe_to_stop, sobald kein Pod im Cluster mehr in einem Abruf steckt; nicht verarbeitete Mail wartet einfach im Postfach. - Vollständige REST-API, JSON und XML, nach Redmines eigenen Konventionen und begrenzt durch die Berechtigungen, die Sie ohnehin vergeben haben.
Tester gesucht
Ausprobieren, kaputt machen, Bescheid sagen
Diese Plugins sind jung und entwickeln sich schnell. Die Tests laufen auf jedem Redmine von 5.1 bis 7.0, aber unsere eigene Installation ist nur ein Setup — wir freuen uns über Rückmeldungen von allen, die sie anderswo betreiben: mit einem anderen Mailserver, einem anderen Theme, neben anderen Plugins oder mit einem Arbeitsablauf, an den wir nie gedacht haben. Etwas geht kaputt, etwas fehlt, etwas funktioniert, fühlt sich aber falsch an: all das hilft.
Das Fehlerformular fragt nach Plugin-Version und Umgebung; die Tabelle aus Administration → Informationen deckt den Rest ab. Wer von neuen Versionen erfahren möchte, beobachtet das Repository auf GitHub für Releases.
Kompatibilität
- Aktuelle Version
- v0.24.2 2026-11-04
- Redmine
- 5.1 · 6.0 · 6.1 · 7.0
- Datenbank
- MariaDB, MySQL
- Zusätzliche Gems
- base64
- Migrationen
- 62
- Lizenz
- GPL-2.0-or-later
Setzt MariaDB oder MySQL voraus. Die SLA-Spalten der Ticketliste vergleichen
gegen UTC_TIMESTAMP(), das es in PostgreSQL nicht gibt; die CI läuft
ausschließlich auf MariaDB, PostgreSQL ist hier also ungetestet. Die anderen drei
Plugins sind datenbankunabhängig.
base64 ist als Plugin-Gem deklariert — es ist seit Ruby 4.0, auf dem Redmine 7
läuft, kein Default-Gem mehr. pdf-reader ist optional und wird nur benutzt, um
Text aus PDF-Anhängen für KI-Zusammenfassungen zu ziehen; ohne das Gem werden
solche Anhänge schlicht übersprungen. Das pgvector-Backend der Wissensbasis
braucht pg in Ihrem Deployment, das voreingestellte Qdrant-Backend nicht.
Installation
- Release-Archiv herunterladen: redmine_expert_helpdesk-0.24.2.zip
- In das Verzeichnis `plugins/` Ihres Redmine entpacken:
cd /path/to/redmine unzip redmine_expert_helpdesk-0.24.2.zip -d plugins/ - Migrationen ausführen:
bundle exec rake redmine:plugins:migrate NAME=redmine_expert_helpdesk RAILS_ENV=production - Redmine neu starten, dann das Modul **expert Helpdesk** in einem Projekt aktivieren und in den Projekteinstellungen ein Postfach anlegen.
Die Einrichtung des Mailanbieters — die Microsoft-365-App-Registrierung oder OAuth2 gegen Ihren eigenen IMAP-Server — ist der eine Teil, der echte Konfiguration erfordert. Die README enthält Anleitungen für Microsoft-IMAP im Anwendungsmodus, Google-Workspace- Zustimmung und selbst betriebene Server, dazu PowerShell-Skripte für die Azure-Seite.