MR und Azure 312: Bot-IntegrationMR and Azure 312: Bot integration

Hinweis

Die Tutorials der Mixed Reality Academy wurden im Hinblick auf HoloLens (1. Gen.) und immersive Mixed Reality-Headsets entworfen.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. Daher halten wir es für wichtig, diese Tutorials für Entwickler verfügbar zu halten, die noch nach Anleitung beim Entwickeln für diese Geräte suchen.As such, we feel it is important to leave these tutorials in place for developers who are still looking for guidance in developing for those devices. Diese Tutorials werden nicht mit den neuesten Toolsets oder Interaktionen aktualisiert, die für HoloLens 2 verwendet werden.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. Sie werden gewartet, um weiterhin auf den unterstützten Geräten zu funktionieren.They will be maintained to continue working on the supported devices. Es gibt eine neue Reihe von Tutorials, die in Zukunft veröffentlicht werden, um die Entwicklung für hololens 2 zu veranschaulichen.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. Dieser Hinweis wird mit einem Link zu diesen Tutorials aktualisiert, wenn diese veröffentlicht werden.This notice will be updated with a link to those tutorials when they are posted.

In diesem Kurs erfahren Sie, wie Sie mithilfe von Microsoft bot Framework V4 einen Bot erstellen und bereitstellen und über eine Windows Mixed Reality-Anwendung mit ihm kommunizieren.In this course, you will learn how to create and deploy a bot using the Microsoft Bot Framework V4 and communicate with it through a Windows Mixed Reality application.

Das Microsoft bot Framework V4 ist ein Satz von APIs, die Entwicklern die Tools zum Erstellen einer erweiterbaren und skalierbaren bot-Anwendung zur Verfügung stellen.The Microsoft Bot Framework V4 is a set of APIs designed to provide developers with the tools to build an extensible and scalable bot application. Weitere Informationen finden Sie auf der Microsoft bot Framework-Seite oder im V4-git-Repository.For more information, visit the Microsoft Bot Framework page or the V4 Git Repository.

Nachdem Sie diesen Kurs abgeschlossen haben, haben Sie eine Windows Mixed Reality-Anwendung erstellt, die Folgendes ausführen kann:After completing this course, you will have built a Windows Mixed Reality application, which will be able to do the following:

  1. Verwenden Sie eine Tap-Geste , um den bot zu starten, der die Benutzer Stimme abhört.Use a Tap Gesture to start the bot listening for the users voice.
  2. Wenn der Benutzer etwas gesagt hat, versucht der bot, eine Antwort bereitzustellen.When the user has said something, the bot will attempt to provide a response.
  3. Zeigen Sie die Bots-Antwort als Text an, der in der Nähe des bot in der Unity-Szene positioniert ist.Display the bots reply as text, positioned near the bot, in the Unity Scene.

In Ihrer Anwendung liegt es an Ihnen, wie Sie die Ergebnisse in Ihren Entwurf integrieren.In your application, it is up to you as to how you will integrate the results with your design. In diesem Kurs erfahren Sie, wie Sie einen Azure-Dienst in Ihr Unity-Projekt integrieren.This course is designed to teach you how to integrate an Azure Service with your Unity project. Es ist Ihre Aufgabe, das wissen, das Sie aus diesem Kursgewinnen, zu nutzen, um ihre gemischte Reality-Anwendung zu verbessern.It is your job to use the knowledge you gain from this course to enhance your mixed reality application.

GeräteunterstützungDevice support

KursCourse HoloLensHoloLens Immersive HeadsetsImmersive headsets
MR und Azure 312: Bot-IntegrationMR and Azure 312: Bot integration ✔️✔️ ✔️✔️

Hinweis

Dieser Kurs konzentriert sich in erster Linie auf hololens, aber Sie können auch das Erlernen, was Sie in diesem Kurs lernen, auf Windows Mixed Reality-(VR)-Headsets.While this course primarily focuses on HoloLens, you can also apply what you learn in this course to Windows Mixed Reality immersive (VR) headsets. Da immersive Headsets (VR) nicht über barrierefreie Kameras verfügen, benötigen Sie eine externe Kamera, die mit Ihrem PC verbunden ist.Because immersive (VR) headsets do not have accessible cameras, you will need an external camera connected to your PC. Wenn Sie den Kurs befolgen, finden Sie Hinweise zu allen Änderungen, die Sie möglicherweise für die Unterstützung von immersiven (VR)-Headsets verwenden müssen.As you follow along with the course, you will see notes on any changes you might need to employ to support immersive (VR) headsets.

VoraussetzungenPrerequisites

Hinweis

Dieses Tutorial richtet sich an Entwickler, die über grundlegende Kenntnisse in Unity und c# verfügen.This tutorial is designed for developers who have basic experience with Unity and C#. Beachten Sie auch, dass die Voraussetzungen und Anweisungen in diesem Dokument darstellen, was zum Zeitpunkt des Schreibens getestet und überprüft wurde (Juli 2018).Please also be aware that the prerequisites and written instructions within this document represent what has been tested and verified at the time of writing (July 2018). Sie können die neueste Software verwenden, die im Artikel Installieren der Tools aufgeführt ist. es sollte jedoch nicht davon ausgegangen werden, dass die Informationen in diesem Kurs genau mit den Informationen in neueren Software vergleichen, als im folgenden aufgeführt werden.You are free to use the latest software, as listed within the install the tools article, though it should not be assumed that the information in this course will perfectly match what you will find in newer software than what is listed below.

Für diesen Kurs empfehlen wir die folgende Hardware und Software:We recommend the following hardware and software for this course:

VorbereitungBefore you start

  1. Um Probleme zu vermeiden, die beim Erstellen dieses Projekts auftreten, wird dringend empfohlen, dass Sie das in diesem Tutorial erwähnte Projekt in einem Stamm Ordner oder in einem Ordner mit einem Stamm Ordner erstellen (lange Ordner Pfade können zur Buildzeit Probleme verursachen).To avoid encountering issues building this project, it is strongly suggested that you create the project mentioned in this tutorial in a root or near-root folder (long folder paths can cause issues at build-time).
  2. Richten Sie Ihre hololens ein, und testen Sie Sie.Set up and test your HoloLens. Wenn Sie Unterstützung für die Einrichtung ihrer hololens benötigen, besuchen Sie den Artikel zum Einrichten von hololens.If you need support setting up your HoloLens, make sure to visit the HoloLens setup article.
  3. Es empfiehlt sich, eine Kalibrierung und Sensor Optimierung durchzuführen, wenn Sie mit der Entwicklung einer neuen hololens-App beginnen (manchmal kann es hilfreich sein, diese Aufgaben für jeden Benutzer auszuführen).It is a good idea to perform Calibration and Sensor Tuning when beginning developing a new HoloLens app (sometimes it can help to perform those tasks for each user).

Hilfe zur Kalibrierung finden Sie unter diesem Link zum Artikel zur hololens-Kalibrierung.For help on Calibration, please follow this link to the HoloLens Calibration article.

Hilfe zur Sensor Optimierung finden Sie unter diesem Link zum Artikel zur Überwachung von hololens-Sensoren.For help on Sensor Tuning, please follow this link to the HoloLens Sensor Tuning article.

Kapitel 1 – Erstellen der bot-AnwendungChapter 1 – Create the Bot application

Der erste Schritt besteht darin, den bot als lokale Webanwendung ASP.net Core zu erstellen.The first step is to create your bot as a local ASP.Net Core Web application. Nachdem Sie den Vorgang abgeschlossen und getestet haben, veröffentlichen Sie ihn im Azure-Portal.Once you have finished and tested it, you will publish it to the Azure Portal.

  1. Öffnen Sie Visual Studio.Open Visual Studio. Erstellen Sie ein neues Projekt, wählen Sie ASP NET Core-Webanwendung als Projekttyp aus (Sie finden Sie im unter Abschnitt .net Core) und nennen Sie mybot.Create a new project, select ASP NET Core Web Application as the project type (you will find it under the subsection .NET Core) and call it MyBot. Klicken Sie auf OK.Click OK.

  2. Wählen Sie im angezeigten Fenster die Option leer aus.In the Window that will appear select Empty. Stellen Sie außerdem sicher, dass das Ziel auf ASP NET Core 2,0 festgelegt ist und die Authentifizierung auf keine Authentifizierung festgelegt ist.Also make sure the target is set to ASP NET Core 2.0 and the Authentication is set to No Authentication. Klicken Sie auf OK.Click OK.

    Erstellen der bot-Anwendung

  3. Die Projekt Mappe wird jetzt geöffnet.The solution will now open. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf Projekt Mappe mybot , und klicken Sie auf nuget-Pakete für Projekt Mappe verwalten.Right-click on Solution Mybot in the Solution Explorer and click on Manage NuGet Packages for Solution.

    Erstellen der bot-Anwendung

  4. Suchen Sie auf der Registerkarte Durchsuchen nach Microsoft. bot. Builder. Integration. Aspnet. Core (stellen Sie sicher, dass die Vorabversion aktiviert ist).In the Browse tab, search for Microsoft.Bot.Builder.Integration.AspNet.Core (make sure you have Include pre-release checked). Wählen Sie die Paketversion 4.0.1-Vorschau aus, und klicken Sie auf die Projekt Felder.Select the package version 4.0.1-preview, and tick the project boxes. Klicken Sie dann auf Installieren.Then click on Install. Sie haben nun die Bibliotheken installiert, die für bot Framework V4 benötigt werden.You have now installed the libraries needed for the Bot Framework v4. Schließen Sie die Seite "nuget".Close the NuGet page.

    Erstellen der bot-Anwendung

  5. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt mybot, und klicken Sie auf Klasse Hinzufügen | .Right-click on your Project, MyBot, in the Solution Explorer and click on Add | Class.

    Erstellen der bot-Anwendung

  6. Benennen Sie die Klasse mybot , und klicken Sie auf Hinzufügen.Name the class MyBot and click on Add.

    Erstellen der bot-Anwendung

  7. Wiederholen Sie den vorherigen Punkt, um eine weitere Klasse mit dem Namen " Kontexts" zu erstellenRepeat the previous point, to create another class named ConversationContext.

  8. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf wwwroot , und klicken Sie auf | Neues Element hinzufügen.Right-click on wwwroot in the Solution Explorer and click on Add | New Item. Wählen Sie HTML-Seite aus (Sie finden Sie im unter Abschnitt Web).Select HTML Page (you will find it under the subsection Web). Benennen Sie die Datei default.html.Name the file default.html. Klicken Sie auf Hinzufügen.Click Add.

    Erstellen der bot-Anwendung

  9. Die Liste der Klassen/Objekte in der Projektmappen-Explorer sollte wie in der folgenden Abbildung aussehen.The list of classes / objects in the Solution Explorer should look like the image below.

    Erstellen der bot-Anwendung

  10. Doppelklicken Sie auf die Klasse conversationcontext .Double-click on the ConversationContext class. Diese Klasse ist dafür verantwortlich, die Variablen beizubehalten, die vom bot verwendet werden, um den Konversations Kontext beizubehalten.This class is responsible for holding the variables used by the bot to maintain the context of the conversation. Diese Konversations Kontext Werte werden in einer Instanz dieser Klasse verwaltet, da jede Instanz der mybot -Klasse jedes Mal aktualisiert wird, wenn eine Aktivität empfangen wird.These conversation context values are maintained in an instance of this class, because any instance of the MyBot class will refresh each time an activity is received. Fügen Sie der-Klasse den folgenden Code hinzu:Add the following code to the class:

    namespace MyBot
    {
        public static class ConversationContext
        {
            internal static string userName;
    
            internal static string userMsg;
        }
    }
    
  11. Doppelklicken Sie auf die mybot -Klasse.Double-click on the MyBot class. Diese Klasse hostet die Handler, die von allen eingehenden Aktivitäten vom Kunden aufgerufen werden.This class will host the handlers called by any incoming activity from the customer. In dieser Klasse fügen Sie den Code hinzu, der verwendet wird, um die Konversation zwischen dem bot und dem Kunden zu erstellen.In this class you will add the code used to build the conversation between the bot and the customer. Wie bereits erwähnt, wird eine Instanz dieser Klasse jedes Mal initialisiert, wenn eine Aktivität empfangen wird.As mentioned earlier, an instance of this class is initialized each time an activity is received. Fügen Sie dieser Klasse den folgenden Code hinzu:Add the following code to this class:

    using Microsoft.Bot;
    using Microsoft.Bot.Builder;
    using Microsoft.Bot.Schema;
    using System.Threading.Tasks;
    
    namespace MyBot
    {
        public class MyBot : IBot
        {       
            public async Task OnTurn(ITurnContext context)
            {
                ConversationContext.userMsg = context.Activity.Text;
    
                if (context.Activity.Type is ActivityTypes.Message)
                {
                    if (string.IsNullOrEmpty(ConversationContext.userName))
                    {
                        ConversationContext.userName = ConversationContext.userMsg;
                        await context.SendActivity($"Hello {ConversationContext.userName}. Looks like today it is going to rain. \nLuckily I have umbrellas and waterproof jackets to sell!");
                    }
                    else
                    {
                        if (ConversationContext.userMsg.Contains("how much"))
                        {
                            if (ConversationContext.userMsg.Contains("umbrella")) await context.SendActivity($"Umbrellas are $13.");
                            else if (ConversationContext.userMsg.Contains("jacket")) await context.SendActivity($"Waterproof jackets are $30.");
                            else await context.SendActivity($"Umbrellas are $13. \nWaterproof jackets are $30.");
                        }
                        else if (ConversationContext.userMsg.Contains("color") || ConversationContext.userMsg.Contains("colour"))
                        {
                            await context.SendActivity($"Umbrellas are black. \nWaterproof jackets are yellow.");
                        }
                        else
                        {
                            await context.SendActivity($"Sorry {ConversationContext.userName}. I did not understand the question");
                        }
                    }
                }
                else
                {
    
                    ConversationContext.userMsg = string.Empty;
                    ConversationContext.userName = string.Empty;
                    await context.SendActivity($"Welcome! \nI am the Weather Shop Bot \nWhat is your name?");
                }
    
            }
        }
    }
    
  12. Doppelklicken Sie auf die Startup -Klasse.Double-click on the Startup class. Diese Klasse initialisiert den bot.This class will initialize the bot. Fügen Sie der-Klasse den folgenden Code hinzu:Add the following code to the class:

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Bot.Builder.BotFramework;
    using Microsoft.Bot.Builder.Integration.AspNet.Core;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    
    namespace MyBot
    {
    public class Startup
        {
            public IConfiguration Configuration { get; }
    
            public Startup(IHostingEnvironment env)
            {
                var builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                    .AddEnvironmentVariables();
                Configuration = builder.Build();
            }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddSingleton(_ => Configuration);
                services.AddBot<MyBot>(options =>
                {
                    options.CredentialProvider = new ConfigurationCredentialProvider(Configuration);
                });
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseDefaultFiles();
                app.UseStaticFiles();
                app.UseBotFramework();
            }
        }
    }
    
  13. Öffnen Sie die Programm Klassendatei, und überprüfen Sie, ob der Code darin identisch mit folgendem ist:Open the Program class file and verify the code in it is the same as the following:

    using Microsoft.AspNetCore;
    using Microsoft.AspNetCore.Hosting;
    
    namespace MyBot
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                BuildWebHost(args).Run();
            }
    
            public static IWebHost BuildWebHost(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>()
                    .Build();
        }
    }
    
  14. Denken Sie daran, die Änderungen zu speichern, und klicken Sie hierzu auf > der Symbolleiste oben in Visual Studio auf Datei Alle speichern.Remember to save your changes, to do so, go to File > Save All, from the toolbar at the top of Visual Studio.

Kapitel 2: Erstellen des Azure bot ServiceChapter 2 - Create the Azure Bot Service

Nachdem Sie den Code für den bot erstellt haben, müssen Sie ihn im Azure-Portal in einer Instanz des webapp -botdiensts veröffentlichen.Now that you have built the code for your bot, you have to publish it to an instance of the Web App Bot Service, on the Azure Portal. In diesem Kapitel erfahren Sie, wie Sie den bot-Dienst in Azure erstellen und konfigurieren und dann Ihren Code darauf veröffentlichen.This Chapter will show you how to create and configure the Bot Service on Azure and then publish your code to it.

  1. Melden Sie sich zunächst beim Azure-Portal an ( https://portal.azure.com) .First, log in to the Azure Portal (https://portal.azure.com).

    1. Wenn Sie noch nicht über ein Azure-Konto verfügen, müssen Sie eines erstellen.If you do not already have an Azure account, you will need to create one. Wenn Sie dieses Tutorial in einer Classroom-oder Lab-Situation befolgen, bitten Sie Ihren Dozenten oder einen der Proctors, Hilfe beim Einrichten Ihres neuen Kontos zu erhalten.If you are following this tutorial in a classroom or lab situation, ask your instructor or one of the proctors for help setting up your new account.
  2. Nachdem Sie angemeldet sind, klicken Sie in der oberen linken Ecke auf Ressource erstellen , suchen Sie nach Web-App-bot, und drücken Sie die EINGABETASTE.Once you are logged in, click on Create a resource in the top left corner, and search for Web App bot, and click Enter.

    Erstellen der Azure bot Service

  3. Auf der neuen Seite wird eine Beschreibung des Web-App -botdiensts bereitgestellt.The new page will provide a description of the Web App Bot Service. Klicken Sie unten links auf dieser Seite auf die Schaltfläche Erstellen , um eine Verknüpfung mit diesem Dienst zu erstellen.At the bottom left of this page, select the Create button, to create an association with this Service.

    Erstellen der Azure bot Service

  4. Nachdem Sie auf Erstellen geklickt haben, klicken Sie auf:Once you have clicked on Create:

    1. Fügen Sie den gewünschten Namen für diese Dienst Instanz ein.Insert your desired Name for this Service instance.

    2. Wählen Sie ein Abonnement aus.Select a Subscription.

    3. Wählen Sie eine Ressourcengruppe aus, oder erstellen Sie eine neue Ressourcengruppe .Choose a Resource Group or create a new one. Eine Ressourcengruppe bietet eine Möglichkeit zum überwachen, Steuern des Zugriffs, bereitstellen und Verwalten der Abrechnung für eine Sammlung von Azure-Ressourcen.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. Es wird empfohlen, alle Azure-Dienste, die einem einzelnen Projekt (z. b. diesen Kursen) zugeordnet sind, in einer gemeinsamen Ressourcengruppe zu speichern.It is recommended to keep all the Azure Services associated with a single project (e.g. such as these courses) under a common resource group).

      Weitere Informationen zu Azure-Ressourcengruppen finden Sie unter diesem Link .If you wish to read more about Azure Resource Groups, please follow this link

    4. Bestimmen Sie den Speicherort für Ihre Ressourcengruppe (wenn Sie eine neue Ressourcengruppe erstellen).Determine the Location for your resource group (if you are creating a new Resource Group). Der Speicherort wäre idealerweise in der Region, in der die Anwendung ausgeführt wird.The location would ideally be in the region where the application would run. Einige Azure-Ressourcen sind nur in bestimmten Regionen verfügbar.Some Azure assets are only available in certain regions.

    5. Wählen Sie den für Sie geeigneten Tarif aus. Wenn Sie zum ersten Mal einen Web- App-bot -Dienst erstellen, sollte Ihnen ein Free-Tarif (mit dem Namen "F0") zur Verfügung stehen.Select the Pricing Tier appropriate for you, if this is the first time creating a Web App Bot Service, a free tier (named F0) should be available to you

    6. Der Name der APP kann nur mit dem botnamen übereinstimmen.App name can just be left the same as the Bot name.

    7. Belassen Sie die bot-Vorlage als "Basic" (c#).Leave the Bot template as Basic (C#).

    8. Der App Service-Plan/Standort muss für Ihr Konto automatisch ausgefüllt werden.App service plan/Location should have been auto-filled for your account.

    9. Legen Sie die Azure Storage fest, die Sie zum Hosten des Bots verwenden möchten.Set the Azure Storage that you wish to use to host your Bot. Wenn Sie noch nicht über ein solches verfügen, können Sie es hier erstellen.If you dont have one already, you can create it here.

    10. Außerdem müssen Sie bestätigen, dass Sie die auf diesen Dienst angewendeten Geschäftsbedingungen verstanden haben.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    11. Klicken Sie auf „Erstellen“.Click Create.

      Erstellen der Azure bot Service

  5. Nachdem Sie auf Erstellen geklickt haben, müssen Sie warten, bis der Dienst erstellt wurde. dieser Vorgang kann einige Minuten in Anspruch nehmen.Once you have clicked on Create, you will have to wait for the Service to be created, this might take a minute.

  6. Nachdem die Dienst Instanz erstellt wurde, wird im Portal eine Benachrichtigung angezeigt.A notification will appear in the Portal once the Service instance is created.

    Erstellen der Azure bot Service

  7. Klicken Sie auf die Benachrichtigung, um die neue Dienst Instanz zu untersuchen.Click on the notification to explore your new Service instance.

    Erstellen der Azure bot Service

  8. Klicken Sie in der Benachrichtigung auf die Schaltfläche Gehe zu Ressource , um die neue Dienst Instanz zu untersuchen.Click the Go to resource button in the notification to explore your new Service instance. Sie gelangen zu ihrer neuen Azure-Dienst Instanz.You will be taken to your new Azure Service instance.

    Erstellen der Azure bot Service

  9. An diesem Punkt müssen Sie eine Funktion namens Direct Line einrichten, damit Ihre Client Anwendung mit diesem botdienst kommunizieren kann.At this point you need to setup a feature called Direct Line to allow your client application to communicate with this Bot Service. Klicken Sie auf Channels, und klicken Sie dann im Abschnitt Hinzufügen eines vorgestellten Kanals auf direkt linienchannel konfigurieren.Click on Channels, then in the Add a featured channel section, click on Configure Direct Line channel.

    Erstellen der Azure bot Service

  10. Auf dieser Seite finden Sie die geheimen Schlüssel , mit denen sich Ihre Client-App bei dem bot authentifizieren kann.In this page you will find the Secret keys that will allow your client app to authenticate with the bot. Klicken Sie auf die Schaltfläche anzeigen , und nehmen Sie eine Kopie einer der angezeigten Schlüssel auf, da Sie dies später in Ihrem Projekt benötigen.Click on the Show button and take a copy of one of the displayed Keys, as you will need this later in your project.

    Erstellen der Azure bot Service

Kapitel 3 – Veröffentlichen des Bots für den Azure-Web-App-botdienstChapter 3 – Publish the Bot to the Azure Web App Bot Service

Nachdem Ihr Dienst bereit ist, müssen Sie den von Ihnen zuvor erstellten botcode in ihren neu erstellten Web-App-botdienst veröffentlichen.Now that your Service is ready, you need to publish your Bot code, that you built previously, to your newly created Web App Bot Service.

Hinweis

Sie müssen ihren bot jedes Mal im Azure-Dienst veröffentlichen, wenn Sie Änderungen an der bot-Lösung/dem Code vornehmen.You will have to publish your Bot to the Azure Service every time you make changes to the Bot solution / code.

  1. Wechseln Sie zurück zu Ihrer Visual Studio-Projekt Mappe, die Sie zuvor erstellt haben.Go back to your Visual Studio Solution that you created previously.

  2. Klicken Sie mit der rechten Maustaste auf das Projekt mybot , und klicken Sie dann im Projektmappen-Explorer auf veröffentlichen.Right-click on your MyBot project, in the Solution Explorer, then click on Publish.

    Veröffentlichen des Bots im Azure-Web-App-botdienst

  3. Klicken Sie auf der Seite Veröffentlichungsziel auswählen auf App Service, wählen Sie dann vorhandene aus, klicken Sie schließlich auf Profil erstellen (möglicherweise müssen Sie neben der Schaltfläche veröffentlichen auf den Dropdown Pfeil klicken, wenn dies nicht angezeigt wird).On the Pick a publish target page, click App Service, then Select Existing, lastly click on Create Profile (you may need to click on the dropdown arrow alongside the Publish button, if this is not visible).

    Veröffentlichen des Bots im Azure-Web-App-botdienst

  4. Wenn Sie noch nicht bei Ihrem Microsoft-Konto angemeldet sind, müssen Sie dies hier tun.If you are not yet logged in into your Microsoft Account, you have to do it here.

  5. Auf der Seite " veröffentlichen " müssen Sie das gleiche Abonnement festlegen, das Sie für die Erstellung des Web-App -botdiensts verwendet haben.On the Publish page you will find you have to set the same Subscription that you used for the Web App Bot Service creation. Legen Sie dann die Ansicht als Ressourcengruppe fest, und wählen Sie in der Dropdown-Ordnerstruktur die Ressourcengruppe aus, die Sie zuvor erstellt haben.Then set the View as Resource Group and, in the drop down folder structure, select the Resource Group you have created previously. Klicken Sie auf OK.Click OK.

    Veröffentlichen des Bots im Azure-Web-App-botdienst

  6. Klicken Sie jetzt auf die Schaltfläche "Publish" ( veröffentlichen ), und warten Sie, bis der bot veröffentlicht wird (es kann einige Minuten dauern).Now click on the Publish button, and wait for the Bot to be published (it might take a few minutes).

    Veröffentlichen des Bots im Azure-Web-App-botdienst

Kapitel 4 – Einrichten des Unity-ProjektsChapter 4 – Set up the Unity project

Folgendes ist eine typische Einrichtung für die Entwicklung mit gemischter Realität und ist daher eine gute Vorlage für andere Projekte.The following is a typical set up for developing with mixed reality, and as such, is a good template for other projects.

  1. Öffnen Sie Unity , und klicken Sie auf neu.Open Unity and click New.

    Einrichten des Unity-Projekts

  2. Sie müssen nun einen Unity-Projektnamen angeben.You will now need to provide a Unity project name. Hololens-bot einfügen.Insert HoloLens Bot. Stellen Sie sicher, dass die Projektvorlage auf 3D festgelegt ist.Make sure the project template is set to 3D. Legen Sie den Speicherort auf einen geeigneten Speicherort fest (denken Sie daran, dass die Stamm Verzeichnisse besser sind).Set the Location to somewhere appropriate for you (remember, closer to root directories is better). Klicken Sie dann auf Projekt erstellen.Then, click Create project.

    Einrichten des Unity-Projekts

  3. Wenn Unity geöffnet ist, sollten Sie überprüfen, dass der Standard Skript-Editor auf Visual Studio festgelegt ist.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. Wechseln Sie zu Edit > Preferences (Einstellungen bearbeiten ), und navigieren Sie dann im neuen Fenster zu externe Tools.Go to Edit > Preferences and then from the new window, navigate to External Tools. Ändern Sie den Editor für externe Skripts in Visual Studio 2017.Change External Script Editor to Visual Studio 2017. Schließen Sie das Fenster " Einstellungen ".Close the Preferences window.

    Einrichten des Unity-Projekts

  4. Navigieren Sie als nächstes zu Datei > Buildeinstellungen , wählen Sie universelle Windows-Plattform aus, und klicken Sie dann auf die Schaltfläche Plattform wechseln , um Ihre Auswahl zu übernehmenNext, go to File > Build Settings and select Universal Windows Platform, then click on the Switch Platform button to apply your selection.

    Einrichten des Unity-Projekts

  5. In Datei > Buildeinstellungen , und stellen Sie Folgendes sicher:While still in File > Build Settings and make sure that:

    1. Zielgerät ist auf hololens festgelegtTarget Device is set to HoloLens

      Legen Sie für die immersiven Headsets das Zielgerät auf ein beliebiges Gerät fest.For the immersive headsets, set Target Device to Any Device.

    2. Der Buildtyp ist auf D3D festgelegt.Build Type is set to D3D

    3. SDK ist auf neueste installierte Version festgelegt.SDK is set to Latest installed

    4. Visual Studio-Version ist auf neueste installierte Version festgelegt.Visual Studio Version is set to Latest installed

    5. Build und Run sind auf lokaler Computer festgelegt.Build and Run is set to Local Machine

    6. Speichern Sie die Szene, und fügen Sie Sie dem Build hinzu.Save the scene and add it to the build.

      1. Wählen Sie hierzu die Option geöffnete Szenen hinzufügen aus.Do this by selecting Add Open Scenes. Ein Fenster zum Speichern wird angezeigt.A save window will appear.

        Einrichten des Unity-Projekts

      2. Erstellen Sie einen neuen Ordner für dieses und jede zukünftige Szene, und wählen Sie dann die Schaltfläche neuer Ordner aus, um einen neuen Ordner zu erstellen.Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        Einrichten des Unity-Projekts

      3. Öffnen Sie den neu erstellten Ordner Szenen , geben Sie im Feld Dateiname: Text botscene ein, und klicken Sie dann auf Speichern.Open your newly created Scenes folder, and then in the File name: text field, type BotScene, then click on Save.

        Einrichten des Unity-Projekts

    7. Die restlichen Einstellungen in den Buildeinstellungen sollten vorerst als Standard belassen werden.The remaining settings, in Build Settings, should be left as default for now.

  6. Klicken Sie im Fenster Buildeinstellungen auf die Schaltfläche Player Einstellungen . Dadurch wird der entsprechende Bereich in dem Bereich geöffnet, in dem sich der Inspektor befindet.In the Build Settings window, click on the Player Settings button, this will open the related panel in the space where the Inspector is located.

    Einrichten des Unity-Projekts

  7. In diesem Bereich müssen einige Einstellungen überprüft werden:In this panel, a few settings need to be verified:

    1. Auf der Registerkarte andere Einstellungen :In the Other Settings tab:

      1. Die Skript Lauf Zeit Version sollte experimentell sein (NET 4,6-Entsprechung); Wenn Sie dies ändern, muss der Editor neu gestartet werden.Scripting Runtime Version should be Experimental (NET 4.6 Equivalent); changing this will require a restart of the Editor.

      2. Skript -Back-End sollte .net seinScripting Backend should be .NET

      3. API-Kompatibilitäts Grad sollte .NET 4,6 lautenAPI Compatibility Level should be .NET 4.6

        Einrichten des Unity-Projekts

    2. Überprüfen Sie auf der Registerkarte Veröffentlichungs Einstellungen unter Funktionen Folgendes:Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

      • MikrofonMicrophone

        Einrichten des Unity-Projekts

    3. Weiter unten im Bereich in den XR-Einstellungen (siehe Veröffentlichungs Einstellungen), unterstützt Tick Virtual Reality, stellen Sie sicher, dass das Windows Mixed Reality SDK hinzugefügt wurde.Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added.

      Einrichten des Unity-Projekts

  8. Zurück in Buildeinstellungen : Unity-c# -Projekte sind nicht mehr abgeblendet. Aktivieren Sie das Kontrollkästchen neben this.Back in Build Settings Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. Schließen Sie das Fenster „Build Settings“ (Buildeinstellungen).Close the Build Settings window.

  10. Speichern Sie Ihre Szene und Ihr Projekt (Datei > speichern Sie Szenen/Dateien > speichern Sie das Projekt).Save your scene and project (FILE > SAVE SCENE / FILE > SAVE PROJECT).

Kapitel 5 – Kamera EinrichtungChapter 5 – Camera setup

Wichtig

Wenn Sie die Unity-Setup Komponente dieses Kurses überspringen und direkt mit dem Code fortfahren möchten, können Sie dieses Azure-Mr-312-Package. unitypackageherunterladen, es als benutzerdefiniertes Paketin Ihr Projekt importieren und dann aus Kapitel 7fortfahren.If you wish to skip the Unity Set up component of this course, and continue straight into code, feel free to download this Azure-MR-312-Package.unitypackage, import it into your project as a Custom Package, and then continue from Chapter 7.

  1. Wählen Sie im Bereich Hierarchie die Hauptkamera aus.In the Hierarchy panel, select the Main Camera.

  2. Nachdem Sie diese Option ausgewählt haben, können Sie alle Komponenten der Hauptkamera im Inspektor-Panel sehen.Once selected, you will be able to see all the components of the Main Camera in the Inspector panel.

    1. Das Kamera Objekt muss als Hauptkamera benannt werden (Beachten Sie die Schreibweise).The Camera object must be named Main Camera (note the spelling)
    2. Das Hauptkamera Kennzeichen muss auf maincamera festgelegt sein (Beachten Sie die Schreibweise).The Main Camera Tag must be set to MainCamera (note the spelling)
    3. Stellen Sie sicher, dass die Transformations Position auf 0, 0, 0 festgelegt ist.Make sure the Transform Position is set to 0, 0, 0
    4. Legen Sie klar Flags auf voll Tonfarbe fest.Set Clear Flags to Solid Color.
    5. Legen Sie die Hintergrund Farbe der Kamera Komponente auf schwarz, Alpha 0 (Hexadezimal Code: #00000000) fest.Set the Background Color of the Camera component to Black, Alpha 0 (Hex Code: #00000000)

    Kamera-Setup

Kapitel 6 – Importieren der newtonsoft-BibliothekChapter 6 – Import the Newtonsoft library

Zum Deserialisieren und Serialisieren von Objekten, die empfangen und an den bot-Dienst gesendet werden, müssen Sie die newtonsoft -Bibliothek herunterladen.To help you deserialize and serialize objects received and sent to the Bot Service you need to download the Newtonsoft library. Sie finden eine kompatible Version, die bereits mit der richtigen Unity-Ordnerstruktur organisiertist.You will find a compatible version already organized with the correct Unity folder structure here.

Verwenden Sie das Unity-Paket, das in diesem Kurs verwendet wurde, um die newtonsoft-Bibliothek in Ihr Projekt zu importieren.To import the Newtonsoft library into your project, use the Unity Package which came with this course.

  1. Fügen Sie das . unitypackage zu Unity hinzu, indem Sie die Menüoption Assets > Import Package > Custom Package verwenden.Add the .unitypackage to Unity by using the Assets > Import Package > Custom Package menu option.

    Importieren der newtonsoft-Bibliothek

  2. Vergewissern Sie sich, dass im Feld Unity-Paket importieren , das angezeigt wird, alles unter (und einschließlich) Plug -ins ausgewählt ist.In the Import Unity Package box that pops up, ensure everything under (and including) Plugins is selected.

    Importieren der newtonsoft-Bibliothek

  3. Klicken Sie auf die Schaltfläche importieren , um dem Projekt die Elemente hinzuzufügen.Click the Import button to add the items to your project.

  4. Wechseln Sie in der Projekt Ansicht in den Ordner Newton Soft unter Plug-in, und wählen Sie das newtonsoft-Plug-in aus.Go to the Newtonsoft folder under Plugins in the project view and select the Newtonsoft plugin.

  5. Vergewissern Sie sich, dass die Option "newtonsoft" ausgewählt ist, und stellen Sie sicher, dass alle Plattformen deaktiviert sind. Stellen Sie dann sicher, dass wsaplayer ebenfalls deaktiviert istWith the Newtonsoft plugin selected, ensure that Any Platform is unchecked, then ensure that WSAPlayer is also unchecked, then click Apply. Dies dient nur zur Bestätigung, dass die Dateien ordnungsgemäß konfiguriert sind.This is just to confirm that the files are configured correctly.

    Hinweis

    Wenn Sie diese Plug-ins markieren, werden Sie nur im Unity-Editor verwendet.Marking these plugins configures them to only be used in the Unity Editor. Im WSA-Ordner gibt es eine andere Gruppe, die verwendet wird, nachdem das Projekt aus Unity exportiert wurde.There are a different set of them in the WSA folder which will be used after the project is exported from Unity.

  6. Als nächstes müssen Sie den Ordner " WSA " im Ordner " newtonsoft " öffnen.Next, you need to open the WSA folder, within the Newtonsoft folder. Es wird eine Kopie derselben Datei angezeigt, die Sie soeben konfiguriert haben.You will see a copy of the same file you just configured. Wählen Sie die Datei aus, und vergewissern Sie sich dann im Inspektor, dassSelect the file, and then in the inspector, ensure that

    • Jede Plattform ist deaktiviert .Any Platform is unchecked
    • nur wsaplayer ist aktiviert .only WSAPlayer is checked
    • "Nicht verarbeiten " ist aktiviertDont process is checked

Kapitel 7 – Erstellen des bottagChapter 7 – Create the BotTag

  1. Erstellen Sie ein neues tagobjekt mit dem Namen bottag.Create a new Tag object called BotTag. Wählen Sie die Hauptkamera in der Szene aus.Select the Main Camera in the scene. Klicken Sie im Inspektor-Panel auf das Dropdown Menü Tag.Click on the Tag drop down menu in the Inspector panel. Klicken Sie auf Tag hinzufügen.Click on Add Tag.

    Kamera-Setup

  2. Klicken Sie auf das + Symbol.Click on the + symbol. Nennen Sie das neue Tag als bottag, Speichern.Name the new Tag as BotTag, Save.

    Kamera-Setup

Warnung

Wenden Sie das bottag nicht auf die Hauptkamera an.Do not apply the BotTag to the Main Camera. Wenn Sie dies versehentlich abgeschlossen haben, stellen Sie sicher, dass Sie das Hauptkamera-Tag wieder in " maincamera" ändern.If you have accidentally done this, make sure to change the Main Camera tag back to MainCamera.

Kapitel 8 – Erstellen der botobjects-KlasseChapter 8 – Create the BotObjects class

Das erste Skript, das Sie erstellen müssen, ist die botobjects -Klasse, bei der es sich um eine leere Klasse handelt, die erstellt wird, sodass eine Reihe von anderen Klassen Objekten innerhalb desselben Skripts gespeichert und von anderen Skripts in der Szene aufgerufen werden kann.The first script you need to create is the BotObjects class, which is an empty class created so that a series of other class objects can be stored within the same script and accessed by other scripts in the scene.

Bei der Erstellung dieser Klasse handelt es sich lediglich um eine architektonische Wahl. diese Objekte könnten stattdessen in dem bot-Skript gehostet werden, das Sie später in diesem Kurs erstellen werden.The creation of this class is purely an architectural choice, these objects could instead be hosted in the Bot script that you will create later in this course.

So erstellen Sie diese Klasse:To create this class:

  1. Klicken Sie mit der rechten Maustaste im Projekt Panel, und erstellen Sie dann > Ordner.Right-click in the Project panel, then Create > Folder. Benennen Sie den Ordner mit Skripts.Name the folder Scripts.

    Erstellen Sie den Ordner Skripts.

  2. Doppelklicken Sie auf den Ordner Scripts , um ihn zu öffnen.Double-click on the Scripts folder to open it. Klicken Sie dann in diesem Ordner mit der rechten Maustaste auf, und wählen Sie > c#-Skript erstellen aus.Then within that folder, right-click, and select Create > C# Script. Benennen Sie das Skript mit dem Namen botobjects.Name the script BotObjects.

  3. Doppelklicken Sie auf das neue botobjects -Skript, um es in Visual Studio zu öffnen.Double-click on the new BotObjects script to open it with Visual Studio.

  4. Löschen Sie den Inhalt des Skripts, und ersetzen Sie ihn durch den folgenden Code:Delete the content of the script and replace it with the following code:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class BotObjects : MonoBehaviour{}
    
    /// <summary>
    /// Object received when first opening a conversation
    /// </summary>
    [Serializable]
    public class ConversationObject
    {
        public string ConversationId;
        public string token;
        public string expires_in;
        public string streamUrl;
        public string referenceGrammarId;
    }
    
    /// <summary>
    /// Object including all Activities
    /// </summary>
    [Serializable]
    public class ActivitiesRootObject
    {
        public List<Activity> activities { get; set; }
        public string watermark { get; set; }
    }
    [Serializable]
    public class Conversation
    {
        public string id { get; set; }
    }
    [Serializable]
    public class From
    {
        public string id { get; set; }
        public string name { get; set; }
    }
    [Serializable]
    public class Activity
    {
        public string type { get; set; }
        public string channelId { get; set; }
        public Conversation conversation { get; set; }
        public string id { get; set; }
        public From from { get; set; }
        public string text { get; set; }
        public string textFormat { get; set; }
        public DateTime timestamp { get; set; }
        public string serviceUrl { get; set; }
    }
    
  5. Stellen Sie sicher, dass Sie die Änderungen in Visual Studio speichern, bevor Sie zu Unity zurückkehren.Be sure to save your changes in Visual Studio before returning to Unity.

Kapitel 9 – Erstellen der Klasse "gazeinput"Chapter 9 – Create the GazeInput class

Die nächste Klasse, die Sie erstellen, ist die " gazeinput "-Klasse.The next class you are going to create is the GazeInput class. Diese Klasse ist für Folgendes zuständig:This class is responsible for:

  • Erstellen eines Cursors, der den Blick des Players darstellt.Creating a cursor that will represent the gaze of the player.
  • Erkennen von Objekten, die vom Blickpunkt des Players erreicht werden, und Speichern eines Verweises auf erkannte Objekte.Detecting objects hit by the gaze of the player, and holding a reference to detected objects.

So erstellen Sie diese Klasse:To create this class:

  1. Wechseln Sie zum Ordner " Scripts ", den Sie zuvor erstellt haben.Go to the Scripts folder you created previously.

  2. Klicken Sie mit der rechten Maustaste in den Ordner, und Erstellen Sie > c#-Skript.Right-click inside the folder, Create > C# Script. Nennen Sie das Skript " gazeinput".Call the script GazeInput.

  3. Doppelklicken Sie auf das neue gazeinput -Skript, um es in Visual Studio zu öffnen.Double-click on the new GazeInput script to open it with Visual Studio.

  4. Fügen Sie die folgende Zeile rechts oben in den Klassennamen ein:Insert the following line right on top of the class name:

    /// <summary>
    /// Class responsible for the User's gaze interactions
    /// </summary>
    [System.Serializable]
    public class GazeInput : MonoBehaviour
    
  5. Fügen Sie dann die folgenden Variablen in der Klasse " gazeinput " oberhalb der Methode " Start () " hinzu:Then add the following variables inside the GazeInput class, above the Start() method:

        [Tooltip("Used to compare whether an object is to be interacted with.")]
        internal string InteractibleTag = "BotTag";
    
        /// <summary>
        /// Length of the gaze
        /// </summary>
        internal float GazeMaxDistance = 300;
    
        /// <summary>
        /// Object currently gazed
        /// </summary>
        internal GameObject FocusedObject { get; private set; }
    
        internal GameObject _oldFocusedObject { get; private set; }
    
        internal RaycastHit HitInfo { get; private set; }
    
        /// <summary>
        /// Cursor object visible in the scene
        /// </summary>
        internal GameObject Cursor { get; private set; }
    
        internal bool Hit { get; private set; }
    
        internal Vector3 Position { get; private set; }
    
        internal Vector3 Normal { get; private set; }
    
        private Vector3 _gazeOrigin;
    
        private Vector3 _gazeDirection;
    
  6. Code für die Methode " Start () " sollte hinzugefügt werden.Code for Start() method should be added. Dies wird aufgerufen, wenn die-Klasse initialisiert:This will be called when the class initializes:

        /// <summary>
        /// Start method used upon initialization.
        /// </summary>
        internal virtual void Start()
        {
            FocusedObject = null;
            Cursor = CreateCursor();
        }
    
  7. Implementieren Sie eine Methode, die den Cursor Cursor instanziieren und einrichten soll:Implement a method that will instantiate and setup the gaze cursor:

        /// <summary>
        /// Method to create a cursor object.
        /// </summary>
        internal GameObject CreateCursor()
        {
            GameObject newCursor = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            newCursor.SetActive(false);
            // Remove the collider, so it does not block Raycast.
            Destroy(newCursor.GetComponent<SphereCollider>());
            newCursor.transform.localScale = new Vector3(0.05f, 0.05f, 0.05f);
            Material mat = new Material(Shader.Find("Diffuse"));
            newCursor.GetComponent<MeshRenderer>().material = mat;
            mat.color = Color.HSVToRGB(0.0223f, 0.7922f, 1.000f);
            newCursor.SetActive(true);
    
            return newCursor;
        }
    
  8. Implementieren Sie die Methoden, die den raycast von der Hauptkamera einrichten, und verfolgen Sie das aktuelle fokussierte Objekt.Implement the methods that will setup the Raycast from the Main Camera and will keep track of the current focused object.

        /// <summary>
        /// Called every frame
        /// </summary>
        internal virtual void Update()
        {
            _gazeOrigin = Camera.main.transform.position;
    
            _gazeDirection = Camera.main.transform.forward;
    
            UpdateRaycast();
        }
    
    
        /// <summary>
        /// Reset the old focused object, stop the gaze timer, and send data if it
        /// is greater than one.
        /// </summary>
        private void ResetFocusedObject()
        {
            // Ensure the old focused object is not null.
            if (_oldFocusedObject != null)
            {
                if (_oldFocusedObject.CompareTag(InteractibleTag))
                {
                    // Provide the OnGazeExited event.
                    _oldFocusedObject.SendMessage("OnGazeExited", 
                        SendMessageOptions.DontRequireReceiver);
                }
            }
        }
    
    
        private void UpdateRaycast()
        {
            // Set the old focused gameobject.
            _oldFocusedObject = FocusedObject;
            RaycastHit hitInfo;
    
            // Initialize Raycasting.
            Hit = Physics.Raycast(_gazeOrigin,
                _gazeDirection,
                out hitInfo,
                GazeMaxDistance);
            HitInfo = hitInfo;
    
            // Check whether raycast has hit.
            if (Hit == true)
            {
                Position = hitInfo.point;
                Normal = hitInfo.normal;
    
                // Check whether the hit has a collider.
                if (hitInfo.collider != null)
                {
                    // Set the focused object with what the user just looked at.
                    FocusedObject = hitInfo.collider.gameObject;
                }
                else
                {
                    // Object looked on is not valid, set focused gameobject to null.
                    FocusedObject = null;
                }
            }
            else
            {
                // No object looked upon, set focused gameobject to null.
                FocusedObject = null;
    
                // Provide default position for cursor.
                Position = _gazeOrigin + (_gazeDirection * GazeMaxDistance);
    
                // Provide a default normal.
                Normal = _gazeDirection;
            }
    
            // Lerp the cursor to the given position, which helps to stabilize the gaze.
            Cursor.transform.position = Vector3.Lerp(Cursor.transform.position, Position, 0.6f);
    
            // Check whether the previous focused object is this same. If so, reset the focused object.
            if (FocusedObject != _oldFocusedObject)
            {
                ResetFocusedObject();
                if (FocusedObject != null)
                {
                    if (FocusedObject.CompareTag(InteractibleTag))
                    {
                        // Provide the OnGazeEntered event.
                        FocusedObject.SendMessage("OnGazeEntered",
                            SendMessageOptions.DontRequireReceiver);
                    }
                }
            }
        }
    
  9. Stellen Sie sicher, dass Sie die Änderungen in Visual Studio speichern, bevor Sie zu Unity zurückkehren.Be sure to save your changes in Visual Studio before returning to Unity.

Kapitel 10 – Erstellen der bot-KlasseChapter 10 – Create the Bot class

Das Skript, das Sie jetzt erstellen, wird als bot bezeichnet.The script you are going to create now is called Bot. Dies ist die Kern Klasse Ihrer Anwendung, die gespeichert wird:This is the core class of your application, it stores:

  • Ihre Web-App-botanmelde InformationenYour Web App Bot credentials
  • Die Methode, die die User Voice-Befehle sammelt.The method that collects the user voice commands
  • Die erforderliche Methode zum Initiieren von Konversationen mit dem Web-App-botThe method necessary to initiate conversations with your Web App Bot
  • Die erforderliche Methode zum Senden von Nachrichten an Ihren Web-App-botThe method necessary to send messages to your Web App Bot

Um Nachrichten an den botdienst zu senden, erstellt die sendmessageybot () -Coroutine eine-Aktivität, bei der es sich um ein Objekt handelt, das vom bot Framework als vom Benutzer gesendete Daten erkannt wird.To send messages to the Bot Service, the SendMessageToBot() coroutine will build an activity, which is an object recognized by the Bot Framework as data sent by the user.

So erstellen Sie diese Klasse:To create this class:

  1. Doppelklicken Sie auf den Ordner Skripts , um ihn zu öffnen.Double-click on the Scripts folder, to open it.

  2. Klicken Sie mit der rechten Maustaste in den Ordner Scripts , und klicken Sie auf Create > c#-Skript.Right-click inside the Scripts folder, click Create > C# Script. Benennen Sie den Skript- bot.Name the script Bot.

  3. Doppelklicken Sie auf das neue Skript, um es in Visual Studio zu öffnen.Double-click on the new script to open it with Visual Studio.

  4. Aktualisieren Sie die Namespaces so, dass Sie am Anfang der bot -Klasse wie folgt lauten:Update the namespaces to be the same as the following, at the top of the Bot class:

    using Newtonsoft.Json;
    using System.Collections;
    using System.Text;
    using UnityEngine;
    using UnityEngine.Networking;
    using UnityEngine.Windows.Speech;
    
  5. Fügen Sie innerhalb der bot -Klasse die folgenden Variablen hinzu:Inside the Bot class add the following variables:

        /// <summary>
        /// Static instance of this class
        /// </summary>
        public static Bot Instance;
    
        /// <summary>
        /// Material of the sphere representing the Bot in the scene
        /// </summary>
        internal Material botMaterial;
    
        /// <summary>
        /// Speech recognizer class reference, which will convert speech to text.
        /// </summary>
        private DictationRecognizer dictationRecognizer;
    
        /// <summary>
        /// Use this variable to identify the Bot Id
        /// Can be any value
        /// </summary>
        private string botId = "MRBotId";
    
        /// <summary>
        /// Use this variable to identify the Bot Name
        /// Can be any value
        /// </summary>
        private string botName = "MRBotName";
    
        /// <summary>
        /// The Bot Secret key found on the Web App Bot Service on the Azure Portal
        /// </summary>
        private string botSecret = "-- Add your Secret Key here --"; 
    
        /// <summary>
        /// Bot Endpoint, v4 Framework uses v3 endpoint at this point in time
        /// </summary>
        private string botEndpoint = "https://directline.botframework.com/v3/directline";
    
        /// <summary>
        /// The conversation object reference
        /// </summary>
        private ConversationObject conversation;
    
        /// <summary>
        /// Bot states to regulate the application flow
        /// </summary>
        internal enum BotState {ReadyToListen, Listening, Processing}
    
        /// <summary>
        /// Flag for the Bot state
        /// </summary>
        internal BotState botState;
    
        /// <summary>
        /// Flag for the conversation status
        /// </summary>
        internal bool conversationStarted = false;
    

    Hinweis

    Stellen Sie sicher, dass Sie Ihren botsecret- Schlüssel in die botsecret -Variable einfügen.Make sure you insert your Bot Secret Key into the botSecret variable. Sie haben ihren botsecret-Schlüssel zu Beginn dieses Kurses in Kapitel 2, Schritt 10 notiert.You will have noted your Bot Secret Key at the beginning of this course, in Chapter 2, step 10.

  6. Der Code für " Awa() " und " Start () " muss nun hinzugefügt werden.Code for Awake() and Start() now needs to be added.

        /// <summary>
        /// Called on Initialization
        /// </summary>
        void Awake()
        {
            Instance = this;
        }
    
        /// <summary>
        /// Called immediately after Awake method
        /// </summary>
        void Start()
        {
            botState = BotState.ReadyToListen;
        }
    
  7. Fügen Sie die beiden Handler hinzu, die von den Sprach Bibliotheken aufgerufen werden, wenn die sprach Erfassung beginnt und endet.Add the two handlers that are called by the speech libraries when voice capture begins and ends. Der " diktationerkenzer " hält die Erfassung der Benutzer Stimme automatisch an, wenn der Benutzer seine Sprache stoppt.The DictationRecognizer will automatically stop capturing the user voice when the user stops speaking.

        /// <summary>
        /// Start microphone capture.
        /// </summary>
        public void StartCapturingAudio()
        {
            botState = BotState.Listening;
            botMaterial.color = Color.red;
    
            // Start dictation
            dictationRecognizer = new DictationRecognizer();
            dictationRecognizer.DictationResult += DictationRecognizer_DictationResult;
            dictationRecognizer.Start();
        }
    
    
        /// <summary>
        /// Stop microphone capture.
        /// </summary>
        public void StopCapturingAudio()
        {
            botState = BotState.Processing;
            dictationRecognizer.Stop();
        }
    
    
  8. Der folgende Handler sammelt das Ergebnis der User Voice-Eingabe und ruft die Coroutine auf, die für das Senden der Nachricht an den Web-App-botdienst zuständig ist.The following handler collects the result of the user voice input and calls the coroutine responsible for sending the message to the Web App Bot Service.

        /// <summary>
        /// This handler is called every time the Dictation detects a pause in the speech. 
        /// </summary>
        private void DictationRecognizer_DictationResult(string text, ConfidenceLevel confidence)
        {
            // Update UI with dictation captured
            Debug.Log($"User just said: {text}");      
    
            // Send dictation to Bot
            StartCoroutine(SendMessageToBot(text, botId, botName, "message"));
            StopCapturingAudio();
        }     
    
  9. Die folgende Coroutine wird aufgerufen, um eine Konversation mit dem bot zu beginnen.The following coroutine is called to begin a conversation with the Bot. Sie werden feststellen, dass nach Abschluss des Konversations Aufrufes die sendmessagetocoroutine () aufruft, indem eine Reihe von Parametern übergeben wird, die festlegen, dass die Aktivität als leere Nachricht an den botdienst gesendet werden soll.You will notice that once the conversation call is complete, it will call the SendMessageToCoroutine() by passing a series of parameters that will set the activity to be sent to the Bot Service as an empty message. Dadurch wird der botdienst aufgefordert, den Dialog zu initiieren.This is done to prompt the Bot Service to initiate the dialogue.

        /// <summary>
        /// Request a conversation with the Bot Service
        /// </summary>
        internal IEnumerator StartConversation()
        {
            string conversationEndpoint = string.Format("{0}/conversations", botEndpoint);
    
            WWWForm webForm = new WWWForm();
    
            using (UnityWebRequest unityWebRequest = UnityWebRequest.Post(conversationEndpoint, webForm))
            {
                unityWebRequest.SetRequestHeader("Authorization", "Bearer " + botSecret);
                unityWebRequest.downloadHandler = new DownloadHandlerBuffer();
    
                yield return unityWebRequest.SendWebRequest();
                string jsonResponse = unityWebRequest.downloadHandler.text;
    
                conversation = new ConversationObject();
                conversation = JsonConvert.DeserializeObject<ConversationObject>(jsonResponse);
                Debug.Log($"Start Conversation - Id: {conversation.ConversationId}");
                conversationStarted = true; 
            }
    
            // The following call is necessary to create and inject an activity of type //"conversationUpdate" to request a first "introduction" from the Bot Service.
            StartCoroutine(SendMessageToBot("", botId, botName, "conversationUpdate"));
        }    
    
  10. Die folgende Coroutine wird aufgerufen, um die Aktivität zu erstellen, die an den bot-Dienst gesendet werden soll.The following coroutine is called to build the activity to be sent to the Bot Service.

        /// <summary>
        /// Send the user message to the Bot Service in form of activity
        /// and call for a response
        /// </summary>
        private IEnumerator SendMessageToBot(string message, string fromId, string fromName, string activityType)
        {
            Debug.Log($"SendMessageCoroutine: {conversation.ConversationId}, message: {message} from Id: {fromId} from name: {fromName}");
    
            // Create a new activity here
            Activity activity = new Activity();
            activity.from = new From();
            activity.conversation = new Conversation();
            activity.from.id = fromId;
            activity.from.name = fromName;
            activity.text = message;
            activity.type = activityType;
            activity.channelId = "DirectLineChannelId";
            activity.conversation.id = conversation.ConversationId;     
    
            // Serialize the activity
            string json = JsonConvert.SerializeObject(activity);
    
            string sendActivityEndpoint = string.Format("{0}/conversations/{1}/activities", botEndpoint, conversation.ConversationId);
    
            // Send the activity to the Bot
            using (UnityWebRequest www = new UnityWebRequest(sendActivityEndpoint, "POST"))
            {
                www.uploadHandler = new UploadHandlerRaw(Encoding.UTF8.GetBytes(json));
    
                www.downloadHandler = new DownloadHandlerBuffer();
                www.SetRequestHeader("Authorization", "Bearer " + botSecret);
                www.SetRequestHeader("Content-Type", "application/json");
    
                yield return www.SendWebRequest();
    
                // extrapolate the response Id used to keep track of the conversation
                string jsonResponse = www.downloadHandler.text;
                string cleanedJsonResponse = jsonResponse.Replace("\r\n", string.Empty);
                string responseConvId = cleanedJsonResponse.Substring(10, 30);
    
                // Request a response from the Bot Service
                StartCoroutine(GetResponseFromBot(activity));
            }
        }
    
  11. Die folgende Coroutine wird aufgerufen, um nach dem Senden einer Aktivität an den bot-Dienst eine Antwort anzufordern.The following coroutine is called to request a response after sending an activity to the Bot Service.

        /// <summary>
        /// Request a response from the Bot by using a previously sent activity
        /// </summary>
        private IEnumerator GetResponseFromBot(Activity activity)
        {
            string getActivityEndpoint = string.Format("{0}/conversations/{1}/activities", botEndpoint, conversation.ConversationId);
    
            using (UnityWebRequest unityWebRequest1 = UnityWebRequest.Get(getActivityEndpoint))
            {
                unityWebRequest1.downloadHandler = new DownloadHandlerBuffer();
                unityWebRequest1.SetRequestHeader("Authorization", "Bearer " + botSecret);
    
                yield return unityWebRequest1.SendWebRequest();
    
                string jsonResponse = unityWebRequest1.downloadHandler.text;
    
                ActivitiesRootObject root = new ActivitiesRootObject();
                root = JsonConvert.DeserializeObject<ActivitiesRootObject>(jsonResponse);
    
                foreach (var act in root.activities)
                {
                    Debug.Log($"Bot Response: {act.text}");
                    SetBotResponseText(act.text);
                }
    
                botState = BotState.ReadyToListen;
                botMaterial.color = Color.blue;
            }
        } 
    
  12. Die letzte Methode, die dieser Klasse hinzugefügt werden soll, ist erforderlich, um die Meldung in der Szene anzuzeigen:The last method to be added to this class, is required to display the message in the scene:

        /// <summary>
        /// Set the UI Response Text of the bot
        /// </summary>
        internal void SetBotResponseText(string responseString)
        {        
            SceneOrganiser.Instance.botResponseText.text =  responseString;
        }
    

    Hinweis

    In der Unity-Editor-Konsole wird möglicherweise ein Fehler angezeigt, in dem die sceneorganisator -Klasse fehlt.You may see an error within the Unity Editor Console, about missing the SceneOrganiser class. Ignorieren Sie diese Meldung, da Sie diese Klasse später in diesem Tutorial erstellen.Disregard this message, as you will create this class later in the tutorial.

  13. Stellen Sie sicher, dass Sie die Änderungen in Visual Studio speichern, bevor Sie zu Unity zurückkehren.Be sure to save your changes in Visual Studio before returning to Unity.

Kapitel 11 – Erstellen der Klasse "Interaktionen"Chapter 11 – Create the Interactions class

Die Klasse, die Sie jetzt erstellen, wird als Interaktionen bezeichnet.The class you are going to create now is called Interactions. Diese Klasse wird zum Erkennen der hololens-Tap-Eingaben vom Benutzer verwendet.This class is used to detect the HoloLens Tap Input from the user.

Wenn der Benutzer während der Betrachtung des bot -Objekts in der Szene tippt und der bot bereit ist, auf Spracheingaben zu lauschen, ändert sich das bot-Objekt in rot und beginnt mit dem lauschen auf Spracheingaben.If the user taps while looking at the Bot object in the scene, and the Bot is ready to listen for voice inputs, the Bot object will change color to red and begin listening for voice inputs.

Diese Klasse erbt von der Klasse " gazeinput " und kann daher auf die Methode " Start () " und Variablen aus dieser Klasse verweisen, die durch die Verwendung von " Base" bezeichnet wird.This class inherits from the GazeInput class, and so is able to reference the Start() method and variables from that class, denoted by the use of base.

So erstellen Sie diese Klasse:To create this class:

  1. Doppelklicken Sie auf den Ordner Skripts , um ihn zu öffnen.Double-click on the Scripts folder, to open it.

  2. Klicken Sie mit der rechten Maustaste in den Ordner Scripts , und klicken Sie auf Create > c#-Skript.Right-click inside the Scripts folder, click Create > C# Script. Benennen Sie das Skript mit Interaktionen.Name the script Interactions.

  3. Doppelklicken Sie auf das neue Skript, um es in Visual Studio zu öffnen.Double-click on the new script to open it with Visual Studio.

  4. Aktualisieren Sie die Namespaces und die Klassen Vererbung so, dass Sie am Anfang der Klasse Interaktionen mit der folgenden übereinstimmen:Update the namespaces and the class inheritance to be the same as the following, at the top of the Interactions class:

    using UnityEngine.XR.WSA.Input;
    
    public class Interactions : GazeInput
    {
    
  5. Fügen Sie innerhalb der Interaktionen -Klasse die folgende Variable hinzu:Inside the Interactions class add the following variable:

        /// <summary>
        /// Allows input recognition with the HoloLens
        /// </summary>
        private GestureRecognizer _gestureRecognizer;
    
  6. Fügen Sie dann die Methode " Start () " hinzu:Then add the Start() method:

        /// <summary>
        /// Called on initialization, after Awake
        /// </summary>
        internal override void Start()
        {
            base.Start();
    
            //Register the application to recognize HoloLens user inputs
            _gestureRecognizer = new GestureRecognizer();
            _gestureRecognizer.SetRecognizableGestures(GestureSettings.Tap);
            _gestureRecognizer.Tapped += GestureRecognizer_Tapped;
            _gestureRecognizer.StartCapturingGestures();
        }
    
  7. Fügen Sie den Handler hinzu, der ausgelöst wird, wenn der Benutzer die Tap-Geste vor der hololens-Kamera ausführt.Add the handler that will be triggered when the user performs the tap gesture in front of the HoloLens camera

        /// <summary>
        /// Detects the User Tap Input
        /// </summary>
        private void GestureRecognizer_Tapped(TappedEventArgs obj)
        {
            // Ensure the bot is being gazed upon.
            if(base.FocusedObject != null)
            {
                // If the user is tapping on Bot and the Bot is ready to listen
                if (base.FocusedObject.name == "Bot" && Bot.Instance.botState == Bot.BotState.ReadyToListen)
                {
                    // If a conversation has not started yet, request one
                    if(Bot.Instance.conversationStarted)
                    {
                        Bot.Instance.SetBotResponseText("Listening...");
                        Bot.Instance.StartCapturingAudio();
                    }
                    else
                    {
                        Bot.Instance.SetBotResponseText("Requesting Conversation...");
                        StartCoroutine(Bot.Instance.StartConversation());
                    }                                  
                }
            }
        }
    
  8. Stellen Sie sicher, dass Sie die Änderungen in Visual Studio speichern, bevor Sie zu Unity zurückkehren.Be sure to save your changes in Visual Studio before returning to Unity.

Kapitel 12 – Erstellen der sceneorganisator-KlasseChapter 12 – Create the SceneOrganiser class

Die letzte in dieser Übungseinheit erforderliche Klasse heißt sceneorganisator.The last class required in this Lab is called SceneOrganiser. Diese Klasse wird die Szene Programm gesteuert einrichten, indem der Hauptkamera Komponenten und Skripts hinzugefügt werden und die entsprechenden Objekte in der Szene erstellt werden.This class will setup the scene programmatically, by adding components and scripts to the Main Camera, and creating the appropriate objects in the scene.

So erstellen Sie diese Klasse:To create this class:

  1. Doppelklicken Sie auf den Ordner Skripts , um ihn zu öffnen.Double-click on the Scripts folder, to open it.

  2. Klicken Sie mit der rechten Maustaste in den Ordner Scripts , und klicken Sie auf Create > c#-Skript.Right-click inside the Scripts folder, click Create > C# Script. Nennen Sie das Skript sceneorganisator.Name the script SceneOrganiser.

  3. Doppelklicken Sie auf das neue Skript, um es in Visual Studio zu öffnen.Double-click on the new script to open it with Visual Studio.

  4. Fügen Sie innerhalb der sceneorganisator -Klasse die folgenden Variablen hinzu:Inside the SceneOrganiser class add the following variables:

        /// <summary>
        /// Static instance of this class
        /// </summary>
        public static SceneOrganiser Instance;
    
        /// <summary>
        /// The 3D text representing the Bot response
        /// </summary>
        internal TextMesh botResponseText;
    
  5. Fügen Sie dann die Methoden " Awa() " und " Start () " hinzu:Then add the Awake() and Start() methods:

        /// <summary>
        /// Called on Initialization
        /// </summary>
        private void Awake()
        {
            Instance = this;
        }
    
        /// <summary>
        /// Called immediately after Awake method
        /// </summary>
        void Start ()
        {
            // Add the GazeInput class to this object
            gameObject.AddComponent<GazeInput>();
    
            // Add the Interactions class to this object
            gameObject.AddComponent<Interactions>();
    
            // Create the Bot in the scene
            CreateBotInScene();
        }
    
  6. Fügen Sie die folgende Methode hinzu, die für das Erstellen des bot-Objekts in der Szene und das Einrichten der Parameter und Komponenten zuständig ist:Add the following method, responsible for creating the Bot object in the scene and setting up the parameters and components:

        /// <summary>
        /// Create the Sign In button object in the scene
        /// and sets its properties
        /// </summary>
        private void CreateBotInScene()
        {
            GameObject botObjInScene = GameObject.CreatePrimitive(PrimitiveType.Sphere);
            botObjInScene.name = "Bot";
    
            // Add the Bot class to the Bot GameObject
            botObjInScene.AddComponent<Bot>();
    
            // Create the Bot UI
            botResponseText = CreateBotResponseText();
    
            // Set properties of Bot GameObject
            Bot.Instance.botMaterial = new Material(Shader.Find("Diffuse"));
            botObjInScene.GetComponent<Renderer>().material = Bot.Instance.botMaterial;
            Bot.Instance.botMaterial.color = Color.blue;
            botObjInScene.transform.position = new Vector3(0f, 2f, 10f);
            botObjInScene.tag = "BotTag";
        }
    
  7. Fügen Sie die folgende Methode hinzu, die für die Erstellung des UI-Objekts in der Szene zuständig ist und die Antworten vom bot darstellt:Add the following method, responsible for creating the UI object in the scene, representing the responses from the Bot:

        /// <summary>
        /// Spawns cursor for the Main Camera
        /// </summary>
        private TextMesh CreateBotResponseText()
        {
            // Create a sphere as new cursor
            GameObject textObject = new GameObject();
            textObject.transform.parent = Bot.Instance.transform;
            textObject.transform.localPosition = new Vector3(0,1,0);
    
            // Resize the new cursor
            textObject.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
    
            // Creating the text of the Label
            TextMesh textMesh = textObject.AddComponent<TextMesh>();
            textMesh.anchor = TextAnchor.MiddleCenter;
            textMesh.alignment = TextAlignment.Center;
            textMesh.fontSize = 50;
            textMesh.text = "Hi there, tap on me and I will start listening.";
    
            return textMesh;
        }
    
  8. Stellen Sie sicher, dass Sie die Änderungen in Visual Studio speichern, bevor Sie zu Unity zurückkehren.Be sure to save your changes in Visual Studio before returning to Unity.

  9. Ziehen Sie im Unity-Editor das Skript " sceneorganisator " aus dem Ordner "Scripts" auf die Hauptkamera.In the Unity Editor, drag the SceneOrganiser script from the Scripts folder to the Main Camera. Die Szene-Organisator-Komponente sollte nun auf dem Hauptkamera Objekt angezeigt werden, wie in der folgenden Abbildung dargestellt.The Scene Organiser component should now appear on the Main Camera object, as shown in the image below.

    Erstellen der Azure bot Service

Kapitel 13 – vor dem AufbauChapter 13 – Before building

Um eine gründliche Test Ihrer Anwendung durchzuführen, müssen Sie Sie auf Ihre hololens querladen.To perform a thorough test of your application you will need to sideload it onto your HoloLens. Bevor Sie vorgehen, stellen Sie Folgendes sicher:Before you do, ensure that:

  • Alle in Kapitel 4 erwähnten Einstellungen sind richtig festgelegt.All the settings mentioned in the Chapter 4 are set correctly.
  • Das Skript sceneorganisator ist an das Hauptkamera Objekt angefügt.The script SceneOrganiser is attached to the Main Camera object.
  • Stellen Sie in der bot -Klasse sicher, dass Sie Ihren botsecret- Schlüssel in die botsecret -Variable eingefügt haben.In the Bot class, make sure you have inserted your Bot Secret Key into the botSecret variable.

Kapitel 14 – erstellen und Sideload auf die hololensChapter 14 – Build and Sideload to the HoloLens

Alles, was für den Unity-Abschnitt dieses Projekts erforderlich ist, ist nun abgeschlossen, sodass es an der Zeit ist, Sie aus Unity zu erstellen.Everything needed for the Unity section of this project has now been completed, so it is time to build it from Unity.

  1. Navigieren Sie zu Buildeinstellungen, Datei > Buildeinstellungen....Navigate to Build Settings, File > Build Settings….

  2. Klicken Sie im Fenster " Buildeinstellungen " auf " Erstellen".From the Build Settings window, click Build.

    Entwickeln der APP aus Unity

  3. Wenn dies nicht bereits geschehen ist, Tick Sie Unity c#-Projekte.If not already, tick Unity C# Projects.

  4. Klicken Sie auf Erstellen.Click Build. Unity startet ein Datei-Explorer -Fenster, in dem Sie einen Ordner erstellen und auswählen müssen, in dem die App erstellt wird.Unity will launch a File Explorer window, where you need to create and then select a folder to build the app into. Erstellen Sie diesen Ordner jetzt, und nennen Sie ihn " App".Create that folder now, and name it App. Klicken Sie dann mit ausgewähltem App -Ordner auf Ordner auswählen.Then with the App folder selected, click Select Folder.

  5. Unity startet das Projekt in den App -Ordner.Unity will begin building your project to the App folder.

  6. Nachdem die Erstellung von Unity abgeschlossen ist (Dies kann einige Zeit in Anspruch nehmen), wird ein Datei-Explorer -Fenster am Speicherort des Builds geöffnet (überprüfen Sie die Taskleiste, da Sie möglicherweise nicht immer über Ihrem Fenster angezeigt wird, sondern Sie über das Hinzufügen eines neuen Fensters benachrichtigt).Once Unity has finished building (it might take some time), it will open a File Explorer window at the location of your build (check your task bar, as it may not always appear above your windows, but will notify you of the addition of a new window).

Kapitel 15 – bereitstellen in hololensChapter 15 – Deploy to HoloLens

So stellen Sie auf hololens bereit:To deploy on HoloLens:

  1. Sie benötigen die IP-Adresse Ihrer hololens (für die Remote Bereitstellung) und, um sicherzustellen, dass sich Ihre hololens im Entwicklermodus befinden.You will need the IP Address of your HoloLens (for Remote Deploy), and to ensure your HoloLens is in Developer Mode. Gehen Sie dazu wie folgt vor:To do this:

    1. Öffnen Sie die Einstellungen, während Sie die hololens- Einstellungen durch tragen.Whilst wearing your HoloLens, open the Settings.
    2. Wechseln Sie zu Netzwerk & Internet > Wi-Fi > Erweiterte Optionen .Go to Network & Internet > Wi-Fi > Advanced Options
    3. Notieren Sie sich die IPv4 -Adresse.Note the IPv4 address.
    4. Navigieren Sie als nächstes wieder zu Einstellungen, und aktualisieren Sie dann & Sicherheits > für Entwickler .Next, navigate back to Settings, and then to Update & Security > For Developers
    5. Legen Sie den Entwicklermodus auf fest.Set Developer Mode On.
  2. Navigieren Sie zu Ihrem neuen Unity-Build ( App -Ordner), und öffnen Sie die Projektmappendatei mit Visual Studio.Navigate to your new Unity build (the App folder) and open the solution file with Visual Studio.

  3. Wählen Sie in der Projektmappenkonfiguration Debuggen.In the Solution Configuration select Debug.

  4. Wählen Sie auf der Projektmappenplattform die Option x86, Remote Computer aus. In the Solution Platform, select x86, Remote Machine.

    Stellen Sie die Lösung aus Visual Studio bereit.

  5. Wechseln Sie zum Menü Erstellen , und klicken Sie auf Lösung bereitstellen, um die Anwendung auf die hololens quer zuladen.Go to the Build menu and click on Deploy Solution, to sideload the application to your HoloLens.

  6. Ihre APP sollte nun in der Liste der installierten apps auf Ihren hololens angezeigt werden, die bereit sind, gestartet zu werden.Your app should now appear in the list of installed apps on your HoloLens, ready to be launched!

    Hinweis

    Legen Sie für die Bereitstellung auf dem immersiven Headset die Projektmappenplattform auf lokaler Computer fest, und legen Sie die Konfiguration auf Debuggen und x86 als Plattform fest.To deploy to immersive headset, set the Solution Platform to Local Machine, and set the Configuration to Debug, with x86 as the Platform. Stellen Sie dann auf dem lokalen Computer bereit, indem Sie im Menü Erstellen die Option Lösung bereitstellen auswählen.Then deploy to the local machine, using the Build menu, selecting Deploy Solution.

Kapitel 16 – verwenden der Anwendung auf den hololensChapter 16 – Using the application on the HoloLens

  • Nachdem Sie die Anwendung gestartet haben, sehen Sie den bot als blaue Kugel vor Ihnen.Once you have launched the application, you will see the Bot as a blue sphere in front of you.

  • Verwenden Sie die Tap-Geste , während Sie die Kugel in der Kugel betrachten, um eine Konversation zu initiieren.Use the Tap Gesture while you are gazing at the sphere to initiate a conversation.

  • Warten Sie, bis die Konversation gestartet wird (die Benutzeroberfläche zeigt eine Meldung an, wenn dies geschieht).Wait for the conversation to start (The UI will display a message when it happens). Nachdem Sie die einführende Nachricht vom bot erhalten haben, tippen Sie erneut auf den bot, damit Sie rot wird und mit der Überwachung ihrer Stimme beginnt.Once you receive the introductory message from the Bot, tap again on the Bot so it will turn red and begin to listen to your voice.

  • Wenn Sie nicht mehr sprechen, sendet Ihre Anwendung Ihre Nachricht an den bot, und Sie erhalten umgehend eine Antwort, die in der Benutzeroberfläche angezeigt wird.Once you stop talking, your application will send your message to the Bot and you will promptly receive a response that will be displayed in the UI.

  • Wiederholen Sie den Vorgang, um weitere Nachrichten an Ihren bot zu senden (Sie müssen jedes Mal tippen, wenn Sie eine Nachricht übertragen möchten).Repeat the process to send more messages to your Bot (you have to tap each time you want to sen a message).

Diese Konversation veranschaulicht, wie der bot Informationen (ihren Namen) beibehalten und gleichzeitig bekannte Informationen bereitstellen kann (z. b. die Elemente, die gestockt sind).This conversation demonstrates how the Bot can retain information (your name), whilst also providing known information (such as the items that are stocked).

Einige Fragen, um den bot zu Fragen:Some questions to ask the Bot:

what do you sell? 

how much are umbrellas?

how much are raincoats?

Ihre fertige Web-App-bot-Anwendung (v4)Your finished Web App Bot (v4) application

Herzlichen Glückwunsch, Sie haben eine Mixed Reality-App erstellt, die den Azure-Web-App-bot, Microsoft bot Framework V4, nutzt.Congratulations, you built a mixed reality app that leverages the Azure Web App Bot, Microsoft Bot Framework v4.

Endgültiges Produkt

ZusatzübungenBonus exercises

Übung 1Exercise 1

Die Konversations Struktur in dieser Übungseinheit ist sehr einfach.The conversation structure in this Lab is very basic. Verwenden Sie Microsoft Luis, um den bot-Funktionen für natürliche Sprache zu verwenden.Use Microsoft LUIS to give your bot natural language understanding capabilities.

Übung 2Exercise 2

Dieses Beispiel umfasst nicht das Beenden einer Konversation und das Neustarten einer neuen Konversation.This example does not include terminating a conversation and restarting a new one. Um die bot-Funktion abzuschließen, versuchen Sie, den Abschluss der Konversation zu implementieren.To make the Bot feature complete, try to implement closure to the conversation.