Ir para o conteúdo

Trilha Avançada

Um chatbot que entrega arquivos

Nesse tutorial vamos construir um chatbot onde o usuário irá informar sua identificação e uma integração será acionada e indicará para o usuário os arquivos que ele poderá baixar.

O caminho-feliz do fluxo de conversa seria:

  • Usuário: oi!
  • Chatbot: Olá! Quer consultar seus débitos?
  • Usuário: sim
  • Chatbot: Certo! Por favor, me informe o seu email...
  • Usuário: joao123@a.com
  • Chatbot: Aqui estão os debitos para o usuário joao123@a.com:
  • Chatbot: [Caixa de download do arquivo1.pdf]
  • Chatbot: [Caixa de download do arquivo2.pdf]

Crie um Motor Rivescript no chatbot com o seguinte script:

+ *
- Olá! Quer consultar seus débitos? {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 consultar é só chamar.
^ {topic=random}

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

< topic 

// Loop que espera pelo email do usuário e consulta débitos
> topic informar_email

+ *
- <call>consultar_debitos "{'usuario':'<star>'}"</call>
^ {topic=random}

< topic

A macro consultar_debitos irá acionar a Integração de mesmo nome que irá enviar para um endpoint o JSON informando a identficicação do usuário.

Da forma como foi programado, espera-se que essa integração retorne uma resposta do tipo texto. Essa resposta poderá conter comandos #file para referenciar os diversos arquivos que poderão ser baixados pelo usuário da conversa. Veja um exemplo abaixo de um endpoint que faz isso feito em Python como Flask:

@app.route('/debitos', methods=['POST'])
def debitos():    

    obj = request.get_json()
    usuario = obj['usuario']     

    mensagem = f"""
        Aqui estão os débitos para o usuário {usuario}:
        #file|public|https://site.com/relatorios/1234567890.pdf|arquivo1.pdf
        #file|public|https://site.com/relatorios/2345678901.pdf|arquivo2.pdf        
    """

    return make_response(mensagem)

Em um exemplo real, provavelmente seria feita uma consulta em banco de dados para indicar quais os arquivos débitos pertinentes ao usuário, assim a resposta textual seria montada dinamicamente imprimindo diversas vezes o comando #file ao longo do texto, uma vez para cada arquivo necessário.

Envio de arquivos para o usuário

O serviço exemplificado acima, coloca no texto da sua resposta vários comandos #file|public apontando para endereços públicos de arquivos que o usuário poderá baixar na conversa.

Caso o sistema externo não queria trabalhar com arquivos públicos, ele também pode utilizar a API de envio de arquivos, fazendo upload dos arquivos de forma segura e utilizando comandos do tipo #file|chatbot para referenciar esses arquivos. Saiba mais no tutorial de envio de arquivos.