MR 및 Azure 312: Bot 통합MR and Azure 312: Bot integration

참고

Mixed Reality 아카데미 자습서는 HoloLens(1세대) 및 Mixed Reality 몰입형 헤드셋을 염두에 두고 설계되었습니다.The Mixed Reality Academy tutorials were designed with HoloLens (1st gen) and Mixed Reality Immersive Headsets in mind. 따라서 이러한 디바이스 개발에 대한 지침을 계속 찾고 있는 개발자를 위해 이러한 자습서를 그대로 두는 것이 중요합니다.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. 이러한 자습서는 HoloLens 2에 사용되는 최신 도구 집합 또는 상호 작용으로 업데이트되지 않습니다.These tutorials will not be updated with the latest toolsets or interactions being used for HoloLens 2. 대신 지원되는 디바이스에서 계속 작동하도록 유지 관리됩니다.They will be maintained to continue working on the supported devices. 향후에는 HoloLens 2를 개발 하는 방법을 보여 주는 새 자습서 시리즈를 게시할 예정입니다.There will be a new series of tutorials that will be posted in the future that will demonstrate how to develop for HoloLens 2. 이 알림은 게시 될 때 해당 자습서에 대 한 링크를 사용 하 여 업데이트 됩니다.This notice will be updated with a link to those tutorials when they are posted.

이 과정에서는 Microsoft 봇 Framework V4를 사용 하 여 봇을 만들어 배포 하 고 Windows Mixed Reality 응용 프로그램을 통해 통신 하는 방법에 대해 설명 합니다.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.

Microsoft Bot Framework V4 는 개발자에 게 확장 가능 하 고 확장 가능한 봇 응용 프로그램을 빌드할 수 있는 도구를 제공 하도록 설계 된 api 집합입니다.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. 자세한 내용은 Microsoft 봇 Framework 페이지 또는 V4 Git 리포지토리를 참조 하세요.For more information, visit the Microsoft Bot Framework page or the V4 Git Repository.

이 과정을 완료 한 후 다음을 수행할 수 있는 Windows Mixed Reality 응용 프로그램을 작성 합니다.After completing this course, you will have built a Windows Mixed Reality application, which will be able to do the following:

  1. 탭 제스처 를 사용 하 여 사용자 의견을 수신 하는 봇을 시작 합니다.Use a Tap Gesture to start the bot listening for the users voice.
  2. 사용자가 무언가를 말하면 봇은 응답을 제공 하려고 합니다.When the user has said something, the bot will attempt to provide a response.
  3. Unity 장면에서 봇 근처에 있는 텍스트로 인공 지능 회신을 표시 합니다.Display the bots reply as text, positioned near the bot, in the Unity Scene.

응용 프로그램에서 결과를 디자인과 통합 하는 방법을 사용자가 결정 합니다.In your application, it is up to you as to how you will integrate the results with your design. 이 과정은 Azure 서비스를 Unity 프로젝트와 통합 하는 방법을 배울 수 있도록 설계 되었습니다.This course is designed to teach you how to integrate an Azure Service with your Unity project. 이 과정에서 얻은 지식을 사용 하 여 혼합 현실 응용 프로그램을 개선 하는 것은 사용자의 작업입니다.It is your job to use the knowledge you gain from this course to enhance your mixed reality application.

디바이스 지원Device support

과정Course HoloLensHoloLens 몰입형 헤드셋Immersive headsets
MR 및 Azure 312: Bot 통합MR and Azure 312: Bot integration ✔️✔️ ✔️✔️

참고

이 과정에서 주로 HoloLens에 초점을 맞춘 반면,이 과정에서 배운 내용을 Windows Mixed Reality 모던 (VR) 헤드셋에도 적용할 수 있습니다.While this course primarily focuses on HoloLens, you can also apply what you learn in this course to Windows Mixed Reality immersive (VR) headsets. 모던 (VR) 헤드셋은 액세스할 수 있는 카메라를 포함 하지 않으므로 PC에 연결 된 외부 카메라가 필요 합니다.Because immersive (VR) headsets do not have accessible cameras, you will need an external camera connected to your PC. 이 과정을 진행 하면서 모던 (VR) 헤드셋을 지원 하기 위해 사용 해야 하는 변경 내용에 대 한 정보를 볼 수 있습니다.As you follow along with the course, you will see notes on any changes you might need to employ to support immersive (VR) headsets.

사전 요구 사항Prerequisites

참고

이 자습서는 Unity 및 c #에 대 한 기본 경험이 있는 개발자를 위해 작성 되었습니다.This tutorial is designed for developers who have basic experience with Unity and C#. 또한이 문서에서 사전 요구 사항 및 작성 된 지침은 작성 시 테스트 되 고 확인 된 내용 (7 월 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). 도구 설치 문서에 나와 있는 것 처럼 최신 소프트웨어를 무료로 사용할 수 있지만,이 과정의 정보가 아래 나열 된 것 보다 최신 소프트웨어에서 찾을 수 있는 것으로 간주 하면 안 됩니다.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.

이 과정에는 다음 하드웨어 및 소프트웨어를 권장 합니다.We recommend the following hardware and software for this course:

시작하기 전에Before you start

  1. 이 프로젝트를 빌드하는 데 문제가 발생 하지 않도록 하려면 루트 또는 루트 폴더에이 자습서에서 언급 한 프로젝트를 만드는 것이 좋습니다. (긴 폴더 경로는 빌드 시에 문제를 일으킬 수 있습니다.)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. HoloLens를 설정 하 고 테스트 합니다.Set up and test your HoloLens. HoloLens를 설정 하는 데 지원이 필요한 경우 hololens 설정 문서를 방문해야 합니다.If you need support setting up your HoloLens, make sure to visit the HoloLens setup article.
  3. 새 HoloLens 앱 개발을 시작할 때 보정 및 센서 조정을 수행 하는 것이 좋습니다 (경우에 따라 각 사용자에 대해 해당 작업을 수행 하는 데 도움이 될 수 있음).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).

보정에 대 한 도움말을 보려면 HoloLens 보정 문서에대 한 다음 링크를 참조 하세요.For help on Calibration, please follow this link to the HoloLens Calibration article.

센서 조정에 대 한 도움말을 보려면 HoloLens 센서 조정 문서에 대 한 링크를참조 하세요.For help on Sensor Tuning, please follow this link to the HoloLens Sensor Tuning article.

1 장-Bot 응용 프로그램 만들기Chapter 1 – Create the Bot application

첫 번째 단계는 bot을 로컬 ASP.Net Core 웹 응용 프로그램으로 만드는 것입니다.The first step is to create your bot as a local ASP.Net Core Web application. 이를 완료 하 고 테스트 한 후에는 Azure Portal에 게시 합니다.Once you have finished and tested it, you will publish it to the Azure Portal.

  1. Visual Studio를 엽니다.Open Visual Studio. 새 프로젝트를 만들고, 프로젝트 형식으로 ASP NET Core 웹 응용 프로그램 을 선택 하 고 (하위 섹션 .net core 아래에서 찾을 수 있습니다.) 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. 확인 을 클릭합니다.Click OK.

  2. 표시 되는 창에서 비어 있음 을 선택 합니다.In the Window that will appear select Empty. 또한 대상이 ASP NET Core 2.0 로 설정 되 고 인증이 인증 없음 으로 설정 되어 있는지 확인 합니다.Also make sure the target is set to ASP NET Core 2.0 and the Authentication is set to No Authentication. 확인 을 클릭합니다.Click OK.

    Bot 응용 프로그램 만들기

  3. 이제 솔루션이 열립니다.The solution will now open. 솔루션 탐색기 에서 솔루션 mybot 을 마우스 오른쪽 단추로 클릭 하 고 솔루션용 NuGet 패키지 관리 를 클릭 합니다.Right-click on Solution Mybot in the Solution Explorer and click on Manage NuGet Packages for Solution.

    Bot 응용 프로그램 만들기

  4. 찾아보기 탭에서 Microsoft .. m a. a.. m a.. i. In the Browse tab, search for Microsoft.Bot.Builder.Integration.AspNet.Core (make sure you have Include pre-release checked). 패키지 버전 4.0.1-미리 보기 를 선택 하 고 프로젝트 상자를 선택 합니다.Select the package version 4.0.1-preview, and tick the project boxes. 그런 다음 설치 를 클릭 합니다.Then click on Install. 이제 Bot Framework v4 에 필요한 라이브러리를 설치 했습니다.You have now installed the libraries needed for the Bot Framework v4. NuGet 페이지를 닫습니다.Close the NuGet page.

    Bot 응용 프로그램 만들기

  5. 솔루션 탐색기 에서 프로젝트 mybot 을 마우스 오른쪽 단추로 클릭 하 고 클래스 추가를 클릭 | 합니다.Right-click on your Project, MyBot, in the Solution Explorer and click on Add | Class.

    Bot 응용 프로그램 만들기

  6. 클래스 이름을 Mybot 로 설정 하 고 추가 를 클릭 합니다.Name the class MyBot and click on Add.

    Bot 응용 프로그램 만들기

  7. 이전 지점을 반복 하 여 ConversationContext 라는 다른 클래스를 만듭니다.Repeat the previous point, to create another class named ConversationContext.

  8. 솔루션 탐색기 에서 wwwroot 를 마우스 오른쪽 단추로 클릭 하 고 | 새 항목 추가를 클릭 합니다.Right-click on wwwroot in the Solution Explorer and click on Add | New Item. HTML 페이지 를 선택 합니다 .이 페이지는 하위 섹션 웹에서 찾을 수 있습니다.Select HTML Page (you will find it under the subsection Web). 파일 이름을 default.html 로 합니다.Name the file default.html. 추가 를 클릭합니다.Click Add.

    Bot 응용 프로그램 만들기

  9. 솔루션 탐색기 의 클래스/개체 목록은 아래 이미지와 같습니다.The list of classes / objects in the Solution Explorer should look like the image below.

    Bot 응용 프로그램 만들기

  10. ConversationContext 클래스를 두 번 클릭 합니다.Double-click on the ConversationContext class. 이 클래스는 봇에서 대화의 컨텍스트를 유지 하는 데 사용 하는 변수를 보유 합니다.This class is responsible for holding the variables used by the bot to maintain the context of the conversation. 이러한 대화 컨텍스트 값은이 클래스의 인스턴스에서 유지 관리 됩니다. Mybot 클래스의 인스턴스는 활동이 수신 될 때마다 새로 고쳐집니다.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. 클래스에 다음 코드를 추가 합니다.Add the following code to the class:

    namespace MyBot
    {
        public static class ConversationContext
        {
            internal static string userName;
    
            internal static string userMsg;
        }
    }
    
  11. Mybot 클래스를 두 번 클릭 합니다.Double-click on the MyBot class. 이 클래스는 고객의 들어오는 활동에 의해 호출 되는 처리기를 호스팅합니다.This class will host the handlers called by any incoming activity from the customer. 이 클래스에서는 봇과 고객 간에 대화를 빌드하는 데 사용 되는 코드를 추가 합니다.In this class you will add the code used to build the conversation between the bot and the customer. 앞에서 설명한 것 처럼이 클래스의 인스턴스는 활동이 수신 될 때마다 초기화 됩니다.As mentioned earlier, an instance of this class is initialized each time an activity is received. 이 클래스에 다음 코드를 추가 합니다.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. Startup 클래스를 두 번 클릭 합니다.Double-click on the Startup class. 이 클래스는 bot를 초기화 합니다.This class will initialize the bot. 클래스에 다음 코드를 추가 합니다.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. 프로그램 클래스 파일을 열고 코드의 코드가 다음과 같은지 확인 합니다.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. 변경 내용을 저장 해야 > 합니다. 이렇게 하려면 Visual Studio의 맨 위에 있는 도구 모음에서 파일 모두 저장 으로 이동 합니다.Remember to save your changes, to do so, go to File > Save All, from the toolbar at the top of Visual Studio.

2 장-Azure Bot Service 만들기Chapter 2 - Create the Azure Bot Service

이제 bot에 대 한 코드를 빌드 했으므로 Azure Portal에서 웹 앱 봇 서비스의 인스턴스에 게시 해야 합니다.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. 이 장에서는 Azure에서 봇 서비스를 만들고 구성 하는 방법을 보여 주고 코드를 게시 합니다.This Chapter will show you how to create and configure the Bot Service on Azure and then publish your code to it.

  1. 먼저, Azure Portal ()에 로그인 https://portal.azure.com) 합니다.First, log in to the Azure Portal (https://portal.azure.com).

    1. 아직 Azure 계정이 없는 경우 새로 만들어야 합니다.If you do not already have an Azure account, you will need to create one. 교실 또는 랩 상황에서이 자습서를 수행 하는 경우 강사 또는 proctors 중 하나에 문의 하 여 새 계정을 설정 하는 데 도움이 될 수 있습니다.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. 로그인 되 면 왼쪽 위 모서리에서 리소스 만들기 를 클릭 하 고 웹 앱 봇 을 검색 한 다음 Enter 키 를 누릅니다.Once you are logged in, click on Create a resource in the top left corner, and search for Web App bot, and click Enter.

    Azure Bot Service 만들기

  3. 새 페이지에는 웹 앱 봇 서비스에 대 한 설명이 제공 됩니다.The new page will provide a description of the Web App Bot Service. 이 페이지의 왼쪽 아래에서 만들기 단추를 선택 하 여이 서비스와의 연결을 만듭니다.At the bottom left of this page, select the Create button, to create an association with this Service.

    Azure Bot Service 만들기

  4. 만들기 를 클릭 하면 다음을 클릭 합니다.Once you have clicked on Create:

    1. 이 서비스 인스턴스의 원하는 이름을 삽입 합니다.Insert your desired Name for this Service instance.

    2. 구독 을 선택합니다.Select a Subscription.

    3. 리소스 그룹을 선택 하거나 새 리소스 그룹 을 만듭니다.Choose a Resource Group or create a new one. 리소스 그룹은 Azure 자산의 컬렉션에 대 한 청구를 모니터링 하 고, 액세스를 제어 하 고, 프로 비전 하 고, 관리 하는 방법을 제공 합니다.A resource group provides a way to monitor, control access, provision and manage billing for a collection of Azure assets. 단일 프로젝트와 연결 된 모든 Azure 서비스 (예: 이러한 과정)를 공용 리소스 그룹에 유지 하는 것이 좋습니다.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).

      Azure 리소스 그룹에 대 한 자세한 내용은 다음 링크 를 참조 하세요.If you wish to read more about Azure Resource Groups, please follow this link

    4. 새 리소스 그룹을 만드는 경우 리소스 그룹의 위치를 확인 합니다.Determine the Location for your resource group (if you are creating a new Resource Group). 위치는 응용 프로그램이 실행 되는 영역에 있는 것이 가장 좋습니다.The location would ideally be in the region where the application would run. 일부 Azure 자산은 특정 지역 에서만 사용할 수 있습니다.Some Azure assets are only available in certain regions.

    5. 적절 한 가격 책정 계층 을 선택 합니다. 웹 앱 봇 서비스를 처음 만드는 경우 무료 계층 (명명 된 F0)을 사용할 수 있어야 합니다.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. 앱 이름은 봇 이름과 동일 하 게 남겨둘 수 있습니다.App name can just be left the same as the Bot name.

    7. Bot 템플릿을 Basic (c #) 으로 그대로 둡니다.Leave the Bot template as Basic (C#).

    8. 계정에 대해 App service 계획/위치 를 자동으로 채워야 합니다.App service plan/Location should have been auto-filled for your account.

    9. Bot을 호스트 하는 데 사용할 Azure Storage 를 설정 합니다.Set the Azure Storage that you wish to use to host your Bot. 아직 없는 경우 여기에서 만들 수 있습니다.If you dont have one already, you can create it here.

    10. 또한이 서비스에 적용 된 사용 약관을 이해 했는지 확인 해야 합니다.You will also need to confirm that you have understood the Terms and Conditions applied to this Service.

    11. 만들기를 클릭합니다.Click Create.

      Azure Bot Service 만들기

  5. 만들기 를 클릭 한 후에는 서비스를 만들 때까지 기다려야 합니다 .이 작업이 몇 분 정도 걸릴 수 있습니다.Once you have clicked on Create, you will have to wait for the Service to be created, this might take a minute.

  6. 서비스 인스턴스를 만든 후 알림이 포털에 표시 됩니다.A notification will appear in the Portal once the Service instance is created.

    Azure Bot Service 만들기

  7. 알림을 클릭 하 여 새 서비스 인스턴스를 탐색 합니다.Click on the notification to explore your new Service instance.

    Azure Bot Service 만들기

  8. 알림에서 리소스로 이동 단추를 클릭 하 여 새 서비스 인스턴스를 탐색 합니다.Click the Go to resource button in the notification to explore your new Service instance. 새 Azure 서비스 인스턴스로 이동 됩니다.You will be taken to your new Azure Service instance.

    Azure Bot Service 만들기

  9. 이 시점에서 클라이언트 응용 프로그램이이 Bot 서비스와 통신할 수 있도록 Direct Line 이라는 기능을 설정 해야 합니다.At this point you need to setup a feature called Direct Line to allow your client application to communicate with this Bot Service. 채널 을 클릭 한 다음, 추천 채널 추가 섹션에서 직접 선 채널 구성 을 클릭 합니다.Click on Channels, then in the Add a featured channel section, click on Configure Direct Line channel.

    Azure Bot Service 만들기

  10. 이 페이지에서는 클라이언트 앱에서 봇으로 인증할 수 있는 비밀 키 를 찾을 수 있습니다.In this page you will find the Secret keys that will allow your client app to authenticate with the bot. 표시 단추를 클릭 하 고, 프로젝트에서 나중에 필요 하므로 표시 된 키 중 하나를 복사 합니다.Click on the Show button and take a copy of one of the displayed Keys, as you will need this later in your project.

    Azure Bot Service 만들기

3 장 – Azure 웹 앱 봇 서비스에 봇 게시Chapter 3 – Publish the Bot to the Azure Web App Bot Service

이제 서비스가 준비 되었으므로 새로 만든 웹 앱 봇 서비스에 이전에 빌드한 봇 코드를 게시 해야 합니다.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.

참고

Bot 솔루션/코드를 변경할 때마다 Azure 서비스에 봇을 게시 해야 합니다.You will have to publish your Bot to the Azure Service every time you make changes to the Bot solution / code.

  1. 이전에 만든 Visual Studio 솔루션으로 돌아갑니다.Go back to your Visual Studio Solution that you created previously.

  2. 솔루션 탐색기 에서 mybot 프로젝트를 마우스 오른쪽 단추로 클릭 하 고 게시 를 클릭 합니다.Right-click on your MyBot project, in the Solution Explorer, then click on Publish.

    Azure 웹 앱 봇 서비스에 봇 게시

  3. 게시 대상 선택 페이지에서 App Service 를 클릭 한 다음 기존 프로필 만들기를 선택 합니다. 마지막으로 프로필 만들기 를 클릭 합니다 (표시 되지 않는 경우 게시 단추와 함께 드롭다운 화살표를 클릭 해야 할 수 있음).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).

    Azure 웹 앱 봇 서비스에 봇 게시

  4. Microsoft 계정에 아직 로그인 하지 않은 경우 여기에서 작업을 수행 해야 합니다.If you are not yet logged in into your Microsoft Account, you have to do it here.

  5. 게시 페이지에서 웹 앱 봇 서비스 생성에 사용한 것과 동일한 구독 을 설정 해야 합니다.On the Publish page you will find you have to set the same Subscription that you used for the Web App Bot Service creation. 그런 다음 보기리소스 그룹 으로 설정 하 고 드롭다운 폴더 구조에서 이전에 만든 리소스 그룹 을 선택 합니다.Then set the View as Resource Group and, in the drop down folder structure, select the Resource Group you have created previously. 확인 을 클릭합니다.Click OK.

    Azure 웹 앱 봇 서비스에 봇 게시

  6. 이제 게시 단추를 클릭 하 고 봇이 게시 될 때까지 기다립니다 (몇 분 정도 걸릴 수 있음).Now click on the Publish button, and wait for the Bot to be published (it might take a few minutes).

    Azure 웹 앱 봇 서비스에 봇 게시

4 장-Unity 프로젝트 설정Chapter 4 – Set up the Unity project

다음은 혼합 현실를 사용 하 여 개발 하기 위한 일반적인 설정으로, 다른 프로젝트에 적합 한 템플릿입니다.The following is a typical set up for developing with mixed reality, and as such, is a good template for other projects.

  1. Unity 를 열고 새로 만들기 를 클릭 합니다.Open Unity and click New.

    Unity 프로젝트 설정

  2. 이제 Unity 프로젝트 이름을 제공 해야 합니다.You will now need to provide a Unity project name. HoloLens 봇 을 삽입 합니다.Insert HoloLens Bot. 프로젝트 템플릿이 3d 로 설정 되었는지 확인 합니다.Make sure the project template is set to 3D. 위치를 적절 한 위치 에 적절 하 게 설정 합니다. 루트 디렉터리에 가까울수록 좋습니다.Set the Location to somewhere appropriate for you (remember, closer to root directories is better). 그런 다음 프로젝트 만들기 를 클릭 합니다.Then, click Create project.

    Unity 프로젝트 설정

  3. Unity를 연 상태에서 기본 스크립트 편집기Visual Studio 로 설정 되어 있는지 확인 하는 것이 좋습니다.With Unity open, it is worth checking the default Script Editor is set to Visual Studio. > 기본 설정 편집 으로 이동한 다음 새 창에서 외부 도구 로 이동 합니다.Go to Edit > Preferences and then from the new window, navigate to External Tools. 외부 스크립트 편집기Visual Studio 2017 로 변경 합니다.Change External Script Editor to Visual Studio 2017. 기본 설정 창을 닫습니다.Close the Preferences window.

    Unity 프로젝트 설정

  4. 그런 다음 파일 > 빌드 설정 으로 이동 하 고 유니버설 Windows 플랫폼 을 선택한 후 플랫폼 전환 단추를 클릭 하 여 선택 항목을 적용 합니다.Next, go to File > Build Settings and select Universal Windows Platform, then click on the Switch Platform button to apply your selection.

    Unity 프로젝트 설정

  5. 아직 파일 > 빌드 설정을 사용 하 고 있는지 확인 합니다.While still in File > Build Settings and make sure that:

    1. 대상 장치가 HoloLens 로 설정 됨Target Device is set to HoloLens

      모던 헤드셋의 경우 대상 장치모든 장치로 설정 합니다.For the immersive headsets, set Target Device to Any Device.

    2. 빌드 형식이 D3D 로 설정 됩니다.Build Type is set to D3D

    3. SDK최신 설치 로 설정 됨SDK is set to Latest installed

    4. Visual Studio 버전이 최신 설치 로 설정 됨Visual Studio Version is set to Latest installed

    5. 빌드 및 실행로컬 컴퓨터로 설정 됨Build and Run is set to Local Machine

    6. 장면을 저장 하 고 빌드에 추가 합니다.Save the scene and add it to the build.

      1. 이렇게 하려면 열려 있는 장면 추가 를 선택 합니다.Do this by selecting Add Open Scenes. 저장 창이 표시 됩니다.A save window will appear.

        Unity 프로젝트 설정

      2. 이에 대 한 새 폴더를 만들고 나중에 장면을 만든 다음 새 폴더 단추를 선택 하 여 새 폴더를 만들고 이름을 장면을 로 지정한 다음Create a new folder for this, and any future, scene, then select the New folder button, to create a new folder, name it Scenes.

        Unity 프로젝트 설정

      3. 새로 만든 장면 폴더를 연 다음 파일 이름: 텍스트 필드에 BotScene 를 입력 하 고 저장 을 클릭 합니다.Open your newly created Scenes folder, and then in the File name: text field, type BotScene, then click on Save.

        Unity 프로젝트 설정

    7. 빌드 설정 의 나머지 설정은 지금은 기본값으로 남겨 두어야 합니다.The remaining settings, in Build Settings, should be left as default for now.

  6. 빌드 설정 창에서 플레이어 설정 단추를 클릭 하면 검사기 가 있는 공간에서 관련 패널이 열립니다.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.

    Unity 프로젝트 설정

  7. 이 패널에서 몇 가지 설정을 확인 해야 합니다.In this panel, a few settings need to be verified:

    1. 기타 설정 탭에서 다음을 수행 합니다.In the Other Settings tab:

      1. Scripting Runtime 버전실험적 (NET 4.6 동급) 이어야 합니다. 이를 변경 하려면 편집기를 다시 시작 해야 합니다.Scripting Runtime Version should be Experimental (NET 4.6 Equivalent); changing this will require a restart of the Editor.

      2. Scripting 백엔드.net 이어야 합니다.Scripting Backend should be .NET

      3. API 호환성 수준은 .net 4.6 이어야 합니다.API Compatibility Level should be .NET 4.6

        Unity 프로젝트 설정

    2. 게시 설정 탭의 기능 아래에서 다음을 확인 합니다.Within the Publishing Settings tab, under Capabilities, check:

      • InternetClientInternetClient

      • 마이크Microphone

        Unity 프로젝트 설정

    3. 패널의 아래쪽에서 XR 설정 ( 게시 설정 아래에 있음), 지원 되는 틱 가상 현실, Windows Mixed reality SDK 가 추가 되어 있는지 확인 합니다.Further down the panel, in XR Settings (found below Publish Settings), tick Virtual Reality Supported, make sure the Windows Mixed Reality SDK is added.

      Unity 프로젝트 설정

  8. 빌드 설정 으로 돌아가기 Unity c # 프로젝트는 더 이상 회색으로 표시 되지 않습니다. 이 옆의 확인란을 선택 합니다.Back in Build Settings Unity C# Projects is no longer greyed out; tick the checkbox next to this.

  9. 빌드 설정 창을 닫습니다.Close the Build Settings window.

  10. 장면 및 프로젝트를 저장 합니다 (파일 > 장면/파일 저장 > 프로젝트 저장).Save your scene and project (FILE > SAVE SCENE / FILE > SAVE PROJECT).

5 장-카메라 설정Chapter 5 – Camera setup

중요

이 과정의 Unity 설정 구성 요소를 건너뛰고 계속 해 서 코드를 계속 사용 하려면 312이 unitypackage를 다운로드 하 여 프로젝트에 사용자 지정 패키지로가져온 후 7 장에서 계속 진행 합니다.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. 계층 패널 에서 기본 카메라 를 선택 합니다.In the Hierarchy panel, select the Main Camera.

  2. 선택한 후에는 검사기 패널 에서 주 카메라 의 모든 구성 요소를 볼 수 있습니다.Once selected, you will be able to see all the components of the Main Camera in the Inspector panel.

    1. 카메라 개체 의 이름을 주 카메라로 지정 해야 합니다 (철자 확인).The Camera object must be named Main Camera (note the spelling)
    2. 기본 카메라 태그maincamera 로 설정 되어야 합니다 (철자 확인).The Main Camera Tag must be set to MainCamera (note the spelling)
    3. 변환 위치가 0, 0, 0 으로 설정 되어 있는지 확인 합니다.Make sure the Transform Position is set to 0, 0, 0
    4. Clear FlagsSolid 색 으로 설정 합니다.Set Clear Flags to Solid Color.
    5. 카메라 구성 요소의 배경색검은색, 알파 0 (16 진수 코드: #00000000) 으로 설정 합니다.Set the Background Color of the Camera component to Black, Alpha 0 (Hex Code: #00000000)

    카메라 설정

6 장 – Newtonsoft.json 라이브러리 가져오기Chapter 6 – Import the Newtonsoft library

받아서 봇 서비스로 전송 되는 개체를 deserialize 하 고 serialize 할 수 있도록 newtonsoft.json 라이브러리를 다운로드 해야 합니다.To help you deserialize and serialize objects received and sent to the Bot Service you need to download the Newtonsoft library. 여기에서 올바른 Unity 폴더 구조를 사용 하 여 이미 구성 된 호환 버전을 찾을 수 있습니다.You will find a compatible version already organized with the correct Unity folder structure here.

Newtonsoft.json 라이브러리를 프로젝트로 가져오려면이 과정에서 제공 되는 Unity 패키지를 사용 합니다.To import the Newtonsoft library into your project, use the Unity Package which came with this course.

  1. 자산 > 가져오기 패키지 > 사용자 지정 패키지 메뉴 옵션을 사용 하 여 unitypackage을 Unity에 추가 합니다.Add the .unitypackage to Unity by using the Assets > Import Package > Custom Package menu option.

    Newtonsoft.json 라이브러리 가져오기

  2. 표시 되는 Unity 패키지 가져오기 상자에서 플러그 인 을 포함 하 여 모든 항목을 선택 했는지 확인 합니다.In the Import Unity Package box that pops up, ensure everything under (and including) Plugins is selected.

    Newtonsoft.json 라이브러리 가져오기

  3. 가져오기 단추를 클릭 하 여 프로젝트에 항목을 추가 합니다.Click the Import button to add the items to your project.

  4. 프로젝트 뷰에서 플러그 인의 newtonsoft.json 폴더로 이동 하 고 newtonsoft.json 플러그 인을 선택 합니다.Go to the Newtonsoft folder under Plugins in the project view and select the Newtonsoft plugin.

  5. Newtonsoft.json 플러그 인을 선택한 상태에서 모든 플랫폼이 선택 취소 되어 있는지 확인 한 다음 WSAPlayer선택 취소 되어 있는지 확인 하 고 적용 을 클릭 합니다.With the Newtonsoft plugin selected, ensure that Any Platform is unchecked, then ensure that WSAPlayer is also unchecked, then click Apply. 이는 파일이 올바르게 구성 되었는지 확인 하기 위한 것입니다.This is just to confirm that the files are configured correctly.

    참고

    이러한 플러그 인을 표시 하면 Unity 편집기 에서만 사용 하도록 구성 됩니다.Marking these plugins configures them to only be used in the Unity Editor. WSA 폴더에는 프로젝트를 Unity에서 내보낸 후에 사용 되는 다른 집합이 있습니다.There are a different set of them in the WSA folder which will be used after the project is exported from Unity.

  6. 다음으로 newtonsoft.json 폴더 내에서 WSA 폴더를 열어야 합니다.Next, you need to open the WSA folder, within the Newtonsoft folder. 방금 구성한 파일의 복사본이 표시 됩니다.You will see a copy of the same file you just configured. 파일을 선택 하 고 검사기에서 다음을 확인 합니다.Select the file, and then in the inspector, ensure that

    • 모든 플랫폼이 선택 취소 되어 있음Any Platform is unchecked
    • WSAPlayer선택 됩니다.only WSAPlayer is checked
    • Dont 프로세스선택 했습니다 .Dont process is checked

7 장-BotTag 만들기Chapter 7 – Create the BotTag

  1. BotTag 라는 새 Tag 개체를 만듭니다.Create a new Tag object called BotTag. 장면에서 주 카메라를 선택 합니다.Select the Main Camera in the scene. 검사기 패널에서 태그 드롭다운 메뉴를 클릭 합니다.Click on the Tag drop down menu in the Inspector panel. 태그 추가 를 클릭 합니다.Click on Add Tag.

    카메라 설정

  2. 기호를 클릭 + 합니다.Click on the + symbol. 태그 의 이름을 BotTag, Save 로 합니다.Name the new Tag as BotTag, Save.

    카메라 설정

경고

BotTag 를 기본 카메라에 적용 하지 마십시오 .Do not apply the BotTag to the Main Camera. 실수로이 작업을 수행한 경우 주 카메라 태그를 Maincamera 로 다시 변경 해야 합니다.If you have accidentally done this, make sure to change the Main Camera tag back to MainCamera.

8 장 – BotObjects 클래스 만들기Chapter 8 – Create the BotObjects class

만들어야 하는 첫 번째 스크립트는 BotObjects 클래스입니다 .이 클래스는 일련의 다른 클래스 개체를 동일한 스크립트 내에 저장 하 고 장면의 다른 스크립트에서 액세스할 수 있도록 만들어지는 빈 클래스입니다.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.

이 클래스를 만드는 것은 전적으로 아키텍처를 선택 하는 것입니다. 이러한 개체는이 과정의 뒷부분에서 만들 Bot 스크립트에서 호스팅될 수 있습니다.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.

이 클래스를 만들려면:To create this class:

  1. 프로젝트 패널 을 마우스 오른쪽 단추로 클릭 하 고 > 폴더를 만듭니다.Right-click in the Project panel, then Create > Folder. 폴더 이름을 스크립트 로 합니다.Name the folder Scripts.

    스크립트 폴더를 만듭니다.

  2. Scripts 폴더를 두 번 클릭 하 여 엽니다.Double-click on the Scripts folder to open it. 그런 다음 해당 폴더 내에서를 마우스 오른쪽 단추로 클릭 하 고 Create > c # 스크립트 를 선택 합니다.Then within that folder, right-click, and select Create > C# Script. 스크립트 이름을 BotObjects 로 합니다.Name the script BotObjects.

  3. BotObjects 스크립트를 두 번 클릭 하 여 Visual Studio 에서 엽니다.Double-click on the new BotObjects script to open it with Visual Studio.

  4. 스크립트의 내용을 삭제 하 고 다음 코드로 바꿉니다.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. Unity 로 반환 하기 전에 Visual Studio 에서 변경 내용을 저장 해야 합니다.Be sure to save your changes in Visual Studio before returning to Unity.

9 장 – GazeInput 클래스 만들기Chapter 9 – Create the GazeInput class

만들려는 다음 클래스는 GazeInput 클래스입니다.The next class you are going to create is the GazeInput class. 이 클래스는 다음을 담당 합니다.This class is responsible for:

  • 플레이어의 응시 를 나타내는 커서를 만듭니다.Creating a cursor that will represent the gaze of the player.
  • 플레이어를 응시 하 고 검색 된 개체에 대 한 참조를 보유 하는 개체를 검색 합니다.Detecting objects hit by the gaze of the player, and holding a reference to detected objects.

이 클래스를 만들려면:To create this class:

  1. 이전에 만든 스크립트 폴더로 이동 합니다.Go to the Scripts folder you created previously.

  2. 폴더 내부를 마우스 오른쪽 단추로 클릭 하 > c # 스크립트를 만듭니다.Right-click inside the folder, Create > C# Script. GazeInput 스크립트를 호출 합니다.Call the script GazeInput.

  3. GazeInput 스크립트를 두 번 클릭 하 여 Visual Studio 에서 엽니다.Double-click on the new GazeInput script to open it with Visual Studio.

  4. 클래스 이름 바로 위에 다음 줄을 삽입 합니다.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. 그런 다음 GazeInput 클래스 내에서 Start () 메서드 위의 다음 변수를 추가 합니다.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. Start () 메서드에 대 한 코드를 추가 해야 합니다.Code for Start() method should be added. 클래스가 초기화 될 때 호출 됩니다.This will be called when the class initializes:

        /// <summary>
        /// Start method used upon initialization.
        /// </summary>
        internal virtual void Start()
        {
            FocusedObject = null;
            Cursor = CreateCursor();
        }
    
  7. 응시 커서를 인스턴스화하고 설정 하는 메서드를 구현 합니다.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. 기본 카메라에서 Raycast를 설정 하 고 현재 포커스가 있는 개체를 추적 하는 메서드를 구현 합니다.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. Unity 로 반환 하기 전에 Visual Studio 에서 변경 내용을 저장 해야 합니다.Be sure to save your changes in Visual Studio before returning to Unity.

10 장 – Bot 클래스 만들기Chapter 10 – Create the Bot class

지금 만들려는 스크립트를 이라고 합니다.The script you are going to create now is called Bot. 이 클래스는 응용 프로그램의 핵심 클래스 이며 다음을 저장 합니다.This is the core class of your application, it stores:

  • 웹 앱 봇 자격 증명Your Web App Bot credentials
  • 사용자 음성 명령을 수집 하는 메서드The method that collects the user voice commands
  • 웹 앱 봇에서 대화를 시작 하는 데 필요한 방법The method necessary to initiate conversations with your Web App Bot
  • 웹 앱 봇에 메시지를 보내는 데 필요한 방법The method necessary to send messages to your Web App Bot

Bot Service로 메시지를 보내기 위해 SendMessageToBot () 코 루틴는 사용자가 보낸 데이터로 bot Framework에서 인식 하는 개체인 활동을 빌드합니다.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.

이 클래스를 만들려면:To create this class:

  1. Scripts 폴더를 두 번 클릭 하 여 엽니다.Double-click on the Scripts folder, to open it.

  2. Scripts 폴더 내부를 마우스 오른쪽 단추로 클릭 하 고 > c # 스크립트 만들기 를 클릭 합니다.Right-click inside the Scripts folder, click Create > C# Script. 스크립트의 이름을 Bot 로 합니다.Name the script Bot.

  3. 새 스크립트를 두 번 클릭 하 여 Visual Studio에서 엽니다.Double-click on the new script to open it with Visual Studio.

  4. Bot 클래스의 위쪽에서 다음과 같이 네임 스페이스를 업데이트 합니다.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. Bot 클래스 내에서 다음 변수를 추가 합니다.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;
    

    참고

    BotSecret 변수에 봇 비밀 키 를 삽입 했는지 확인 합니다.Make sure you insert your Bot Secret Key into the botSecret variable. 이 과정의 시작 부분에 있는 2 장, 10 단계 에서 봇 비밀 키 를 적어 두는 것을 볼 수 있습니다.You will have noted your Bot Secret Key at the beginning of this course, in Chapter 2, step 10.

  6. 이제 해제 ()Start () 에 대 한 코드를 추가 해야 합니다.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. 음성 캡처가 시작 되 고 끝날 때 음성 라이브러리에서 호출 하는 두 처리기를 추가 합니다.Add the two handlers that are called by the speech libraries when voice capture begins and ends. DictationRecognizer 사용자가 말하기를 중지 하면 자동으로 사용자 음성 캡처가 중지 됩니다.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. 다음 처리기는 사용자 음성 입력의 결과를 수집 하 고 웹 앱 봇 서비스에 메시지를 전송 하는 것을 담당 하는 코 루틴을 호출 합니다.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. 다음 코 루틴는 Bot를 사용 하 여 대화를 시작 하기 위해 호출 됩니다.The following coroutine is called to begin a conversation with the Bot. 대화 호출이 완료 되 면 활동을 SendMessageToCoroutine () 를 호출 하는 일련의 매개 변수를 전달 하 여 해당 활동을 빈 메시지로 전달 하 게 됩니다.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. 이 작업은 봇 서비스에 대화를 시작 하 라는 메시지를 표시 하기 위해 수행 됩니다.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. 다음 코 루틴는 Bot 서비스로 보낼 활동을 빌드하기 위해 호출 됩니다.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. 다음 코 루틴는 작업을 Bot Service로 보낸 후 응답을 요청 하기 위해 호출 됩니다.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. 이 클래스에 추가할 마지막 메서드는 장면에 메시지를 표시 하는 데 필요 합니다.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;
        }
    

    참고

    Unity 편집기 콘솔에 SceneOrganiser 클래스 누락에 대 한 오류가 표시 될 수 있습니다.You may see an error within the Unity Editor Console, about missing the SceneOrganiser class. 자습서의 뒷부분에서이 클래스를 만들 때이 메시지는 무시 합니다.Disregard this message, as you will create this class later in the tutorial.

  13. Unity 로 반환 하기 전에 Visual Studio 에서 변경 내용을 저장 해야 합니다.Be sure to save your changes in Visual Studio before returning to Unity.

11 장-상호 작용 클래스 만들기Chapter 11 – Create the Interactions class

지금 만들 클래스를 상호 작용 이라고 합니다.The class you are going to create now is called Interactions. 이 클래스는 사용자의 HoloLens 탭 입력을 검색 하는 데 사용 됩니다.This class is used to detect the HoloLens Tap Input from the user.

장면에서 개체를 확인 하는 동안 사용자를 누르면 봇이 음성 입력을 수신할 준비가 되 면 봇 개체가 색을 빨강 으로 변경 하 고 음성 입력 수신 대기를 시작 합니다.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.

이 클래스는 GazeInput 클래스에서 상속 하므로 base 를 사용 하는 것으로 표시 된 해당 클래스에서 Start () 메서드 및 변수를 참조할 수 있습니다.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.

이 클래스를 만들려면:To create this class:

  1. Scripts 폴더를 두 번 클릭 하 여 엽니다.Double-click on the Scripts folder, to open it.

  2. Scripts 폴더 내부를 마우스 오른쪽 단추로 클릭 하 고 > c # 스크립트 만들기 를 클릭 합니다.Right-click inside the Scripts folder, click Create > C# Script. 스크립트 상호 작용 의 이름을로 합니다.Name the script Interactions.

  3. 새 스크립트를 두 번 클릭 하 여 Visual Studio에서 엽니다.Double-click on the new script to open it with Visual Studio.

  4. 상호 작용 클래스의 위쪽에서 네임 스페이스와 클래스 상속을 다음과 같이 업데이트 합니다.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. 상호 작용 클래스 내에서 다음 변수를 추가 합니다.Inside the Interactions class add the following variable:

        /// <summary>
        /// Allows input recognition with the HoloLens
        /// </summary>
        private GestureRecognizer _gestureRecognizer;
    
  6. 그런 다음 Start () 메서드를 추가 합니다.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. 사용자가 HoloLens 카메라 앞에서 탭 제스처를 수행할 때 트리거되는 처리기를 추가 합니다.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. Unity 로 반환 하기 전에 Visual Studio 에서 변경 내용을 저장 해야 합니다.Be sure to save your changes in Visual Studio before returning to Unity.

12 장 – SceneOrganiser 클래스 만들기Chapter 12 – Create the SceneOrganiser class

이 랩에서 필요한 마지막 클래스를 SceneOrganiser 라고 합니다.The last class required in this Lab is called SceneOrganiser. 이 클래스는 기본 카메라에 구성 요소 및 스크립트를 추가 하 고 장면에 적절 한 개체를 만들어 프로그래밍 방식으로 장면을 설정 합니다.This class will setup the scene programmatically, by adding components and scripts to the Main Camera, and creating the appropriate objects in the scene.

이 클래스를 만들려면:To create this class:

  1. Scripts 폴더를 두 번 클릭 하 여 엽니다.Double-click on the Scripts folder, to open it.

  2. Scripts 폴더 내부를 마우스 오른쪽 단추로 클릭 하 고 > c # 스크립트 만들기 를 클릭 합니다.Right-click inside the Scripts folder, click Create > C# Script. 스크립트 이름을 SceneOrganiser 로 합니다.Name the script SceneOrganiser.

  3. 새 스크립트를 두 번 클릭 하 여 Visual Studio에서 엽니다.Double-click on the new script to open it with Visual Studio.

  4. SceneOrganiser 클래스 내에서 다음 변수를 추가 합니다.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. 그런 다음, no ()Start () 메서드를 추가 합니다.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. 장면에서 봇 개체를 만들고 매개 변수 및 구성 요소를 설정 하는 다음 메서드를 추가 합니다.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. 다음 메서드를 추가 하 여 화면에 UI 개체를 만들고 봇의 응답을 나타냅니다.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. Unity 로 반환 하기 전에 Visual Studio 에서 변경 내용을 저장 해야 합니다.Be sure to save your changes in Visual Studio before returning to Unity.

  9. Unity 편집기에서 SceneOrganiser 스크립트를 Scripts 폴더에서 주 카메라로 끌어 옵니다.In the Unity Editor, drag the SceneOrganiser script from the Scripts folder to the Main Camera. 이제 아래 이미지에 표시 된 것 처럼 장면 Organiser 구성 요소가 기본 카메라 개체에 표시 됩니다.The Scene Organiser component should now appear on the Main Camera object, as shown in the image below.

    Azure Bot Service 만들기

13 장 – 빌드하기 전Chapter 13 – Before building

응용 프로그램에 대 한 철저 한 테스트를 수행 하려면 HoloLens에 테스트용으로 로드 해야 합니다.To perform a thorough test of your application you will need to sideload it onto your HoloLens. 이렇게 하려면 먼저 다음을 확인 해야 합니다.Before you do, ensure that:

  • 4 장 에서 설명한 모든 설정이 올바르게 설정 됩니다.All the settings mentioned in the Chapter 4 are set correctly.
  • SceneOrganiser 스크립트는 주 카메라 개체에 연결 됩니다.The script SceneOrganiser is attached to the Main Camera object.
  • Bot 클래스에서 봇 비밀 키botSecret 변수에 삽입 했는지 확인 합니다.In the Bot class, make sure you have inserted your Bot Secret Key into the botSecret variable.

14 장 – 테스트용으로 로드에 빌드 및Chapter 14 – Build and Sideload to the HoloLens

이제이 프로젝트의 Unity 섹션에 필요한 모든 항목이 완료 되었으므로 Unity에서 빌드할 수 있습니다.Everything needed for the Unity section of this project has now been completed, so it is time to build it from Unity.

  1. 빌드 설정, 파일 > 빌드 설정 으로 이동 합니다.Navigate to Build Settings, File > Build Settings….

  2. 빌드 설정 창에서 빌드 를 클릭 합니다.From the Build Settings window, click Build.

    Unity에서 앱 빌드

  3. 아직 없는 경우 tick Unity c # 프로젝트 입니다.If not already, tick Unity C# Projects.

  4. 빌드 를 클릭한 다음Click Build. Unity는 응용 프로그램을 빌드할 폴더를 만들고 선택 해야 하는 파일 탐색기 창을 시작 합니다.Unity will launch a File Explorer window, where you need to create and then select a folder to build the app into. 이제 해당 폴더를 만들고 이름을 App 으로 만듭니다.Create that folder now, and name it App. 그런 다음 폴더를 선택 하 고 폴더 선택 을 클릭 합니다.Then with the App folder selected, click Select Folder.

  5. Unity는 응용 프로그램 폴더에 대 한 프로젝트 빌드를 시작 합니다.Unity will begin building your project to the App folder.

  6. Unity가 빌드를 완료 하면 (시간이 걸릴 수 있음) 빌드 위치에서 파일 탐색기 창이 열립니다. (작업 표시줄은 항상 창 위에 표시 되는 것은 아니지만 새 창 추가를 알려 줍니다.)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).

15 장 – HoloLens에 배포Chapter 15 – Deploy to HoloLens

HoloLens에 배포 하려면:To deploy on HoloLens:

  1. HoloLens의 IP 주소 (원격 배포의 경우)가 필요 하 고 HoloLens가 개발자 모드 에 있는지 확인 합니다.You will need the IP Address of your HoloLens (for Remote Deploy), and to ensure your HoloLens is in Developer Mode. 가상 하드 디스크 파일에 대한 중요 정보를 제공하려면To do this:

    1. HoloLens를 입고 하는 동안 설정을 엽니다.Whilst wearing your HoloLens, open the Settings.
    2. 네트워크 & 인터넷 > Wi-Fi > 고급 옵션 으로 이동 합니다.Go to Network & Internet > Wi-Fi > Advanced Options
    3. IPv4 주소를 적어둡니다.Note the IPv4 address.
    4. 그런 다음 설정 으로 다시 이동한 다음 개발자를 위한 & 보안 >를 업데이트 합니다.Next, navigate back to Settings, and then to Update & Security > For Developers
    5. 에서 개발자 모드를 설정 합니다.Set Developer Mode On.
  2. 새 Unity 빌드 ( 폴더)로 이동 하 여 Visual Studio 에서 솔루션 파일을 엽니다.Navigate to your new Unity build (the App folder) and open the solution file with Visual Studio.

  3. 솔루션 구성 에서 디버그 를 선택 합니다.In the Solution Configuration select Debug.

  4. 솔루션 플랫폼 에서 X86, 원격 컴퓨터 를 선택 합니다.In the Solution Platform, select x86, Remote Machine.

    Visual Studio에서 솔루션을 배포 합니다.

  5. 빌드 메뉴로 이동 하 여 솔루션 배포 를 클릭 하 여 응용 프로그램을 HoloLens로 테스트용으로 로드.Go to the Build menu and click on Deploy Solution, to sideload the application to your HoloLens.

  6. 이제 앱이 HoloLens에 설치 된 앱 목록에 표시 되어 시작할 준비가 되었습니다!Your app should now appear in the list of installed apps on your HoloLens, ready to be launched!

    참고

    모던 헤드셋에 배포 하려면 솔루션 플랫폼로컬 컴퓨터 로 설정 하 고 구성을 디버그 로 설정 하 고 x 86플랫폼 으로 설정 합니다.To deploy to immersive headset, set the Solution Platform to Local Machine, and set the Configuration to Debug, with x86 as the Platform. 그런 다음 빌드 메뉴 를 사용 하 여 솔루션 배포 를 선택 하 여 로컬 컴퓨터에 배포 합니다.Then deploy to the local machine, using the Build menu, selecting Deploy Solution.

16 장-HoloLens에서 응용 프로그램 사용Chapter 16 – Using the application on the HoloLens

  • 응용 프로그램을 시작 하면 그 앞에 파란색 구로 봇이 표시 됩니다.Once you have launched the application, you will see the Bot as a blue sphere in front of you.

  • 구에 gazing 하는 동안 탭 제스처 를 사용 하 여 대화를 시작 합니다.Use the Tap Gesture while you are gazing at the sphere to initiate a conversation.

  • 대화가 시작 될 때까지 기다립니다 (UI가 발생 하면 메시지 표시).Wait for the conversation to start (The UI will display a message when it happens). 봇에서 소개 메시지를 받은 후 봇에서 다시 탭 하 여 빨간색으로 바뀌고 음성 듣기를 시작 합니다.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.

  • 통신을 중지 하면 응용 프로그램이 봇으로 메시지를 보내고 UI에 표시 되는 응답을 즉시 받게 됩니다.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.

  • 프로세스를 반복 하 여 봇에 더 많은 메시지를 보냅니다 (메시지를 send 할 때마다 탭 해야).Repeat the process to send more messages to your Bot (you have to tap each time you want to sen a message).

이 대화에서는 봇이 정보 (사용자 이름)를 유지할 수 있는 방법을 보여 주며, 알려진 정보 (예: 보충 항목)도 제공 합니다.This conversation demonstrates how the Bot can retain information (your name), whilst also providing known information (such as the items that are stocked).

Bot 질문:Some questions to ask the Bot:

what do you sell? 

how much are umbrellas?

how much are raincoats?

완료 된 웹 앱 봇 (v4) 응용 프로그램Your finished Web App Bot (v4) application

축 하 합니다. Azure 웹 앱 봇, Microsoft 봇 Framework v4를 활용 하는 혼합 현실 앱을 빌드 했습니다.Congratulations, you built a mixed reality app that leverages the Azure Web App Bot, Microsoft Bot Framework v4.

최종 제품

보너스 연습Bonus exercises

연습 1Exercise 1

이 랩에서 대화 구조는 매우 기본적인 것입니다.The conversation structure in this Lab is very basic. Microsoft LUIS를 사용 하 여 인공 자연어 이해 기능을 제공 합니다.Use Microsoft LUIS to give your bot natural language understanding capabilities.

연습 2Exercise 2

이 예제에서는 대화를 종료 하 고 새 대화를 다시 시작 하는 것을 포함 하지 않습니다.This example does not include terminating a conversation and restarting a new one. Bot 기능을 완전 하 게 만들려면 대화에 대 한 클로저를 구현 해 보세요.To make the Bot feature complete, try to implement closure to the conversation.