Criando um Chatbot com IBM Watson e Node.js — parte 1

Leonardo Cardoso
Training Center
Published in
4 min readApr 16, 2018

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

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!

--

--