Enviar uma mensagem de "alerta" para o usuário independente de em que ponto do fluxo ele esteja, mantendo-o no mesmo ponto

Uma historinha

O modelo de chatbot de atendimento humano disponível no Blip sugere o teste de horário de atendimento e disponibilidade de atendentes imediatamente antes do encaminhamento para o Desk.

Tentando criar um fluxo mais simpático colocamos a validação do horário de atendimento logo no início do fluxo, deixando o visitante “avisado” de que pode interagir com o bot mas não terá atendimento humano disponível. Repetimos este teste em três ou quatro pontos pois o fluxo é um pouco grande e o visitante pode iniciar a conversa 5 minutos antes do fim do expediente e chegar no bloco de atendimento humano 5 minutos depois.

Uma ideia

Queria melhorar isso usando uma ação de entrada global com um script que valide o horário de atendimento e armazene o resultado em uma variável em cada passo do fluxo.

Essa mesma variável poderia então ser utilizada como condição para o envio de uma mensagem de notificação: “Olha, faltam 5 minutos para encerrarmos o expediente do atendimento humano. Se você precisa conversar com um atendente ainda hoje é melhor correr”, isto independentemente do ponto do fluxo em que o usuário esteja.

Depois da notificação setaria uma flag para que a notificação não fosse apresentada novamente.

Sei como implementar o script global e setar as variáveis, mas não sei se é possível e nem como fazer para um script escrever uma mensagem no início do bloco. Pensei em incluir uma variável {{aviso}} no início de cada bloco e zerar ela numa ação de saída, mas achei a solução meio tosca, sem contar que precisaria ter o cuidado de incluir essa variável no início de cada novo bloco, como uma “boa prática”.

Uma ajuda

Imagino que uma um Processar Comando ou uma Requisição HTTP para a api do Blip consiga resolver a questão de uma maneira mais elegante, mas não consigo me achar com a documentação da API do Blip, se alguém tiver uma receitinha de bolo aí eu agradeço.

Valeu galera

Olá, tudo bem?

Achei sua ideia sensacional e corri para testá-la. E spoiler, tem sim um jeito prático de desenvolver isso. Dá para fazer tudo nas ações globais de entrada :nerd_face:.

Desenvolvi um teste aqui e validei que realmente funciona. A solução ficou assim:

  1. Criei um script nas ações globais de entrada para validar se está no horário de atendimento. Este script retorna um booleano e registro essa informação na variável estaEmHorarioDeAtendimento. Não há condições de execução desse script, ele sempre irá executar.

  2. Em seguida executo uma requisição http para enviar a mensagem de alerta para o usuário. As condições para executar essa ação são a variável mensagemDeAlertaJaEnviada não existir e a variável estaEmHorarioDeAtendimento ser igual a false.

A requição HTTP é a seguinte:

Método: POST
URL: A url você encontra nas configurações do seu bot roteador (se utilizar um roteador) ou no builder (se não utilizar um roteador). Você encontra ao clicar na engrenagem no canto direito do bot e nas opções “Informações de conexão”. É a url para enviar mensagens. No print abaixo mostra onde encontrar.

Headers: É preciso adicionar apenas uma chave no header que é o authorization do seu bot. Você encontra ela no mesmo lugar que encontrou a url de mensagens. É o campo “Authorization” do bot.

Body: No corpo da requisição você irá enviar este conteúdo:

{
  "id": "{{random.guid}}",
  "to": "{{contact.identity}}",
  "type": "text/plain",
  "content": "teste de mensagem"
}

O campo content é a mensagem que será enviada para o usuário. Para fins de teste coloquei apenas “Teste de mensagem”, mas no seu caso personalize ela como quiser.

  1. Por fim, eu defini a flag mensagemDeAlertaJaEnviada para controlar quando não enviar a mensagem novamente. Utilizei uma lógica bem simples para ser rápido, mas sinta-se a vontade para mudar esse controle. Eu estou definindo essa variável com o valor true (mas pode ser qualquer coisa) e setando um tempo para ela expirar (que coloquei 2 minuntos | 120 segundos para testar rapidamente). E estou criando essa variável sempre que ela não existir ainda (para não sobrescrever o tempo de expiração) e quando estiver fora do horário de atendimento. Dessa forma, sempre que estiver fora do horário de atendimento ela será criada e quando ela expirar a mensagem será enviada novamente. Você pode configurar a expiração dessa variável como uma hora por exemplo, só é preciso que esse tempo seja maior que o tempo de conversa do usuário com o bot.

  1. Caso esteja utilizando um roteador, lembre-se de habilitar a opção de “Utilizar contexto do roteador” nas configurações do bot. Isso é necessário para que nossa requisição http que envia a mensagem tenha sucesso.

E é isso, não precisa alterar mais nada no bot. Testando o fluxo ficou assim:

E meu fluxo era só 3 blocos que printavam seus nomes:

Caso queria analisar o bot que desenvolvi, este é o json para importar o fluxo dele.
experimental2.json (9,5,KB)

Espero ter ajudado. Qualquer dúvida pode me marcar nos comentários.