Escrito por Leonardo Cardoso en Planeta Chatbot. 

¡Hola gente! La idea de este artículo es para mostrar cómo crear un chatbot utilizando los servicios de IBM Watson con Node.js .

Con el objetivo de no hacer muy tedioso el artículo, he decidido dividirlo en dos partes. La primera de ellas muestra cómo crear el API, qué será la parte encargada de realarizar la comunicación y el usuario. Y por otro lado, la parte en la que montaremos la conversación con HTML , CSS y JS. Dicho esto, espero que lo disfrutéis.

Si no sabes mucho sobre API Watson, te recomiendo que leas este artículo sobre el desarrollo de chabtots con Watson Conversation de

Stéfany Mazon

, en el que se explica muy bien cómo funciona esta herramienta.

Recientemente esta API ha cambiado el nombre a Assistant, pero eso no influye en ningún momento en el desarrollo de este artículo.

Tabla de contenidos

Requisitos previos

  • Conocimiento básico en Node.js
  • Flujo de diálogo registrado en el Servicio de Watson Conversation.

Configuración inicial del proyecto

Para montar nuestra API, vamos a utilizar dos paquetes de NPM:

1-Express

Que se utilizará para montar nuestro servidor HTTP y manipular las peticiones del usuario.

2-Watson SDK API Node.js

Que es la biblioteca responsable de tener acceso a los servicios de IBM Watson utilizando Node.js.

Ahora que ya sabemos qué paquetes vamos a utilizar, podemos crear nuestro proyecto e instalar nuestros paquetes.

Ejecuta en tu terminal lo siguiente:

mkdir chatbot-api  cd chatbot-api  npm init  npm install --save express watson-developer-cloud

Ahora sí, ya tenemos todo listo. Comencemos a programar!

Creación del servidor

En la carpeta del proyecto, vamos a crear el archivo app.js, en él vamos a configurar nuestro servidor y una ruta que será la responsable de capturar el mensaje del usuario.

const express = require('express');  const bodyParser = require('body-parser');    const app = express();  app.use(bodyParser.json());    const port = 3000;    app.get('/conversation/:text*?', (req, res) => {    const { text } = req.params;      res.json(text);  });    app.listen(port, () => console.log(`Running on port ${port}`));

Ok, ahora que tenemos nuestra aplicación, podemos verlo en acción, vamos a tu línea de comandos y ejecutar node app.js después de esa, visita en tu navegador la URL http://localhost: 3000/conversation/mensaje y comprueba que todo está como esperabas.

Este es el básico de nuestra API, su intención es recoger el mensaje que el usuario envía y enviarlo a Watson, por lo que Watson es quien tiene que tener una respuesta que devolverle al usuario.

Credenciales

Antes de finalizar la API necesitamos coger las credenciales de servicio en IBM Cloud, que serán las responsables de hacer la autenticación de nuestra aplicación con el servicio de IBM.

En la página servicios existentes

https://console.bluemix.net/developer/watson/existing-services seleccionar el servicio de conversación.

Dentro del módulo de Credenciales de Servicio tendrás tu usuario y contraseña, anótalos porque vamos a usarlos en breves.

En la pantalla de Workspaces, necesitarás el ID de área de trabajo que está configurado para el diálogo de tu bot.

Ahora con todas las claves anotadas podemos finalizar nuestra API.

Finalizar la API

Ahora sí, ya tenemos todo lo que es fundamental para terminar nuestra API.

Recuerda que debes cambiar la cadena de <>por su valor

Vamos a importar nuestra biblioteca y configurarla,

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',  });

Después de eso, dentro de nuestra ruta, necesitamos enviar el mensaje que será recibido a Watson y devolver la respuesta al usuario.

...  app.get('/conversation/:text*?', (req, res) => {   const { text } = req.params;     const params = {   input: { text },   workspace_id: '<workspace_id>',   };     assistant.message(params, (err, response) => {   if (err) res.status(500).json(err);     res.json(response);   });  });  ...

Nuestro archivo final se quedará así:

const AssistantV1 = require('watson-developer-cloud/assistant/v1');  const express = require('express');  const bodyParser = require('body-parser');    const app = express();    app.use(bodyParser.json());    const port = 3000;    const assistant = new AssistantV1({    username: '<username>',    password: '<password>',    url: 'https://gateway.watsonplatform.net/assistant/api/',    version: '2018-02-16',  });    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) {        console.error(err);        res.status(500).json(err);      } else {        res.json(response);      }    });  });    app.listen(port, () => console.log(`Running on port ${port}`));

Ahora, tras reiniciar nuestro servidor y acceder a la URL http: // localhost: 3000 /conversation/ verás la respuesta del Watson.

En menos de 30 líneas , tenemos una API que va a utilizar toda la potencia de Watson conversation. Ahora podemos preocuparnos por construir un sitio que una al usuario y a Watson.

Conclusión

Como puedes comprobar, no tiene mucho secreto empezar a usar Watson. De hecho, tienes en tu mano un gran potencial con tan solo unas líneas de código.

En el siguiente artículo voy a montar un chat simple que demostrará la comunicación del usuario con la API, además, vamos a añadir otro servicio de Watson, que transforma texto en voz, para tener un chat más completo.

Si quieres jugar con la API, está disponible en mi GitHub https://github.com/Leocardoso94/watson-sample-chatbot

Y esto es todo por hoy, espero que te haya gustado y hayas aprendido un poco más sobre los chatbots.

Si quieres intercambiar una idea acerca de Watson o cualquier otra cosa, escríbeme en Twitter @Leocardoso94_ estaré encantado de responder.

Abrazos!

Leave a Reply

Your email address will not be published. Required fields are marked *