Creando un Bot en Azure. Microsoft Bot Framework

En el primero de los artículos pudimos ver una introducción al tema. Ahora vamos a ver como empezar a «jugar» con nuestro primer chat bot.

Lo primero que hay que hacer es preparar el entorno, para ello se ha de bajar la plantilla de proyecto de tipo «bot application» y el emulador para poder realizar las pruebas.

Esto no lo voy a explicar en la entrada, ya hay mucha cosa escrita al respecto. Así que te voy a pedir que vayas un momento a esta dirección y sigas las instrucciones para crear un proyecto del tipo «hola mundo» y que acto seguido vuelvas aquí para continuar con lo nuestro.

¿Ya de vuelta? Bien, ahora que ya tienes un hola mundo listo y funcionando en el emulador, vamos a ver la estructura de un proyecto del tipo Bot.

Estructura básica de un proyecto bot

Esta es la estructura básica que se crea al crear un nuevo proyecto de tipo Bot:

solucion

Podemos ver que se crean algunos archivos a los que ya estaremos acostumbrados si hemos trabajado con proyectos web: Web.config que nos servirá para configurar algunos temas que ya veremos cuando despleguemos el bot, packages.config que se utiliza para gestionar los paquetes instalados en el proyecto, como siempre, nada que tocar aquí, y Global.asax que es el punto de entrada, también una página HTML que se cargará cuando arranquemos nuestro bot.

Finalmente, se puede ver que existe una carpeta de Controllers y otra de Dialogs.

Los controllers, al igual que un proyecto web MVC serán los puntos de entrada a partir de URL’s y se encargarán de procesar las solicitudes.

Los Dialogs son la herramienta que nos proporciona Microsoft Bot Framework para gestionar el flujo de una conversación.

Veamos el flujo que sigue el ejemplo que se crea en el caso base:

emulador

Lanzamos la ejecución del código en Visual Studio y se levanta la web que antes hemos comentado, el controller esta ahora a la espera de ser llamado mediante la URL. En el Emulador, indicamos la URL y escribimos algún mensaje. En ese momento es cuando entra en acción el controlador:

controller

En el ejemplo vemos que si el Activity  es del tipo mensaje, se llama al un «dialog» llamado RootDialog. Este «dialog» controlará el flujo de la conversación y navegación entre este y otros «dialogs». Un «activity» es el objeto básico de comunicación en Bot Framework entre el usuario y el bot y se utiliza para pasar información entre estos dos actores. El tipo de activity mas usado es el de mensaje, que básicamente es el que se usa cuando el usuario escribe algo, pero hay unos cuantos más, aunque no entrare en ellos ahora, se puede ampliar la información en la documentación de Bot Framework.

ciclo

Al ser llamado entra por «StartAsync» y espera a la respuesta de «MessageReceivedAsync«, que en el ejemplo calcula el número de caracteres de tu texto.

Hasta aquí hemos visto algunas cosas interesantes para entender como funciona un bot: el flujo básico que sigue el bot, las «Activity», los «Dialog» y que todo son llamadas asíncronas.

Del tema de la asincronia, como no tengo nada escrito en el blog dejo un par de enlaces para ampliar la lectura y a ver si me animo a escribir algo al respecto en el futuro.

https://docs.microsoft.com/en-us/dotnet/csharp/async

https://blog.stephencleary.com/2012/02/async-and-await.html

En GitHub he puesto un ejemplo donde se ven varios tipos de Dialogs y un flujo de conversación con el Bot:

https://github.com/DaniCCardenas/MyFirstChatBot

En próximas entradas veremos como publicar un bot y mas adelante como hacer que entienda un lenguaje natural con Luis.IO

¡Nos leemos!

 

Gracias por leerme. Últimamente le estoy dedicando mucho tiempo a generar contenido para Youtube y Twich. Te invito a que te pases por los canales y me sigas 🙂

2 comentarios en «Creando un Bot en Azure. Microsoft Bot Framework»

  1. Buenas tardes, es que quería saber si tiene algún link o usted sabe como puedo implementar el chat bot que tengo en azure a una pagina web

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *