MAX Integración de mensajes POST
Utilice mensajes POST para la integración de IFrame
Para facilitar integraciones avanzadas basadas en el escritorio, el cliente de agente MAX (My Agent eXperience) admite la suscripción de eventos mediante páginas web personalizadas. MAX tiene la capacidad de incrustar páginas web (IFrame) utilizando paneles de contacto (que se abren y se 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 en una llamada telefónica (y luego se cierra cuando se completa la llamada). Un caso de uso común para espacios de trabajo personalizados sería una página de base de conocimiento 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" incorporada puede suscribirse a los eventos del sistema recibidos por la ventana MAX "principal" a través de mensajes POST. MAX recibe habitualmente 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 responde al comportamiento en MAX. Por ejemplo, a medida que el agente cambia de estado de disponible a operativo y de trabajando a no disponible, la página web incorporada personalizada puede elegir responder en función de las reglas comerciales. O bien, a medida de que se recibe una nueva llamada, la página web puede ser notificada de la nueva llamada y responder en consecuencia. Para obtener más información, consulte la documentación adicional en https://developer.niceincontact.com/API, https://developer.niceincontact.com/Documentation/AgentSessionEventsy https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage.
Variables de objeto de datos
MAX está configurado para recibir un mensaje posterior 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 del teléfono. 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 identificación de contacto que pueda ubicarse 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 identificador 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 su oyente de publicación de mensajes recoja el mensaje de registro que envía. Puede usar este campo para verificar si el mensaje proviene de usted. MAX enviará los eventos de respuesta con 'MAX' como emisor.
- Tipo de mensaje: Esta es una cadena requerida. Es sensible a mayúsculas y minúsculas. Hay dos entradas válidas:
Valor de entrada Resultado "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. Si no lo hace y usa 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. - tipo de suscripción: Esta es una matriz de cadenas requerida. No distingue entre mayúsculas y minúsculas, ya que todo en la matriz se normalizará a minúsculas. Los valores en la matriz son aditivos. Cada opción especifica un tipo de mensaje que recibirá. Hay algunas posibles entradas válidas:
Valor de entrada Resultado "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 desea realizar llamadas API específicas de sesión de agente, regístrese para este evento.
Usando una matriz vacía para tipo de suscripción 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 |
---|---|
"todas" | Volverá actual AgentState y todos los contactos actuales que están dentro del alcance de MAX. |
"agente" | Volverá actual EstadodeAgente. 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 ocasionalmente reciba más que la base EstadodeAgente y contactos en la inicialización. Estos eventos pueden 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. Se aplicarán los mismos filtros para los datos para los que está registrado, por lo que no se deben obtener 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
// Encuentra la ventana principal (MAX) para registrarte para eventos
abridor var = window.opener || window.parent;
// Configura sus suscripciones
var Tiposdeabono= ['agente', 'contactos'];
// Comienza a escuchar mensajes de respuesta
var hagaAlgo = función (eventos) {
espaciovar event = null;
espacio var eventIndex = null;
espacio para (eventIndex en eventos) {
espacioespacio if (eventos.hasOwnProperty(eventIndex)){
espacioespacio espacioevento = eventos [eventIndex];
espacioespacio }
espacio }
};
var EscucharparaelmensajePost = función (evento) {
if (event.data && event.data.events && event.data.issuer === 'MAX') {
logToConsole ('=== recibió un mensaje de publicación con [' + event.data.events.length + '] events ===');
hagaAlgo (event.data.events);
}
};
// Agrega el oyente para los eventos del cliente MAX.
ventana.agregarusuariodeevento ('mensaje', listenForPostMessage);
// Enviar 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 un Tipo de suscripción, la suscripción está permitida. Si no hay tipo de suscripción valido, se registra una advertencia de consola que muestra el tipo no válido. El primer evento en el 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 manera 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á súper detallado para no agregar demasiada complejidad. Solo devolverá un motivo de falla. Primero verificamos la validez de la identificación de contacto (no es CERO o no es una cadena no entera). Si eso falla pero también hay tipos de suscripción no válidos, no mostraremos los errores secundarios hasta que lo intenten nuevamente después de corregir la identificación de 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 con éxito la conexión de suscripción al mensaje de publicación. Tendrán que corregir estos errores y volver a intentarlo.
}
En algunos casos, no se envía confirmación 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 tenga la siguiente estructura:
{
console.warn ('Error al procesar la suscripción uniforme del cliente. Emisor: ['+ subscriberObject.data.issuer +'] ya se ha suscrito. ')
}