Ir para o conteúdo

Trilha Avançada

Um chatbot de definição de senha

Nesse tutorial vamos construir um chatbot que onde o usuário irá definir uma senha.

Num primeiro momento o usuário deve se identificar, para isso ele informa seu email. Uma API externa é acionada e envia um código de verificação para ele e informa para o chatbot qual o código esperado. Se o usuário informa o código correto, o script continua o atendimento.

A senha então é recebida duas vezes para confirmação. Em seguida o valor da senha é encaminhado novamente para uma API Externa que de fato cuida da troca da senha.

O caminho-feliz do fluxo de conversa seria:

  • Usuário: quero definir minha senha
  • Chatbot: Certo! Por favor, me informe o seu email...
  • Usuário: fulano@email.com
  • Chatbot: Me informe código de 4 dígitos enviado para fulano@email.com.
  • Usuário: 1234
  • Chatbot: Ótimo! Por favor, informe a senha desejada...
  • Usuário: joao123
  • Chatbot: Agora informe a senha novamente para eu confirmar a mudança...
  • Usuário: joao123
  • Chatbot: Senha confirmada com sucesso!

Caso o usuário erre a senha confirmada, o script perguntará se ele quer reiniciar o processo.

Comando para ocultar senha

Será usado o comando #use_password_field ao longo do script para sinalizar que a próxima mensagem do usuário no Canal Web deve ser recebida num campo com caracteres ocultos. O valor recebido também é ocultado histórico na janela de conversa, proporcionando maior privacidade.

Crie um Motor Rivescript no chatbot com o seguinte script:

+ [(quero|desejo|preciso)] (criar|definir|mudar|trocar) [a] [minha] senha
- {topic=continuar}{@sim}

+ *
- Olá! Quer definir sua senha agora? {topic=continuar}

// Loop que espera pelo sim ou não para iniciar/reiniciar a definição de senha
> topic continuar

+ sim
- Certo! Por favor, me informe o seu email...
^ {topic=informar_email}

+ não
- Jóia! Quando desejar definir a senha é só chamar.
^ {topic=random}

+ *
- Responda <b>sim</b> ou <b>não</b>

< topic 

// Loop que espera por um email válido
> topic informar_email

+ *
* <call>otp "{'chatbot':'bot de teste','email':'<star>'}"</call> != undefined =>
^ Me informe código de 4 dígitos enviado para <star>.<br/>
^ <set email=<star>> {topic=confirmar_otp}
- Não foi possível enviar o código de confirmação.

< topic

// Loop que espera pelo código OTP enviado por email
> topic confirmar_otp 

+ *
* <star> == <get otp> => {topic=informar_senha}{@_iniciar_pedir_senha_}
- Não é esse o código. Tente novamente ou digite <b>sair</b>...

< topic

// Loop que pergunta a senha a primeira vez
> topic informar_senha

+ _iniciar_pedir_senha_
- Ótimo! Por favor, informe a senha desejada...
^ #use_password_field
^ {topic=informar_senha}

+ *
- <set senha1=<get sb_last_password_value>>
^ <set senha2=undefined>
^ Agora informe a senha novamente para eu confirmar a mudança...
^ #use_password_field
^ {topic=confirmar_senha}

< topic

// Loop que pergunta a senha a segunda vez e confirma
> topic confirmar_senha

+ *
* <get senha1> != <get sb_last_password_value> => As senhas não conferem. Vamos recomeçar? {topic=continuar}
- <call>trocasenha "{'usuario':'<get email>','senha':'<get senha1>'}"</call>
^ {topic=random}

< topic

Atenção! Configuração do Rivescript

Como será preciso coletar um email informado pelo usuário, vá nas configurações do Motor Rivescript criado e retire o caractere ponto . da configuração de Caracteres removidos, deixando-a com o valor [,!?;:].

Uso de tópicos no Rivescript

O Rivescript permite organizar as regras em tópicos. Os tópicos viabilizam a criação de uma árvore de diálogos, recurso imprescindível para criar scripts de atendimento.

As perguntas no nível raiz do script fazem parte de um tópico padrão chamado random. Mas você pode criar tópicos colocando regras entre marcação inicial > topic nome_do_topico e a marcação final < topic. Para navegar para um tópico, use comando {topic=nome_do_topico} em uma resposta.

No script acima fazemos o uso dos tópicos para criação de loops que insistem na solicitação de uma informação até receber uma mensagem válida ou um comando de desistência.

Enviando dados para uma integração

Ao longo do script fazemos chamadas a APIs externas que são cadastradas no menu Integrações do chatbot. As chamadas são expressas através de macros do Rivescript com a sintaxe <call>, informando o nome da integração e um JSON com os dados necessários.

No exemplo abaixo temos o email do usuário guardado na variável email e temos a senha informada pelo usuário guardada na variável senha1, e a chamada da API ficou assim:

<call>trocasenha "{'usuario':'<get email>','senha':'<get senha1>'}"</call>

Atenção! O JSON montado nessa chamada é definido entre aspas duplas, e logo, utiliza aspas simples para delimitação dos campos e valores.

Recebendo dados de uma integração

No script acima, ao ser acionada a integração que gera o código de confirmação por email, a API retorna um JSON com o campo otp indicando o código esperado. Exemplo:

{
    "email": "fulano@a.com"
    "otp": "1234"
}

Por convenção, a plataforma Serprobots cria no Rivescript uma variável com cada campo do JSON retornado por uma api. Logo, temos a variável otp para fazermos a comparação com o valor digitado pelo usuário em seguida no script.