5. Integrazione del servizio Azure Bot5. Integrating Azure Bot Service

In questa esercitazione apprenderai come usare il servizio Azure Bot nell'applicazione demo HoloLens 2 per aggiungere Language Understanding (LUIS), consentendo al bot di assistere l'utente durante la ricerca di oggetti tracciati.In this tutorial, you will learn how to use Azure Bot Service in the HoloLens 2 demo application to add Language Understanding (LUIS) and letting the Bot assist the user when searching for Tracked Objects. Si tratta di un'esercitazione in due parti, in cui nella prima parte creerai il bot tramite Bot Composer come soluzione senza codice e avrai una rapida descrizione della funzione di Azure che fornisce al bot i dati necessari.This is a two part tutorial where in the first part you create the Bot with the Bot Composer as a code free solution and take a quick look in the Azure Function that feeds the Bot with the needed data. Nella seconda parte userai BotManager (script) nel progetto Unity per utilizzare il servizio Bot ospitato.In the second part you use the BotManager (script) in the Unity project to consume the hosted Bot Service.

ObiettiviObjectives

Parte 1Part 1

  • Apprendere le nozioni di base relative al servizio Azure BotLearn the basics about Azure Bot Service
  • Apprendere come usare Bot Composer per creare un botLearn how to use the Bot Composer to create a Bot
  • Apprendere come usare una funzione di Azure per fornire dati dall'archivio di AzureLearn how to use an Azure Function to provide data from the Azure Storage

Parte 2Part 2

  • Apprendere come impostare la scena per l'uso del servizio Azure Bot in questo progettoLearn how to setup the scene to use Azure Bot Service in this project
  • Apprendere come impostare e trovare oggetti tramite conversazione con il botLearn how to set and find objects via conversing with the Bot

Informazioni sul servizio Azure BotUnderstanding Azure Bot Service

Il servizio Azure Bot consente agli sviluppatori di creare bot intelligenti in grado di avere una conversazione naturale con gli utenti grazie a LUIS.The Azure Bot Service empowers developers to create intelligent bots that can maintain natural conversation with users thanks to LUIS. Un bot conversazionale è un ottimo mezzo per espandere i modi in cui un utente può interagire con l'applicazione.A conversational Bot is a great way to expand the ways a user can interact with your application. Un bot può infatti fungere da knowledge base con QnA Maker per gestire una conversazione complessa con le potenzialità di Language Understanding (LUIS).A Bot can act as a knowledge base with a QnA Maker to maintaining sophisticated conversation with the power of Language Understanding (LUIS).

Scopri di più sul servizio Azure Bot.Learn more about Azure Bot Service.

Parte 1 - Creazione del botPart 1 - Creating the Bot

Prima di poter usare il bot nell'applicazione Unity, è necessario svilupparlo, fornirgli i dati e ospitarlo in Azure.Before you can use the bot in the Unity application, you need to develope it, provide it with data and host it on Azure. L'obiettivo del bot è quello di poter indicare quanti oggetti tracciati sono archiviati nel database, trovare un oggetto tracciato in base al nome e fornire all'utente alcune informazioni di base relative a tale oggetto.The goal of the bot is to have the abilities to tell how many Tracked Objects are stored in the database, find a Tracked Object by its name, and tell the user some basic information about it.

Rapida descrizione della funzione di Azure relativa agli oggetti tracciatiA quick look into Tracked Objects Azure Function

Stai per iniziare a creare il bot, ma per renderlo utile devi assegnargli una risorsa da cui possa eseguire il pull dei dati.You are about to start creating the Bot, but to make it useful you need to give it a resource from which it can pull data. Poiché il bot sarà in grado di contare il numero di oggetti tracciati, trovare oggetti specifici in base al nome e fornirne i dettagli, userai una semplice funzione di Azure che ha accesso all'archivio tabelle di Azure.Since the Bot will be able to count the amount of Tracked Objects, find specific ones by name and tell details, you will use a simple Azure Function that has access to the Azure Table storage.

Scaricare il progetto della funzione di Azure Tracked Objects: AzureFunction_TrackedObjectsService.zip ed estrarlo nel disco rigido.Download the Tracked Objects Azure Function project: AzureFunction_TrackedObjectsService.zip and extract it to your hard drive.

Questa funzione di Azure dispone di due azioni, Count e Find, che possono essere richiamate tramite chiamate GET HTTP di base.This Azure Function has two actions, Count and Find which can be invoked via basic HTTP GET calls. Puoi esaminare il codice in Visual Studio.You can inspect the code in Visual Studio.

Scopri di più sulle funzioni di Azure.Learn more about Azure Functions.

La funzione Count esegue una query nell'archivio tabelle per recuperare tutti i TrackedObject dalla tabella: un concetto molto semplice.The Count function queries from the Table storage all TrackedObjects from the table, very simple. Dall'altra parte, la funzione Find accetta un parametro di query name dalla richiesta GET, esegue una query nell'archivio tabelle per trovare un TrackedObject corrispondente e restituisce un DTO come JSON.On the other hand the Find function takes a name query parameter from the GET request and queries the Table storage for a matching TrackedObject and returns a DTO as JSON.

Puoi distribuire questa funzione di Azure direttamente da Visual Studio.You can deploy this Azure Function directly from Visual Studio. Fai clic sul collegamento per accedere a tutte le informazioni relative alla distribuzione di una funzione di Azure.Find here all information regarding Azure Function deployment.

Una volta completata la distribuzione, nel portale di Azure apri la risorsa corrispondente e fai clic su Configurazione all'interno della sezione Impostazioni.Once you have completed the deployment, in the Azure Portal, open the corresponding resource and click on Configuration which is under the Settings section. In Impostazioni applicazione devi fornire la stringa di connessione all'archivio di Azure in cui si trovano gli oggetti tracciati.There on Application Settings you need to provide the Connection string to the Azure Storage where the Tracked Objects are stored. Fai clic su Nuova impostazione applicazione, quindi come nome usa AzureStorageConnectionString e come valore fornisci la stringa di connessione corretta.Click on New Application setting and use for name: AzureStorageConnectionString and for value provide the correct Connection string. Fai quindi clic su Salva. La funzione di Azure è ora pronta a servire il bot che creerai più avanti.After that click on Save and the Azure Function is ready to server the Bot which you will create next.

Creazione di un bot conversazionaleCreating a conversation Bot

Esistono diversi modi per sviluppare un bot conversazionale basato su Bot Framework.There are several ways to develope a Bot Framework based conversational bot. In questa lezione userai l'applicazione desktop Bot Framework Composer, ovvero una finestra di progettazione visiva ideale per lo sviluppo rapido.In this lesson you will use the Bot Framework Composer desktop application which is a visual designer that is perfect for rapid development.

Puoi scaricare le versioni più recenti dal repository di GitHub.You can download the latest releases from the Github repository. È disponibile per Windows, Mac e Linux.It is available for Windows, Mac, and Linux.

Dopo aver installato Bot Framework Composer, avvia l'applicazione. Verrà visualizzata l'interfaccia seguente:Once the Bot Framework Composer is installed, start the application and you should see this interface:

Home di Bot Framework Composer

È stato preparato un progetto per la creazione di bot che fornisce le finestre di dialogo e i trigger necessari per questa esercitazione.We have prepared a bot composer project which provides the needed dialogues and triggers for this tutorial. Scaricare il progetto di Bot Framework Composer: BotComposerProject_TrackedObjectsBot.zip ed estrarlo nel disco rigido.Download the Bot Framework Composer project: BotComposerProject_TrackedObjectsBot.zip and extract it to your hard drive.

Sulla barra superiore fai clic su Open (Apri) e seleziona il progetto Bot Framework scaricato, che è denominato TrackedObjectsBot.On the top bar click on Open and select the Bot Framework project you have downloaded which is named TrackedObjectsBot. Dopo che il progetto viene caricato completamente, dovresti vedere che è pronto.After the project is fully loaded, you should see the project ready.

Bot Framework Composer con il progetto TrackedObjectsBot aperto

Guardando il lato sinistro, puoi vedere il pannello delle finestre di dialogo.Let's focus on the left side where you can see the Dialogs Panel. In tale area è presente una finestra di dialogo denominata TrackedObjectsBot, sotto il cui nome sono visibili diversi trigger.There you have one dialog named TrackedObjectsBot under which you can see several Triggers.

Scopri di più sui concetti relativi a Bot Framework.Learn more about Bot Framework concepts.

Questi trigger eseguono le operazioni descritte di seguito.These triggers do the following:

Greeting (Messaggio introduttivo)Greeting

Questo è il punto di ingresso del chat bot ogni volta che un utente avvia una conversazione.This is the entry point of the chat bot when ever a user initiates a conversation.

Trigger di finestra di dialogo Greeting del progetto TrackedObjectsBot

AskingForCountAskingForCount

Questa finestra di dialogo viene attivata quando l'utente chiede di contare tutti gli oggetti tracciati.This dialog is triggered when the user asks for counting all Tracked Objects. Le frasi trigger sono le seguenti:These are the trigger phrases:

  • count me all (conta tutto)count me all
  • how many are stored (quanti sono archiviati)how many are stored

Trigger di finestra di dialogo AskForCount del progetto TrackedObjectsBot

Grazie a LUIS, non è necessario che l'utente esprima le frasi esattamente come farebbe in una conversazione naturale.Thanks to LUIS the user does not have to ask the phrases in that exact way which allows a natural conversation for the user.

In questa finestra di dialogo il bot comunicherà anche con la funzione Count di Azure, per la quale più avanti sono disponibili altre informazioni.In this dialog the bot will also talk to the Count Azure Function, more about that later.

Unknown Intent (Finalità sconosciuta)Unknown Intent

Questa finestra di dialogo viene attivata se l'input dell'utente non si adatta ad altre condizioni di trigger e risponde chiedendo all'utente di provare a riformulare la domanda.This dialogue is triggered if the input from the user does not fit any other trigger condition and responses the user with trying his question again.

Trigger di finestra di dialogo Unknown Intent del progetto TrackedObjectsBot

FindEntityFindEntity

L'ultima finestra di dialogo è più complessa perché correlata alla creazione di rami e all'archiviazione dei dati nella memoria bots.The last dialogue is more complex with branching and storing data in the bots memory. Chiede all'utente il nome dell'oggetto tracciato per cui vuole ottenere altre informazioni, esegue una query per la funzione Find di Azure e usa la risposta per procedere con la conversazione.It asks the user for the name of the Tracked Object it want's to know more information about, performs a query to the Find Azure Function, and uses the response to proceed with the conversation.

Trigger di finestra di dialogo FindEntity del progetto TrackedObjectsBot

Se l'oggetto tracciato non viene trovato, l'utente viene informato e la conversazione termina.If the Tracked Object is not found, the user is informed and the conversation ends. Quando l'oggetto tracciato in questione viene trovato, vengono verificate e segnalate le proprietà disponibili.When the Tracked Object in question is found, the boot will check what properties are available and report on them.

Adattamento del botAdapting the Bot

I trigger AskingForCount e FindEntity devono comunicare con il back-end, pertanto devi aggiungere l'URL corretto della funzione di Azure distribuita in precedenza.The AskingForCount and FindEntity trigger need to talk to the backend, this means you have to add the correct URL of the Azure Function you deployed previously.

Nel pannello delle finestre di dialogo fai clic su AskingForCount e individua l'azione Send an HTTP request (Invia una richiesta HTTP). Qui puoi vedere il campo URL in cui è necessario specificare l'URL corretto per l'endpoint della funzione Count.On the dialog panel click on AskingForCount and locate the Send an HTTP request action, here you can see the field URL which you need to change the correct URL for the Count function endpoint.

Configurazione dell'endpoint del trigger di finestra di dialogo AskingForCount del progetto TrackedObjectsBot

Cerca infine il trigger FindEntity e individua l'azione Send an HTTP request (Invia una richiesta HTTP), quindi nel campo URL sostituisci l'URL corrente con l'endpoint della funzione Find.Finally, look for the FindEntity trigger and locate the Send an HTTP request action, in the URL field change the URL to the Find function endpoint.

Configurazione dell'endpoint del trigger di finestra di dialogo FindEntity del progetto TrackedObjectsBot

Con tutti gli elementi impostati, ora sei pronto per distribuire il bot.With everything set you are now ready to deploy the Bot. Poiché Bot Framework Composer è installato, puoi pubblicare il bot direttamente da tale posizione.Since you have Bot Framework composer installed, you can publish it directly from there.

Scopri di più su come pubblicare un bot da Bot Composer.Learn more about Publish a bot from Bot Composer.

Suggerimento

Se vuoi, puoi provare a usare il bot aggiungendo frasi trigger diverse, nuove risposte o altri rami di conversazione.Feel free playing around with Bot by adding more trigger phrases, new responses or conversation branching.

Parte 2 - Integrazione di tutti gli elementi in UnityPart 2 - Putting everything together in Unity

Preparazione della scenaPreparing the scene

Nella finestra Project (Progetto) passa alla cartella Assets (Asset) > MRTK.Tutorials.AzureCloudServices > Prefabs (Prefab) > Manager.In the Project window, navigate to Assets > MRTK.Tutorials.AzureCloudServices > Prefabs > Manager folder.

Finestra Project di Unity con il prefab ChatBotManager selezionato

Da questa posizione, sposta il prefab ChatBotManager nella gerarchia della scena.From there move the prefab ChatBotManager into the scene Hierarchy.

Una volta aggiunto ChatBotManager alla scena, fai clic sul componente Chat Bot Manager (Manager chat bot).Once you add the ChatBotManager to the scene, click on the Chat Bot Manager component. Nella finestra Inspector (Controllo) noterai che è presente un campo Direct Line Secret Key (Chiave privata Direct Line) vuoto da completare.In the Inspector you will see that there is an empty Direct Line Secret Key field which you need to fill out.

Suggerimento

Puoi recuperare la chiave privata dal portale di Azure cercando la risorsa di tipo Registrazione canali bot creata nella prima parte di questa esercitazione.You can retrieve the secret key from the Azure portal by looking for the resource of type Bot Channels Registration you have created in the first part of this tutorial.

Unity con il nuovo prefab ChatBotManager aggiunto ancora selezionato

A questo punto connetterai l'oggetto ChatBotManager al componente ChatBotController collegato all'oggetto ChatBotPanel.Now you will connect the ChatBotManager object with the ChatBotController component that is attached to the ChatBotPanel object. In Hierarchy (Gerarchia) seleziona ChatBotPanel per visualizzare un campo Chat Bot Manager (Manager chat bot) vuoto. Dalla gerarchia trascina l'oggetto ChatBotManager nel campo Chat Bot Manager (Manager chat bot) vuoto.In the Hierarchy select the ChatBotPanel and you will see an empty Chat Bot Manager field, drag from the Hierarchy the ChatBotManager object into the empty Chat Bot Manager field.

Unity con ChatBotPanel configurato

A questo punto, è necessario un modo per aprire ChatBotPanel affinché l'utente possa interagire con esso.Next you need a way to open the ChatBotPanel so that the user can interact with it. Nella finestra della scena è possibile che tu abbia notato la presenza di un pulsante laterale Chat Bot nell'oggetto MainMenu. Sarà necessario usarlo per risolvere il problema.From the Scene window you may have noticed that there is a Chat Bot side button on the MainMenu object, you will use it to solve this problem.

In Hierarchy (Gerarchia) individua RootMenu > MainMenu > SideButtonCollection > ButtonChatBot, quindi in Inspector (Controllo) individua lo script ButtonConfigHelper.In the Hierarchy locate RootMenu > MainMenu > SideButtonCollection > ButtonChatBot and locate in the Inspector the ButtonConfigHelper script. Qui vedrai uno slot vuoto nel callback dell'evento OnClick() .There you will see an empty slot on the OnClick() event callback. Trascina e rilascia ChatBotPanel nello slot dell'evento, dall'elenco a discesa passa a GameObject, quindi scegli SetActive (bool) nel sottomenu e abilita la casella di controllo.Drag and drop the ChatBotPanel to the event slot, from the dropdown list navigate GameObject, then select in the sub menu SetActive (bool) and enable the checkbox.

Unity con ButtonChatBot configurato

Ora il chat bot è visibile dal menu principale e la scena è pronta per l'uso.Now the chat bot can be stared from the main menu and with that the scene is ready for use.

Esecuzione di un test con il botPutting the bot to a test

Chiedere il numero di oggetti tracciatiAsking about the quantity of tracked objects

Esegui il test innanzitutto chiedendo al bot quanti oggetti tracciati sono archiviati nel database.First you test asking the bot how many Tracked Objects are stored in the database.

Nota

Questa volta è necessario eseguire l'applicazione da HoloLens 2 perché i servizi come la sintesi vocale potrebbero non essere disponibili nel sistema.This time you must run the application from the HoloLens 2 because services like text-to-speech may not be available on your system.

Esegui l'applicazione in HoloLens 2 e fai clic sul pulsante Chat Bot accanto al menu principale.Run the application on your HoloLens 2 and click on the Chat Bot button next to the main menu. Il bot visualizzerà il messaggio introduttivo. A questo punto chiedi di quanti oggetti disponi.The bot will be greeting you, now ask how many objects do we have? Il bot dovrebbe indicare il numero e terminare la conversazione.It should tell you the quantity and end the conversation.

Chiedere informazioni relative a un oggetto tracciatoAsking about a tracked object

Ora esegui di nuovo l'applicazione e questa volta chiedi di trovare un oggetto tracciato. Il bot ti chiederà il nome, quindi dovrai rispondere con il termine "car" (automobile) o con il nome di un altro oggetto tracciato sicuramente presente nel database.Now run the application again and this time ask find me a tracked object, the bot will be asking you the name to which you should respond with the "car" or the name of an other Tracked Object you know exists in the database. Il bot indicherà i dettagli, ad esempio la descrizione e l'eventuale assegnazione di un ancoraggio nello spazio.The bot will tell you details like description and if it has a spatial anchor assigned.

Suggerimento

Prova a chiedere di un oggetto tracciato inesistente e senti come risponde il bot.Try out asking for an Tracked Objects that does not exist and hear how the bot responds.

Lezione completataCongratulations

In questa esercitazione hai appreso come usare Azure Bot Framework per interagire con l'applicazione tramite conversazione nel linguaggio naturale.In this tutorial you learned how Azure Bot Framework can be used to interact with the application via conversation with natural language. Si è imparato come sviluppare il bot e quali sono i diversi elementi che gli consentono di funzionare.You learned how to develop your own bot and what all the moving pieces are to get it running,

ConclusioneConclusion

Nel corso di questa serie di esercitazioni hai sperimentato in che modo i servizi cloud di Azure hanno consentito di introdurre nuove e interessanti funzionalità nella tua applicazione.Through the course of this tutorial series you experienced how Azure Cloud services brought new and exciting features to your application. Ora puoi archiviare dati e immagini nel cloud con Archiviazione di Azure, usare Visione personalizzata di Azure per associare le immagini ed eseguire il training di un modello, riunire gli oggetti in un contesto locale con gli ancoraggi nello spazio di Azure e implementare Azure Bot Framework con tecnologia LUIS per aggiungere un bot conversazionale per un modello di interazione nuovo e naturale.You can now store data and images in the cloud with Azure Storage, use Azure Custom Vision to associate images and train a model, bring objects to a local context with Azure Spatial Anchors, and implement Azure Bot Framework powered by LUIS to add a conversational bot for a new and natural interaction pattern.