Fechar sessão do usuário

Boa noite,

Contexto
Tenho três chatbots, com a seguinte estrutura:

  • Um Roteador
  • Um Primeiro Atendimento (construído pelo Builder)
  • Um Segundo Atendimento (construído em Python, por integração via HTTP)

O primeiro atendimento está com o tempo de inatividade desligado (pois quero que os usuários, que vão para o atendimento humano, permaneçam disponíveis de um dia para o outro).

Mas, há uma opção no primeiro atendimento que manda para o segundo.

Problema
Quando um usuário cai no segundo, e termina suas interações, ele “fica preso” neste segundo.

Me parece que por não haver um tempo limite de sessão, numa se retorna ao início do primeiro atendimento.

Minha ideia de solução
Pensei em usar o que está descrito em: https://docs.blip.ai/?http#reset-user-state

Minha ideia era ter um scheduler que verificasse a inatividade dos usuários (do Segundo Atendimento), e voltasse então os usuários inativos para o início de tudo.

Mas, não estou conseguindo usar a API do link acima, pois, ao que parece, o usuário não é localizado. A saber, já tentei (na chamada à API):

  • Usar o FLOW_ID do Primeiro Atendimento
  • Usar o FLOW_ID do Segundo Atendimento

Obs.: Estou usando USER_ID que recebo nas mensagens (que parece um tipo de tunelamento, pois tem o sufixo “@tunnel.msging.net”.

Perguntas

  1. A API que indiquei é a certa para retornar o usuário ao início?
  2. Devo usar qual FLOW_ID?
  3. O USER_ID é mesmo o que vem nas mensagens?

Implementei uma solução usando: https://docs.blip.ai/?http#redirect

Mas, tenho dúvidas se é o ideal, pois, quando (após o redirect) o usuário cai no atendimento humano, seu histórico de mensagens mostra até a conversa com o Atendimento de Segundo Nível. Queria reiniciar tudo, como se fosse uma sessão completamente nova. É possível?

Olá @Sergio_Rocha_da_Silv, tudo bem?

É sim, contudo ela só redireciona o contato para o início do fluxo do mesmo subbot. :wink:

Isto depende, o contexto do seu roteador está ativado no seu bot? :thinking:

Isto também depende, se o contexto estiver desligado então você deve usar o "@tunnel.msging.net”. Se o contexto estiver ligado então você precisará encontrar o contato originador deste tunnel e buscar estes dados nele, o endpoint é Get a tunnel info.
Vale lembrar que após obter o originator, você deve enviar todos os comandos utilizando a Key do Router. :man_technologist:t5:

Caso esteja se referindo a redirecionar o contato para o inicio do fluxo na sua arquitetura router, assim “forçando” o contato realizar o mesmo fluxo de conversação que um contato novo faria…

A resposta é sim, isso é possível. Basicamente, no contexto do contato existem variáveis no seguinte nome stateid%40{{flow-identifier}}, cada variável dessa armazena o ponto no fluxo que o contato está, isto é, para cada subbot na sua arquitetura, caso o contato tenha trafegado em todos este subbots haverá uma variável para cada.

Além dessas variáveis, existe uma variável chamada master-state, nela é guardada qual o subbot ativo para o contato. Para reiniciar, o fluxo total, basta excluir todas essas variáveis. :smile: