SECTOR NORD AG Tipp des Monats
[Znuny] MS Teams Integration
von Andreas Gerliz
Voraussetzungen
System: Znuny 6.1.x - Implementierung des Ticket-Invokers im ersten Znuny-Feature-Release
MS Teams: Eine Webhook URL - Offizielle Anleitung zur Erstellung eines Webhooks.
Funktion
Mit dieser Konfiguration wird ein Web-Service zu Znuny hinzugefügt mit dem Eventbasierte Nachrichten an MS Teams verschickt werden.
Zur Darstellung in Teams werden sogennante "Office 365 Connector Cards" verwendet:
Diese Karten basieren auf einer JSON-Struktur und werden später über das XSLT-Mapping generiert.
Erstellen des Webservices
Webservices werden über Admin-Oberfläche erstellt und verwaltet:
Admin → Webservices → Webservice hinzufügen
Hier kann über die Ready2Adopt-Webservices direkt eine MS Teams Konfiguration importiert werden:
MS Teams Notification auswählen → Button "Ready2Adopt-Webservices importieren"
Als nächstes wird der Netzwerktransport für "Znuny als Requester" konfiguriert. HTTP:REST ist hier schon vorausgewählt und enhält einige Voreinstellungen.
Für die weitere Konfiguration wird nun der Webhook benötigt:
Der Webhook wird in 2 Teile aufgeteilt. Der 2te Teil ist alles nach und inkl. des letzten "/".
Im Beispiel:
Webhook: https://sectornordag.webhook.office.com/webhookb2/04d23e1b-31d0-4d8e-88e5-d3b8549eef00@9c6e1dad-726e-42d6-8d62-aa0e205e6043/IncomingWebhook/847574eb4ec047cabd98e04b444b2606/7cb2c48f-1171-4356-a16f-1bc80fb8b1b9
1ster Teil: https://sectornordag.webhook.office.com/webhookb2/04d23e1b-31d0-4d8e-88e5-d3b8549eef00@9c6e1dad-726e-42d6-8d62-aa0e205e6043/IncomingWebhook/847574eb4ec047cabd98e04b444b2606
2ter Teil: /7cb2c48f-1171-4356-a16f-1bc80fb8b1b9
Es werden die die Einträge YOURHOOK_PART1 und /YOURHOOK_PART2 mit den entsprechenden Links ersetzt.
Danach kann die Konfiguration gespeichert werden.
Den Webservice ausführen
Das aufrufen des Webservices erfolgt eventbasiert.
Hierfür kann der vorher eingestellte Invoker "Escalate" ausgewählt und konfiguriert werden.
Es werden nun die entsprechenden Events ausgewählt, bei denen die Benachrichtigung ausgeführt werden soll. Die Darstellung, je nach Event kann später über das Mapping umgesetzt werden.
Dadurch spart man sich die Einrichtung eines neuen Web-Services für unterschiedliche Events
Anschließend wird das "Mapping für ausgehende Anfragedaten" in Form einer XSLT Datei konfiguriert.
<? xml version = "1.0" encoding = "UTF-8" ?> < xsl:transform version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform" xmlns:date = "http://exslt.org/dates-and-times" extension-element-prefixes = "date" > < xsl:output method = "xml" encoding = "utf-8" indent = "yes" /> < xsl:template match = "RootElement" > < xsl:copy > < themeColor >0076D7</ themeColor > < Initialtype >MessageCard</ Initialtype > < summary >Ticket < xsl:value-of select = "//Ticket/TicketNumber" /> is escalated</ summary > < sections > < activityTitle >Ticket #< xsl:value-of select = "//Ticket/TicketNumber" /> is escalated</ activityTitle > < markdown >true</ markdown > < facts >< Name >Owner</ Name >< Value >< xsl:value-of select = "//Ticket/OwnerData/UserFullname" /></ Value ></ facts > < facts >< Name >State</ Name >< Value >< xsl:value-of select = "//Ticket/State" /></ Value ></ facts > < facts >< Name >Type</ Name >< Value >< xsl:value-of select = "//Ticket/Type" /></ Value ></ facts > </ sections > < potentialAction > < potentialActiontype >ViewAction</ potentialActiontype > < name >View ticket in Znuny</ name > < target >< OTRS_CONFIG_HttpType >://< OTRS_CONFIG_FQDN >/< OTRS_CONFIG_ScriptAlias >/index.pl?Action=AgentTicketZoom;TicketID=< xsl:value-of select = "//Ticket/TicketID" /></ target > </ potentialAction > </ xsl:copy > </ xsl:template > </ xsl:transform > |
Um genauer zu erfahren, wie die Struktur des Tickets aussieht, kann man in den Debugger des Webservices schauen. Das Debug-Level sollte dafür auf "Fehlersuche" stehen.
Danach werden die gemappten Daten so aufbereitet, dass Sie von Teams als MessageCard formatiert gelesen werden können.
Dabei werden zunächst die 3 Teile "sections target potentialAction" zu Arrays konvertiert.
Als letztes werden noch einige Teile über RegEx ausgetauscht, da für die JSON-Struktur bestimmte Abschnitte mit "@..." angegeben werden müssen. Diese Einträge kann man aber nicht
in der XSLT vornehmen.
Dynamisches Mapping
Möchte man einen Webservice bei verschiedenen Events ausführen, möchte aber ebenfalls unterschiedlichen Text an Teams übergeben, so kann dies dynamisch über das XSLT-Mapping gelöst
werden. Anstatt einen neuen Webservice anlegen zu müssen, wird hier innerhalb des Mappings auf den Eventtypen gefiltert und je nach Eventtyp ein anderes Template erstellt.
Im Beispiel: