Sticky

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


Reputação 7
Crachá +1

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





Outros modelos:



  • Caso você queira exibir apenas os minutos (ao invés de HH:MM <-> MM), basta usar o código que está neste link aqui. 👈

  • Caso você queira que o tempo esteja relacionado à um time de atendimento específico, basta usar o código que está neste link aqui. 👈

  • Caso você queira que a mensagem de posição na fila apareça somente após todos os tickets simultâneos terem sido distribuídos, clique neste link aqui. 👈





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:


74 comentários

Reputação 7

Mandou bem demaisss! :gabrielpetrone::blipinlove:

Gabriel, vc pode me ajudar pfv? Eh mto importante pra mim e eu nao sou taaao familiarizado assim

Reputação 7
Crachá +1

Fala blippers, o @Marlon_Freitas_Salat me alertou que havia algo errado no código que passei anteriormente, muito obrigado por isso meu querido!

Diante disso, aproveitei para dar uma revisada e melhorada no código.


O que eu mudei:



  • Adicionei as duas funções em um único script, para facilitar o código.

  • Criei um chatbot com o modelo

  • Disponibilizei o modelo para o download


Então é isso! Obrigado novamente Marlon.

Reputação 7

O Engajamento de vocês é algo sem igual! Você e o @Pedro_Lucas, são exemplos pra mim! 🚀

Uau Gabriel! Mandou bem demais 🚀

Uma função simples mas de extrema utilidade, meus parabéns! 👏

Reputação 7
Crachá +1

Valeu pessoal! Acima de tudo, o importante é a gente utilizar e sempre buscar uma forma de melhorar. Então espero sugestões e melhorias do código pra comunidade!


#vqv #onestepbeyond #foguetenãotemré

Mandou bem demais, Gabriel!


Boa tarde!

Vcê pode colocar as melhorias que você aqui também?

Pois estou tentando seguir o código que você passou e não estou conseguindo, sou nova na plataforma ainda, ai fico travando em algumas partes.

Pelo que me parece, não tenho autorização.

Reputação 7
Crachá +1

Bom, as melhorias estão no primeiro post, é só seguir ele que está 100% funcional e “melhorado”.


Estou vendo pelo seu log que o erro é no Authorization Header, ou seja, você está passando a sua Chave de Autorização errada ou incompleta.


Dá uma olhada nesse artigo explicando como pegar a API-KEY do seu Bot:

https://help.blip.ai/hc/pt-br/articles/360058712774-Como-encontrar-a-API-KEY-do-meu-bot-


O Authorization você passa dessa forma (tanto pro tópico 2 quanto o 3 no tutorial):


Qualquer dúvida me avise, se preferir, estou disponível para fazer uma call e te ajudar, só mandar uma PM.

Nossa muito obrigada! Agora deu certo!!

Eu estava pegando o Key de outro local, ai estava sem os dois últimos caracteres.


Só pra aproveitar a mensagem, já viu de acontecer, de só aparecer na mensagem que estou na posição 1, mesmo tendo 3 pessoas para a tendimento?

Reputação 7
Crachá +1

\o/ :partyparrot:


Não vi acontecer, mas pode ser alguma falha na Requisição e/ou Function GetWaitingTicketsMetrics. Quando o retorno é “undefined”, eu passo o valor pra 1, e pode ser que está sempre retornando undefined pra você.


Temos que investigar o motivo. Uma forma é você me passar o retorno de resposta dessa Requisição HTTP. Acredito que se você me passar o print desse log novamente, já vai ser possível capturarmos algo.

Vou te mandar a tela aqui então

Reputação 7
Crachá +1

Veja só, o retorno da GetTicketsMetrics e GetWaitingTicketsMetrics está exatamente igual, mas são métodos diferentes:


O primeiro GetTicketsMetrics você precisa passar o body:


{
"id": "{{random.guid}}",
"to": "[email protected]",
"method": "get",
"uri": "/monitoring/ticket-metrics?version=2"
}

No segundo GetWaitingTicketsMetrics você passa o body:


{
"id": "{{random.guid}}",
"to": "[email protected]",
"method": "get",
"uri": "/monitoring/waiting-tickets?version=2"
}

Agora vai dar bom hein! Faz aí e me fala, estou por aqui.



Dica, vi que você está passando o ID: {{$guid}} nas suas requisições. Não sei muito detalhe sobre mas isso é um código para gerar um ID aleatório que funciona no Postman (não sei de outras ferramentas mas creio que seja um padrão). Porém aqui no Blip você tem que passar {{random.guid}} para obter um ID aleatório.


💨

Muuuuito obrigada mesmo. Deu super certo agora!

Bom dia @GabrielPetrone tudo bem?

Deu tudo certo obrigado pela solução.

Tenho uma duvida somente…

Como eu retiro as casas após o “.” por exemplo aparece o tempo: 00:02:41.333333

esses valores “333xx” como retira?

Reputação 7

Olá @Cristian_Oliveira tudo bem? Primeiramente, bem-vindo à nossa comunidade! :giveaway: :giveaway:


Vou deixar o @GabrielPetrone te responder com mais precisão, afinal, é a solução dele, não é mesmo? 😂


Mas dá pra diminuir o número de casas direto lá no script onde monta a variável queueText

Reputação 7
Crachá +1

Olá @Cristian_Oliveira, seja muito bem-bindo ao fórum do Blip!!

O @BrunoC é um cara fera, tenho certeza que vai poder sugerir outras formas de remover isso…


Mas a mais fácil que pensei aqui foi dar um split na var waitTime. Vamos lá:

Lá na linha 12 do script, substitua por:


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


Fiz um teste aqui e funcionou perfeitamente com o seu exemplo :blipmarvel:


Editei o script completo ali na primeira resposta, caso achar mais fácil, é só copiá-lo.


E acima de tudo, fique à vontade para nos trazer feedbacks!! :blipinlove:


Abraços.

Sensacional @GabrielPetrone Show demais.!

Funcionou perfeito.!


Muito Obrigado…

ola, tudo bem ?

gostaria de saber como eu posso retorna só os minutos ?

Reputação 7
Crachá +1

Olá @Ariele_Brites , bem-vinda ao fórum!

Não tenho isso pronto ainda, mas vou estruturar e te mando por aqui, ok?

Reputação 7

Boaaaa! Você é um orgulho para essa Comunidade! 💙

Reputação 7
Crachá +1

Oi @Ariele_Brites veja só como ficou:


Que tal?


Mas vamos ao que interessa né? rsrs

Para ter esse resultado, o script à ser usado é:


function run(getTicketsMetrics, getWaitingTicketsMetrics) {

var metric = JSON.parse(getTicketsMetrics);
var queue = queuePos(getWaitingTicketsMetrics);
var waitTime = metric.resource.avgWaitTime;
minutes = convertH2M(waitTime);

if (minutes == 0) {
minutesText = "aproximadamente menos de um minuto.";
else if (minutes == 1) {
minutesText = "aproximadamente " + minutes + " 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(getWaitingTicketsMetrics) {

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

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

function convertH2M(timeInHour){
var timeParts = timeInHour.split(":");
return Number(timeParts[0]) * 60 + Number(timeParts[1]);
}

Espero que tenha lhe ajudado, qualquer sugestão, pode ficar à vontade para falar

:blipinlove:

Fala Pessoal! Todos bem?


Solução muito bacana, estava procurando algo deste tipo para nosso bot!


Gostaria de saber se existe possibilidade de informar o número de tickets na fila de uma equipe especifica… e não do chatbot inteiro… Aqui acontece muito de uma equipe estar sobrecarregada e outra não, mostrar a mesma fila pra todos vai ficar estranho…


Forte abraço!

Reputação 7
Crachá +1

Fala @Wilson_Missina_Faria , primeiramente seja muito bem-vindo à community!


Faz muito sentido o que você está dizendo!

Fiz alguns ajustes aqui e consegui chegar em um resultado, abaixo vou explicar como fiz e alguns pontos de atenção que será preciso ter para este caso, ok?


Bom, para mostrar o tempo médio de espera de uma fila específica nós vamos utilizar apenas o método Get Teams Metrics, portanto basta ir nas Ações de Entrada do seu bloco e adicione uma Requisição HTTP configurada com o método acima e salvando a respostas em uma variável (neste exemplo a variável será getTeamsMetrics)


Feito isso, adicione a ação de Executar script

Em Variáveis de entrada adicione a variável de resposta da sua requisição (getTeamsMetrics).

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


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.items[i].name == team) {
var queuePosi = teamsMetrics.resource.items[i].waitingTickets;
var queueTimes = teamsMetrics.resource.items[i].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(timeParts[0]) * 60 + Number(timeParts[1]);
}

Salve o retorno do script em uma variável e adicione-a no conteúdo do seu bloco.


Só isso :happyblip: e o resultado será:


Dessa vez os resultados vieram daqui:



Importante!


Vamos lá, qual é o “problema” disso?


Dê uma olhada na linha 4 do código, onde eu informei: var team = "Default";


Para funcionar legal este script, essa var deveria ser dinâmica, porém todavia entretanto, para que isso seja dinâmico você vai precisar criar um script (antes desses passos acima) que basicamente “repita” suas regras de atendimento e retorne o nome exatamente igual ao que você configurou nas suas equipes do módulo de atendimento. Não é algo complicado de ser feito, porém será mais uma etapa para que isso funcione corretamente e cada caso será um caso, devido a isso não vou conseguir ajudar a partir daqui.




Bom é isso, espero que goste e muito obrigado pela sugestão, foi sensacional!




Abraços.

Comente