Integração de Mensagens POST MAX

Use mensagens POST para integração de IFrame

Para facilitar integrações avançadas baseadas em desktop, o cliente do agente MAX (My Agent eXperience) oferece suporte à inscrição de eventos por páginas da web personalizadas. MAX tem a capacidade de incorporar (IFrame) páginas da web usando painéis de contato (que abrem e fecham em conjunto com seu contato associado) ou espaços de trabalho personalizados (que estão sempre abertos e disponíveis, independentemente dos contatos individuais). Um caso de uso comum para painéis de contato seria uma página da Web de CRM específica do cliente sendo aberta como uma tela popup para uma chamada telefônica (e fechada quando a chamada for concluída). Um caso de uso comum para espaços de trabalho personalizados seria uma página de base de conhecimento ou outro site que não esteja diretamente associado a um contato ou interação com o cliente.

Em ambos os casos (Painel de contato ou Espaço de trabalho personalizado), a página da web “filha” incorporada pode se inscrever para eventos do sistema recebidos pela janela MAX “pai” por meio de mensagens POST. O MAX recebe rotineiramente informações da plataforma ACD com detalhes sobre o estado do agente ou sobre contatos individuais. Inscrevendo-se nesses eventos, a página da web IFramed pode implementar lógica personalizada que responde ao comportamento no MAX. Por exemplo, como o agente muda de estado de disponível para trabalho e de trabalho para indisponível, a página da web incorporada personalizada pode escolher responder com base nas regras de negócios. Ou, quando uma nova chamada é recebida, a página da web pode ser notificada sobre a nova chamada e responder de acordo. Para obter mais informações, consulte a documentação adicional em https://developer.niceincontact.com/API, https://developer.niceincontact.com/Documentation/AgentSessionEvents, e https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage.

Variáveis de objeto de dados

MAX está configurado para receber uma mensagem de postagem do cliente em um objeto de dados contendo os seguintes valores. Todas as chaves de propriedade diferenciam maiúsculas de minúsculas. Onde especificado, os valores também diferenciam maiúsculas de minúsculas.

  • contactCardData: Este é o objeto de dados que contém o nome do cliente e a imagem do contato telefônico. Possui duas chaves, nome e userImg. É sensível a maiúsculas e minúsculas.
  • contactId: Este é um int opcional. Se você souber o ID de contato, poderá fornecê-lo aqui. Se você não tiver o ID de contato e ele estiver carregado em um painel de contato, localizaremos o ID de contato do painel associado. Os espaços de trabalho personalizados gerais não terão um ID de contato que possa ser localizado dessa forma, portanto, eles precisarão ser fornecidos se uma entrada específica de contato for desejada.
  • emissor: Esta é uma string opcional. Ele funciona como um nome de identificador para o remetente, embora não precise ser exclusivo. Essa string ajuda com o registro para adicionar contexto aos registros do console. No teste, você pode descobrir que seu ouvinte de mensagem de postagem pega a mensagem de registro que você envia. Você pode usar este campo para verificar se a mensagem veio de você. MAX enviará os eventos de resposta com 'MAX' como emissor.
  • tipo de mensagem: Esta é uma string necessária. É sensível a maiúsculas e minúsculas. Existem duas entradas válidas:
    Valor de entradaResultado
    "RegisterForClientEvents"É assim que o MAX sabe que você está tentando configurar uma assinatura de evento do cliente.
    "UnregisterFromClientEvents"Isso desconectará sua referência de janela do MAX e encerrará o envio de evento do cliente. Se quiser alterar os tipos de assinatura ou contactId, você precisará ligar para isso antes de registrar-se novamente.

    Não fazer isso e usar a mesma janela com um novo registro no contactPanel causará bugs.

    "ContactCardData"É assim que o MAX sabe que está obtendo o nome do cliente e a imagem do contato telefônico.
  • subscriptionTypes: Esta é uma matriz de strings necessária. Não faz distinção entre maiúsculas e minúsculas, uma vez que tudo na matriz será normalizado para minúsculas. Os valores na matriz são aditivos. Cada opção especifica um tipo de mensagem que você receberá. Existem algumas entradas válidas possíveis:
    Valor de entradaResultado
    "todos"Isso vai devolver tudo.
    "agente"Isso retornará qualquer coisa que não tenha um ID de contato.
    "contato"Isso retornará eventos limitados pelo ID do contato solicitado ou pelo ID do contato do painel associado, se o IFrame estiver conectado a uma habilidade ou contato.
    "Contatos"Isso retornará todos os eventos que possuem um ID de contato. Se você estiver em um painel de contato e quiser informações adicionais com o contato do painel, adicione este campo.
    "sessioninfo"Isso retornará um token de sessão do agente. Se você deseja fazer chamadas de API específicas para uma sessão de agente, inscreva-se neste evento.

Usando uma matriz vazia para subscriptionTypes resultará em um erro.

Quando o MAX receber a assinatura, junto com a mensagem de confirmação, enviaremos os estados atuais dos tipos de assinatura solicitados para ajudar a configurar o espaço de trabalho de forma adequada. Esses eventos são garantidos no início.

Valor de entrada Estados Atuais
"todos" Retornará atualAgentState e todos os contatos atuais que estão dentro do escopo do MAX.
"agente" Retornará atualAgentState. Isso não inclui o token de sessão do agente.
"contato" Retornará o estado de contato atual se o contato existir no escopo de MAX.
"Contatos" Retornará todos os contatos atuais existentes no escopo de MAX.

É possível que o registro receba ocasionalmente mais do que a base AgentState e contatos na inicialização. Esses eventos podem incluir o AgentLegEvent, AgentSessionStart e MchAgentSettingsChangeEvent. Você verá esses eventos extras se sua solicitação de assinatura chegar antes de estabelecermos nossas referências locais para esses dados. Se isso acontecer, iremos armazenar e passar por todos os eventos que são enviados para o MAX por meio do get-next-event como você normalmente receberia durante o uso. A única diferença é que não podemos escolher os eventos principais selecionados para uma inicialização básica. Os mesmos filtros serão aplicados aos dados para os quais você está registrado, portanto, nenhum resultado anormal deve surgir.

Comandos de Chamada

Se MAX estiver em um estado válido para aceitar o comando fornecido, ele invocará essa ação no aplicativo. Esses comandos se alinham intimamente com os botões primários usados para tratamento de contatos. Eles não enviam mensagens de volta.

Valor de entrada

Resultado

AnswerEvent e RefuseEvent Ocorre quando há uma chamada de entrada mostrando o diálogo de aceitar / rejeitar.

HoldEvent, MuteEvent e MaskEvent

Tratado como alternador. Por exemplo, invoque Em espera uma vez e a chamada é colocada em espera, invoque-a novamente e a chamada é restaurada.

RecordEvent Uma ação única. Por exemplo, uma vez que o registro é chamado, ele não pode ser interrompido.
HangupEvent A chamada é encerrada imediatamente sem uma caixa de diálogo de confirmação.

Chamada de exemplo (apenas messageType necessário)

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

Exemplo de Implementação

// Encontre a janela pai (MAX) para se registrar para eventos

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

// Configure suas assinaturas

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

 

// Comece a ouvir mensagens de resposta

var doSomething = function (events) {

spacevar event = null;

space var eventIndex = null;

space for(eventIndex in events){

spacespace if (events.hasOwnProperty(ceseventIndex)){

spaceevento = eventos [eventIndex];

spacespace }

space }

};

var listenForPostMessage = function (event) {

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

logToConsole ('=== recebeu uma mensagem de postagem com [' + event.data.events.length + '] events ===');

doSomething (event.data.events);

}

};

// Adicione o ouvinte para eventos do cliente MAX.

window.addEventListener ('mensagem', listenForPostMessage);

// Envie a mensagem de registro para MAX

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

O objeto de resposta

O OBJETO DE RESPOSTA

{

emissor: 'MAX',

contactId: int (Nullable) - o ID de contato que foi encontrado como o painel persistente ou que foi passado. Isso será nulo se nenhum contactId for passado ou encontrado.

eventos: [objeto, objeto, objeto ...] - Todos os eventos que foram retornados neste conjunto de eventos que correspondem aos tipos de assinatura ou filtro de contato.

}

Resposta para o formato da mensagem da assinatura "SessionInfo":

{

tipo de mensagem: "SessionInfo"

sessionToken: "mysessiontoken =="

}

O EVENTO DE RECONHECIMENTO DE ASSINATURA

Se houver pelo menos um subscriptionType, a assinatura é permitida. Se não houver assinaturas subscriptionTypes, um aviso de console é registrado que exibe o tipo inválido. O primeiro evento no conjunto de eventos retornados será um evento com o tipo de mensagem ClientEventSubscriptionAcknowledge. Este evento possui a seguinte estrutura:

{

contactId: (int) - Se nulo, significa que nenhum contactId está associado à assinatura. Essa é uma forma de o cliente verificar se sua assinatura de "contato" funcionou.

tipo de mensagem: ClientEventSubscriptionAcknowledge - (string). Este é seu tipo específico de mensagem de evento de reconhecimento.

razão: "Sucesso" | "ID de contato inválido" | "Tipos de assinatura inválidos" - se responder com o motivo do código de status ERROR. Isso não será superdetalhado para não adicionar muita complexidade. Ele retornará apenas um motivo de falha. Verificamos a validade do ID de contato primeiro (não ZERO ou não uma string não inteira). Se isso falhar, mas também houver tipos de assinatura inválidos, não mostraremos os sub-erros até que eles tentem novamente após corrigir o ID do contato. Isso significa que não mantivemos uma referência à janela, então a assinatura falhou.

status: "OK" ou "ERROR" - se retornar Erro, significa que não criamos com êxito a conexão de assinatura de mensagem de postagem. Eles precisarão corrigir esses erros e tentar novamente.

}

Em alguns casos, nenhuma confirmação de assinatura é enviada. Quando a mesma janela solicita uma segunda assinatura, sem primeiro remover a assinatura existente, nenhuma resposta será enviada e nenhuma assinatura adicional será reconhecida. Iremos imprimir um aviso de console que tem a seguinte estrutura:

{

console.warn ('Erro ao processar a assinatura do cliente uniforme. Emissor: ['+ subscriberObject.data.issuer +'] já se inscreveu. ')

}