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.