Mostrar tempo médio de espera para o usuário


Estou usando o seguinte pacote [https://unpkg.com/blip-chat-widget]


E cada vez que o usuário fosse começar um atendimento via chat, gostaria de mostrar o tempo médio de espera.

O código para criação do chat é o seguinte


> var chat = new BlipChat()
> .withAppKey('minha_api_key')
> .withButton({
> "color": "#00af86",
> "icon":"https://s3-sa-east-1.amazonaws.com/msging.net/iris/Media_c9fd19cc-ee3d-47c5-8c97-52cd85367bd6"
> })
> .withAuth({
> authType: BlipChat.DEV_AUTH,
> userIdentity: '{{Auth::user()->id}}',
> userPassword: '{{Auth::user()->id}}',
> })
> .withAccount({
> photoUri: '{{Auth::user()->foto}}',
> fullName: '{{Auth::user()->name}}',
> email: '{{Auth::user()->email}}',
> phoneNumber: '{{Auth::user()->child()->telefone}}',
> city: '{{Auth::user()->child()->cidade->nome}}',
> extras: {
> tipo: '{{Auth::user()->tipo}}',
> gestor: '{{is_object(Auth::user()->child()->admins) ? (Auth::user()->child()->admins->first() ? Auth::user()->child()->admins->first()->name : '-') : '-'}}',
> }
> })
> .withEventHandler(BlipChat.ENTER_EVENT, function() {
> console.log('enter')
> })
> .withEventHandler(BlipChat.LEAVE_EVENT, function() {
> console.log('leave')
> })
> .withEventHandler(BlipChat.LOAD_EVENT, function() {
> console.log('chat loaded')
>
> })
> .withEventHandler(BlipChat.CREATE_ACCOUNT_EVENT, function() {
> console.log('account created')
> });
> chat.build();
> });

Na documentação, gostaria de uma função como essa, para conseguir pegar as métricas do meu chat


client.sendCommand({
id: Lime.Guid(),
to: "[email protected]",
method: "get",
uri: "/monitoring/tickets?version=2"
})

Para consegui


19 comentários

Reputação 7

Olá @Joao_Marcos tudo bem?


Você pode usar a função sendCommand (para mais detalhes clique aqui).

Você também pode fazer isso somente quando o usuário for entrar em atendimento humano, como uma ação lá dentro do Builder mesmo.

Reputação 7
Crachá +1

@BrunoC eu implementei algo assim pra um chatbot, mas eu não consegui capturar o “Tempo Médio de Espera” que aparece lá em Monitoramento:


Eu achei isso na documentação:

https://docs.blip.ai/?http#ticketsmetricssummary


Mas não tem a requisição HTTP que tenho que passar pra capturar esse valor.

Poderia me indicar o que falta?

Reputação 7

@GabrielPetrone desculpa a demora. Acho que passou despercebido esse tópico 😅


Você pode usar este método:


Reputação 7
Crachá +1

Que isso, relaxa meu caro!

Eu utilizei mas o resultado veio zerado, enquanto no painel em Monitoramento, meu “tempo médio de espera” estava 00:00:51. Bom, dei uma investigada mais aprofundada e descobri esse outro método, que me trouxe o resultado esperado.



Para os blippers, segue a solução:




  1. Criar um bloco antes do Atendimento Humano




  2. Chamar o método Get Ticket Metrics nas Ações de Entrada e armazenar a Resposta em uma variável




  3. Chamar o método Get Waiting Tickets Metrics nas Ações de Entrada e armazenar a Resposta em uma variável




  4. Executar um Script passando em Entrada a variável de resposta do métodos Get Waiting Tickets Metrics, com o seguinte código:


             function run(queue) {

    var queue = JSON.parse(queue);
    var queueCount = queue.resource.total;

    if (queueCount === undefined) {
    queueCount = 1;
    return queueCount;
    } else {
    queueCount = queueCount + 1;
    return queueCount;
    }
    }



  5. Executar um Script passando em Entrada as variáveis de resposta dos métodos Get Ticket Metrics + QueueCount (script criado acima), com o seguinte código:


             function run(GetTicketMetrics, QueueCount) {

    var metric = JSON.parse(GetTicketMetrics);

    if (QueueCount == 1) {
    var queueText = "Sua posição na fila é: " + queueCount + ".";
    return queueText;
    } else {
    var waitTime = metric.resource.avgWaitTime;
    var queueText = "Sua posição na fila é: " + QueueCount + ". Tempo médio de espera: " + waitTime;
    return queueText;
    }
    }



  6. Agora é só passar o retorno do Script na resposta do seu Bloco e enviar para o Bloco de Atendimento Humano (Sem aguardar resposta do usuário)




Resultado:

image

image

Reputação 7

Boa @GabrielPetrone!!!


🚀

Reputação 7
Crachá +1

Esses dias eu troquei uma ideia com alguém, em algum tópico, sobre essa questão e nem eu lembrava que eu criei esse tópico. Valeu @PhelipeGomes por ter deixado o like.


Agora não acho o tópico sobre o assunto, mas acho que foi com você né @Flavio_Silva , que trocamos mensagem a respeito…? :gabrielpetrone:


@BrunoC podia por esse tópico em alguma categoria da jornada dos contatos, acho que ajudaria muita gente, aliais, você citou esse exemplo pra um Community Day né? tá aí já! hahaha

Reputação 7

Vou deixar nas mãos da @Bia

Nossa Gabriel me ajudou muito, estava procurando uma interação justamente sobre fila, sua estrutura me ajudou eu que agradeço … Estou tendo um problema bobo, mais estou quebrando a cabeça, que ;e pegar o nome do atendente fullName do agente e não estou achando nada, mais eu que agradeço irmão …

@GabrielPetrone voce saberia como pegar o nome do atendente, tipo fullName … não achei em lugar algum ??? se puder me ajudar ficarei muito grato !!!


atenciomente

Marcio R. R. Gonçalves

Reputação 7
Crachá +1

Rapaz, lembro de precisar também e não encontrar algo fácil.

Mas pesquisando rapidamente eu achei no Docs esse método: Blip Docs | API Reference porém está sem o exemplo de Requisição aqui pra mim.


Provavelmente você vai precisar de fazer a pesquisa à partir de algum valor e a forma mais fácil seria usar a variável {{input.content@agentIdentity}} que retorna o email do seu atendente no formato: gabriel%[email protected].


Diante dessas incertezas, eu diria que o melhor caminho é você ir para um script e tratar a variável acima, retornando o nome do seu atendente caso desse match com o valor, sabe? Você pode até usar os Recursos pra facilitar o controle de nomes de atendentes.


Lembrando que nesse caso, estamos falando do encerramento do ticket né? Diferente do que implementei da fila que seria algo antes de entrar no atendimento. Era isso mesmo que você estava pensando? Ou você está querendo apresentar o nome do atendente antes de entrar no atendimento?


Caso continue com dúvidas, a noite passo por aqui para lhe ajudar e fico à disposição através do email ou mensagem privada aqui do fórum.


Abraços.


Era isso mesmo que você estava pensando? -> exatamente isso vou colocar em prática a requisição HTTP para o attendant e ver o que me retorna. Obrigado @GabrielPetrone, já me deu norte … aviso se der certo, Obrigado mais uma vez meu amigo.

Reputação 7
Crachá +1

Até não sei se você sabe mas o Postman é um ótimo parceiro pra fazer esses testes “pré-implantação”… segue detalhes: Blip Docs | API Reference

verdade esta sem o exemplo da request kkkk … vou ver o que faço …

Reputação 7

Só um adendo: isso não é método, é um documento (olha na barra lateral). Um documento é um objeto retornado pela api do BLIP. Neste caso, o documento attendant mostra os possíveis campos retornados pelos métodos que o utilizam! 🙂

Reputação 7
Crachá +1

Boa, então faz sentido não ter o exemplo da requisição.

E agora José? Existe algum método que retorna o nome completo do atendente?

Boa tarde Petrone, tudo bem?


É possível buscar o nome do atendente com o seguinte método:


url: https://http.msging.net/commands


{
"id": "{{$guid}}",
"to": "[email protected]",
"method": "get",
"uri": "/attendants?$filter=(identity%20eq%20'{{encoded_attendant_email}}%40blip.ai')"
}

Você obterá como retorno:


 {
"identity": "{{attendant_email}}@blip.ai",
"fullname": "{{attendant_name}}",
"email": "{{attendant_email}}",
"teams": [

],
"status": "Offline",
"agentSlots": 20
}

@GabrielPetrone, tudo bom, meu caro?


Estes códigos que você passou contêm alguns erros que estão nos impedindo de replicar sua solução maravilhosa hahahaha.


Tem como disponibilizar o mesmo código que você usou para conseguir apresentar este conteúdo com a posição da fila e o tempo, por favor? 😁

Reputação 7
Crachá +1

Rapaz, é porque eu sou vacilão! Tem uma variável errada no meu código aqui nesse post, mas eu já corrigi e inclusive melhorei, lá no tópico exclusivo sobre isso. :gabrielpetrone::embaresedblip:


obs: não consigo editar a resposta nesse tópico mais… mas tá tudo certo no tópico exclusivo dessa implementação:

😂


Aaaaah, agora sim!!!


Parabéns pelo solução.


Muito obrigado e muito sucesso pra você!!

Comente