• Deutsch
  • English
  • Anmeldung OTOBO Community
+49 (0)9427 68 39 000
OTOBO
  • SOFTWARE
    • Software | Überblick
    • IT Service Management
    • Customer Service Management
    • Enterprise Service Management
    • Demo
    • Download
    • Dokumentation
  • SERVICES
    • Überblick Services
    • Beratung
    • Training
    • Entwicklung
    • OTRS Migration zu OTOBO
    • Support
    • Managed Service
    • Support-Portal
  • UNTERNEHMEN
    • Über uns
    • Karriere
    • Partner
    • Kontakt
    • Newsletter
  • RESSOURCEN
  • COMMUNITY
    • Open Source
    • Community Forum
    • Download
    • Dokumentation
    • OTOBO übersetzen
  • Click to open the search input field Click to open the search input field Suche
  • Menü Menü
Ansicht von 22 Antwort-Threads
  • Autor
    Beiträge
    • 11. Juni 2026 um 9:51 Uhr - Views: 252 #41656
      Lars Berger
      Teilnehmer

        Hallo zusammen,

        ich hätte gerne eine Benachrichtigung, wenn mir ein Ticket entzogen wird.

        Ich bin der Besitzer von Ticket XY, ein anderer Agent wechselt den Besitzer auf sich oder auf einen anderen Agenten.

        Ich möchte quasi als letzter Besitzer benachrichtigt werden, wenn mir ein Ticket genommen wird.

        Gibt es diese Möglichkeit?

        Gruß Lars

      • 11. Juni 2026 um 10:06 Uhr #41660
        Thomas Wurzel
        Teilnehmer

          Versuch mal dein Glück über Ticket-Benachrichtigungen, bin mir aber nicht 100% sicher.

          • 11. Juni 2026 um 11:00 Uhr #41663
            Lars Berger
            Teilnehmer

              Hi Thomas,

              leider funktioniert dies nicht. Keiner bekommt eine Mail – nicht der Ticket-Ersteller, nicht der „Vorbesitzer“, nicht der neue Besitzer.

              Danke für Antwort.

              Gruß Lars

          • 11. Juni 2026 um 14:35 Uhr #41680
            Thomas Wurzel
            Teilnehmer

              Ja, voll schade. Habe selbst eben auch erst realisiert, dass „Besitzer“ und „Verantwortlicher“ im OTOBO-Universum zwei verschiedene Rollen bzw. Personen sind…

            • 12. Juni 2026 um 9:01 Uhr #41687
              marcel-graf
              Teilnehmer

                Hallo Lars,

                bei mir funktioniert das, wenn ich als Ereignis das „TicketOwnerUpdate “ eintrage und meine Email bei zusätzliche Email Empfänger. Hab natürlich beim testen eben nich die Queue beim Ticketfilter hinterlegt.

                Gruß Marcel

              • 12. Juni 2026 um 9:23 Uhr #41688
                marcel-graf
                Teilnehmer

                  schau auch mal bei Admin → Systemkonfiguration ->AgentSelfNotifyOnAction das der Haken gesetzt ist.

                  Damit klappt es bei mir beim Testen auch mit den Werten im Empfänger Bereich :)

                  Gruß Marcel

                • 12. Juni 2026 um 10:10 Uhr #41691
                  Lars Berger
                  Teilnehmer

                    Hi Marcel,

                    vielen Dank für deine Antwort und das Testen in deiner Umgebung – sehr nett :-)

                    Wir arbeiten mit mehreren Agenten und dies muss für jeden gelten – mit „Zusätzliche Empfänger-E-Mail-Adressen“ kann ich also nicht arbeiten.

                    Ich habe es mal nachgestellt mit der Option „AgentSelfNotifyOnAction“ und jetzt bekomme ich mehrere Nachrichten die ich nicht brauche. z.B. ich trage in mein eigenes Ticket eine Notiz ein.

                    Gruß Lars

                  • 12. Juni 2026 um 10:32 Uhr #41692
                    marcel-graf
                    Teilnehmer

                      Hallo Lars,

                      die Ticketbenachrichtigung „Benachrichtigung über neue Notiz“ müsste hier angepasst werden bzw. deaktiviert werden.

                      Das mit der Zusätzliche Empfänger-E-Mail-Adresse war auch eher mal eine Test, ob das Ticketevent „TicketOwnerUpdate“ überhaupt angetriggert wird.

                      Gruß Marcel

                    • 12. Juni 2026 um 12:45 Uhr #41695
                      marcel-graf
                      Teilnehmer

                        Hallo Lars,

                        mit einem kleinen Perl Script funktioniert das auch. Folgend mal die Anleitung dazu.

                        #—dynamisches Feld erstellen —
                        -> lege ein dynmische Feld -> Ticket ->Text mit dem Namen „TicketOldOwnerEmail“ an.

                        #—erstelle einen Auftrag im Generic Agent —

                        -> Ereignisbaierte Ausführung -> Auslöser = TicketOwnerUpdate
                        -> stelle deine Ticketfilter ein, um erstmal auf Queue zu testen

                        -> bei Benutzerdefiniertes Modul ausführen folgende Zeile einfügen:
                        Kernel::System::GenericAgent::SetOwnerEmailToDynamicField

                        #—-Ticket Beachrichtigung erstellen—-
                        -> Ereignisbaierte Ausführung -> Auslöser = TicketOwnerUpdate
                        -> bei zusätzliche Email Adresse jetzt das dynamische Feld angeben: <OTOBO_TICKET_DynamicField_TicketOldOwnerEmail>
                        -> Benachrichtigunstext nach wünschen anpassen

                         

                        Danach in die Otobo Konsole (SSH) wechseln und dort dann, wenn Docker benutzt wird in den Container wechseln:

                        sudo docker exec -it otobo_web_1 bash

                        #— Datei SetOwnerEmailToDynamicField.pm erstellen—

                        nano /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm

                        Inhalt:
                        #—————————————————————————
                        package Kernel::System::GenericAgent::SetOwnerEmailToDynamicField;

                        use strict;
                        use warnings;

                        sub new {
                        my ( $Type, %Param ) = @_;
                        my $Self = {};
                        bless( $Self, $Type );
                        return $Self;
                        }

                        sub Run {
                        my ( $Self, %Param ) = @_;

                        my $TicketObject = $Kernel::OM->Get(‚Kernel::System::Ticket‘);
                        my $UserObject = $Kernel::OM->Get(‚Kernel::System::User‘);
                        my $DynamicFieldObject = $Kernel::OM->Get(‚Kernel::System::DynamicField‘);
                        my $BackendObject = $Kernel::OM->Get(‚Kernel::System::DynamicField::Backend‘);

                        my $TicketID = $Param{TicketID};
                        if (!$TicketID) {
                        return 1;
                        }

                        # 1. Ticket-Daten FRISCH aus der Datenbank laden (Behebt das Event-Schnittstellen-Problem)
                        my %Ticket = $TicketObject->TicketGet(
                        TicketID => $TicketID,
                        DynamicFields => 0,
                        UserID => 1,
                        );

                        # Falls das Ticket nicht geladen werden kann, sauber abbrechen
                        if ( !%Ticket ) {
                        return 1;
                        }

                        # Typen-Prüfung auf Deine erlaubten Ticket-Typen
                        my %AllowedTypes = (
                        ‚Incident‘ => 1,
                        ‚Problem‘ => 1,
                        ‚E-Mail‘ => 1,
                        );

                        if ( !$Ticket{Type} || !$AllowedTypes{ $Ticket{Type} } ) {
                        return 1;
                        }

                        # 2. Die OwnerID des AKTUELLEN Besitzers direkt aus dem geladenen Ticket ziehen
                        my $CurrentOwnerID = $Ticket{OwnerID};

                        if (!$CurrentOwnerID) {
                        return 1;
                        }

                        # 3. E-Mail-Adresse des aktuellen Besitzers direkt aus dem Agentenstamm abrufen
                        my %OwnerData = $UserObject->GetUserData(
                        UserID => $CurrentOwnerID,
                        );

                        # Alle gängigen E-Mail-Attribute im Agentenprofil prüfen
                        my $OwnerEmail = $OwnerData{UserEmail} || $OwnerData{Email} || $OwnerData{mail} || “;

                        # Falls keine Mailadresse gefunden wird (z. B. System-User), brechen wir ab
                        if (!$OwnerEmail) {
                        return 1;
                        }

                        # 4. In das dynamische Feld schreiben
                        my $DynamicFieldName = ‚TicketOldOwnerEmail‘; # Der Systemname Deines Zielfeldes
                        my $DynamicFieldConfig = $DynamicFieldObject->DynamicFieldGet(
                        Name => $DynamicFieldName,
                        );

                        if (!$DynamicFieldConfig) {
                        return 1;
                        }

                        # Wert im Ticket setzen
                        $BackendObject->ValueSet(
                        DynamicFieldConfig => $DynamicFieldConfig,
                        ObjectID => $TicketID,
                        Value => $OwnerEmail,
                        UserID => 1,
                        );

                        return 1;
                        }

                        1;
                        #—————————————————————————
                        mit strg + x beenden
                        Y zum speichern

                        #—Rechte auf die Datei setzen—
                        chown otobo:otobo /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm
                        chmod 644 /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm

                        um das dynamische Feld einmal zu prüfen, einfach unter Verwaltung von Dynamische Feldern <-> Oberflächen, das dynamische Feld „TicketOldOwnerEmail“ bei OverviewSmall zuweisen und
                        dann in der Ticketübersicht, bei Einstellungen (kleines Zahnrad) das Feld auswählen.

                        In meinem Test wurde so bei jedem Besitzerwechsel eine Email an den letzen Ticketbesitzer gesendet.

                        Gruß Marcel

                      • 12. Juni 2026 um 13:00 Uhr #41697
                        marcel-graf
                        Teilnehmer

                          wenn das alles funktioniert, die Datei nach /opt/otobo/Custom/Kernel/System/GenericAgent/ verschieben.

                          #—Verschieben nach Custom Kernel—

                          ->Datei in den Custom-Ordner verschieben

                          mkdir -p /opt/otobo/Custom/Kernel/System/GenericAgent/

                          ->erschiebe Deine Modul-Datei dorthin

                          mv /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm /opt/otobo/Custom/Kernel/System/GenericAgent/

                          ->Berechtigungen zur Sicherheit für den OTOBO-Nutzer neu setzen

                          chown otobo:otobo /opt/otobo/Custom/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm
                          chmod 644 /opt/otobo/Custom/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm

                        • 7. August 2026 um 10:19 Uhr #42841
                          Lars Berger
                          Teilnehmer

                            Hi Marcel,

                            erstmal vielen Dank für deine Antwort und Entschuldigung für meine späte Reaktion. In der Urlaubszeit ist leider keine Zeit für Optimierungen :-)

                            Leider funktioniert es mit deiner Anleitung nicht. Ich habe die Schritte exakt so durchgeführt, aber irgendwo hängt es.

                            Ich habe für ein Ticket den Generic Agent ausgeführt und in der Übersicht mir die Spalte „TicketOldOwnerEmail“ eingeblendet – diese ist aber nicht gefüllt.

                            Hast du noch eine Idee?

                            Danke

                            Gruß Lars

                          • 7. August 2026 um 10:23 Uhr #42842
                            marcel-graf
                            Teilnehmer

                              Hallo Lars,

                              ich habe meine Testumgebung gestern gelöscht, muss mir erstmal aus einem backup eine neue anlegen. Dann kann ich das nochmal testen.

                              Gruß Marcel

                            • 7. August 2026 um 11:13 Uhr #42843
                              marcel-graf
                              Teilnehmer

                                Hallo Lars,

                                ich habe das eben nochmal nachgestellt und es funktioniert bei uns, so wie in meiner Anleitung beschrieben.

                                Otobo Ticketübersicht

                                Testbenachrichtigung bei Änderung im Outlook (Auschnitt)

                                Soll ich dir die Anleitung nochmal irgendwie zusenden?

                                Den Bereich #—Verschieben nach Custom Kernel— kann man zum testen erstmal weglassen.

                                Gruß Marcel

                                 

                                 

                              • 7. August 2026 um 11:24 Uhr #42845
                                marcel-graf
                                Teilnehmer

                                  ---Anleitung---

                                  #—dynamisches Feld erstellen —
                                  -> lege ein dynmisches Feld an -> Ticket ->Text mit dem Namen „TicketOldOwnerEmail“

                                  #—erstelle einen Auftrag „TicketOldOwnerEmail“ im Generic Agent —

                                  -> Ereignisbaierte Ausführung -> Auslöser = TicketOwnerUpdate
                                  -> stelle deine Ticketfilter ein, um erstmal auf Queue zu testen

                                  -> bei Benutzerdefiniertes Modul ausführen folgende Zeile einfügen:
                                  Kernel::System::GenericAgent::SetOwnerEmailToDynamicField

                                  #—-Ticket Beachrichtigung „NotifyTicketOldOwnerEmail“ erstellen—-
                                  -> Ereignisbasierte Ausführung -> Auslöser = TicketOwnerUpdate
                                  -> bei zusätzliche Email Adresse jetzt das dynamische Feld angeben: <OTOBO_TICKET_DynamicField_TicketOldOwnerEmail>
                                  -> Benachrichtigunstext nach wünschen anpassen

                                  #—-Im die Otobo Konsole (SSH) wechseln und dort denn Docker benutzt wird in den Container wechseln—

                                  sudo docker exec -it otobo-web-1 bash  (Achtung Containername beachten, wenn man bereits Docker Compose v2 geupdatet hat)

                                  #—Datei SetOwnerEmailToDynamicField.pm erstellen—

                                  nano /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm

                                  Datei Inhalt:

                                  package Kernel::System::GenericAgent::SetOwnerEmailToDynamicField;

                                  use strict;
                                  use warnings;

                                  sub new {
                                  my ( $Type, %Param ) = @_;
                                  my $Self = {};
                                  bless( $Self, $Type );
                                  return $Self;
                                  }

                                  sub Run {
                                  my ( $Self, %Param ) = @_;

                                  my $TicketObject = $Kernel::OM->Get(‚Kernel::System::Ticket‘);
                                  my $UserObject = $Kernel::OM->Get(‚Kernel::System::User‘);
                                  my $DynamicFieldObject = $Kernel::OM->Get(‚Kernel::System::DynamicField‘);
                                  my $BackendObject = $Kernel::OM->Get(‚Kernel::System::DynamicField::Backend‘);

                                  my $TicketID = $Param{TicketID};
                                  if (!$TicketID) {
                                  return 1;
                                  }

                                  # 1. Ticket-Daten FRISCH aus der Datenbank laden (Behebt das Event-Schnittstellen-Problem)
                                  my %Ticket = $TicketObject->TicketGet(
                                  TicketID => $TicketID,
                                  DynamicFields => 0,
                                  UserID => 1,
                                  );

                                  # Falls das Ticket nicht geladen werden kann, sauber abbrechen
                                  if ( !%Ticket ) {
                                  return 1;
                                  }

                                  # Typen-Prüfung auf Deine erlaubten Ticket-Typen
                                  my %AllowedTypes = (
                                  ‚Incident‘ => 1,
                                  ‚Problem‘ => 1,
                                  ‚E-Mail‘ => 1,
                                  );

                                  if ( !$Ticket{Type} || !$AllowedTypes{ $Ticket{Type} } ) {
                                  return 1;
                                  }

                                  # 2. Die OwnerID des AKTUELLEN Besitzers direkt aus dem geladenen Ticket ziehen
                                  my $CurrentOwnerID = $Ticket{OwnerID};

                                  if (!$CurrentOwnerID) {
                                  return 1;
                                  }

                                  # 3. E-Mail-Adresse des aktuellen Besitzers direkt aus dem Agentenstamm abrufen
                                  my %OwnerData = $UserObject->GetUserData(
                                  UserID => $CurrentOwnerID,
                                  );

                                  # Alle gängigen E-Mail-Attribute im Agentenprofil prüfen
                                  my $OwnerEmail = $OwnerData{UserEmail} || $OwnerData{Email} || $OwnerData{mail} || “;

                                  # Falls keine Mailadresse gefunden wird (z. B. System-User), brechen wir ab
                                  if (!$OwnerEmail) {
                                  return 1;
                                  }

                                  # 4. In das dynamische Feld schreiben
                                  my $DynamicFieldName = ‚TicketOldOwnerEmail‘; # Der Systemname Deines Zielfeldes
                                  my $DynamicFieldConfig = $DynamicFieldObject->DynamicFieldGet(
                                  Name => $DynamicFieldName,
                                  );

                                  if (!$DynamicFieldConfig) {
                                  return 1;
                                  }

                                  # Wert im Ticket setzen
                                  $BackendObject->ValueSet(
                                  DynamicFieldConfig => $DynamicFieldConfig,
                                  ObjectID => $TicketID,
                                  Value => $OwnerEmail,
                                  UserID => 1,
                                  );

                                  return 1;
                                  }

                                  1;

                                  #—————————————————————————
                                  mit STRG + X beenden
                                  Y zum speichern

                                  #—Rechte auf die Datei setzen—
                                  —————————————————————————-
                                  chown otobo:otobo /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm
                                  chmod 644 /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm

                                  ##— dynamische Feld prüfen —-

                                  um das dynamische Feld einmal zu prüfen, einfach unter Verwaltung von Dynamische Feldern <-> Oberflächen, das dynamische Feld „TicketOldOwnerEmail“ bei OverviewSmall zuweisen und
                                  dann in der Ticketübersicht, bei Einstellungen (kleines Zahnrad) das Feld auswählen.

                                  Eine neue Email erstellen, bei dieser sollte nun direkt das dynamische Feld gefüllt werden.

                                   

                                  #—Verschieben nach Custom Kernel—- (für den Test nicht notwendig)

                                  1. Datei in den Custom-Ordner verschieben
                                  Erstelle die passende Ordnerstruktur im Custom-Verzeichnis (falls noch nicht vorhanden)

                                  mkdir -p /opt/otobo/Custom/Kernel/System/GenericAgent/

                                  Verschiebe Deine Modul-Datei dorthin

                                  mv /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm /opt/otobo/Custom/Kernel/System/GenericAgent/

                                  Berechtigungen zur Sicherheit für den OTOBO-Nutzer neu setzen

                                  chown otobo:otobo /opt/otobo/Custom/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm
                                  chmod 644 /opt/otobo/Custom/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm

                                  Gruß Marcel

                                • 7. August 2026 um 11:41 Uhr #42846
                                  marcel-graf
                                  Teilnehmer

                                    es sind laut Script nur die folgenden Tickettypen erlaubt, das muss ggf. noch angepasst werden.

                                    # Typen-Prüfung auf Deine erlaubten Ticket-Typen
                                    my %AllowedTypes = (
                                    ‚Incident‘ => 1,
                                    ‚Problem‘ => 1,
                                    ‚E-Mail‘ => 1,
                                    );

                                    bei uns wäre das dann so.

                                    # Typen-Prüfung auf Ihre aktiven OTOBO-Ticket-Typen
                                    my %AllowedTypes = (
                                    ‚Chat‘ => 1,
                                    ‚E-Mail‘ => 1,
                                    ‚Formular‘ => 1,
                                    ‚Telefon‘ => 1,
                                    ‚Unclassified‘ => 1,
                                    ‚Webservice‘ => 1,
                                    );

                                     

                                    oder ohne TicketTypPrüfung, entferne diesen Block, falls das Skript für ALLE Tickettypen gelten soll:

                                    # Typen-Prüfung auf Deine erlaubten Ticket-Typen
                                    my %AllowedTypes = (
                                    ‚Incident‘ => 1,
                                    ‚Problem‘ => 1,
                                    ‚E-Mail‘ => 1,
                                    );

                                    if ( !$Ticket{Type} || !$AllowedTypes{ $Ticket{Type} } ) {
                                    return 1;
                                    }

                                  • 7. August 2026 um 14:07 Uhr #42850
                                    Lars Berger
                                    Teilnehmer

                                      Hi Marcel,

                                      mit so einer detaillierten und super Anleitung sollte es eigentlich jeder hinbekommen – ich finde meinen Fehler nur nicht :-(

                                      Ich habe im Script den Block mit den Tickettypen auskommentiert, da wir es für alle Tickets haben möchten.

                                      Im „Generic Agent“ habe ich nur folgendes eingestellt:

                                      Auftragsname: TicketOldOwnerEmail
                                      Ereignisbasierte Ausführung (einzelnes Ticket): Typ = Ticket / Ereignis = TicketOwnerUpdate
                                      Ticket selektieren: Nummer meines Test-Tickets
                                      Benutzerdefiniertes Modul ausführen: Modul = Kernel::System::GenericAgent::SetOwnerEmailToDynamicField

                                      Eine Idee:
                                      Könnte es  noch daran liegen, dass ein Filter im Script ist für UserID = 1?
                                      (wir möchten diese Funktion für alle Tickets und Agenten haben – meine ID weiß ich nicht mal :-))

                                      Gruß Lars

                                    • 7. August 2026 um 14:49 Uhr #42851
                                      marcel-graf
                                      Teilnehmer

                                        Hallo Lars,

                                        wenn man die Agentenverwaltung öffnet und einen User dort auswählt, sieht man die jeweilige ID in der URL.

                                        UserID=1 sollte bei Euch auch der User „root@localhost“ sein.

                                        Wenn du den Geric Agent Task händisch ausführst, wird da ein Ticket angesprochen?
                                        Bei mir sieht das so aus, wenn ich die Ticket ID im filter setze:

                                        Ansonsten noch paar Fragen:

                                        -dyn. Feld -TicketOldOwnerEmail ist erstellt?

                                        -Auftrag „TicketOldOwnerEmail“ im Generic Agent ist erstellt -> das hattest du bestätigt

                                        -Ticket Beachrichtigung „NotifyTicketOldOwnerEmail“ erstellen?

                                        -wurde die Datei „SetOwnerEmailToDynamicField.pm“ erstellt und Rechte vergeben?

                                         

                                        Der User Root@localhost hat bei uns folgende Settings. Die Email ist eine vorhandene gültige Emailadresse, da es sonst zu fehlern kommt.

                                         

                                         

                                      • 11. August 2026 um 9:26 Uhr #42872
                                        Lars Berger
                                        Teilnehmer

                                          Hallo Marcel,

                                          genau – der Root-User ist ID=1 und hat jetzt eine gültige Emailadresse. Ein neuer Lauf mit dem Gen-Agent hat das Feld nicht gefüllt.

                                          Wenn ich den Generic Agent ausführe wird mein Ticket angezeigt und ich führe es für dieses eine Ticket aus.

                                          dyn. Feld erstellt – Ja
                                          Generic Agent erstellt – Ja
                                          Benachrichtigung erstellt – Ja
                                          Datei erstellt und Berechtigungen vergeben – Ja

                                          Du hast das so gut und detailliert beschrieben – ich weiß nicht wo etwas anders ist als bei dir …

                                          Gruß Lars

                                        • 11. August 2026 um 9:44 Uhr #42873
                                          marcel-graf
                                          Teilnehmer

                                            Hallo lars,

                                            das kann ja nicht viel sein. Kannst du mal in die Console wechseln und den Befehl ausführen?

                                            cd /opt/otobo-docker

                                            sudo docker compose exec -u otobo web perl -cw /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm

                                            Als Ergebnis muss dann das folgende kommen:

                                            /opt/otobo/Kernel/System/GenericAgent/SetOwnerEmailToDynamicField.pm syntax OK

                                             

                                            Im Generic Agent wurde das Modul auch zugewiesen?

                                            Eventuell wird der Quelltext hier im Forum verändert. Da könnte ich dir nochmal ein Textdatei irgendwie zukommen lassen.

                                            Gruß Marcel

                                             

                                          • 11. August 2026 um 9:57 Uhr #42874
                                            marcel-graf
                                            Teilnehmer

                                              schau doch nochmal in das Script

                                              KI meint, die Hauptursachen für den Fehler:
                                              Falsche Anführungszeichen (Copy-Paste-Fehler): In Ihrem Skript werden typografische Anführungszeichen (‚ und ‘ bzw. “) verwendet (z. B. Get(‚Kernel::System::Ticket‘) oder ‚Incident‘).

                                              Perl erkennt diese nicht als String-Begrenzer und bricht mit einem Syntaxfehler ab.

                                              Es müssen zwingend Standard-Single- oder Double-Quotes (‚ oder „) genutzt werden.

                                              Das Forum ändert das Format ab, schau mal so müssen die Hochkommas als Beispiel aussehen.

                                              Habs mal bei WETransfer hochgeladen. Ist 3 Tage abrufbar.

                                              https://we.tl/t-B1wtyXYGMq2vNEig

                                            • 11. August 2026 um 10:25 Uhr #42876
                                              Lars Berger
                                              Teilnehmer

                                                Hi Marcel,

                                                die KI hatte recht – dort lag der Fehler. Die Quotes waren falsch in meinem Script.

                                                Jetzt wird die Emailadresse vom Besitzer richtig gesetzt. Damit bin ich auf jeden Fall schon weiter.

                                                Eine Benachrichtigung bekomme ich auch per Mail (so wie ich es gewollt habe). Vielen Dank dafür.

                                                Bei meinem Test ist mir aufgefallen, dass diese Benachrichtigung auch im Ticket eingetragen wird. Wie stelle ich das ab? Weißt du das? Email reicht mir :-)

                                                Des weiteren ist mir aufgefallen, dass bei einem Ticket-Ping-Pong nur der letzte Eintrag bleibt.
                                                Beispiel: Mein Ticket = Agent A – meine Emailadresse wird als letzter Owner eingetragen. Agent B nimmt sich das Ticket, meine Emaildresse (Owner) bleibt eingetragen. Ich – also Agent A nimmt das Ticket zurück – Agent B bekommt darüber keinen Hinweis. Jetzt ist vermutlich die Lösung den Gen.Agent regelmäßig laufen zu lassen?

                                                Gruß und nochmal vielen vielen Dank

                                                Lars

                                              • 11. August 2026 um 12:23 Uhr #42881
                                                marcel-graf
                                                Teilnehmer

                                                  Hallo Lars,

                                                  das lässt sich wegen der Revisionssicherheit nicht so einfach unterbinden. Man könne das sicher aber in dem Script mit einbinden.

                                                  Gruß Marcel

                                                • 11. August 2026 um 12:57 Uhr #42883
                                                  marcel-graf
                                                  Teilnehmer

                                                    Hallo Lars,

                                                    wenn du das Script „SetOwnerEmailToDynamicField.pm“ mit dem folgenden ersetzt, wir die Mail darüber ausgelöst. Die Ticketbenachrichtung musst du nun deaktivieren.

                                                    #–> Script Anfang–#

                                                    package Kernel::System::GenericAgent::SetOwnerEmailToDynamicField;

                                                    use strict;
                                                    use warnings;

                                                    sub new {
                                                    my ( $Type, %Param ) = @_;
                                                    my $Self = {};
                                                    bless( $Self, $Type );
                                                    return $Self;
                                                    }

                                                    sub Run {
                                                    my ( $Self, %Param ) = @_;

                                                    my $TicketObject = $Kernel::OM->Get(‚Kernel::System::Ticket‘);
                                                    my $UserObject = $Kernel::OM->Get(‚Kernel::System::User‘);
                                                    my $DynamicFieldObject = $Kernel::OM->Get(‚Kernel::System::DynamicField‘);
                                                    my $BackendObject = $Kernel::OM->Get(‚Kernel::System::DynamicField::Backend‘);
                                                    my $EmailObject = $Kernel::OM->Get(‚Kernel::System::Email‘);

                                                    my $TicketID = $Param{TicketID};
                                                    if (!$TicketID) {
                                                    return 1;
                                                    }

                                                    # 1. Ticket-Daten laden
                                                    my %Ticket = $TicketObject->TicketGet(
                                                    TicketID => $TicketID,
                                                    DynamicFields => 0,
                                                    UserID => 1,
                                                    );

                                                    if ( !%Ticket ) {
                                                    return 1;
                                                    }

                                                    # 2. Konfiguration des dynamischen Feldes laden
                                                    my $DynamicFieldName = ‚TicketOldOwnerEmail‘;
                                                    my $DynamicFieldConfig = $DynamicFieldObject->DynamicFieldGet(
                                                    Name => $DynamicFieldName,
                                                    );

                                                    if (!$DynamicFieldConfig) {
                                                    return 1;
                                                    }

                                                    # 3. Den gespeicherten ALTEN Wert auslesen
                                                    my $OldOwnerEmail = $BackendObject->ValueGet(
                                                    DynamicFieldConfig => $DynamicFieldConfig,
                                                    ObjectID => $TicketID,
                                                    );

                                                    # 4. Daten des NEUEN (aktuellen) Besitzers ermitteln
                                                    my %NewOwnerData = $UserObject->GetUserData(
                                                    UserID => $Ticket{OwnerID},
                                                    );
                                                    my $NewOwnerName = $NewOwnerData{UserFirstname} . ‚ ‚ . $NewOwnerData{UserLastname};
                                                    my $NewOwnerEmail = $NewOwnerData{UserEmail} || $NewOwnerData{Email} || $NewOwnerData{mail} || “;

                                                    # =========================================================================
                                                    # E-Mail-Versand (NUR WENN alt und neu nicht identisch sind!)
                                                    # =========================================================================
                                                    my $MailSuccess = 0;

                                                    if ($OldOwnerEmail && $NewOwnerEmail && (lc($OldOwnerEmail) ne lc($NewOwnerEmail))) {

                                                    my $MailSubject = „[Ticket#$Ticket{TicketNumber}] Dir wurde ein Ticket entzogen“;
                                                    my $MailBody = <<„EOF“;
                                                    Hallo,

                                                    dir wurde soeben das Ticket mit der Nummer $Ticket{TicketNumber} („$Ticket{Title}“) entzogen.

                                                    Neuer Besitzer des Tickets ist von nun an: $NewOwnerName

                                                    Link zum Ticket: http://dein-otobo-server/otobo/index.pl?Action=AgentTicketZoom;TicketID=$TicketID

                                                    Viele Grüße,
                                                    Dein OTOBO System
                                                    EOF

                                                    $MailSuccess = $EmailObject->Send(
                                                    From => ‚otobo@deine-firma.de‘, # Bitte anpassen
                                                    To => $OldOwnerEmail,
                                                    Subject => $MailSubject,
                                                    Body => $MailBody,
                                                    MimeType=> ‚text/plain‘,
                                                    Charset => ‚utf-8‘,
                                                    );
                                                    } else {
                                                    # Wenn die Adressen gleich sind (z.B. beim ersten Mal oder Selbstanleitung),
                                                    # tun wir so, als wäre es erfolgreich, damit das Feld unten aktualisiert wird.
                                                    $MailSuccess = 1;
                                                    }

                                                    # =========================================================================
                                                    # Feld aktualisieren: Jetzt wird der NEUE Besitzer für das nächste Mal hinterlegt
                                                    # =========================================================================
                                                    if ( $NewOwnerEmail ) {
                                                    $BackendObject->ValueSet(
                                                    DynamicFieldConfig => $DynamicFieldConfig,
                                                    ObjectID => $TicketID,
                                                    Value => $NewOwnerEmail,
                                                    UserID => 1,
                                                    );
                                                    }
                                                    # =========================================================================

                                                    return 1;
                                                    }

                                                    1;

                                                    #—script ende—#

                                                    Das From Feld und die URL muss angepasst werden, falls das so übernommen wird.

                                                    Achtung, wieder auf die Hochkommas achten.

                                                    Gruß Marcel

                                                  • 11. August 2026 um 17:10 Uhr #42898
                                                    Lars Berger
                                                    Teilnehmer

                                                      Hallo Marcel,

                                                      ich belasse es bei der ersten Version. Dies gefällt mir unterm Strich am Besten.

                                                      Grundlegend möchte ich die Benachrichtigung nicht im Ticket haben, aber das ist auch nicht so schlimm.

                                                      Mir ist wichtiger, dass Agenten die Benachrichtigung auch abstellen können.

                                                      Ich habe übrigens den Cache gelöscht und das Web-Modul neu gestartet, dann wurden die Veränderungen des Owners immer sauber verändert. Irgendwas hing da wohl.

                                                      Vielen Dank für deine Mühe und Gedult.

                                                      Gruß Lars

                                                  • Autor
                                                    Beiträge
                                                  Ansicht von 22 Antwort-Threads
                                                  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

                                                  Foren durchsuchen

                                                  Anmeldung

                                                  Anmeldung

                                                  Konto erstellen
                                                  Passwort vergessen?

                                                  Login via Social

                                                  Profil

                                                  Bitte vervollständigen Sie nach der Registrierung Ihr Profil, das vereinfacht die spätere Kommunikation enorm. Ihre Profileinstellung finden Sie, wenn Sie auf Ihr Avatarbild klicken.

                                                  Sie können Ihren Avatar ändern, indem Sie sich mit Ihrer E-Mail-Adresse unter gravatar.com registrieren.

                                                  Letzte Aktivitäten

                                                  • Dynamische Felder in AgentTicketNote mit ACL verstecken
                                                  • FAQ: kaputtes Copy & Paste von Bildern zwischen Artikeln
                                                  • Benachrichtigung „Ticket wurde mir entzogen“ möglich?
                                                  • Statistik Anzahl Tickets pro Agent
                                                  • Docker: Ändern des redis Hosts

                                                  Unternehmen

                                                  Über uns
                                                  Karriere
                                                  Stellenbörse
                                                  Partner werden
                                                  Kontakt
                                                  Newsletter

                                                  OTOBO | Simplify work and create exceptional service experiences.

                                                  Die Source Code Owner und Maintainer hinter OTOBO.

                                                  Software

                                                  Service Management-Plattform
                                                  OTOBO Demo
                                                  OTOBO Download
                                                  OTOBO Dokumentation

                                                  Security-Problem melden:
                                                  security@otobo.org

                                                  Services

                                                  Support-Portal
                                                  Beratung
                                                  Training
                                                  Support
                                                  Managed Services
                                                  Erweiterung
                                                  OTRS Migration
                                                  Partner finden

                                                  Community

                                                  Open Source
                                                  Community Forum
                                                  Mitmachen
                                                  OTOBO Developer
                                                  OTOBO@GitHub

                                                  © 2026 Rother OSS GmbH | All rights reserved.
                                                  • Cookie-Einstellungen
                                                  • Impressum
                                                  • Datenschutz
                                                  • Haftungsausschluss
                                                  Nach oben scrollen Nach oben scrollen Nach oben scrollen