Crear Bots con NodeJS en 5 Sencillos pasos! 🤖

Juan David Nicholls
My Bots Latam
Published in
7 min readAug 13, 2018
Make it Simple! ツ

La mayoría del tiempo nos encontramos con muchos interrogantes cuando iniciamos un nuevo desarrollo, entre ellos puede ser como empezar nuestros proyectos y lo más importante, de cómo organizarlos para que podamos mantenerlos en el tiempo ⏳ (Con el fin de que cuando crezcan no sea solo Dios quien recuerde el código que se hizo 👀)

¿Todo el código se encuentra en un archivo? 😱

Esto generalmente suele suceder porque nos enfocamos en salir con algo ágil y bonito, para lograr de esta manera obtener el visto bueno del proyecto al mostrarle al cliente, y dejar para más adelante la organización del mismo para seguir “impresionando” a los clientes con los rápidos avances 🔜. Dando como resultado la toma de malas decisiones como “vamos refactorizando el código a medida que se van resolviendo cada uno de los problemas “técnicos” que se presenten”, todo esto por no organizarnos bien desde el principio…

Como cuando funcionaba bien pero solo al principio… 😥

Pero no debería ser así, deberíamos centrarnos solo en el código para agregar nuevas funcionalidades, en extender en vez de refactorizar todo nuevamente! Porque como dicen, “No hay como el orden para enseñar a ganar tiempo” — Anónimo.

Por lo tanto, la idea a continuación es visualizar todo lo que necesitamos para empezar a crear bots de una forma organizada desde el principio, organizando nuestro puesto de trabajo y más importante, nuestro código!

Entonces, qué necesito?

  1. Descargar el template (Don’t repeat yourself) 🙏🏻
  2. Crear el servicio del Bot ⛅
  3. Probar el Bot 👋
  4. Personalizar el Bot 🧠
  5. Integrar otros servicios 📈

Manos a la obra!

Es hora de empezar a hacerlo bien desde el principio 😉

1. Descargar MyBot 🤖

La idea es no empezar desde 0 en cada proyecto, y para no reinventar la rueda, qué mejor que un sencillo pero bonito template para escalar nuestras apps fácilmente? 🤔

MyBot (Express + Swagger + Multi-Language)

Con MyBot tienes todo lo necesario para arrancar, puedes integrarlo fácilmente a un proyecto existente con Express o es perfecto para iniciar uno nuevo! 😳

MyBot se basa en el template del express generator, por lo que te va a resultar muy cómodo trabajar teniendo una buena separación de las rutas respecto a otras funcionalidades de tu aplicación.

Solo tienes que bajar el código desde aquí o puedes entrar al repositorio y descargarlo tú mismo, Just do it! ✔️

Solo hazlo por ahora, paso por paso! 🤓

2. Crear el Servicio desde Azure ⛅

Si no has tenido experiencia de volar por las nubes, es hora de hacerlo! 🛫

La Nube es toda una Aventura! 🌅

Azure es la nube de Microsoft, una PaaS que tiene integración hoy en día con muchos servicios interesantes, tanto de tecnologías Microsoft como de otras Open Source, y gracias a todas las contribuciones de la comunidad han mejorado la manera como trabajaban en Microsoft hace mucho tiempo atrás, ya cuentan hasta con un Sistema Operativo basado en Linux con Azure Sphere 😲.

Azure cuenta con muchos servicios gratuitos, por lo cual podemos comenzar a usarlos sin problemas y luego podemos escalarlos a medida que el negocio lo vaya requiriendo sin tenernos que preocupar por toda la infraestructura necesaria para garantizar una alta disponibilidad de nuestras aplicaciones.

Creando un Web App Bot desde Azure

Crear el servicio es muy fácil, tan solo debemos seguir unos cuantos pasos:

  1. Iniciar sesión en el portal de Azure.
  2. Crear un Web App Bot (Inicialmente puedes seleccionar la tarifa gratuita).
  3. Adicionalmente podemos cambiar la configuración del App Service de nuestro bot, y una opción que sé que les gustará, es el Centro de implementación, nos permite conectar nuestro repositorio en Git con nuestro servicio para tener toda una solución de Entrega continua.
Centro de implementación para Entrega Continua

3. Probar el Bot 👋

Ok, ya tenemos todo listo para probar nuestro bot. Tan solo debemos de modificar los valores de configuración de MyBot del archivo bot/conf.json para conectarnos a nuestro servicio:

Configuración de MyBot

Estos valores de configuración se pueden encontrar desde el servicio en Azure, en la parte de Configuración del App Service.

Configuración de la aplicación desde Azure

En este punto ya podemos probar localmente nuestro bot utilizando el Bot Framework Emulator, disponible para Linux, Mac y Windows gracias a Electron 🙌

Para iniciar nuestra aplicación debemos de tener instalado NodeJS y ejecutar los siguientes comandos desde la terminal:

  • Instalar las dependencias vía npm
npm install
npm start
Recuerda ejecutar el comando “npm start” para arrancar tu bot

Como recomendación en este paso puedes mover el código de tu bot a un repositorio Git, ya sea utilizando algún servicio cloud conocido como GitHub, Bitbucket, Microsoft Team Services o ya una solución On-Premise como puede ser GitLab. De esta manera, si realizaste el paso previo de configurar el Centro de implementación de tu App Service con un repositorio, podrás publicar los cambios de tu bot automáticamente, esto nos permitirá ser más eficientes y poder probar nuestro bot con los cambios más recientes desde el Portal Web de Azure, o desde el canal donde se encuentre publicado (Skype, Slack, Messenger, Microsoft Teams, Web, etc).

Publicación del Bot desde el Portal Web de Azure

4. Personalizar el Bot 🧠

La idea de hacer bots es que sean aplicaciones inteligentes que cuenten al menos con la capacidad de reconocer las intenciones de nuestros usuarios y brindarles información adecuada a sus necesidades. Por lo tanto hoy en día se han creado diversas soluciones de Inteligencia Artificial que logren resolver este problema. Por su parte, Microsoft nos ofrece su solución de Servicios Cognitivos para comprender e interpretar estas necesidades mediante una comunicación natural con los usuarios.

Aquí puedes visualizar una lista detallada los servicios que ofrece la API de Servicios Cognitivos, entre ellos podemos encontrar LUIS, un servicio para el procesamiento del lenguaje, que mediante Machine Learning, aplica aprendizaje automático por medio de una conversación textual con nuestros usuarios.

Inicialmente podemos empezar a definir un Modelo de lenguaje natural mediante una lista de Intenciones que la aplicación podrá reconocer, para posteriormente llevar a cabo una acción específica.

Creando nuevas intenciones con LUIS

Y desde el código podemos definir diálogos de conversación, como algo tan simple como devolver un saludo 🖖

bot.dialog('/greeting', (session) => {
return session.send('Hello human!')
}).triggerAction({ matches: 'Greeting' })

Luego de este simple saludo de respuesta te preguntarás como puedes extraer información de los usuarios, y para eso puedes definir Entidades, las cuales básicamente nos servirán para reconocer los tipos de datos en la solicitud de nuestros usuarios mediante el uso de expresiones.

De esta manera podemos obtener el valor suministrado por el usuario, como en este ejemplo el nombre de la película:

bot.dialog('MovieTickets.Book', [
(session, args, next) => {
var intent = args.intent;
var title = builder.EntityRecognizer.findEntity(intent.entities, 'MovieTickets.MovieTitle');
var movie = {
title: title ? title.entity : ''
};
session.endDialog(`La película es ${movie.title}`);
}
]).triggerAction({ matches: 'MovieTickets.Book' })

Como puedes observar en el ejemplo anterior, los diálogos de conversación pueden tener un flujo de pasos separados en un arreglo, en donde en este caso estamos obteniendo la información de la película mediante la entidad que más se ajusta a esa intención y respondiendo el nombre de la película seleccionada en un mismo paso, adicionalmente podríamos tener los pasos que sean necesarios para mantener una conversación con nuestros usuarios y solicitarles información adicional que sea requerida por el negocio.

5. Integrar otros servicios 📈

Este es el punto donde nos damos cuenta lo interesante de elegir una tecnología como NodeJS.

Paquetes de npm son publicados cada minuto… Just kidding! 😂

Gracias al crecimiento que ha tenido la comunidad en todos estos años y más después de la formación de la NodeJS Foundation, es raro encontrar un proveedor de servicios en Internet que no cuente con su paquete ya en npm, el administrador de paquetes de NodeJS. Por lo tanto, podemos usar servicios de terceros como los de IBM Watson para implementar más funcionalidades y mejorar nuestros bots aprovechando lo mejor que nos puede ofrecer cada plataforma.

Si se diera el caso de que no existe el paquete desde npm, siempre puedes consumir esos servicios mediante el uso de requests http dado que la mayoría de soluciones ofrecen APIs REST para ser consumidos bajo demanda.

Si te gustaría profundizar más sobre este tema (IBM Watson Machine Learning, TensorFlow, Azure Machine Learning, etc) déjamelo saber en los comentarios de este post, y según la acogida del mismo se pueda llevar a cabo. 👍

Espero que les haya sido de utilidad, si te gustó te invito a que lo compartas y por qué no, a darle una estrellita al repositorio en Github 😊

Recursos adicionales

  1. Explorando Azure Bot Service
  2. My first Multi-Language Bot

Agradecimientos

Gracias al TI Capacitación por sus excelentes Diplomados sobre tecnologías Microsoft y por el entrenamiento brindado sobre Bots con Bot Framework! 👏

--

--