In Kombination mit dem Zammad Add-on für i-doit lässt sich ein
Genehmigungs-Workflow abbilden. Dafür nutzt Zammad eine Kombination aus
selbst definierten Attributen, Webhooks, Makros und Trigger.
Hier der Ablauf:
- Jemand erstellt ein Ticket, mit einem genehmigungspflichtigen Antrag.
- Ein Agent prüft die Anforderung, schreibt eventuell einen Artikel zur Erklärung für die Person die den Antrag genehmigen soll und setzt den Ticket Status auf "Genehmigung"
- Ein Trigger schreibt die User-ID des aktuellen Ticket-Eigentümers in ein benutzerdefiniertes Attribut (Kickback-User)
- Ein weiterer Trigger löst einen Webhook zu i-doit aus, der die Ticket-ID, einen Gruppennamen, eine Rolle und optional ein Objekttyp an die API von i‑doit übergibt.
- In i-doit wird innerhalb der übergebenen Gruppe nach Personen mit der übergebenen Rolle gesucht und bei einem Treffer die erste Person als neuen Ticket-Eigentümer in Zammad festlegt.
- Der oder die neue Ticket-Eigentümer:in schreibt in einem Artikel ob der Antrag genehmigt oder abgelehnt werden soll und löst über ein Makro die Rückgabe des Tickets an den ursprünglichen Ticket-Eigentümer (Kickback-User aus Schritt 3) aus.
- Ab hier kann das Ticket wie jeder andere Service Request abgearbeitet werden.
Einrichten des Workflows
1. Attribut für einen Kickback-User erstellen
Zunächst
wird ein Ticket Attribut vom Typ "Integer-Feld" erstellt, in das via
Trigger die ID des Ticket-Eigentümers geschrieben wird. Da dieses Feld
nur von Webhooks verwendet wird, muss es niemals für Anwender sichtbar
sein. Die entsprechenden Checkboxen können also abgewählt werden.
2. Ticket-Status "Genehmigung" anlegen
Dieser
zusätzliche Status wird nur verwendet um den Trigger auszulösen, der
die ID des Ticket-Eigentümers in das zuvor angelegte Integer-Feld
schreibt. Alternativ kann ein anderes Ticket-Attribut dafür verwendet
werden.
3. Erstellen der Webhooks
Für den gesamten Workflow werden drei Webhooks benötigt:
3.1 Webhook zum schreiben der ID des aktuellen Ticket-Eigentümers in das benutzerdefinierte Attribut vom Schritt 1 (Kickback-User)
Damit nach der Genehmigung das Ticket wieder den selben Eigentümer
bekommt wie zuvor, speichern wir die ID des aktuellen Ticket-Eigentümers
im zuvor erstellten benutzerdefinierten Attribut. Das erledigt ein
Webhook über den Zammad ein Selbstgespräch führt. Wenn Sie dem Ticket
Attribut den Namen "kickback_user" gegeben haben, sieht die Payload für
den Webhook folgendermaßen aus:
{"kickback_user": "#{ticket.owner_id}"}3.2 Webhook zum Ansprechen der i‑doit API um nach der Person zu suchen, die die Genehmigung erteilen soll und diese als neuen Ticket-Eigentümer festlegt
Für die Suche nach der Person, die die Genehmigung erteilen
soll, erweitert das Zammad Add-on für i‑doit die API um den
Endpunkt "zammad.owner.change.v2". Neben der aktuellen Ticket ID (nicht
die Nummer) erwartet der Endpunkt den Namen eines i‑doit Objekts dessen
Objekttyp die spezifische Kategorie "Personengruppen (Personengruppen)"
zugewiesen hat und die Konstante einer Rolle die einem Mitglied der
Gruppe zugewiesen sein soll. Optional kann ein Objekttyp für die
Personengruppe angegeben werden. Wird kein Objekttyp angegeben, wird im
Objekttyp "Personengruppen" nach der angegebenen Gruppe gesucht.
Existiert
die angegebene Personengruppe in i‑doit und wird ein Gruppenmitglied
mit der angegebenen Rolle gefunden, wird i‑doit seinerseits die API von
Zammad nutzen um den Ticket-Eigentümer auf die gefundene Person zu
ändern.
Wenn zum Beispiel die Abteilungen
Anwender:innen in i‑doit als Personengruppen angelegt sind und dem oder
der Abteilungsleiter:in die
Rolle "C__MODULE__DPA_ZAMMAD__HEAD_OF_DEPARTMENT" zugewiesen worden
sein, dann würde folgender Webhook den Ticket-Eigentümer entsprechend
ändern:
{
"version": "2.0",
"method": "zammad.owner.change.v2",
"params": {
"apikey": "{your-api-key}",
"ticket_id": "#{ticket.id}",
"group_name": "#{ticket.customer.department}",
"role_const": "C__MODULE__DPA_ZAMMAD__HEAD_OF_DEPARTMENT",
"obj_type": "C__OBJTYPE__PERSON_GROUP"
},
"id": 1}3.3 Webhook zum Ändern des Ticket-Eigentümers auf die im benutzerdefinierten Attribut (Kickback-User), nach erfolgter Genehmigung oder Ablehnung des Antrags
Wenn der Antrag genehmigt oder
abgelehnt wurde, soll der Eigentümer des Tickets wieder auf den
ursprünglichen Eigentümer zurückgestellt werden. Dafür wird ein dritter
Webhook erstellt, der die ID aus dem benutzerdefinierten
Attribut "kickback_user" liest und den Eigentümer wieder auf diese ID
zurückstellt. Wie schon im Schritt 3.1 führt Zammad über die API ein
Selbstgespräch:
{"owner_id": "#{ticket.kickback_user}"}4. Trigger und Makros
Um die im Schritt 3 erstellten Webhooks auszulösen werden Trigger und Makros verwendet.
Der
erste Trigger wird ausgelöst, wenn ein Ticket auf den Status
"Genehmigung" gestellt wird. Dieser Trigger ruft den unter 3.1
beschriebenen Webhook zum schreiben der ID des aktuellen
Ticket-Eigentümers in das benutzerdefinierte Attribut "kickback_user".
Der
zweiter Trigger wird durch das Setzen des "kickback_user" Attributs
ausgelöst. Der erste Trigger löst also den zweiten Trigger aus, der
seinerseits den unter 3.2 beschriebenen Webhook aufruft um in i‑doit
nach der Person zu suchen, die die Genehmigung erteilen soll und diese
als neuen Ticket-Eigentümer festzulegen.
Der
dritte Webhook, der den Ticket-Eigentümer wieder zurück auf den
ursprünglichen Eigentümer stellt, kann von einem Makro ausgeführt
werden, das gleichzeitig den Ticket-Status von "Genehmigung" zurück
stellt. Aber es wäre auch weitere Status wie "genehmigt" oder
"abgelehnt" möglich, die, wenn sie für das Ticket eingestellt werden,
den Webhook aufrufen.