myContactCenterHandbuch

Das Agentenskript

Wie Sie ein Skript schreiben, das im Agenten jedes Arbeitsplatzes auf Ereignisse reagiert — Aufbau, Voraussetzungen, Verteilung, Ausführung, Fehlersuche und ein Beispiel.

Das Agentenskript läuft im Agenten jedes Arbeitsplatzes im Hintergrund. Es reagiert auf Ereignisse — eine Konversation klingelt, wird verbunden oder endet, der Agent wechselt in die Nacharbeit oder meldet sich an — und löst daraufhin selbst etwas aus. Typische Aufgaben:

  • die Kundenmaske Ihres CRM im Modul Browser öffnen, sobald ein Anruf verbunden ist, mit der Rufnummer oder einer Kundennummer aus den Zusatzdaten;
  • ein anderes Programm am Arbeitsplatz starten oder einen Webdienst aufrufen;
  • ein eigenes Fenster zeigen;
  • Nacharbeit, Tätigkeit oder Abmeldung anstoßen oder eine Statuslampe steuern.

Für das ganze System gibt es ein Skript. Es läuft im Agent-Programm mit den Rechten des angemeldeten Windows-Benutzers und kann alles, was ein .NET-Programm am Arbeitsplatz kann.

Voraussetzungen

  • Das wirksame Agentenprofil erlaubt Agenten Skripte — Registerkarte Leistungsmerkmale, Vorgabe an; siehe Profileinstellungen.
  • Der Agent bekommt bei der Anmeldung eine Lizenz Agent: Ausführen von agentenseitigen Skripten. Sie steckt in den Paketen Professionell, Premium und Premium+ und in jedem Lizenzprofil, siehe Leistungsmerkmale. Ohne Lizenz läuft für diesen Agenten kein Skript.
  • Zum Bearbeiten brauchen Sie das Recht Konfiguration Skript.

Das Skript einrichten

  1. Öffnen Sie die Serverkonfiguration und wechseln Sie auf den Reiter Skript.
  2. Schreiben Sie das Skript im Code-Editor. Fehler markiert der Editor schon beim Tippen.
  3. Klicken Sie auf Speichern.

Nach dem Speichern bekommen alle angemeldeten Agenten das neue Skript sofort, alle anderen bei ihrer nächsten Anmeldung. Jeder Agent übersetzt es selbst und startet es. Gespeichert wird auch ein Skript mit Fehlern — im Agenten läuft es dann aber nicht.

Aufbau

Ein Agentenskript ist genau eine Klasse:

  • Sie heißt AgentScript und erbt von MyCCAgentScript.
  • Sie steht im Namensraum ilogixx.Agent oder in keinem.
  • Sie hat einen öffentlichen Konstruktor ohne Parameter — oder gar keinen. Im Konstruktor sind Agent, Conversations und die Befehle noch nicht nutzbar.
  • Sie überschreibt die Ereignisse, auf die sie reagieren soll, mit public override void ….
  • Ihre using-Zeilen bringt sie selbst mit, auch using System;.

Eine Vorlage mit allen Ereignissen installiert die Administration als %ProgramData%\ilogixx GmbH\myContactCenter\Script Templates\AgentScript.cs. Übernehmen Sie daraus nur die Ereignisse, die Sie brauchen.

Wie das Skript läuft

  • Nacheinander: Der Agent ruft die Ereignisse eines nach dem anderen auf, im Hintergrund. Dauert eine Aktion lange — etwa der Aufruf eines Webdienstes —, kommen alle folgenden Ereignisse entsprechend später an.
  • Zustand zum Zeitpunkt des Ereignisses: Bis das Skript an der Reihe ist, kann eine Konversation schon weiter sein. Werten Sie deshalb die Parameter des Ereignisses aus, etwa state in My_ConversationStateChanged, nicht conversation.State.
  • Fenster: Eigene Fenster zeigen Sie mit Show(form); der Agent öffnet sie über seinem Hauptfenster.
  • Lebensdauer: Das Skript läuft, bis der Agent beendet wird oder ein geändertes Skript ankommt.

Fehler finden

Der Agent zeigt Fehler des Skripts nicht an. Fangen Sie deshalb in jedem Ereignis alle Ausnahmen ab und schreiben Sie sie ins Protokoll:

try
{
    // …
}
catch (Exception ex)
{
    Trace.Error(ex);
}

Das Protokoll des Skripts schalten Sie in der Serverkonfiguration ein, auf dem Reiter Tracing Einstellungen, Unterregisterkarte Agent:

  1. Kreuzen Sie rechts die Agenten an, deren Protokoll Sie brauchen.
  2. Stellen Sie den Bereich Script auf Information oder Ausführlich.
  3. Klicken Sie auf Speichern.

Die Zeilen des Skripts beginnen mit Script: und dem Namen des Agenten. Scheitert die Übersetzung im Agenten, stehen die Fehler ebenfalls dort.

Beispiel: Kundendaten im Modul Browser öffnen

Das Skript öffnet die Kundenmaske eines CRM im Modul Browser, sobald ein eingehender Anruf verbunden ist. Die Kundennummer hat ein Flow vorher mit Daten anhängen unter dem Schlüssel „Kundennummer“ abgelegt.

using System;
using ilogixx.SharedFiles.GeneralDefinitions;
using ilogixx.SharedFiles.GeneralEnums;

namespace ilogixx.Agent;

public class AgentScript : MyCCAgentScript
{
    private string lastOpenedConversationId = string.Empty;

    public override void My_ConversationStateChanged(Struct_Conversation conversation, ConversationState previousState, ConversationState state)
    {
        try
        {
            if (state != ConversationState.Connected || !conversation.IsInboundCall) return;

            if (conversation.Id == lastOpenedConversationId) return;

            lastOpenedConversationId = conversation.Id;
            string customerNumber = conversation.AttachedData.StringValue("Kundennummer");
            BrowseTo("https://crm.example.com/kunde?nr=" + Uri.EscapeDataString(customerNumber), true);
        }
        catch (Exception ex)
        {
            Trace.Error(ex);
        }
    }
}

Der Vergleich mit der zuletzt geöffneten Konversation verhindert, dass die Maske ein zweites Mal aufgeht, wenn der Agent das Gespräch hält und zurückholt. Soll die Seite im Standardbrowser statt im Agenten aufgehen, ersetzen Sie die Zeile mit BrowseTo durch:

string url = "https://crm.example.com/kunde?nr=" + Uri.EscapeDataString(customerNumber);
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo { FileName = url, UseShellExecute = true });

    ↑ ↓ auswählen · Eingabe öffnen · Esc schließen