Radiografía de un Bot

Como mencionamos antes volvemos al concepto de qué es un Bot.

Un Bot es una App que dialoga utilizando texto, gráficos (imágenes), o voz.

image

¿Cómo trabaja?

Cada interacción entre un Bot y el Usuario genera una ACTIVIDAD.
El servicio de Bot envía información entre la aplicación Bot conectada del usuario (Skype, Face, Slack, etc), y el Bot.

image

¿De qué forma utiliza un Bot el objeto ACTIVIDAD para comunicarse con sus usuarios?

En el siguiente gráfico podemos ver las actividades que son intercambiadas en un Bot simple.

activity diagram

En este gráfico tenemos dos tipos de actividades: Conversation update Y Message.
El BFS (Bot Framework Service) puede enviar un CU (Conversation Update) cuando el usuario ingresa a la conversación.
La actividad MSG (Message) carga la información de conversación entre ambas partes.
El objeto TC (Turn Context), provee información de la actividad tales como quién la envía y quién la recibe, por qué canal y otro tipo de datos necesarios para procesar la actividad.

La pila de procesamiento de actividad.

En el siguiente ejemplo, el Bot (1) contesta la actividad MSG con otra actividad MSG conteniendo el mismo mensaje de texto.
El procesamiento comienza con un HTTP Post (2) con la actividad MSG a través de un JSON  precargado, esta actividad llega al servidor web. (3)   (En c# esto puede ser un proyecto ASP.NET).
La actividad es llevada como JSON en el cuerpo del HTTP Post. Este JSON es convertido en el objeto Actividad que es entregado al Adapter (componente del SDK), con una indicación de utilizar método “Process Activity” (4).
El Adapter (5), crea un objeto Turn Context y llama a los componentes del Middleware  y la lógica de la aplicación para enviar las actividades de respuesta.
El TC (6), … provee los métodos de respuesta a una actividad de : enviar, actualizar y borrar actividad
Cada método de respuesta corre en un proceso asíncrono.

image

Radiografía de un Bot (Estructura)

Paciente: Código de ejemploe EchoBotWithCounter C# or JS.
La lógica principal está almacenada en la clase EchoWithCounterBot, derivado de la Interfaz IBot. IBot define un sólo método OnTurnAsync (método que debe estar implementado en su aplicación – imagen brindada a continuación).
El método OnTurnAsync contiene el objeto TurnContext que como mencionamos antes provee la información de la actividad ingresante.
Lo primero que realizamos es corroborar que la actividad tiene un mensaje del emisor, en caso de serlo, obtenemos el ConversationState del objeto, incrementamos el contador de Turn. y luego enviamos un mensaje de regreso utilizando la llamada a SendActivityAsync.

image

Los demás archivos

    1. Método ConfigureServices : Carga los servicios contectados del archivo .bot. Atrapa cualquier error ocurrido durante la conversación y los almacena. Crea un objeto Conversation State para almacenar los datos de la conversación en memoria. Finaliza la configuración de su aplicación especificando que la aplicación utilizará el Bot Framework y otros archivos.
    1. Contiene una clase simple que nuestro bot utiliza para mantener el estado actual. Sólo contiene un integer que utilizamos para incrementar el contador.
    1. El Bot utiliza el accessor para mantenter los datos de conversación. El constructor del mismo es pasado en un objeto conversación que es creado en el archivo Startup.cs.
    1. Este archivo contiene información del endpoint, app ID, contraseña y referencia a servicios que serán utilizados por el Bot. (Ver emulador)

Detalles HTTP

Las Actividades llegan al BFS por HTTP Post. El Bot contesta con 200 HTTP.  Las actividades  del Bot al canal son enviadas en un HTTP Post por separado, el cual es aceptado con un 200 HTTP.
El protocolo no especifica el orden en el cual son realizadas estas interacciones.

Leave a Reply

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

I’m Ivana

I’m a Technology Advocate who is living proof that Technology changes lives. I started my career with Microsoft from my small city (Salta), in Argentina. Now I train people and teams globally in the powerful international language of Tech. I inspire people from all walks of life to become world citizens and “geeks” like me who dream big and achieve amazing things. As a proud woman in Tech, content creator and public speaker I love travelling, connect and create magic moments of transformation; and I learn from everyone I meet. When I am not on the road, I am home with my husband and two dogs. My adventurous spirit in my work life is echoed in my love for Disney movies like Moana and Lilo & Stitch. Who knows “how far I’ll go” on my journey, but I know the power of Technology can get me there!

Let’s connect