Creando Un Bot con Bot Framework

Si has estado al tanto de las conferencias para desarrolladores de los gigantes de la industría de la tecnología como Microsoft, Google, Facebook y Apple, uno de los temas que fue constante, al menos para los primeros 3, fué el de los Bot y Machine Learning. No cabe duda que dado el gran volumen de información que estamos generando todos los usuarios conectados al Internet, los datos se estan convirtiendo en un producto de gran valor para cualquier organización. Por supuesto el valor de estos datos radica en como poder procesarlos en volúmenes masivos y generar inteligencia y aprendizaje de los mismos. Muchos ya estan llamando a este momento como el surgimiento de la cuarta revolución industrial, la era de los “dispositivos inteligentes” y bueno es una situación que nosotros los desarrolladores ya podemos hacer realidad a través de las tecnologías que tenemos disponibles.


Un bot , no es la excepción, básicamente consiste en el concepto de crear una agentes autónomo con el cual podamos entablar una conversación para solicitar algún tipo de requerimiento o servicio. Hemos visto como los asistentes personales como Cortana de Microsoft, Siri de Apple o Google Now de Google, permiten tener interacciones utilizando lenguaje natural para realizar tareas por medio de estos asistentes, un bot busca precisamente hacer realidad este tipo de interacciones.


Microsoft Bot Framework

Microsoft ha hecho una gran apuesta con la estrategia de “conversation as a platform” anunciada en Build, parte de ello fue anunciar en esta conferencia la disponibilidad en preview del Microsoft Bot Framework.


En este post aprenderemos que se requiere para poder crear un bot y haremos nuestro primer ejercicio al estilo Hello World Smile.


¿Cómo inicio?

image


El primer paso es dirigirte al sitio https://dev.botframework.com/ , aquí encontrarás toda la información relevante para poder iniciar el desarrollo de tu primer Bot.


¿Qué es el Bot Framework?


lo primero que debemos comprender es cuáles son los elementos que conforman el Bot Framework

bot_framework_wht_bgrnd


  • Bot Connector: El Bot Connector te permitirá integrar el Bot que desarrollaste a plataformas como Skype, Slack, Facebook, etc.  Básicamente aquí puedes hacer la operación de registrar tu Bot, conectarlo y publicarlo para que pueda ser utilizado.
  • Bot Builder SDK: Estos son los SDKs disponibles para que puedas comenzar a desarrollar tu primer Bot. Actualmente los SDKs estan disponibles para crear Bots usando Node.js y C#. Un punto muy importante a recalcar es que estos SDKs son Open Source y estan disponibles en GitHub
  • Bot Directory: Este será un directorio para poder descubrir y probar los bots hechos por nosotros los devs y que han sido puestos a disposición del público en general. Esta parte todavía esta en construcción.



Creando Mi primer Bot – Hello World Bot


Iniciaremos este ejercicio haciendo uso del Bot Framework Connector, a continuación describiré los pasos que debes seguir para poder crear tu primer Bot.


El Bot Framework Connector es un servicio de comunicación que nos permite conectar nuestro Bot con diferentes canales de comunicación (Slack, skype, telegram, sms, etc). Cuando creamos nuestro Bot será a través del Bot Connector que enviaremos y recibiremos mensajes con el usuario.


bot_connector_diagram


Para utilizar el Bot Framework Connector se debe tener:


  • Una cuenta Microsoft (Hotmail, Live o Outlook.com) para registrarse en el portal para desarrolladores del Bot Framework (https://dev.botframework.com/)
  • Un endpoint REST publicado en Azure
  • Una cuenta de desarrollo en uno o más servicios de comunicación (como Facebook) desde donde nos comunicaremos con nuestro Bot.


Paso No 1:  ¿Qué herramientas necesito?

Para iniciar la construcción de tu primer Bot es requerido contar con las siguientes herramientas:

  • Visual Studio 2015 (El último Update es el más recomendado), debes asegurarte de tener actualizadas las extensiones y updates disponibles
  • Descargar e instalar la plantilla para crear una Bot Application en Visual Studio, la cual la encuentras aquí http://aka.ms/bf-bc-vstemplate ,  una vez descargado este archivo debes copiarlo en la siguiente carpeta: “%USERPROFILE%\Documents\Visual Studio 2015\Templates\ProjectTemplates\Visual C#"
  • Descargar e instalar el Bot Framework Emulator, el cual lo encuentras aquí https://aka.ms/bf-bc-emulator


Para este post, asumiré que ya tienes instalado Visual Studio 2015 y aplicado el último update.


Paso 2:  Creando Mi Primero Proyecto de Bot en Visual Studio 2015

Una vez descargada y copiada la plantilla para crear un Bot Application en Visual Studio, al crear un nuevo proyecto “File –> New Project” tendras disponible la plantilla “Bot Application”

image


Asignamos el Nombre y carpeta donde queremos crear el proyecto y pulsamos el boton “OK”.


Esta plantilla básicamente creará un nuevo proyecto en visual studio basado en ASP.NET Web API,  recuerda que lo que requiere el Bot Connector es que exista un REST Endpoint a través del cual se enviará y recibirá información desde el cliente hacia el Bot y Vice versa.

image

Es importante observar las referencias del proyecto nuevo creado:

image


Paso 3: ¿Donde esta la lógica del Bot? y ¿Donde hago la programación?

La lógica del bot será expuesta en el controlador  MessagesController.cs,  específicamente veamos el código del método Post del controlador:


image


Vemos como este método toma el parámetro message, el cuál representa el mensaje enviado desde el usuario hacia el bot y luego ya en la lógica del mismo, se verifica si efectivamente estamos recibiendo un mensaje de parte del usuario y si es afirmativo retornamos al usuario un mensaje que cuenta la cantidad de caracteres enviados.


Vamos a cambiar el mensaje de respuesta a lo siguiente:  $” Usted envió {length} caracteres” (nota: ver que aquí utilizamos la funcionalidad de String Interpolation de C#)

image


Paso 4: Probando Mi Bot con el Bot Framework Emulator

Una forma sencilla de poder utilizar el Bot que acabamos de crear es haciendo uso del Bot Framework Emulator, a través de esta herramienta tendremos la capacidad de interactura con el bot.


Primero ejecutaremos nuestro Bot desde Visual Studio, para esto elegimos la opción de Ejecutar y podemos elegir “Microsoft Edge” o su navegador default para arrancarlo:

image


Al ejecutarse el proyecto veremos una página en el navegador con la siguiente información:

image


Ahora podemos iniciar el Bot Framework Emulator,  es importante notar que el mismo ya apunta a la dirección del Endpoint que estamos ejecutando desde nuestro proyecto en el puerto 3978


image


al ingresar nuestro primer mensaje vemos como el Bot responde con el mensaje que modificamos en el controlador:

image


Como se podrán dar cuenta en esta primera interacción accedimos al endpoint enviando el mensaje “Hola Bot” y al procesarse esta solicitud el Bot me respondió con la cantidad de caracteres que enviamos en el mensaje.

Veán que la respuesta enviada por el endpoint hacia el emulador es en formato JSON.


Si se dan cuenta ya hemos creado un primer Bot que tiene la capacidad de procesar información en base a un mensaje enviado, claro este ejemplo es muy básico, pero sirve para dar un punto de partida.


Paso 5: Aprovechando el manejo de sesion del Bot Connector


Una particularidad muy interesante disponible en el Bot Connector es la capacidad de poder manejar estado. En este caso haremos uso del método SetBotPerUserInConversationData () , el cual nos permitirá almacenar información de la sesión del usuario con nuestro Bot y el método GetBotPerUserInConversationData () el cual nos permitirá obtener la información almacenada en la sesión.

Cambiaremos nuestro códig del metodo Post al siguiente:

image


En este caso veremos como al momento de ejecutar nuestro Bot, si tenemos varias sesiones interactuando con el servicio cada una poseera la capacidad de almacenar el estado de la variable “contador”.


Para verlo funcionar pueden iniciar otra instancia de su emulador (serán 2 para este ejemplo) y al ir interactuando con su Bot podrán ver que cada una de las conexiones maneja individualmente la persistencia de la información de su sesión:

image


De aquí en adelante pueden ustedes ir jugando con su Bot básico inicial para ir viendo como se comporta.


Bonus Points

Si eres curioso y te pusiste a evaluar más el código generado por la plantilla que utilizamos, te daras cuenta que dentro de la clase MessageController existe un método HandleSystemMessage y que dentro de este método se pueden identificar diferentes tipos de mensajes para nuestro Bot.


Hay algunos canales a los que conectamos nuestro Bot que tienen la capacidad de enviar un mensaje cuando nuestro Bot ha sido agregado a una conversación. Si el canal tiene esta característica entonces se podrá recibir un mensaje de tipo “BotAddedToConversation”, en cuyo caso podriamos agregar una lógica de código para dar un mensaje de bienvenida a nuestro usuario.


Para este ejemplo, utilizare el siguiente código:

image


Y para ver el resultado al momento de iniciar nuestro emulador debemos asegurarnos de elegir la Opción “Bot Added To Conversation” y dar click al boton Send, así veremos como nuestro Bot nos da un mensaje de bienvenida:

image


En la siguiente entrega aprenderemos cómo podemos publicar nuestro Bot en Azure y cómo podemos conectarlo a un Canal a través del Bot Framework Connector.


Espero te haya sido de mucha utilidad este post  y cualquier consulta pueden hacerla en los comments del post.


El código de ejemplo pueden encontrarlo en mi usuario de GitHub https://github.com/carloslone/BotDemo


Carlos A. Lone

@carloslonegt

5 Comments

  • Buenos días,
    Interesante articulo teno la siguiente inquietud:
    Uno puede simular con un bot acceder e insertar datos a una aplicación interna. se puede con este framework y podrias ilustrar un ejemplo.
    Gracias.

  • Me gusta la manera simple pero al mismo tiempo bien detallada de como enseña. gracias

  • @Erwing en las siguientes entregas iremos hablando un poco acerca de esto, pero en definitivamente recuerda que una vez dentro del controlador tienes claro lo que el usuario esta solicitando alli puedes incluir codigo tradicional de .net para conectarte a una bd y recuperar o almacenar datos.

    @oscar Muchas gracias eso me motiva a continuar con más posts :)

  • Interesante contenido, pero, por que se debe tener un endpoint REST publicado en Azure??? No sirve mi servidor IIS???

  • Hola, estoy intentando correrlo con Visual Studio 2013 y Net Framework 4.6 y me sale error en esta linea

    CreateReplyMessage($"{++contador} Usted dijo: { message.Text}");

    Dice que el termino de la expresion " no es valido y que caracter $ no esperado.

Add a Comment

As it will appear on the website

Not displayed

Your website