Bot chat con Microsoft Bot Framework

codice

Programmare un bot chat con Microsoft Bot Framework

In questo articolo ti mostro come programmare un bot chat con Microsoft Bot Framework che recupera il feed RSS degli articoli presenti su ProgrammareInsieme utilizzando .net framework, C#, Visual Studio e il framework di Microsoft per creare bot; inoltre imparerai a creare un servizio bot su Microsoft Azure, quindi mettiti comodo davanti al tuo PC e iniziamo subito. chatbot italiano

Prima di tutto… cosa è un bot chat?

Un bot chat è fondamentalmente un software programmato per rispondere a domande su determinati argomenti, il suo utilizzo oggi lo si applica soprattutto nel supporto online alla vendita o tecnico, oppure nel settore dell’intrattenimento.

Un chat bot può essere “interrogato” in maniera testuale o vocale e fornire risposte via mail, chat o voce. E’ infatti possibile integrare nei bot chat funzionalità che permettono il riconoscimento naturale di frasi sia scritte che parlate.

 

Bot Framework e… bot chat

La prima cosa da fare ovviamente è creare un nuovo progetto in Visual Studio utilizzando l’apposito template Bot Builder che puoi trovare nella sezione Online quando crei un nuovo progetto, come illustrato in Fig.1:

 

bot chat fig.1
Fig.1

 

Dopo che Visual Studio avrà installato il template troverai lo stesso nella relativa tipologia di progetto Bot Framework, selezionalo e dai un nome al tuo progetto, come illustrato in Fig.2:

 

bot chat Fig.2
Fig.2

 

Ora che hai il progetto pronto in Visual Studio puoi procedere con la scrittura della logica da implementare; ti ricordo che il tuo chat bot deve essere in grado di ricevere richieste riguardo l’elenco degli articoli presenti in questo blog, l’utente scriverà una parola o una frase e il bot dovrà cercarle negli articoli e restituire quelli che soddisfano la richiesta.

Nel tuo progetto hai una classe RootDialog.cs già esistente,  devi aggiungere un riferimento al namespace System.ServiceModel.Syndication e modificare il metodo MessageReceivedAsync che è responsabile di ricevere i messaggi scritti dall’utente, elaborare le richieste e preparare e spedire i risultati:


using System;
using System.Threading.Tasks;
using Microsoft.Bot.Builder.Dialogs;
using Microsoft.Bot.Connector;
using System.ServiceModel.Syndication;
using System.Xml;
using System.Text;

namespace BotApp.Dialogs
{
   [Serializable]
   public class RootDialog : IDialog
   {
      public Task StartAsync(IDialogContext context)
      {
         context.Wait(MessageReceivedAsync);

         return Task.CompletedTask;
      }

      private async Task MessageReceivedAsync(IDialogContext context, IAwaitable result)
      {
         var activity = await result as Activity;

         string url = "https://programmareinsieme.com/?s=" + activity.Text + "feed=rss2";

         XmlReader reader = XmlReader.Create(url);
         SyndicationFeed feed = SyndicationFeed.Load(reader);
         reader.Close();

         StringBuilder sb = new StringBuilder();
         sb.Append("Ho trovato i seguenti articoli:");
         sb.AppendLine();
         sb.AppendLine();
         foreach (SyndicationItem item in feed.Items)
         {
            String subject = item.Title.Text;
            String summary = item.Summary.Text;

            sb.Append(subject);
            sb.AppendLine();
            sb.Append(summary);
            sb.AppendLine();
         }

         // Return our reply to the user
         await context.PostAsync(sb.ToString());

         context.Wait(MessageReceivedAsync);
      }
   }
}

Come puoi notare in quel metodo si trova la variabile activity che contiene il messaggio inviato dall’utente e ricevuto mediante il parametro IAwaitable<object> result; nel tuo caso, quindi, activity contiene le parole da cercare sul nostro blog.

Utilizziamo il nostro Feed RSS e andiamo quindi a passare un XmlReader a SyndicationFeed


string url = "https://programmareinsieme.com/?s=" + activity.Text + "feed=rss2";
XmlReader reader = XmlReader.Create(url); 
SyndicationFeed feed = SyndicationFeed.Load(reader);
reader.Close();

Il resto del codice usa uno StringBuilder e lo riempie praticamente con gli eventuali articoli che restituisce il SyndicationFeed.Load(reader).

Per il momento non devi fare altro che avviare il progetto e attendere che si apra una finestra nel tuo browser in cui apparirà un messaggio simile a °This is a simple echo bot sample using Microsoft Bot Framework…° che ti indicherà che il chat bot è in esecuzione e attende di essere consumato come un web service.

Nel caso in cui non dovesse apparirti questo messaggio oppure dovesse sollevarti una exception verifica che nel tuo web.config non ci siano valori impostati nel nodo AppSettings.

Bene, se invece tutto è ok puoi tranquillamente passare al test del tuo chat bot; Microsoft mette a disposizione un simulatore che ti permette di eseguire test, lo trovi qui, effettua il download e al termine avvialo, vai su File e cerca nel folder del tuo progetto il file NomeProgetto.bot come in Fig.3

 

chatbot italiano Fig.3
Fig.3

 

A questo punto si aprirà la sessione di chat in cui il simulatore si collega al tuo chat bot e puoi scrivere una parola o una frase che il bot cercherà tra gli articoli di ProgrammareInsieme.

Cerca ad  esempio tutti gli articoli che contengono la parola codice e premi invio.

Il chat bot, dopo qualche istante, ti fornirà l’elenco in formato XML (non ci interessa formattare l’output) degli articoli trovati, vedi Fig. 4.

 

 

ai chatbot Fig.4
Fig.4

 

Perfetto, il chat bot ora è funzionante!

 

E ora su Azure…

Passiamo ora allo step successivo, ossia pubblicare il bot su Azure anzichè tenerlo su IIS in locale. Per farlo devi ovviamente avere un account attivo su Azure.net, se non lo hai puoi crearne uno gratuito partendo da qui.

Dopo che avrai il tuo account puoi tornare a Visual Studio, cliccare con il tasto destro del mouse sul nome del tuo progetto nella Solution Explorer e selezionare, nella form in Fig.5, Servizio App e Crea nuova:

 

 

bot chat Fig.5
Fig.5

 

 

Successivamente compila il seguente modulo:

 

chatbot italiano bot ai Fig.6
Fig.6

 

Clicca su Crea e attendi che il tuo servizio di chat bot venga creato su Azure, al termine dell’operazione spostati nel dashboard di Azure.NET, qui ora dovrai registrare il bot con un channel quindi clicca su Crea una risorsa, nell’apposito campo cerca Bot Channels Registration e, alla sua comparsa nella lista dei risultati della ricerca, selezionalo.

Si aprirà il form in Fig. 7, compilalo con i tuoi dati relativamente a come hai chiamato il tuo bot, ti faccio solo notare che nel campo Endpoint di messaggistica dovrai inserire il nome dell’indirizzo del tuo chat bot pubblicato su Azure, nel mio esempio equivale a programmareinsieme.azurewebsite.net e devi aggiungere /api/messages ad esso.

Disattiva le Application Insights e clicca su Crea Nuovo ID app scegliendo di generare l’ID e la Password come in Fig. 8:

 

 

bot chat chatbot ai bot Fig.7
Fig.7

 

 

Ti raccomando di annotare a parte l’ID e la Password generati perchè a seguire dovrai inserirle in un’altra sezione.

 

 

chatbot ai bot Fig.8
Fig.8

 

Ora occorre aggiornare l’application settings con le chiavi MicrosoftAppId e MicrosoftAppPassword e i rispettivi valori che già possiedi; hai due modalità: puoi crearle dal sito di Azure cliccando su Servizi App nel dashboard e scorrendo nelle varie opzioni fino a trovare Impostazioni e, in quest’ultimo, Impostazioni dell’applicazione come indicato in Fig.9

 

bot chat Fig.9
Fig.9

 

 

oppure puoi farlo da Visual Studio modificando nel Web.config:


<appSettings>
   <add key="BotId" value="BotAppProgrammareInsieme"/>
   <add key="MicrosoftAppId" value="IltuoCodiceID"/>
   <add key="MicrosoftAppPassword" value="LaTuaPasswordGenerata"/>
</appSettings>

e effettuando nuovamente la pubblicazione come ti ho spiegato pochi step più su.

L’ultima cosa che devi fare ora è testare il tuo chat bot da Azure, quindi vai su Gruppo Risorse dal dashboard di Azure, apri la registrazione bot e sotto Gestione Bot seleziona Test Web Chat, digita una parola da cercare negli articoli di ProgrammareInsieme e goditi i risultati.

 

Conclusioni

Perfetto, finalmente siamo giunti al termine, ora sai come gestire la creazione e lo sviluppo di un chat bot quindi puoi tranquillamente aggiungere funzionalità e scegliere un altro canale Bot (Skype, email, ecc).

Se questo articolo ti è piaciuto puoi votarlo più in basso, inoltre, se ti interessa leggere qualche post riguardo elucubrazioni mentali su coesione e disaccoppiamento allora ti consiglio questo post su object oriented oppure un altro articolo se vuoi sapere come far parlare una ASP.NET Core Web API con Unity3D; se invece ti interessa programmare con l’Augmented Reality dai una occhiata a questo post in cui ti spiego come creare collisioni.
 


 
Acquista Hands-On Chatbots and Conversational UI Development: Build chatbots and voice user interfaces with Chatfuel, Dialogflow, Microsoft Bot Framework, Twilio, and Alexa Skills

 

🔥629 volte è stato letto questo articolo
Se ti è piaciuto questo articolo, lascia le tue stelle!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *