Saltar al contenido
Menú
El blog de Kañaz
  • Inicio
  • Acerca de
  • Github
  • Youtube
  • LinkedIn
  • Twitter
El blog de Kañaz

Serie Bots y DevOps: Parte 2 Manejo de diálogos en tu bot y despliegue automático en Azure

Publicada el 25 mayo, 201825 mayo, 2018
Twittear

Esta es la segunda parte de una serie de artículos destinados a mostrar el despliegue y publicación automáticos de un bot por medio integración continua y notificar los cambios en Microsoft Teams.

Si deseas ver el índice completo de esta serie puedes hacerlo aquí.

El desarrollo del bot

Después de haber configurado tu entorno de desarrollo puedes abrir el proyecto que descargaste en el .ZIP y abrirlo en Visual Studio. El resultado de abrir este proyecto es lo siguiente.

Como puedes ver a diferencia de tu proyecto ya he agregado dos nuevos diálogos (SecondDialog y ThirdDialog), el bot únicamente cambia de diálogo entre conversaciones y nada más, así que lo puedes hacer de la siguiente manera.

EchoDialog

public async Task StartAsync(IDialogContext context)
{
context.PostAsync("Estás ahora en el diálogo principal");
context.Wait(MessageReceivedAsync);
}
 
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var activity = context.Activity as Activity;
var userMessage = activity.Text;
 
switch (userMessage)
{
case "dialogo 2":
context.Call(new SecondDialog(), CallBack);
break;
case "dialogo 3":
context.Call(new ThirdDialog(), CallBack);
break;
default:
break;
}
}
 
private async Task CallBack(IDialogContext context, IAwaitable<object> result)
{
context.Done("");
}

public async Task StartAsync(IDialogContext context) { context.PostAsync("Estás ahora en el diálogo principal"); context.Wait(MessageReceivedAsync); } public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) { var activity = context.Activity as Activity; var userMessage = activity.Text; switch (userMessage) { case "dialogo 2": context.Call(new SecondDialog(), CallBack); break; case "dialogo 3": context.Call(new ThirdDialog(), CallBack); break; default: break; } } private async Task CallBack(IDialogContext context, IAwaitable<object> result) { context.Done(""); }

SecondDialog

public Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
context.PostAsync("Estás ahora en el diálogo dos");
return Task.CompletedTask;
}
 
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var activity = context.Activity as Activity;
var userMessage = activity.Text;
 
switch (userMessage)
{
case "echo":
context.Call(new EchoDialog(), CallBack);
break;
case "dialogo 3":
context.Call(new ThirdDialog(), CallBack);
break;
default:
break;
}
}
 
private async Task CallBack(IDialogContext context, IAwaitable<object> result)
{
context.Done("");
}

public Task StartAsync(IDialogContext context) { context.Wait(MessageReceivedAsync); context.PostAsync("Estás ahora en el diálogo dos"); return Task.CompletedTask; } public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) { var activity = context.Activity as Activity; var userMessage = activity.Text; switch (userMessage) { case "echo": context.Call(new EchoDialog(), CallBack); break; case "dialogo 3": context.Call(new ThirdDialog(), CallBack); break; default: break; } } private async Task CallBack(IDialogContext context, IAwaitable<object> result) { context.Done(""); }

ThirdDialog

public Task StartAsync(IDialogContext context)
{
context.Wait(MessageReceivedAsync);
context.PostAsync("Estás ahora en el diálogo tres");
return Task.CompletedTask;
}
 
public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
{
var activity = context.Activity as Activity;
var userMessage = activity.Text;
 
switch (userMessage)
{
case "dialogo 2":
context.Call(new SecondDialog(), CallBack);
break;
case "echo":
context.Call(new EchoDialog(), CallBack);
break;
default:
break;
}
}
 
private async Task CallBack(IDialogContext context, IAwaitable<object> result)
{
context.Done("");
}

public Task StartAsync(IDialogContext context) { context.Wait(MessageReceivedAsync); context.PostAsync("Estás ahora en el diálogo tres"); return Task.CompletedTask; } public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument) { var activity = context.Activity as Activity; var userMessage = activity.Text; switch (userMessage) { case "dialogo 2": context.Call(new SecondDialog(), CallBack); break; case "echo": context.Call(new EchoDialog(), CallBack); break; default: break; } } private async Task CallBack(IDialogContext context, IAwaitable<object> result) { context.Done(""); }

Con estos diálogos el resultado sería algo como esto.

Ahora viene lo mejor, solo debes hacer push de tus cambios a GitHub. Puedes hacerlo de las mil maneras posibles, mi favorita en Windows es usando GitHub Desktop. De cualquier manera que lo pienses hacer, el resultado lo verás en el sitio de GitHub.

Así como la nueva compilación en el portal de Azure, en la categoría de integración continua de tu bot.

Cuando el ícono de la compilación se cambié y deje de cargar solo basta que te muevas a la categoría de «Probar en chat web» de tu bot para ver que ahora hace lo mismo.

Esto es completamente bello ¿no? Ahora no deberás hacer el proceso de actualización de versión y publicación de tu bot como procesos aislados lo que te ahorrará un enorme monto de tiempo y mejor aún te permitirá llevar control de tus avances. ¡¡¡Esto es integración continua!!!

Solo bastará ver en la tercera parte como publicar cada actualización y nueva versión de manera automática en Microsoft Teams. Nos vemos en el siguiente artículo.

Deja una respuesta Cancelar la respuesta

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

Busca en este sitio

MI perfil de Github

Github profile

Sígueme en Twitter

Seguir a @aminespinoza
©2023 El blog de Kañaz | Funciona con SuperbThemes y WordPress