Automatisierungsvariablen und Vorlagen in GLPI 11

Technischer Leitfaden zu den Benachrichtigungsvariablen von GLPI 11: die ##...##-Tags, die wirklich funktionieren, der FOREACH-Block, den kaum jemand kennt, die ##lang.*##-Tags für mehrsprachige E-Mails, warum der Anforderer leer bleibt und die Warteschlangen-Abfrage, die NexTool ausführt, wenn die Benachrichtigung nicht ankommt.

In diesem Artikel7 Abschnitte

Eine Automatisierungsvariable ist der Unterschied zwischen einem generischen „Ihr Ticket wurde aktualisiert“ und „Ticket 12345 - Drucker ohne Toner wurde auf In Bearbeitung gesetzt, mit der Technikerin Ana Paula“. Im GLPI sind diese Variablen die Benachrichtigungs-Tags: Platzhalter ##...##, die die Engine zum Zeitpunkt des Versands durch die echten Daten ersetzt. Sie wirken trivial, bis zu dem Tag, an dem der Name des Anforderers in der E-Mail leer bleibt und niemand weiß, warum. Dieser Leitfaden ist die Landkarte, die wir beim Betrieb der GLPI-Umgebungen unserer Kunden verwenden, um Vorlagen auf Anhieb richtig zu erstellen.

Wo die Variablen leben: Vorlage ist nicht Benachrichtigung

Bevor Sie Tags auswählen, sollten Sie die Kette verstehen, die GLPI aufbaut, denn die meisten Fälle von „die Variable funktioniert nicht“ sind in Wahrheit Konfigurationsfehler, keine Syntaxfehler. Eine Nachricht wird nur verschickt, wenn vier Bausteine zusammenpassen:

  • Benachrichtigung (Einstellungen > Benachrichtigungen): verknüpft das Ereignis - neues Ticket, Folgeaktion, Lösung, Zufriedenheitsumfrage.
  • Vorlage (Benachrichtigungsvorlagen): der Text- und der HTML-Inhalt, in den Sie die Tags ##...## schreiben.
  • Empfänger: wer die Nachricht erhält - Anforderer, zugewiesener Techniker, Gruppe, Beobachter.
  • Warteschlange und Versand: GLPI verschickt die E-Mail nicht sofort; es stellt sie in eine Warteschlange, und die automatische Aktion queuednotification versendet sie.

Den richtigen Tag in eine Vorlage zu setzen, die mit keiner aktiven Benachrichtigung verknüpft ist, erzeugt keine einzige E-Mail - und der Fehler liegt nicht am Tag.

Die Tags, die Sie wirklich verwenden

Die Tags sind kontextabhängig: Die verfügbare Menge ändert sich je nach Objekt (Ticket, Change, Problem). Für Tickets decken diese die meisten Vorlagen ab - alle direkt in der Benachrichtigungs-Engine von GLPI 11 überprüft:

TagWas er zurückgibt
##ticket.id##Ticketnummer
##ticket.title##Titel
##ticket.description##Beschreibung (Inhalt bei der Erstellung)
##ticket.url##Direkter Link zum Ticket (erfordert Login)
##ticket.status##Aktueller Status
##ticket.priority##Priorität
##ticket.category##Kategorie
##ticket.creationdate##Erstellungsdatum
##ticket.solvedate##Lösungsdatum
##ticket.duedate##Lösungsfrist (SLA)
##ticket.authors##Anforderer - kommagetrennte Liste
##ticket.assigntousers##Zugewiesene(r) Techniker - kommagetrennte Liste
##ticket.assigntogroups##Zugewiesene Gruppe(n)
##ticket.solution##Text der Lösung
##followup.author## / ##followup.description##Innerhalb von ##FOREACHfollowups##
##task.author## / ##task.description##Innerhalb von ##FOREACHtasks##
##author.name## / ##author.email##Innerhalb von ##FOREACHauthors##

Beachten Sie, dass ##ticket.assigntousers## bereits eine fertige, kommagetrennte Liste zurückgibt - GLPI führt das implode intern aus. Es ist keine Schleife, sondern reiner Text: Damit ist der Fall „ich habe zwei Techniker und möchte beide in der E-Mail“ ohne jeden Trick gelöst.

Der häufigste Fehler in der Praxis: Der Anforderer ist nicht ##user.name##

Das ist mit Abstand das Problem, das wir bei Vorlagen-Audits am häufigsten wieder aufrollen: Der Name des Anforderers kommt leer in der E-Mail an. Die Ursache ist fast immer dieselbe - jemand hat ##user.name## aus einem Tutorial zur Passwort-Wiederherstellung in eine Ticketbenachrichtigung kopiert. In Benachrichtigungen zu Ticket existiert ##user.name## schlicht nicht: Er gehört zu den Benachrichtigungen des Objekts Benutzer (Passwort-Reset, Kontoerstellung). GLPI meldet keinen Fehler - es ersetzt ihn nur durch einen leeren Wert, und der Techniker verbringt den Nachmittag mit der Jagd nach einem Bug, der in Wahrheit an der Datenquelle liegt. Der Anforderer eines Tickets ist ##ticket.authors## (fertige Liste) oder, wenn Sie Name und E-Mail jedes Einzelnen getrennt möchten, der folgende FOREACH-Block.

FOREACH: der Teil, den kaum jemand kennt

Ein Ticket hat N Folgeaktionen, N Aufgaben, N Anforderer. Es gibt keinen magischen Tag, der alles formatiert ausgibt: GLPI stellt die Sammlungen über einen Wiederholungsblock bereit. Sie öffnen die Schleife, schreiben den Inhalt einmal mit den Tags des Elements und schließen sie - und können die Anzahl der Elemente zudem mit FIRST oder LAST beliebig begrenzen:

Ola ##ticket.authors##,

Seu chamado ##ticket.id## - ##ticket.title##
mudou para: ##ticket.status##
Tecnico(s): ##ticket.assigntousers##

Ultimo acompanhamento:
##FOREACH LAST 1 followups##
[##followup.date##] ##followup.author##:
##followup.description##
##ENDFOREACHfollowups##

Acesse: ##ticket.url##

Das LAST 1 (akzeptiert auch FIRST und eine größere Zahl) verhindert die kilometerlange E-Mail, die bei jeder neuen Folgeaktion den gesamten Verlauf wiederholt - ein wiederkehrender Kundenwunsch, den die meisten „lösen“, indem sie gewaltsam Inhalt kürzen, obwohl der Modifikator genügt hätte. Zu den Sammlungen, die FOREACH akzeptieren, gehören followups, tasks, authors, actors, costs und die verknüpften Objekte (linkedtickets, linkedchanges, linkedproblems).

Mehrsprachige Benachrichtigungen gratis: die ##lang.*##-Tags

Ein Detail, das erst auffällt, wenn Sie die vollständige Liste der Tags öffnen: Jeder Wert-Tag hat einen Begleiter für die Bezeichnung. Zu ##ticket.status## (dem Wert) gibt es ##lang.ticket.status##, das die Bezeichnung „Status“ in der Sprache des Empfängers ausgibt. Wenn Sie die Vorlage aus Paaren von Bezeichnung + Wert aufbauen, geht dieselbe Nachricht an einen Benutzer auf Portugiesisch und an einen anderen auf Spanisch, ohne die Vorlage zu duplizieren:

##lang.ticket.title##: ##ticket.title##
##lang.ticket.status##: ##ticket.status##
##lang.ticket.priority##: ##ticket.priority##

Bei einem Kunden mit Einheiten in mehr als einem Land reduziert das die Pflege von „einer Vorlage pro Sprache“ auf eine einzige Vorlage. Den Wert übersetzen Sie nicht - die Daten sind die Daten; was sich ändert, ist nur die Bezeichnung, und ##lang.*## erledigt das von selbst.

Diagnose: Die Variable ist richtig, aber die E-Mail geht nicht raus

Wenn die Vorlage einwandfrei ist und die E-Mail trotzdem verschwindet, liegt das Problem nicht am Tag - sondern an der Warteschlange. GLPI schreibt jede Nachricht in glpi_queuednotifications, und die automatische Aktion queuednotification ist diejenige, die tatsächlich versendet. Wenn die Aktion nicht läuft (Cron gestoppt) oder der SMTP-Server ablehnt, sammelt sich die Nachricht mit leerem sent_time an. Das ist das Erste, was wir bei einem Ticket „Benachrichtigung kommt nicht an“ ausführen:

-- Notificacoes enfileiradas que ja deveriam ter saido:
-- sent_time NULL = ainda nao enviada; send_time no passado = atrasada.
SELECT id, name AS assunto, recipient, send_time, sent_try
FROM glpi_queuednotifications
WHERE sent_time IS NULL
  AND send_time <= NOW()
ORDER BY send_time ASC
LIMIT 30;

Sich ansammelnde Zeilen mit steigendem sent_try bedeuten, dass der SMTP-Server ablehnt; eine wachsende Warteschlange mit sent_try bei null bedeutet einen gestoppten Cron. In beiden Fällen ist die Vorlage richtig - und Sie haben sich gerade den Nachmittag gespart, den Sie mit dem sinnlosen Umschreiben von Tags verbracht hätten.

Wo welche Variable funktioniert (Entscheidungsmatrix)

Das Missverständnis, das wir in fast jeder neuen Umgebung übernehmen, ist die Annahme, dass „Ticketvorlage“ und „Benachrichtigungsvorlage“ dasselbe sind. Das sind sie nicht - und nur eine der beiden ersetzt ##tag##:

WoErsetzt ##tag##?Wofür
Benachrichtigungsvorlage (Inhalt und Betreff)Ja - Tags, FOREACH und ##lang.*##Dynamischer E-Mail-Inhalt
Ticketvorlage (TicketTemplate)NeinFelder bei der Erstellung vorbelegen, ausblenden oder zu Pflichtfeldern machen
Aufgaben- / FolgeaktionsvorlageNeinWiederverwendbarer Basistext, ohne dynamische Ersetzung
Betreff (subject) der BenachrichtigungJaDieselben Tags wie im Inhalt, in einer einzigen Zeile

Ein letzter Tipp, der mehr wert ist als alles andere: Beim Bearbeiten einer Benachrichtigungsvorlage zeigt GLPI den Reiter mit den verfügbaren Tags für genau dieses Objekt. Das ist die maßgebliche Quelle - kontextabhängig und immer passend zur installierten Version. Bevor Sie einen Tag aus einem Blog kopieren (auch aus diesem), prüfen Sie, ob er dort erscheint.

Sie brauchen Benachrichtigungen, die wirklich informieren - mehrsprachig, mit dem richtigen Anforderer und ohne in der Warteschlange festhängende E-Mails? Lernen Sie den GLPI-Betriebssupport von NexTool kennen.


Geprüft vom Team von NexTool Solutions.

Häufig gestellte Fragen

Fast immer, weil die Vorlage ##user.name## verwendet, das es in Benachrichtigungen zu Ticket nicht gibt (es gehört zu den Benachrichtigungen des Objekts Benutzer, etwa beim Passwort-Reset). GLPI meldet keinen Fehler, es ersetzt den Tag nur durch einen leeren Wert. Verwenden Sie ##ticket.authors## für die Liste der Anforderer oder den Block ##FOREACHauthors## mit ##author.name## und ##author.email##, um jeden einzeln zu behandeln.

Verwenden Sie den Modifikator von FOREACH: ##FOREACH LAST 1 followups## ... ##ENDFOREACHfollowups##. LAST 1 nimmt nur die neueste Folgeaktion; FIRST und größere Zahlen werden ebenfalls akzeptiert. Ohne den Modifikator gibt die Schleife bei jedem Versand alle Folgeaktionen aus und erzeugt die klassische kilometerlange E-Mail.

Ja. Jeder Wert-Tag hat einen Bezeichnungs-Begleiter ##lang.*##: Zu ##ticket.status## gibt es ##lang.ticket.status##, das die übersetzte Bezeichnung in der Sprache des Empfängers ausgibt. Wenn Sie den Inhalt aus Paaren ##lang.ticket.field##: ##ticket.field## aufbauen, bedient eine einzige Vorlage mehrere Sprachen.

Die Warteschlange, nicht die Vorlage. GLPI stellt jede Nachricht in glpi_queuednotifications ein, und die automatische Aktion queuednotification übernimmt den Versand. Prüfen Sie die Zeilen mit sent_time NULL und send_time in der Vergangenheit: Ein steigendes sent_try deutet auf einen ablehnenden SMTP-Server hin; sent_try bei null deutet auf einen gestoppten Cron hin.

Nein. Die Ticketvorlage (TicketTemplate) dient dazu, Felder bei der Erstellung vorzubelegen, auszublenden oder zu Pflichtfeldern zu machen - sie ersetzt keine ##tag##. Die Automatisierungsvariablen ##...## leben in den Benachrichtigungsvorlagen (Inhalt und Betreff). Die Verwechslung der beiden ist die Ursache für viele Fälle von „die Variable funktioniert nicht“.

Brauchen Sie Hilfe?