[Resolvido] Enviar uma mensagem quando o usuário fechar ou recarregar a pagina

A ideia é o seguinte, preciso cancelar o ticket em aberto quando o usuário sair da conversa fechando o navegador ou atualizando de pagina.

Já implementei um webhook que escuta uma mensagem especifica e fecha o chamado.

Meu problema é o seguinte não consigo enviar a mensagem de maneira nenhuma.

Estou tentando usar o evento do navegador e chamar o envio de mensagens como o código abaixo

window.addEventListener('beforeunload', function (event) {
                builder.sendMessage({
                    "type": "text/plain",
                    "content": "#sessão encerrada pelo usuário"
                });
        });

O trecho interno do evento se for executado no console está ok, fazendo o que deveria, mas no evento ele não funciona.

Outra coisa se eu coloco o cancelamento de propagação do evento ele aparece a caixa se gostaria de sair, porem no ok nada acontece no cancelar ele envia a mensagem.

Olá @Gabriel_Camargo_Ribe,

Conta pra gente como você solucionou seu problema :smile:

O objetivo final era fechar o ticket.

Então foi assim a saga.

1ª tive que usar a autenticação dev, para conseguir o userIdentity. como requisito atual do meu cliente é uma conversa por vez, gerei um guid só para fazer a autenticação.

2ª no meu contact do usuário dentro do builder eu criei um extra com a variável {{contact.identity}}.

3ª no onde está a configuração do widget sobrescrevi o evento beforeunload para enviar o meu user id para minha api. detalhe essa função de que ser síncrona se não esse evento não processa.

window.addEventListener(‘beforeunload’, function (event) {

        $.ajax({
            type: "Get",
            url: url + "funcao?Id=" + builder.widget.account.userIdentity,
            async: false
        }).done(function (data) {
            console.log(data);
        });
    });

Agora do lado do servidor que recebe essa chamada.

1º faz chamada no comando da url “/monitoring/waiting-tickets”

2º Para cada ticket ele faz uma chamada na url “contacts/{id}” passando o customerIdentity que está no ticket //Motivo meu bot está em router e com isso o id não é o mesmo.

3º Verifico se se o id da chamada é o mesmo do extra do contato

4º quando acha a ID chamo a url “/ticket/{i.id}” pra verificar se o status ainda está em “Waiting”

5º Caso ainda em "Waiting"chamo a url “/tickets/change-status” passando status = ClosedClient

Foi isso que atendeu os requisitos de fechar o ticket.

1 Curtida