El canal de línea directa de un bot es una manera agradable de decir que estás utilizando la API REST de tu bot y es aquí en donde me voy a enfocar este artículo.
Habilitando el canal de Línea Directa
Lo primero que debes hacer es tener un bot ya publicado, podrás hacerlo al seguir el tutorial de este artículo.
Prueba en tu pestaña de Probar en Web Chat tu bot y confirma que lo que estés haciendo funcione bien.
Una vez publicado el bot, comienza por habilitar el canal de Línea Directa.
Ya habilitado el canal entonces puedes extraer la clave de acceso del bot que será algo que necesites para poder acceder al mismo desde cualquier lado.
Hablando con un bot desde una Aplicación de Windows
Con la clave de acceso ahora si, podremos crear una aplicación, escogí WPF solo por ser la primera opción que me llegó a la mente, esencialmente puedes hacer lo mismo con una UWP o incluso Xamarin. Solo basta colocar los controles necesarios para habilitar la conversación. Para ello, quizá lo mejor es hacer algo como en esta imagen. (Puedes dar clic sobre la imagen para ver mayor detalle).
Con los controles visuales creados, es momento de agregar el paquete de NuGet que te hará la vida mucho más sencilla, yo suelo en lo general recomendar que si tienes posibilidad de acceder vía REST lo hagas de esa manera para evitar agregar componentes de terceros, en este caso si vale muy bien la pena pues hacerlo sin el paquete de NuGet implica muchísimo tiempo invertido, muchos conceptos y agregar demasiada funcionalidad sin haber tanto caso.
En fin, después de esta explicación, agrega el paguete NuGet de Línea Directa para Bots en tu proyecto.
Con el paquete agregado puedes comenzar por agregar un manejador de eventos para tu botón y ahí empezar por lo siguiente.
private async void btnSend_Click(object sender, RoutedEventArgs e) { await StartBotConversation(txtInput.Text); lstConversation.Items.Add(String.Format("Yo: {0}", txtInput.Text)); string botResponse = await ReadBotMessagesAsync(); lstConversation.Items.Add(String.Format("Bot: {0}", botResponse)); } |
Como verás. el bot se encarga de iniciar la conversación, escribir el texto en el control de la lista, recibir la respuesta y mostrarla. Para empezar, puedes trabajar con el método que inicia la conversación.
private async Task StartBotConversation(string desiredMessage) { DirectLineClient client = new DirectLineClient(directLineSecret); var conversation = await client.Conversations.StartConversationAsync(); conversationId = conversation.ConversationId; Activity userMessage = new Activity { From = new ChannelAccount(fromUser), Text = desiredMessage, Type = ActivityTypes.Message }; await client.Conversations.PostActivityAsync(conversation.ConversationId, userMessage); } |
Y luego, está el método que recibe los mensajes de respuesta.
private async Task<string> ReadBotMessagesAsync() { DirectLineClient client = new DirectLineClient(directLineSecret); string watermark = null; var activitySet = await client.Conversations.GetActivitiesAsync(conversationId, watermark); watermark = activitySet?.Watermark; var activities = from x in activitySet.Activities where x.From.Id == botId select x; string botResponse = string.Empty; foreach (Activity activity in activities) { botResponse = activity.Text; } return botResponse; } |
Lo único que necesitas es agregar cuatro variables globales al inicio de la clase para poder acceder por medio de los canales establecidos.
private string directLineSecret = "<<identificador de línea directa>>"; private string botId = "DirectBot"; private string fromUser = "usuarioWPF"; private string conversationId = string.Empty; |
Conclusión
Como puedes ver, es sumamente fácil de implementar una aplicación que se apoye en un bot para trabajar de manera más accesible, ya sea una aplicación móvil, un sitio web o lo que se te ocurra, de esta manera no solo podrás usar los canales establecidos sino que podrás hacerlo desde cualquier medio que se te ocurra.
Si quieres ver el código completo de la aplicación hecha en este artículo puedes descargarlo desde aquí.