Skip to main content

Fala blippers, gostaria de compartilhar uma implementação que fiz lá em dezembro/2020 com vocês - uma forma de informar ao seu cliente a posição na fila e tempo médio de espera para atendimento humano. Legal né?

 

Antes de começar,se inscreva, dê joinha e ative o sininho!!

 

 


Informe a posição de fila e tempo médio de espera para o seu cliente

 

 

O conceito por trás dessa implementação é informar os valores que são apresentados na tela de Monitoramento do seu bot:

 

 

 

 

 

 


Passo a passo de como informar a posição de fila e tempo médio de espera para o seu cliente:

 

 


  1. Criar um bloco antes do Atendimento Humano
  2. Adicione uma Requisição HTTP nas Ações de Entrada do bloco e utilize o método Get Ticket Metrics , armazenando a resposta em uma variável (neste exemplo a variável será getTicketsMetrics)
  3. Adicione uma Requisição HTTP nas Ações de Entrada do bloco e utilize o método Get Waiting Tickets Metrics , armazenando a resposta em uma variável (neste exemplo a variável será getWaitingTicketsMetrics)
  4. Agora, adicione uma ação de Executar script

    4.1. Informe em Variáveis de entrada as variáveis de resposta das suas requisições HTTP (getTicketsMetrics & getWaitingTicketsMetrics)

    4.2. No corpo do seu script, adicione o seguinte código:

     

 

 

       function run(getTicketsMetrics, getWaitingTicketsMetrics) {



var metric = JSON.parse(getTicketsMetrics);



var queue = queuePos(getWaitingTicketsMetrics);



if (queue == 1) {

var queueText = "Sua posição na fila é: " + queue + ".";

return queueText;

} else {

var waitTime = metric.resource.avgWaitTime;

var queueText = "Sua posição na fila é: " + queue + ". Tempo médio de espera: " + waitTime.split(".") 0];

return queueText;

}

}





function queuePos(getWaitingTicketsMetrics) {



var queue = JSON.parse(getWaitingTicketsMetrics);

var queueCount = queue.resource.total;



if (queueCount === undefined) {

queueCount = 1;

return queueCount;

} else {

queueCount = queueCount + 1;

return queueCount;

}

}

 

4.3. Salve o retorno com uma variável (neste exemplo a variável será queueText)

 

 


  1. Agora, adicione a variável de resposta do script no Conteúdo do seu Bloco:

     

 

 

 

 

 

 


  1. Não se esqueça de transferir o seu cliente para o próximo bloco (atendimento humano) sem aguardar uma resposta, hein!

     

 

 


O resultado será:

 

 


  • Quando você for o primeiro na fila de atendimento:

     

 

 

20210406_4244_%pn

 

 


  • Quando você for o segundo ou + na fila de atendimento:

     

 

 

20210406_4246_%pn

 

 


 

 

 

 


Gostaria de fazer um teste? Clique aqui e fale com o Bob da Fila de Atendimento

 

 

Como tudo são flores 🌻 segue o fluxo completo para download e caso você achar mais fácil, basta importá-lo. Só tome cuidado para não sobreescrever o seu bot:

https://www.bots2u.com.br/templates/filadeatendimentohumano.json

 

 


Espero que tenham gostado e que isso ajude. Em caso de dúvidas, chame o Pedro @Pedro_Lucas

 

 

:blipinlove::thuglifeblip:

 

Olá @GabrielPetrone, estou tendo problema com a posição da fila, esta retornando sempre como primeiro da fila mesmo tendo outras pessoas na fila. Fiz o sugerido acima para o mesmo problema porem ainda sim persistiu, poderia me auxiliar se estou fazendo algum passo errado?



Olá @Rangel.Alves primeiramente, bem vindo à community!



Pelo log que você apresentou, deveria trazer a posição “7”




A falha provavelmente está no script que você está passando, pode colar o/os script(s) aqui pra nós?


Olá @GabrielPetrone, segue abaixo o script



function run(getTicketsMetrics, getWaitingTicketsMetrics) {



var metric = JSON.parse(getTicketsMetrics);



var queue = queuePos(getWaitingTicketsMetrics);



if (queue == 1) {

var queueText = "Sua posição na fila é: " + queue + ".";

return queueText;

} else {

var waitTime = metric.resource.avgWaitTime;

var queueText = "Sua posição na fila é: " + queue + ". Tempo médio de espera: " + waitTime;

return queueText;

}



}



function queuePos(getWaitingTicketsMetrics) {



var queue = JSON.parse(getWaitingTicketsMetrics);


var queueCount = queue.resource.total;



if (queueCount === undefined) {


queueCount = 1;


return queueCount;


} else {


queueCount = queueCount + 1;


return queueCount;


}


}


Não consegui encontrar neste script, qualquer diferença que possa afetar a posição de fila,


Como você está passando as variáveis na entrada do script? Poderia validar se estão exatamente iguais às variáveis de retorno da requisição?


estava passando uma variável incorretamente.


Eba! Deu tudo certo aí?


Olá Gabriel! Tudo bem?


Será que poderia disponibilizar o fluxo com essa configuração de filas por equipe para download, por favor?



Me ajudaria bastante.


@GabrielPetrone corre aqui!


Claro, está disponível aqui:





E também, o @BrunoC colocou pra nós lá na página de templates do Blip: https://templates.blip.ai/



Valeu por me marcar @Bia :blipinlove:


@GabrielPetrone muito obrigado, Gabriel! Porém eu estava precisando daquele que a fila é por equipe, se não me engano, esse é uma fila para todas equipes, correto?


ola @ChatBot_Trivento, no link abaixo você consegue o download do atendimento por equipes.


Blip Templates - Atendimento humano equipes. Mas caso queira usar o script passado pelo @GabrielPetrone nas mensagens acima, você precisa montar uma requisição http similar ao modelo abaixo.





no corpo você deve inserir as seguintes informações e guardar o retorno na variável, getTeamsMetrics


{


“id”: “{{random.guid}}”,


“to”: “[email protected]”,


“method”: “get”,


“uri”: “/monitoring/teams?version=2”


}


Após esses passos, você deve montar uma ação de entrada selecionando, “executar script”, colocar o script fornecido pelo Gabriel, com a variável de entrada “getTeamsMetrics”. Lembrando das ressalvas que o mesmo faz para a utilização do script de forma automática.



se não foi essa a sua duvida peço desculpas.


Vacilo o meu @ChatBot_Trivento . Acabei de atualizar o arquivo com o fluxo atualizado (com todas as opções discutidas por aqui).



Obrigado @Rangel.Alves pelo apoio!!


Boa noite, primeiramente obrigado pelo post, vai nos ajudar bastante, porém estou com um problema, fiz conforme o tutorial porém o getWaitingTicketsMetrics está retornando no “total” sempre com o valor “4” mesmo não tendo 4 pessoas na fila.



Será algum erro na consulta?



Trouxe o getWaitingTicketsMetrics pra dentro do bloco (ver anexo) só pra ver o que estava retornando e percebi que ele sempre retorna um valor fixo de 4.



Alguém pode me ajudar?




Descobri aqui, na verdade estava usando a key de outro bot (hehehe) obrigado


Hmm, rapaz! Parece que você está usando a KEY do meu bot de exemplo, rsrs… pelo menos o nome do bot que está aparecendo é o meu:


image



haha, é só você corrigir isso que vai ser sucesso.



Agora, não era minha intenção disponibilizar essa Key, por segurança. Vou dar uma olhada nisso, até para evitar que ocorra novamente.



Veja se alterando a Key vai resolver e nos avise.



Abraços!


Exatamente rs rs rs usei o seu bot de exemplo e esqueci de alterar a key, obrigado viu valeu d+


Boa!! #GreatMindsThinkAlike


@GabrielPetrone, estou com muitos time de atendimento aqui.



Qual endpoint do BliP posso filtrar o time que o cliente foi atribuído para conseguir informar na fila somente para o time que está atendendo ele?


Fala meu querido, veja se é isso que você precisa:





Qualquer coisa me avise.


Viu, na verdade quero fazer aquele script para passar o time de atendimento automaticamente.


Tem como eu filtrar pelo número do cliente qual o ticket tem em espera e pegar o time a partir daí?


Rapaz, sabe qual é o problema? Não tem uma forma (via builder) que permita que você transborde o cliente e posteriormente execute scripts e requisições no bot. Por isso é preciso construir “a regra de atendimento” em um script que retorne o nome do time. Entendeu? Qualquer outra dúvida me avise.


Isso serve para Atendimento WhatsApp? 😃


Sim, funciona em qualquer canal!


Boa tarde!


Essa solução é maravilhosa!! Parabéns!



No entanto, e se eu quisesse informar a posição na fila somente a partir de um determinado número de tickets já em atendimento, por exemplo:



Tenho 2 Agentes que trabalham com distribuição automática e 3 tickets simultâneos cada, logo, eu só gostaria de informar a posição na fila a partir do 7º ticket.


Sei que consigo fazer uma requisição HTTP e pegar os “open tickets”, mas depois não sei como complementar seu código.



Sabe como poderia fazer?


Hey @camila.rocha , obrigado pela sugestão. Pensei em algo aqui, veja se te atende.


Para este caso, vamos utilizar os métodos Get Ticket Metrics e ao invés do Get Waiting Tickets Metrics, usaremos o Get All Active Tickets.



Você precisa fazer as mesmas instruções que explico lá em cima (criar as Requisições HTTP…) e por conta de termos alterado o método, você vai precisar passar o seguinte script:



function run(getTicketsMetrics, getAllActiveTickets) {



var open = JSON.parse(getAllActiveTickets);

var openCount = open.resource.open;

if (openCount <= 5 || openCount === undefined) {

return "Você está sendo transferido para nossa equipe de atendimento.";

} else {

var queue = queuePos(getAllActiveTickets);

}



var metric = JSON.parse(getTicketsMetrics);

var waitTime = metric.resource.avgWaitTime;

minutes = convertH2M(waitTime);



if (minutes == 0) {

minutesText = "aproximadamente menos de um minuto.";

} else {

minutesText = "aproximadamente " + minutes + " minutos."

}



var queueText = "Sua posição na fila é: " + queue + ".\n Tempo médio de espera: " + minutesText;

return queueText;

}



function queuePos(getAllActiveTickets) {



var queue = JSON.parse(getAllActiveTickets);

var queueCount = queue.resource.waiting;



if (queueCount === undefined) {

queueCount = 1;

return queueCount;

} else {

queueCount = queueCount + 1;

return queueCount;

}

}



function convertH2M(timeInHour){

var timeParts = timeInHour.split(":");

return Number(timePartsr0]) * 60 + Number(timeParts 1]);

}



Para explicar melhor, uma vez que temos vários formatos de mensagem disponíveis… o que mudou foi o seguinte:





  1. Eu verifico a quantidade de tickets com status open (em atendimento) e enquanto for menor ou igual à 5, retorno a mensagem dizendo que está transferindo para a equipe de atendimento. Se a quantidade de tickets for maior que 5, daí vai ser enviado pra função que vai validar quantos clientes estão na fila:




    var open = JSON.parse(getAllActiveTickets);

var openCount = open.resource.open;

if (openCount <= 5 || openCount === undefined) {

return "Você está sendo transferido para nossa equipe de atendimento.";

} else {

var queue = queuePos(getAllActiveTickets);

}



O que mudou na função foram apenas as 3 primeiras linhas, alterando a variável de entrada e o objeto que agora passa a ser a chave waiting (antes usávamos a chave total da outra requisição):



function queuePos(getAllActiveTickets) {



var queue = JSON.parse(getAllActiveTickets);

var queueCount = queue.resource.waiting;



É isso! Nos testes que eu fiz aqui simulando o cenário de 2 atendentes com 3 tickets simultâneos, rodou perfeitamente.



Espero que te ajude e qualquer dúvida, corre aqui! :happyblip:


Comente