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:

 

@GabrielPetrone, ficou top! Implementei na nossa estrutura de atendimento.



Conseguimos alterar para que a variável da equipe de atendimento seja dinâmica, de acordo com a equipe atribuída ao cliente inicialmente.



Tenho na verdade outro desafio, hahaha!



Pensa comigo, what if, a contagem de posição na fila, fosse interativa, se ao passar alguns minutos que ele está aguardando, fosse realizado outra requisição para atualizar a posição dele na fila.



image



Tá tá, sei que aparentemente é meio impossível, pq ao entrar no bloco de atendimento, não conseguimos fazer requisições, mas e se validarmos a resposta do cliente, exibindo tipo uma mensagem, exemplo; “Parça, se vc quiser atualizar sua posição na fila, me fala atualizarr”.



E com base na resposta, direcionar para um novo bloco, onde faríamos outra requisição e outro script para atualizar a posição.



Think About It Reaction GIF by Identity



PS: Nem sei se falei coisas com sentido. Mas fica ai o desafio, valeu abraço…


Muito obrigado Xará @Gabriel_Braz !! Que bom que implementou com equipes dinâmicas, fica show demais né?



Hammm, já pensei um pouco sobre isso também e a única solução que me veio na cabeça foi ter uma API intermediária que vai fazendo esse check. A sua sugestão me fez refletir um pouco mas segue um ponto de atenção:


Como podemos calcular quantas posições um contato andou, uma vez que não sabemos exatamente quem é quem na fila?




Compartilha o código com nos! rsrs


Também estou com dificuldade em executar esse script.



Tenho certeza que o problema é o usuario aqui.



Poderiam dar uma luz ?



Failed: ExecuteScript action in 65 milliseconds



order: 0



type: “ExecuteScript”



parsedSettings: {“function”:“run”,“source”:"/**\n * All input variables needs to be passed as function param;\n * Objects received as param needs to be parsed. Ex.: JSON.parse(inputVariable1);\n * Objects returned needs to be stringfied. Ex.: JSON.stringify(inputVariable1);\n **/\n \n function run(getTicketsMetrics, getWaitingTicketsMetrics) {\n\n var metric = JSON.parse(getTicketsMetrics);\n\n var queue = queuePos(getWaitingTicketsMetrics);\n \n if (queue == 1) {\n var queueText = “Sua posição na fila é: " + queue + “.”;\n return queueText; \n } else {\n var waitTime = metric.resource.avgWaitTime;\n var queueText = “Sua posição na fila é: " + queue + “. Tempo médio de espera: " + waitTime.split(”.”) 0];\n return queueText;\n }\n }\n\n\n function queuePos(getWaitingTicketsMetrics) {\n \n var queue = JSON.parse(getWaitingTicketsMetrics);\n var queueCount = queue.resource.total;\n \n if (queueCount === undefined) {\n queueCount = 1;\n return queueCount; \n } else {\n queueCount = queueCount + 1;\n return queueCount;\n }\n }”,“inputVariables”: “getTicketsMetrics”,“getWaitingTicketsMetrics”],“outputVariable”:“queueText”,“LocalTimeZoneEnabled”:false}



continueOnError: true



timestamp: “2021-11-15T20:12:07.342Z”



elapsedMilliseconds: 65



error: “TypeError: resource is undefined”


Fala @DivinoDr_Suporte !


Humm, veja bem… nas suas duas requisições (getTicketsMetricse getWaitingTicketsMetrics) você passou a variável para corpo de resposta com o nome de: response.



Dessa forma, uma substituiu a outra e consequentemente o script não localizou os objetos esperados no JSON.



Dá uma olhada no item 4.1 do primeiro tópico. 😉



Faz um teste e corre aqui se precisar de mais ajuda!



Abraços.


Cara, era isso mesmo;



Obrigado


Fala galera, boa segunda pra todos…



O campo que está sendo considerado no script para apresentar o tempo médio de espera é: averageAttendanceTime que de acordo com a documentação do BLip, representa a duração média dos atendimentos:



image



Porém, analisando os demais indicadores, notei que talvez o campo que deveria ser utilizado, fosse o: averageWaitTime que representa o tempo médio que o cliente aguarda para ser atendido + tempo para primeira resposta:



image



No nosso caso, fez mais sentido, pq também devemos considerar o tempo que ele ficou em fila, aguardando ser direciona para um atendente. E nos nossos monitoramentos o averageWaitTime é sempre maior que o averageAttendanceTime.



Não sei se meu raciocínio está 100% correto, mas achei importante compartilhar…



Um abraço quentinho:



image


Hey Xará @Gabriel_Braz , faz todo sentido seu raciocínio. Obrigado por compartilhá-lo conosco!


Como durante as conversas aqui surgiram várias modificações, pode ter ocorrido alguma necessidade de utilizar o avgAttendanceTime, mas originalmente estamos passando o avgWaitTime.



Acima de tudo vale a experimentação e modificação conforme cada necessidade, já dizia o Tio Bruce:


image



Tmj meu querido! Continue compartilhando e contando conosco!



Abraços.


Oi, pessoal! Bom dia!



Muito bom, nos ajudou bastante mesmo!! Muito obrigado!



Usamos aqui mas precisamos de mais uma melhoria kkkk ao invés do número na fila ser sempre o do inicio do contato (ex: entrei na fila e tinha 2 pessoas, meu número na fila será 2), porém, depois que a fila começa a andar, precisaria que o número na fila mudasse (no caso seria para o 1).



Vocês conseguem me ajudar com isso??



Obrigado gente!


Hey @Caio_Lima , tudo bem?


Antes de qualquer coisa, gostaríamos de te dar boas-vindas à Comunidade! 💙






Poutz, isso seria lindo né?



A única forma de fazer isso hoje, seria através de um monitoramento externo ao Blip :sadblip: .


Em outras palavras, precisaria de ter uma API que monitore a fila de atendimento, disparando uma mensagem cada vez que a fila andasse. Parte da solução está aqui no tópico, mas como eu disse precisaria externalizá-la.



Qualquer outra dúvida, fique à vontade pra nos chamar.



Abraços.


Bom dia, tudo bem?



Muito legal, nós ajudou muito a postagem.



Apliquei em meu bot e deu tudo certo, mas gostaria de uma opção onde depois que o cliente escoasse para fila de atendimento e ele mandasse uma mensagem, eu conseguir devolver novamente a posição da fila dele atualizado, você consegue nós ajudar com isso???



Obrigada!


Ei, @Kalolayna_Millaqueo 💜


A Dell Brasil está fazendo isso…


Não a posição em si, mas enviar mensagem dentro do atendimento humano para avisar que o atendimento não foi esquecido.


Hey pessoal @Kalolayna_Millaqueo @Bruno_Gabriel !


Pois é, essa questão é top demais e não é complicada de ser feita! Foi o que expliquei um pouco mais acima pro @Caio_Lima. Para reforçar, só precisa de externalizar a solução através de uma API intermediária.



@Bruno_Gabriel , você que é fera poderia desenvolver isso pra comunidade hein?


Fica a dica!



Abraços.




Dá para fazer pelo Integromat rsrs


Quando tiver tempo vou testar.


Gabriel,



Vi a parte que voce menciona que seu script seria para a fila DEFAULT, no meu caso que possuo varias filas oque eu precisaria fazer ?



Segue em anexo um print das minhas filas



Hey @carlos_clayton_olive !



Tem uma resposta nesse tópico que auxilia justamente no caso de várias filas, dê uma olhada e veja se te ajuda:





Abraços.


Gabriel,



Eu consegui, agora está mostrando corretamente.


Queria agradecer muito sua ajuda e sua rapidez de resposta, vai nos ajudar muito.


Nosso bot ta ficando bonito rsrs



Boa tarde Gabriel,



Tentei utilizar esse codigo mas para mim deu erro, consegue me ajudar ver se tem algum erro da minha parte.



Subi um video no google drive com a explicaçao: https://drive.google.com/file/d/13QDpE33eSXCq3fpf39heDepoQDmdodWO/view?usp=sharing


Gabriel,



No meu caso esse codigo que utilizei ta pegando o “Tempo médio de atendimento” e nao o “Tempo médio de espera”



Segue evidencia em anexo



Codigo utilizado:



function run(getTeamsMetrics) {



var teamsMetrics = JSON.parse(getTeamsMetrics);

var team = "Default";

var teamsTotal = teamsMetrics.resource.total;



for (i=0; i < teamsTotal; i++){

if (teamsMetrics.resource.itemsui].name == team) {

var queuePosi = teamsMetrics.resource.itemsui].waitingTickets;

var queueTimes = teamsMetrics.resource.itemsui].averageAttendanceTime;

}

}



queuePosi = queuePosi + 1;

var minutes = convertH2M(queueTimes);



if (minutes == 0) {

minutesText = "aproximadamente menos de um minuto.";

} else {

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

}



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

return queueText;



}



function convertH2M(timeInHour){


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


return Number(timePartsm0]) * 60 + Number(timePartsm1]);


}






Hey @carlos_clayton_olive , obrigado pelo feedback!



Bem notado, no script eu uso o campo averageAttendanceTime que é o tempo médio de atendimento, e era o campo disponível para uso na época.


Mas o @Bruno_Luz me deu uma luz (ba-dum-tiss!) de que a API do Get Teams Metrics, agora retorna também o campo averageWaitTime.



Então teoricamente você precisa apenas trocar no script onde tem estes campos. Porém, eu fiz um teste aqui e pra mim o campo não apareceu :cryingblip:, estou tentando descobrir o comportamento para te passar corretamente.



Exemplo do campo retornando:




Enquanto procuro por aqui, se possível peço que dê uma olhada no seu bot no endpoint que passei, para ver se é apresentado o campo. Se sim, pode implementar que vai ser sucesso e eu retorno com mais detalhes em breve.



Abraços.


apoiofinanceirocbv (1).json (46,7,KB)



Olá @GabrielPetrone boa noite!



Seguei suas dicas e o tutorial, mas aqui não funcionou 😦



Anexei aqui o fluxo criado, pode me ajudar a entender onde está o erro?



Desde já muito obrigado.


Alguém sabe como faço pra enquanto o cliente não for atendido eu informar ele em que posição e tempo de atendimento faltam pra ele ser atendido ?


Alguém sabe como faço pra enquanto o cliente não for atendido eu informar ele em que posição e tempo de atendimento faltam pra ele ser atendido ?

Opa, isso é possivel atraves da extensão da Blip Store


Boa noite!!!

 

Alguma alma bondosa ainda teria o json deste posta para comaprtilhar? segui aqui o passo a passo, mas acredito ter esbarrado em alguma parte que nao identifiquei e estou travado nela.

 

Se alguem puder fornecer o json ou  me ajudar em algo eu agradeço.

 

 

Até mais


Comente