Criando um Chatbot com IBM Watson e Node.js — parte 1
Olá pessoal! A ideia deste artigo é mostrar como criar um chatbot utilizando os serviços do IBM Watson com Node.js.
Para não ficar muito grande e confuso dividirei o artigo em duas partes: a primeira mostrando como criar a API, que será responsável por fazer a comunicação entre o Watson e o usuário, e a segunda parte será sobre montar o front do nosso chat com HTML, CSS e JS. Espero que gostem.
Caso não conheçam a API de Conversation do Watson, recomendo que leiam este artigo Desenvolvendo Chatbots com Watson Conversation da Stéfany Mazon, onde ela explica muito bem de como funciona esta API.
Recentemente a API de Conversation foi renomeada para Assistant, porém isso não interfere em nada no andamento deste artigo.
Pré Requisitos
- Conhecimento básico em Node.js
- Fluxo de diálogo cadastrado no Serviço de Conversation do Watson
Setup inicial do projeto
Para montarmos nossa API, iremos utilizar três pacotes do NPM:
1-Express
Que será utilizado para montarmos nosso servidor HTTP e manipular as requisições do usuário.
2-Watson APIs Node.js SDK
Que é a biblioteca responsável por acessar os serviços do IBM Watson utilizando Node.js.
3-Body Parser
Para fazer o parse do corpo das requisições.
Agora que já sabemos quais pacotes iremos utilizar, podemos criar nosso projeto e instalar nossos pacotes .
No seu terminal execute:
mkdir chatbot-api
cd chatbot-api
npm init
npm install --save express watson-developer-cloud body-parser
Pronto, temos todas as nossas dependências. Let’s code!!
Criando o servidor
Dentro da pasta do projeto, vamos criar o arquivo app.js, nele vamos configurar o nosso servidor e uma rota que será responsável por capturar a mensagem do usuário.
Ok, agora que temos nossa aplicação, podemos ver ela em ação, vá até sua linha de comando e execute node app.js
após isso acesse seu browser na url http://localhost:3000/conversation/mensagem para ver se está tudo conforme o esperado.
Esse é o básico da nossa API, o intuito dela é pegar a mensagem que o usuário enviar e mandá-la para o Watson, assim que o Watson tiver alguma resposta a retornamos para o usuário.
Credenciais
Antes de finalizarmos a API precisamos pegar as credenciais de serviço no IBM Cloud, que serão responsáveis por fazer a autenticação do nossa aplicação com o serviço da IBM.
Na página de serviços existentes https://console.bluemix.net/developer/watson/existing-services selecione o serviço do Conversation.
Dentro do módulo de Credenciais de Serviço você terá seu usuário e senha, anote-os pois iremos usá-los em breve.
Na tela de Workspaces, você precisará do ID do workspace que está configurado o diálogo do seu bot.
Pronto, agora com todas as chaves anotadas podemos finalizar nossa API.
Finalizando a API
Pronto, temos tudo que é fundamental para terminar nossa API.
Lembre-se de trocar as string entre
<>
pelo seu respectivo valor
Vamos importar a nossa biblioteca e configurá-la
const AssistantV1 = require('watson-developer-cloud/assistant/v1');
...
const assistant = new AssistantV1({
username: '<username>',
password: '<password>',
url: 'https://gateway.watsonplatform.net/assistant/api/',
version: '2018-02-16',
});
Após isso, dentro da nossa rota, precisamos enviar a mensagem que será recebida para o Watson e retornar a resposta para o usuário.
Só um detalhe, o Watson trabalha com contexto para localizar qual o estado de cada conversa, então é necessário que você passe pra ele o contexto específico de cada conversa durante as requisições.
Emtão, precisamos alterar o tipo de requisição para post para conseguir passar todas as informações no corpo da requisição.
...
app.post('/conversation/', (req, res) => {
const { text, context = {} } = req.body; const params = {
input: { text },
workspace_id: '<workspace_id>',
context,
};assistant.message(params, (err, response) => {
if (err) res.status(500).json(err);
res.json(response);
});
});
...
Nosso arquivo final irá ficar assim:
Agora basta reiniciar nosso servidor e enviar uma requisição via post para http://localhost:3000/conversation/ com um JSON neste formato:
{
"message": "Olá",
"context" : {
}
}
Em menos de 40 linhas, temos uma API que irá utilizar de todo o poder do Watson Convesation. Agora podemos nos preocupar em construir uma interface que faça a comunicação entre o usuário e o Watson.
Conclusão
Como vocês podem ver, não tem muito segredo para começar a usar o Watson. Você pode ter um grande poder na sua mão com poucas linhas de código.
No próximo artigo irei montar um chat simples que demonstrará a comunicação do usuário com a API, além disso, vamos adicionar um outro serviço do Watson, que transforma texto em voz, para termos um chat mais completo.
Caso queiram brincar com a API, disponibilizei ela no meu GitHub https://github.com/Leocardoso94/watson-sample-chatbot
E é isso por hoje pessoal, espero que tenham gostado.
Caso queiram trocar uma ideia sobre Watson ou qualquer outra coisa, podem me chamar no Twitter @Leocardoso94_ ficarei feliz em responder.
Abraços!