• 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ü

Schlagwörter: Ticketbenachrichtigung Tags Artikel

Ansicht von 1 Antwort-Thread
  • Autor
    Beiträge
    • 4. August 2026 um 11:40 Uhr - Views: 137 #42805
      Wolfgang Winkler
      Teilnehmer

        Hallo,

        wir optimieren gerade unsere Ticketbenachrichtigungen für Agenden und Kundenbenutzer.

        Für eine Rückfrageaktion würde ich gerne als Info, für z.B. einen Vorgesetzten den Text des ersten Artikel mitsenden.

        In diesem steht bei uns meist die Anforderung/der Wunsch / … worum es geht.

        Kann ich mit den Tags auf den ersten Artikel zugreifen?

        In der Tag-Referenz finde ich immer nur den letzten , also den akutellsten Artikel.
        Vielleicht bin ich auch nur Blind, im Forum habe ich schon die Tag Referenz zu OTRS gefunden, die ja analog angewendet werden kann.

        https://academy.otrs.com/doc/admin/tutorials/otrs-tags/

         

        Hat hier jemand Tipps für mich?

        Danke.

        Gruß

        Wolfgang

         

      • 4. August 2026 um 15:49 Uhr #42814
        Tobias Bück
        Teilnehmer

          Servus Wolfgang,

          den „letzten Artikel“ holt OTOBO fest im TemplateGenerator für Notifications. Da steht OnlyLast => 1. Für den ersten Artikel nimmst du denselben Code und setzt OnlyFirst => 1 (API kann beides, nur nicht gleichzeitig).

          Stock (letzter Customer-Artikel → u.a. ):

          https://github.com/RotherOSS/otobo/blob/rel-11_0/Kernel/System/TemplateGenerator.pm#L932-L949

          `perl
          # Get last article from customer.
          my @CustomerArticles = $ArticleObject->ArticleList(
          TicketID => $Param{TicketData}->{TicketID},
          SenderType => ‚customer‘,
          OnlyLast => 1,
          );

          my %CustomerArticle;

          ARTICLE:
          for my $Article (@CustomerArticles) {
          next ARTICLE if !$Article->{ArticleID};

          %CustomerArticle = $ArticleObject->BackendForArticle( %{$Article} )->ArticleGet(
          %{$Article},
          DynamicFields => 0,
          );
          }
          `

          ArticleList mit OnlyFirst / OnlyLast:

          https://github.com/RotherOSS/otobo/blob/rel-11_0/Kernel/System/Ticket/Article.pm#L71-L76
          (im File die Stelle mit OnlyFirst / OnlyLast am Ende von ArticleList)

          Wenn du **nur** den ersten Artikel in den bestehenden Tags willst (Body/Subject wie gewohnt, nur erster statt letzter), in einem Custom-Override genau so ändern:

          `perl
          # Get first article from customer. (war: OnlyLast => 1)
          my @CustomerArticles = $ArticleObject->ArticleList(
          TicketID => $Param{TicketData}->{TicketID},
          SenderType => ‚customer‘,
          OnlyFirst => 1,
          );
          `

          Dann bleiben / gültig, zeigen aber den ersten Customer-Artikel.

          Wenn du **beide** brauchst (last + first), parallel laden und eigene Tags ersetzen, z.B. in Custom/Kernel/System/TemplateGenerator.pm (Methode NotificationEvent aus Core kopieren und erweitern):

          `perl
          # — stock: last customer article (unverändert) —
          my @CustomerArticles = $ArticleObject->ArticleList(
          TicketID => $Param{TicketData}->{TicketID},
          SenderType => ‚customer‘,
          OnlyLast => 1,
          );

          my %CustomerArticle;
          ARTICLE:
          for my $Article (@CustomerArticles) {
          next ARTICLE if !$Article->{ArticleID};
          %CustomerArticle = $ArticleObject->BackendForArticle( %{$Article} )->ArticleGet(
          %{$Article},
          DynamicFields => 0,
          );
          }

          # — neu: first customer article —
          my @FirstCustomerArticles = $ArticleObject->ArticleList(
          TicketID => $Param{TicketData}->{TicketID},
          SenderType => ‚customer‘,
          OnlyFirst => 1,
          );

          my %FirstCustomerArticle;
          FIRSTARTICLE:
          for my $Article (@FirstCustomerArticles) {
          next FIRSTARTICLE if !$Article->{ArticleID};
          %FirstCustomerArticle = $ArticleObject->BackendForArticle( %{$Article} )->ArticleGet(
          %{$Article},
          DynamicFields => 0,
          );
          }

          # nach dem bestehenden Replace-Flow (wenn Body/Subject der Notification schon gesetzt sind), z.B.:
          my $FirstBody = $FirstCustomerArticle{Body} // “;
          my $FirstSubject = $FirstCustomerArticle{Subject} // “;

          # Plain preview analog zum Stock (ArticlePreview), falls du HTML strippen willst:
          # $FirstBody = $LayoutObject->ArticlePreview(
          # TicketID => $FirstCustomerArticle{TicketID},
          # ArticleID => $FirstCustomerArticle{ArticleID},
          # ResultType => ‚plain‘,
          # UserID => $Param{UserID},
          # );

          $Notification{Body} =~ s{}{$FirstBody}gi;
          $Notification{Subject} =~ s{}{$FirstSubject}gi;
          $Notification{Body} =~ s{<OTOBO_CUSTOMER_FIRST_BODY>}{$FirstBody}gi; # falls HTML-ContentType
          `

          In der Benachrichtigung dann z.B.:

          `
          Erstanforderung:

          `

          Kein GenericAgent, kein DynamicField. Nur TemplateGenerator + OnlyFirst, analog zum bestehenden Last-Article-Pfad.

          Cache/Config neu laden nach Custom-Deploy nicht vergessen.

      • Autor
        Beiträge
      Ansicht von 1 Antwort-Thread
      • 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

      • FAQ: kaputtes Copy & Paste von Bildern zwischen Artikeln
      • Dynamische Felder in AgentTicketNote mit ACL verstecken
      • 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