Eskalations- und Freigabe-Workflows
Aufgabe
Dieses Tutorial beschreibt die Lösung in todo4teams für das folgende Szenario:
Es kommt eine Kundenanfrage per E-Mail, die einen Job für eine spezielle Gruppe erzeugt (z.B. Kundenanfragen) und anschließend von einem Bearbeiter übernommen wird. Im Regelfall erledigen die Agents die Anfragen eigenverantwortlich in einem Schritt.
Hat der Kunde nun ein Anliegen, das der Agent als Bearbeiter des Tickets nicht selbständig entscheiden kann (z.B. Rabattierung oberhalb einer bestimmten Grenze), muss er hierfür die Freigabe eines Entscheiders einholen. Anschließend wird dem Kunden durch den Agent per E-Mail mitteilt, ob seinem Wunsch entsprochen werden kann.
Lösung
Für die Lösung des oben beschriebenen Szenarios kann der folgende Workflow in todo4teams implementiert werden:
Vorab wird eine neue Gruppe in todo4teams gebildet, die die Benutzer beinhaltet, die weitergehende Entscheidungen und Freigaben treffen können. Im folgenden Beispiel ist es die Gruppe "Manager" mit der ID=34. Zusätzlich wird ein Formular (im Beispiel "Approval") erstellt, das diesen Workflow steuern wird.
- Der Bearbeiter des Tickets (der Agent) bearbeitet die empfangene E-Mail, erkennt, dass er für die Anfrage des Kunden eine Freigabe einholen muss und wählt dazu im Erledigen-Dialog das Formular "Approval" aus. Darin stellt er im Feld "Request" die Art und den Umfang der Freigabe vor. Anschließend wird dieses Ticket mittel "Absenden" geschlossen. Dabei hat er die noch die Möglichkeit, dem Kunden eine erste E-Mail zu senden und ihm mitzuteilen, dass eine Freigabe beantragt wurde.
- Das Ticket wird nun automatisiert ein Folgeticket an die Gruppe "Manager" weitergeleitet.
- Ein Mitglied dieser Gruppe beantwortet das Ticket, indem er im Formular "Approval" die Freigabe durch Setzen des Radio-Buttons auf "granted" (gewährt) oder "declined" (abgelehnt). Zusätzlich kann noch ein Kommentar in das Feld "Comment" geschrieben werden.
- Mit derErledigung des Tickets durch den "Manager" wird dieses nun automatisiert wieder in die ursprüngliche Gruppe eingestellt, die die Kundenanfrage bearbeitet hatte. Der Besitzer dieses Tickets bleibt der ursprüngliche (erste) Bearbeiter.
- In diesem Ticket erkennt nun der Agent über das angehängte Formular "Approval" die gefällte Entscheidung und die ggf. erteilte Freigabe, kann das Ticket final bearbeiten, dem Kunden per E-Mail antworten sowie das Ticket dann schließen.
Durch diese Arbeitsschritte für die Bearbeitung der Kundenanfrage entstehen zwei zusätzliche Tickets im System, die mit dem Ticket der Kundenanfrage verknüpft sind und den Workflow dokumentieren. Diese Verknüpfung kann im Detail-Dialog unter "Workflow" und dann "Workflow Laden" angezeigt werden. Damit wird transparent, wann welcher Workflow-Schritt ausgeführt und wieviel Zeit benötigt wurde. Es bietet sich hierfür die ursprüngliche Kundenanfrage und das dadurch erzeugte Ticket an. Sie können allerdings in diesen Dalog auch über eins der beiden Folgetickets einsteigen, also z.B. über das Ticket mit der Anfrage an die Manager-Gruppe:
Formular
Das Layout des Formulars ist denkbar einfach: Oben ist ein Textfeld, in dem der Agent die Anfrage stellen kann. Beim Absenden der Anfrage wird hier eine Angabe gefordert (Feld-Name: Request).
Für den Manager stehen ein Radio-Button für seine Entscheidung (Feldname Decision) und ein Textfeld für einen optionalen Kommentar zur Verfügung. Wenn der Manager seine Entscheidung absendet, wird die Auswahl der Decision Pflicht sein.
Es wird später im Skript gezeigt, wie die genannten Felder zu Pflichtfeldern gemacht werden. Siehe hierzu auch dieses Tutorial.
Skript-Programmierung
Absenden-Aktion
Um das Feld Request zu einem Pflichtfeld zu machen, wird beim Absenden (also in der Absenden-Aktion) dessen Wert ermittelt und, falls kein Wert eingegeben wurde, mit der Methode helper.errorMessage() ein Hinweis angezeigt und das Absenden des Formulars verhindert, indem der Ergebniswert result auf "error" gesetzt wird:
var name = form.getValueByFieldName("Request");
if(name.length()==0){
helper.errorMessage("Please enter a request!");
result="error";
}
Erledigen-Aktion
Die Erledigen-Aktion des Formulars wird in diesem Workflow dreimal ausgeführt: Zunächst, wenn der Agent das Ticket in Schritt (2) durch Erledigung an den Manager weiterleitet. Ein zweites Mal, wenn der Manager seine Antwort auf die Anfrage absendet (3) und zum dritten Mal, wenn der Agent das Ticket schließt und die Antwort an den Kunden sendet (4) - denn das Formular wird dann immer noch am Ticket hängen.
Nur bei Bearbeitung durch den Manager soll jedoch für den Radio-Button "Decision" eine Auswahl erzwungen werden.
Dazu wird geprüft, an welches Team das Ticket im aktuellen Schritt bearbeitet wird. Falls es das Team Manager (mit der ID 34) ist, wird durch den folgenden Code eine Auswahl gefordert und ansonsten das Absenden des Formulars verhindert:
var dec = form.getValueByFieldName("Decision");
if(dec==null || dec.length()==0){
helper.errorMessage("Please select a decision!");
result="error";
}
}
End-Aktion
In der serverseitig ausgeführten End-Aktion finden die eigentlichen Weiterleitungen des Tickets statt. Dazu muss zunächst wieder geprüft werden, welches Team aktuell das Ticket bearbeitet. Wir unterscheiden hier wieder die Fälle "Manager" und "Nicht-Manager" (d.h. Agents). Dadurch, dass wir keine spezielles Agent-Team festlegen, können wir das Approval-Formular später unterschiedlichen Agent-Teams zur Verfügung stellen!
Dazu muss das Formular sich aber merken, an welche Agent-Team das Ticket schließlich zurückgeleitet werden muss. Das gelingt durch die Zeile
task.addProperty("origGroupId", ""+task.addressee.getAddressedWorkgroup().getId());
in der die ID des adressierten Teams in einer Task-Property (siehe hier) namens origGroupId gespeichert wird.
Die Zeile
helper.propagateTaskToGroup("Manager");
sorgt für die Weiterleitung des Tickets an das Team Manager. Beide Zeilen werden nur ausgeführt, wenn das aktuell adressierte Team nicht Manager ist, siehe die Bedingung if(gid==34){...
Im anderen Fall, dass nämlich aktuell das Team Manager adressiert wird, erfolgt die Weiterleitung des Tickets zurück an das ursprünglich adressierte Team, dessen ID im Task-Property origGroupId gespeichert wurde und hier mit der Methode task.getProperty() wieder ermittelt wird.
task.description=com.proxemo.xutl.XUTLStringTools.insertHtmlOnTop(task.description,
"<div style='border: 1px solid red; font-weight: bold; '>Request for approval - please see form Approval!</div>");
task.addProperty("appMark","set");
}
if(task.addressee.isWorkgroup()){
var gid = task.addressee.getAddressedWorkgroup().getId();
if(gid==34){
// mananger answers request for approval
helper.propagateTaskToGroupById(new java.lang.Long(task.getProperty("origGroupId")));
task.addProperty("approvalFinished", "true");
} else if(task.getProperty("approvalFinished")==null){
// agent sends to managers
task.addProperty("origGroupId", ""+task.addressee.getAddressedWorkgroup().getId());
helper.propagateTaskToGroup("Manager");
}
}
}
In den ersten vier Zeilen wird noch ein Hinweis in die Ticket-Beschreibung eingefügt, die den Manager auf das angehängte Formular Approval aufmerksam machen soll und den Freigabe-Workflow markiert:
Wenn Sie den Workflow in todo4teams verwenden möchten, importieren Sie das
und ändern Sie es nach Ihren Bedürfnissen ab. Ändern Sie dazu die in den Skripten verwendete ID 34 des Teams, an die eskaliert werden soll und den Namen Manager und ersetzen Sie sie durch Werte passend zu Ihrer todo4teams-Installation.