Skip to main content

Olá 

Preciso criar um temporizador no meu bot, que não usa disparo ativo, para quando o usuário der o primeiro input ele contar o tempo, quando tiver no valor de 24h não deixar o usuário ter acesso ao bot caso o cliente retorne e direcionar para um bloco de retorno diferente. Alguém pode me ajudar??

Bom dia, Rodolfo, tudo bem?

 

Um cenário que consigo imaginar é o seguinte:

 

  1. No bloco inicial de conversa do cliente tu criar um script para salvar a data/hora atual e armazenar numa variável de nome, por exemplo, “dataInicioConversa”. Além disso, por uma condição de execução desse script para apenas executar se a variável “dataInicioConversa” não existir. Essa deve ser uma ação de entrada.
    Exemplo de script:
    function run() {
    const dataHoraAtual = new Date();
    return dataHoraAtual;
    }

     

  2. Crie segundo script, ainda nesse bloco, que receba a variável “dataInicioConversa” e que tenha a condição de executar apenas se essa variável “dataInicioConversa” existir. Esse script deverá ler essa variável e comparar com uma nova. Essa nova deve coletar a data/hora atual e comparar se já se passou 24h. Salve esse retorno como bool numa variável de nome, por exemplo, “estaDentroDoPrazo”. Essa deve ser uma ação de entrada.
    Exemplo de script:
    function run(dataInicioConversa) {
    const umDiaEmMilissegundos = 24 * 60 * 60 * 1000;
    const dataAtual = new Date();

    const diferencaEmMilissegundos = dataAtual - dataInicioConversa;

    return diferencaEmMilissegundos >= umDiaEmMilissegundos;
    }
  3. Crie uma condição de saída para que leia a variável “estaDentroDoPrazo” e verifique se é verdadeiro ou falso. Se for verdadeiro, permita que o usuário prossiga no fluxo. Se não, envie para o fim da conversa com o bot.
     
  4. Definir um timeout de expiração para seu subbot. Você pode fazer isso nas configurações gerais do seu bot builder, ou, caso estiver usando router, na definição dos serviços dos subbots. Esse timeout vai ajudar mandar o usuário para o ponto inicial do fluxo. Defina o tempo para “86400” que corresponde a 24h em segundos.

diferencaEmMilissegundos esta retornando “NAN”
Devido a isso o estaDentroDoPrazo sempre e false


Deve ser pq o dataInicioConversa está vindo como string, adicionar a variável “dataInicioConversa = new Date(dataInicioConversa);”

Dessa forma vai forçar transformar em data e evitar o NaN. Depois comente aqui qual foi o resultado, por favor.


O código com o ajuste ficaria:

 

function run(dataInicioConversa) {
let dataInicioConversa = new Date(dataInicioConversa);
const umDiaEmMilissegundos = 24 * 60 * 60 * 1000;
const dataAtual = new Date();

const diferencaEmMilissegundos = dataAtual - dataInicioConversa;

return diferencaEmMilissegundos >= umDiaEmMilissegundos;
}

 


Rodei o scritp assim, continua trazendo NAN

 

function run(dataInicioConversa) {
let dataInicioConversa = new Date(dataInicioConversa);
const umDiaEmMilissegundos = 24 * 60 * 60 * 1000;
const dataAtual = new Date();

const diferencaEmMilissegundos = (dataAtual - dataInicioConversa);

return diferencaEmMilissegundos;
}

rodei dessa forma para ver o que esta trazendo no diferencaEmMilissegundos esta retornando falso. E continua trazendo NAN no return diferencaEmMilissegundos >= umDiaEmMilissegundos;

 


Consegui resolver dessa forma 

function run(dataInicioConversa) { 

let dataInicioConversa = JSON.parse(dataInicioConversa)
const umDiaEmMilissegundos = 24 * 60 * 60 * 1000;
const dateObject1 = new Date(dataInicioConversa);
const dateObject2 = new Date();
const diffTimeInMilliseconds = Math.abs(dateObject2 - dateObject1);

return diffTimeInMilliseconds >= umDiaEmMilissegundos;

}

 


Comente