MAX Integración de mensajes POST

Utilice mensajes POST para la integración de IFrame

Para facilitar las integraciones avanzadas basadas en escritorio, el cliente de agente MAX (My Agent eXperience) admite la suscripción de eventos mediante páginas web integradas a la medida. MAX tiene la capacidad de incrustar (IFrame) páginas web utilizando paneles de contacto (que se abren y cierran junto con su contacto asociado) o espacios de trabajo personalizados (que siempre están abiertos y disponibles independientemente de los contactos individuales). Un caso de uso común para los paneles de contacto sería una página web de CRM específica del cliente que se abre como una pantalla emergente para una llamada telefónica (y luego se cierra cuando se completa la llamada). Un caso de uso común para los espacios de trabajo personalizados sería una página de base de conocimientos u otro sitio que no esté directamente asociado con un contacto o interacción con el cliente.

En cualquier caso (Panel de contacto o Espacio de trabajo personalizado), la página web "secundaria" incrustada puede suscribirse a los eventos del sistema recibidos por la ventana MAX "principal" a través de mensajes POST. MAX recibe de forma rutinaria información de la plataforma ACD con detalles sobre el estado del agente o sobre contactos individuales. Al suscribirse a estos eventos, la página web de IFramed puede implementar una lógica personalizada que responda al comportamiento en MAX. Por ejemplo, a medida que el agente cambia de estado de disponible a funcionando y de funcionando a no disponible, la página web incorporada de forma personalizada puede optar por responder en función de las reglas comerciales. O, cuando se recibe una nueva llamada, se puede notificar a la página web de la nueva llamada y responder en consecuencia. Para obtener más información, consulte la documentación adicional enhttps://developer.niceincontact.com/API, https://developer.niceincontact.com/Documentation/AgentSessionEvents, y https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage.

Variables de objeto de datos

MAX está configurado para recibir un mensaje postal del cliente en un objeto de datos que contiene los siguientes valores. Todas las claves de propiedad distinguen entre mayúsculas y minúsculas. Donde se especifica, los valores también distinguen entre mayúsculas y minúsculas.

  • contactCardData: Este es el objeto de datos que contiene el nombre del cliente y la imagen del contacto telefónico. Tiene dos claves, nombre y userImg. Es sensible a mayúsculas y minúsculas.
  • contactId: Este es un int opcional. Si conoce el ID de contacto, puede proporcionarlo aquí. Si no tiene el ID de contacto y está cargado en un panel de contacto, localizaremos el ID de contacto del panel asociado. Los espacios de trabajo personalizados generales no tendrán una ID de contacto que se pueda ubicar de esta manera, por lo que deberán proporcionarse si se desea una entrada específica de contacto.
  • editor: Esta es una cadena opcional. Funciona como un nombre de identificación para el remitente, aunque no tiene que ser único. Esta cadena ayuda con el registro para agregar contexto a los registros de la consola. En las pruebas, es posible que descubra que el oyente de mensajes de publicación recoge el mensaje de registro que envía. Puede utilizar este campo para comprobar si el mensaje proviene de usted. MAX enviará los eventos de respuesta con 'MAX' como emisor.
  • Tipo de mensaje: Esta es una cadena obligatoria. Es sensible a mayúsculas y minúsculas. Hay dos entradas válidas:
    Valor de entradaResultado
    "RegisterForClientEvents"Así es como MAX sabe que está buscando configurar una suscripción a un evento de cliente.
    "UnregisterFromClientEvents"Esto desconectará su referencia de ventana de MAX y finalizará el envío del evento del cliente. Si desea cambiar los tipos de suscripción o contactId, deberá llamar a este antes de volver a registrarse.

    No hacer esto y usar la misma ventana con un nuevo registro en el contactPanel provocará errores.

    "ContactCardData"Así es como MAX sabe que está obteniendo el nombre del cliente y la imagen del contacto telefónico.
  • subscriptionTypes: Esta es una matriz requerida de cadenas. No distingue entre mayúsculas y minúsculas, ya que todo en la matriz se normalizará a minúsculas. Los valores de la matriz son aditivos. Cada opción especifica un tipo de mensaje que recibirá. Hay algunas posibles entradas válidas:
    Valor de entradaResultado
    "todos"Esto devolverá todo.
    "agente"Esto devolverá todo lo que no tenga una identificación de contacto.
    "contacto"Esto devolverá eventos limitados por la ID de contacto solicitada o la ID de contacto para el panel asociado si el IFrame está conectado a una habilidad o contacto.
    "contactos"Esto devolverá todos los eventos que tengan un ID de contacto. Si está en un panel de contacto y desea información adicional con el contacto del panel, agregue este campo.
    "información de sesión"Esto devolverá el token de sesión de un agente. Si está buscando realizar llamadas API específicas de la sesión del agente, regístrese para este evento.

Usando una matriz vacía parasubscriptionTypes resultará en un error.

Cuando MAX reciba la suscripción, junto con el mensaje de confirmación, enviaremos los estados actuales de los tipos de suscripción solicitados para ayudar a configurar el espacio de trabajo de manera adecuada. Estos eventos están garantizados al inicio.

Valor de entrada Estados actuales
"todos" Volverá actualAgentState y todos los contactos actuales que están dentro del alcance de MAX.
"agente" Volverá actualAgentState. Esto no incluye el token de sesión del agente.
"contacto" Devolverá el estado de contacto actual si el contacto existe dentro del alcance de MAX.
"contactos" Devolverá todos los contactos actuales que existen dentro del alcance de MAX.

Es posible que el registro reciba ocasionalmente más que la baseAgentState y contactos en la inicialización. Estos eventos podrían incluir AgentLegEvent, AgentSessionStart y MchAgentSettingsChangeEvent. Verá estos eventos adicionales si su solicitud de suscripción llega antes de que hayamos establecido nuestras referencias locales a estos datos. Si eso sucede, almacenaremos y pasaremos a través de todos los eventos que se envían a MAX a través del evento get-next-event como lo recibiría normalmente durante el uso. La única diferencia es que no podemos seleccionar los eventos centrales seleccionados para una inicialización básica. Los mismos filtros se aplicarán a los datos para los que está registrado, por lo que no deben producirse resultados anormales.

Comandos de llamada

Si MAX está en un estado válido para aceptar el comando dado, invocará esa acción en la aplicación. Estos comandos se alinean estrechamente con los botones principales utilizados para el manejo de contactos. No devuelven mensajes.

Valor de entrada

Resultado

AnswerEvent & RefuseEvent Tiene lugar cuando hay una llamada entrante que muestra el cuadro de diálogo aceptar / rechazar.

HoldEvent, MuteEvent y MaskEvent

Tratados como conmutadores. Por ejemplo, invoca Hold una vez y la llamada se pone en espera, invoca de nuevo y la llamada se restaura.

RecordEvent Una acción de una sola vez. Por ejemplo, una vez que se invoca Record, no se puede detener.
HangupEvent La llamada finaliza inmediatamente sin un cuadro de diálogo de confirmación.

Ejemplo de llamada (solo se necesita messageType)

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

Ejemplo de implementación

// Busque la ventana principal (MAX) para registrarse para eventos

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

// Configura tus suscripciones

var subscriptionTypes = ['agente', 'contactos'];

 

// Empiece a escuchar los mensajes de respuesta

var doSomething = function (eventos) {

espaciovar event = null;

espacio var eventIndex = null;

espacio para (eventIndex en eventos) {

espacioespacio if (events.hasOwnProperty (eventIndex)) {

espacioespacioespacioevento = eventos [eventIndex];

espacioespacio }

espacio }

};

var listenForPostMessage = function (evento) {

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

logToConsole ('=== recibió un mensaje de publicación con [' + event.data.events.length + '] eventos ===');

hacer algo (event.data.events);

}

};

// Agregue el oyente para eventos de cliente MAX.

window.addEventListener ('mensaje', listenForPostMessage);

// Envía el mensaje de registro a MAX

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

El objeto de respuesta

EL OBJETO DE RESPUESTA

{

editor: 'MAX',

contactId: int (Nullable): el ID de contacto que se encontró como panel persistente o que se pasó. Será nulo si no se pasó ni se encontró ningún contactId.

eventos: [objeto, objeto, objeto ...]: todos los eventos que se devolvieron en este conjunto de eventos que coincidieron con los tipos de suscripción o el filtro de contacto.

}

Respuesta para la forma del mensaje de la suscripción "SessionInfo":

{

Tipo de mensaje: "SessionInfo"

sessionToken: "mysessiontoken =="

}

EL EVENTO DE RECONOCIMIENTO DE SUSCRIPCIÓN

Si hay al menos unoTipo de suscripción, la suscripción está permitida. Si no hay validossubscriptionTypes, se registra una advertencia de consola que muestra el tipo no válido. El primer evento del conjunto de eventos devueltos será un evento con el tipo de mensaje ClientEventSubscriptionAcknowledge. Este evento tiene la siguiente estructura:

{

contactId: (int): si es nulo, significa que no hay ningún contactId asociado con la suscripción. Esta es una forma para que el cliente vea si su suscripción de "contacto" funcionó.

Tipo de mensaje: ClientEventSubscriptionAcknowledge - (cadena). Este es su tipo de mensaje de evento de reconocimiento específico.

razón: "Éxito" | "ID de contacto no válido" | "Tipos de suscripción no válidos": si responde con el motivo del código de estado ERROR. Esto no será muy detallado para no agregar demasiada complejidad. Solo devolverá una razón de falla. Primero verificamos la ID de contacto para verificar su validez (no CERO o no una cadena que no sea entera). Si eso falla, pero también hay tipos de suscripción no válidos, entonces no mostraremos los errores secundarios hasta que vuelvan a intentarlo después de corregir la identificación del contacto. Eso significa que no mantuvimos una referencia a la ventana, por lo que la suscripción falló.

estado: "OK" o "ERROR": si esto devuelve Error, entonces no creamos correctamente la conexión de suscripción al mensaje de publicación. Deberán corregir estos errores y volver a intentarlo.

}

En algunos casos, no se envía ningún reconocimiento de suscripción. Cuando la misma ventana solicita una segunda suscripción, sin eliminar primero la suscripción existente, no se enviará ninguna respuesta y no se reconocerá ninguna suscripción adicional. Imprimiremos una advertencia de consola que tiene la siguiente estructura:

{

console.warn ('Error al procesar la suscripción uniforme del cliente. Emisor: ['+ subscriberObject.data.issuer +'] ya se ha suscrito. ')

}