expert for Redmine English

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.

v0.24.2 Redmine 5.1–7.0 GPL-2.0-or-laterIn CI getestet

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.

Ticketseite mit Helpdesk-Info-Leiste: ein SLA-Chip für die Reaktionszeit (erfüllt) und einer für die Lösungszeit (fällig), Name und Adresse des Absenders und die Dateien der Mail — ein Signaturlogo, zwei Icons und der Screenshot des Kunden, jede mit einer Schaltfläche „Sperren“.

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.

Die scharf geschaltete Kundenantwort im Bearbeiten-Formular: ein Block mit diagonalem Warnrahmen, darin Empfänger, An/CC/BCC-Felder mit dem Angebot „Originalempfänger“, die Dateien des Tickets zum Anhängen, die Notiz und danach die Signaturvorschau.

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.

Ein KI-Antwortentwurf in der scharf geschalteten Kundenantwort: nummerierte Schritte für einen Scanner, der nicht mehr erkannt wird, eine Zeile „Grundlage“ mit zwei gelösten Tickets und ihrer Relevanz, und der Hinweis, dass der Text von einer KI stammt und vor dem Senden zu prüfen ist.

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.

Die Dateien eines Tickets: ein Signaturlogo, zwei Social-Media-Icons und der eigentliche Screenshot des Kunden, jede Zeile mit einer Schaltfläche „Sperren“; der Mauszeiger steht auf der ersten.

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.

Postfachkonfiguration mit Adresse und Ordnern, Standardwerten für neue Tickets, Wiedereröffnungsregeln, Absender- und Auto-Reply-Filter, Autoresponder-Text und Antwortvorlagen samt Signaturvorschau.

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.

SLA-Statistik: Tickets offen, geschlossen und überschritten, ein Balkendiagramm zur SLA-Erfüllung, das monatliche Ticketvolumen, Durchschnittszeiten im Zeitverlauf sowie Stoßzeiten nach Stunden und Wochentagen.

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.

Ticket-Statistik: offen, geschlossen, wiedereröffnet und Antwort ausstehend, Erstreaktions- und Lösungszeiten, Verweildauer je Status, Gesprächslänge sowie Tabellen je Mitarbeiter und je Kunde.

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.

Kundenliste eines Helpdesk-Projekts: durchsuchbare, seitenweise Tabelle mit Name, E-Mail-Adresse, Firma, Telefonnummer, Ticketanzahl und Datum des letzten Tickets.

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.

KI-Statistik: Anzahl Anfragen, Token-Verbrauch, Erfolgsquote und Antwortzeit, dazu Diagramme zu Anfragevolumen, Token-Verbrauch im Zeitverlauf, Erfolg gegen Fehler, Anfragetyp, Anbieter-Modell und Stoßzeiten.

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 per alias_method_chain erweitern.
  • 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

  1. Release-Archiv herunterladen: redmine_expert_helpdesk-0.24.2.zip
  2. In das Verzeichnis `plugins/` Ihres Redmine entpacken:
    cd /path/to/redmine
    unzip redmine_expert_helpdesk-0.24.2.zip -d plugins/
  3. Migrationen ausführen:
    bundle exec rake redmine:plugins:migrate NAME=redmine_expert_helpdesk RAILS_ENV=production
  4. 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.