Como informar a posição de fila e tempo médio de espera para o seu cliente
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:
Criar um bloco antes do Atendimento Humano
Adicione um Processar Comando 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)
Adicione um Processar Comando 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)
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)
Agora, adicione a variável de resposta do script no Conteúdo do seu Bloco:
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:
Quando você for o segundo ou + na fila de atendimento
@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.
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.
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}
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.
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:
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:
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:
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:
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).
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 .
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???
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 , 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.
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.
Enter your E-mail address. We'll send you an e-mail with instructions to reset your password.
A analisar o ficheiro em busca de vírus
Lamentamos, mas ainda estamos a analisar o conteúdo deste ficheiro, a fim de nos certificarmos de que o mesmo é seguro para descarregar. Agradecemos que tentes de novo dentro de poucos minutos.