MAX Integration von POST-Nachrichten

Verwenden von POST-Nachrichten für die IFrame-Integration

Um erweiterte desktopbasierte Integrationen zu ermöglichen, unterstützt der Agent-Client MAX (My Agent eXperience) das Abonnieren von Ereignissen über benutzerdefinierte eingebettete Webseiten. MAX kann Webseiten entweder über Kontaktfenster (die in Verbindung mit dem zugehörigen Kontakt geöffnet und geschlossen werden) oder über benutzerdefinierte Arbeitsbereiche (die unabhängig von den einzelnen Kontakten immer geöffnet und verfügbar sind) einbetten (IFrame). Ein häufiger Anwendungsfall für Contact Panels ist eine kundenspezifische CRM-Webseite, die als Popup-Fenster für einen Telefonanruf geöffnet wird (und nach Abschluss des Anrufs geschlossen wird). Ein häufiger Anwendungsfall für benutzerdefinierte Arbeitsbereiche ist eine Knowledge Base-Seite oder eine andere Site, die keinem Kontakt oder keiner Kundeninteraktion direkt zugeordnet ist.

In beiden Fällen (Contact Panel oder Custom Workspace) kann die eingebettete untergeordnete Webseite Systemereignisse abonnieren, die vom übergeordneten MAX-Fenster über POST-Nachrichten empfangen werden. MAX empfängt routinemäßig Informationen von der ACD-Plattform mit Details zum Agentenstatus oder zu einzelnen Kontakten. Durch das Abonnieren dieser Ereignisse kann die IFramed-Webseite eine angepasste Logik implementieren, die auf das Verhalten in MAX reagiert. Wenn der Agent beispielsweise den Status von "Verfügbar" in "In Betrieb" und von "In Betrieb" in "Nicht verfügbar" ändert, reagiert die benutzerdefinierte eingebettete Webseite möglicherweise basierend auf Geschäftsregeln. Wenn ein neuer Anruf eingeht, kann die Webseite über den neuen Anruf benachrichtigt werden und dementsprechend antworten. Weitere Informationen finden Sie in der Dokumentation unter https://developer.niceincontact.com/API, https://developer.niceincontact.com/Documentation/AgentSessionEvents, und https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage.

Datenobjektvariablen

MAX ist so eingerichtet, dass eine Post-Nachricht des Kunden in einem Datenobjekt empfangen wird, das die folgenden Werte enthält. Alle Eigenschaftsschlüssel unterscheiden zwischen Groß- und Kleinschreibung. Wo angegeben, wird bei den Werten auch zwischen Groß- und Kleinschreibung unterschieden.

  • contactCardData: Dies ist das Datenobjekt, das den Kundennamen und das Bild des Telefonkontakts enthält. Es hat zwei Schlüssel, name und userImg. Es wird die Groß-/Kleinschreibung beachtet.
  • contactId: Dies ist ein optionaler Int. Wenn Sie die Kontakt-ID kennen, können Sie diese hier angeben. Wenn Sie nicht über die Kontakt-ID verfügen und diese in ein Kontaktfeld geladen ist, suchen wir die Kontakt-ID des zugehörigen Felds. Allgemeine benutzerdefinierte Arbeitsbereiche haben keine Kontakt-ID, die auf diese Weise gefunden werden kann. Sie müssen daher angegeben werden, wenn ein kontaktspezifischer Eintrag gewünscht wird.
  • Aussteller: Dies ist eine optionale Zeichenfolge. Es fungiert als Bezeichnername für den Absender, muss jedoch nicht eindeutig sein. Diese Zeichenfolge hilft bei der Protokollierung, um den Konsolenprotokollen Kontext hinzuzufügen. Beim Testen stellen Sie möglicherweise fest, dass Ihr Beitragsnachrichten-Listener die von Ihnen gesendete Registrierungsnachricht aufnimmt. In diesem Feld können Sie überprüfen, ob die Nachricht von Ihnen stammt. MAX sendet die Antwortereignisse mit 'MAX' als Aussteller.
  • Nachrichtentyp: Dies ist eine erforderliche Zeichenfolge. Es wird die Groß-/Kleinschreibung beachtet. Es gibt zwei gültige Einträge:
    EingabewertErgebnis
    "RegisterForClientEvents"Auf diese Weise weiß MAX, dass Sie ein Kundenereignis-Abonnement einrichten möchten.
    "UnregisterFromClientEvents"Dadurch wird Ihre Fensterreferenz von MAX getrennt und das Senden von Client-Ereignissen beendet Wenn Sie die Abonnementtypen oder die Kontakt-ID ändern möchten, müssen Sie diese vor der erneuten Registrierung aufrufen.

    Versäumen Sie dies und verwenden dasselbe Fenster mit einer neuen Registrierung im Kontaktbereich, kommt es zu Fehlern.

    "ContactCardData"Dies ermöglicht MAX, zu erkennen, dass der Kundenname und ein Bild des Telefonkontakts übergeben werden.
  • subscriptionTypes: Dies ist ein erforderliches Array von Zeichenfolgen. Es wird nicht zwischen Groß- und Kleinschreibung unterschieden, da alles im Array auf Kleinbuchstaben normalisiert wird. Die Werte im Array sind additiv. Jede Option gibt einen Nachrichtentyp an, den Sie erhalten. Es gibt einige mögliche gültige Einträge:
    EingabewertErgebnis
    "all"Dies wird alles zurückgeben.
    "agent"Dies gibt alles zurück, was keine Kontakt-ID hat.
    "contact"Dadurch werden Ereignisse zurückgegeben, die entweder durch die angeforderte Kontakt-ID oder die Kontakt-ID für das zugehörige Bedienfeld begrenzt sind, wenn der Iframe mit einer Fertigkeit oder einem Kontakt verbunden ist.
    "contacts"Dadurch werden alle Ereignisse zurückgegeben, die eine Kontakt-ID haben. Wenn Sie sich in einem Kontaktfeld befinden und zusätzliche Informationen zum Kontakt des Bedienfelds wünschen, fügen Sie dieses Feld hinzu.
    "sessioninfo"Dadurch wird das Sitzungstoken eines Agenten zurückgegeben. Wenn Sie Agentensitzungsspezifische API-Aufrufe durchführen möchten, registrieren Sie sich für dieses Ereignis.

Verwenden eines leeren Arrays für subscriptionTypes führt zu einem Fehler.

Wenn MAX das Abonnement zusammen mit der Bestätigungsnachricht empfangen wird, senden wir den aktuellen Status der angeforderten Abonnementtypen, um den Arbeitsbereich entsprechend einzurichten. Diese Ereignisse sind zu Beginn garantiert.

Eingabewert Aktuelle Status
"alle" Gibt den Strom zurück AgentState und alle aktuellen Kontakte, die in den Geltungsbereich von MAX fallen.
"Agent" Gibt den Strom zurück AgentState. Dies beinhaltet nicht das Sitzungstoken des Agenten.
"Kontakt" Gibt den aktuellen Kontaktstatus zurück, wenn der Kontakt im Bereich von MAX existiert .
"Kontakte" Gibt alle aktuellen Kontakte zurück, die im Bereich von MAX existieren.

Es ist möglich, dass die Registrierung gelegentlich mehr als die Basis erhält AgentState und Kontakte bei der Initialisierung. Diese Ereignisse können AgentLegEvent, AgentSessionStart und MchAgentSettingsChangeEvent umfassen. Diese zusätzlichen Ereignisse werden angezeigt, wenn Ihre Abonnementanfrage eingeht, bevor wir unsere lokalen Verweise auf diese Daten erstellt haben. In diesem Fall speichern wir alle Ereignisse, an die gesendet wird, und leiten sie weiter an MAX durch das get-next-Ereignis, wie Sie es normalerweise während des Gebrauchs erhalten würden. Der einzige Unterschied besteht darin, dass wir die ausgewählten Kernereignisse für eine grundlegende Initialisierung nicht auswählen können. Die gleichen Filter gelten für Daten, für die Sie registriert sind, sodass keine abnormalen Ergebnisse daraus resultieren sollten.

Anrufbefehle

Wenn sich MAX in einem gültigen Zustand befindet, um den gegebenen Befehl zu akzeptieren, ruft es diese Aktion in der Anwendung auf. Diese Befehle orientieren sich eng an den Primärtasten, die für die Kontaktbehandlung verwendet werden. Sie senden keine Nachrichten zurück.

Eingabewert

Ergebnis

AnswerEvent & RefuseEvent Findet statt, wenn es einen eingehenden Anruf mit dem Dialog Annehmen/Ablehnen gibt.

HoldEvent, MuteEvent, & MaskEvent

Wird als Umschaltflächen behandelt. Wenn Sie z. B. einmal "Halten" aufrufen, wird der Anruf auf "Halten" gesetzt, dann rufen Sie ihn erneut auf und der Anruf wird wiederhergestellt.

RecordEvent Eine einmalige Aktion. Zum Beispiel kann ein einmal aufgerufener Datensatz nicht mehr gestoppt werden.
HangupEvent Der Anruf wird sofort ohne Bestätigungsdialogfeld beendet.

Beispielaufruf (Nur messageType erforderlich)

opener.postMessage({ messageType: 'MuteEvent' }, '');*

Implementierungsbeispiel

// Finde das übergeordnete Fenster (MAX), um dich für Events zu registrieren

var opener = window.opener || window.parent;

// Richten Sie Ihre Abonnements ein

var subscriptionTypes = ['agent', 'contacts'];

 

// Auf Antwortnachrichten achten

var doSomething = function (events) {

spacevar event = null;

space var eventIndex = null;

space for(eventIndex in events){

spacespace if (events.hasOwnProperty(eventIndex)){

spacespacespaceevent = events[eventIndex];

spacespace }

space }

};

var listenForPostMessage = function (event) {

if (event.data && event.data.events && event.data.issuer === 'MAX') {

logToConsole('=== received a post message with [' + event.data.events.length + '] events ===');

doSomething(event.data.events);

}

};

// Den Listener für MAX-Client-Ereignisse hinzufügen.

window.addEventListener('message', listenForPostMessage);

// Sende die Registrierungsnachricht an MAX

opener.postMessage({ contactId: contactId, issuer: 'MyTestSite', messageType: 'Register-ForClientEvents', subscriptionTypes: subscriptionTypes }, '*');

Das Antwortobjekt

DAS ANTWORTOBJEKT

{

Aussteller: 'MAX',

contactId: int (Nullable) - Die Kontakt-ID, die als beständiges Fenster gefunden oder übergeben wurde. Diese ist null, wenn keine Kontakt-ID übergeben oder gefunden wurde.

events: [Objekt, Objekt, Objekt ...] - Alle Ereignisse, die in dieser Ereignisgruppe zurückgegeben wurden und mit den Abonnementtypen oder dem Kontaktfilter übereinstimmen.

}

Antwort für die Nachrichtenform des "SessionInfo" -Abonnements:

{

Nachrichtentyp: "SessionInfo"

sessionToken: "mysessiontoken =="

}

DAS EREIGNIS ABONNEMENTBESTÄTIGUNG

Wenn es mindestens einen subscriptionType gibt, ist das Abonnement erlaubt. Wenn es keine gültigen subscriptionTypes gibt, wird eine Konsolenwarnung protokolliert, die den ungültigen Typ anzeigt. Das erste Ereignis in der Reihe der zurückgegebenen Ereignisse ist ein Ereignis mit dem Nachrichtentyp ClientEventSubscriptionAcknowledge. Dieses Ereignis hat folgende Struktur:

{

contactId: (int) - Wenn Null, bedeutet dies, dass dem Abonnement keine contactId zugeordnet ist. Auf diese Weise kann der Kunde feststellen, ob sein "Kontakt"-Abonnement funktioniert hat.

Nachrichtentyp: ClientEventSubscriptionAcknowledge - (Zeichenfolge). Dies ist der spezifische Typ der Bestätigungsereignismeldung.

Grund: "Erfolg" | "Ungültige Kontakt-ID" | "Ungültige Abonnementtypen" - Antwortet mit dem Grund für den Fehlerstatuscode. Dies wird nicht sehr detailliert sein, um nicht zu viel Komplexität zu erzeugen. Es wird nur ein Fehlergrund zurückgegeben. Wir überprüfen zuerst die Kontakt-ID auf Gültigkeit (nicht NULL oder keine nicht ganzzahlige Zeichenfolge). Wenn dies fehlschlägt, es aber auch ungültige Abonnementtypen gibt, werden die Unterfehler erst angezeigt, wenn sie nach dem Korrigieren der Kontakt-ID erneut versucht werden. Das bedeutet, dass wir keinen Verweis auf das Fenster gespeichert haben und das Abonnement fehlgeschlagen ist.

Status: "OK" oder "ERROR" - Wenn dies einen Fehler zurückgibt, wurde die Post-Message-Abonnement-Verbindung nicht erfolgreich erstellt. Sie müssen diese Fehler beheben und es erneut versuchen.

}

In einigen Fällen wird keine Abonnementbestätigung gesendet. Wenn im selben Fenster ein zweites Abonnement angefordert wird, ohne zuvor das vorhandene Abonnement zu entfernen, wird keine Antwort gesendet und kein zusätzliches Abonnement erkannt. Wir drucken eine Konsolenwarnung mit der folgenden Struktur:

{

console.warn('Error processing Client Even Subscription. Issuer: [' + subscriberObject.data.issuer + '] has already subscribed.')

}