5. Integrar o Serviço de Bot do Azure5. Integrating Azure Bot Service

Neste tutorial, você aprenderá a usar o Serviço de Bot do Azure no aplicativo de demonstração do HoloLens 2 para adicionar o Reconhecimento Vocal (LUIS) e permitir que o bot auxilie o usuário ao procurar Objetos Rastreados.In this tutorial, you will learn how to use Azure Bot Service in the HoloLens 2 demo application to add Language Understanding (LUIS) and letting the Bot assist the user when searching for Tracked Objects. Este é um tutorial de duas partes. Na primeira, você cria o bot com o Criador de Bot como uma solução de código gratuito e examina rapidamente a função do Azure que alimenta o bot com os dados necessários.This is a two part tutorial where in the first part you create the Bot with the Bot Composer as a code free solution and take a quick look in the Azure Function that feeds the Bot with the needed data. Na segunda parte, você usa o BotManager (Script) no projeto do Unity para consumir o Serviço de Bot hospedado.In the second part you use the BotManager (script) in the Unity project to consume the hosted Bot Service.

ObjetivosObjectives

Parte 1Part 1

  • Conheça os conceitos básicos sobre o Serviço de Bot do AzureLearn the basics about Azure Bot Service
  • Saiba como usar o Criador de Bot para criar um botLearn how to use the Bot Composer to create a Bot
  • Saiba como usar uma Função do Azure para fornecer dados do Armazenamento do AzureLearn how to use an Azure Function to provide data from the Azure Storage

Parte 2Part 2

  • Saiba como configurar a cena para usar o Serviço de Bot do Azure neste projetoLearn how to setup the scene to use Azure Bot Service in this project
  • Saiba como definir e localizar objetos conversando com o botLearn how to set and find objects via conversing with the Bot

Como entender o Serviço de Bot do AzureUnderstanding Azure Bot Service

O Serviço de Bot do Azure capacita os desenvolvedores a criar bots inteligentes que podem manter a conversa natural com os usuários graças à LUIS.The Azure Bot Service empowers developers to create intelligent bots that can maintain natural conversation with users thanks to LUIS. Um Bot de conversa é uma ótima maneira de expandir as maneiras como um usuário pode interagir com seu aplicativo.A conversational Bot is a great way to expand the ways a user can interact with your application. Um Bot pode atuar como uma base de dados de conhecimento com um QnA Maker para manter uma conversa sofisticada com a potência do LUIS (Reconhecimento Vocal).A Bot can act as a knowledge base with a QnA Maker to maintaining sophisticated conversation with the power of Language Understanding (LUIS).

Saiba mais sobre o Serviço de Bot do Azure.Learn more about Azure Bot Service.

Parte 1 – Como criar o botPart 1 - Creating the Bot

Para usar o bot no aplicativo Unity, desenvolva-o, forneça dados a ele e hospede-o no Azure.Before you can use the bot in the Unity application, you need to develope it, provide it with data and host it on Azure. A meta do bot é ter as capacidades de informar quantos Objetos Rastreados são armazenados no banco de dados, encontrar um Objeto Rastreado pelo seu nome e informar ao usuário algumas informações básicas sobre ele.The goal of the bot is to have the abilities to tell how many Tracked Objects are stored in the database, find a Tracked Object by its name, and tell the user some basic information about it.

Uma visão rápida da Função do Azure de Objetos RastreadosA quick look into Tracked Objects Azure Function

Você está prestes a começar a criar o bot, porém, para torná-lo útil, você precisa fornecer a ele um recurso do qual ele pode efetuar pull de dados.You are about to start creating the Bot, but to make it useful you need to give it a resource from which it can pull data. Como o Bot poderá contar a quantidade de Objetos Rastreados, localizar objetos específicos pelo nome e informar detalhes, você usará uma função simples do Azure que tem acesso ao armazenamento de Tabelas do Azure.Since the Bot will be able to count the amount of Tracked Objects, find specific ones by name and tell details, you will use a simple Azure Function that has access to the Azure Table storage.

Baixe o projeto da Função do Azure de Objetos Rastreados: AzureFunction_TrackedObjectsService.zip e o extraia para o disco rígido.Download the Tracked Objects Azure Function project: AzureFunction_TrackedObjectsService.zip and extract it to your hard drive.

Esta função do Azure tem duas ações, Contar e Localizar, que podem ser invocadas por meio de chamadas básicas HTTP GET.This Azure Function has two actions, Count and Find which can be invoked via basic HTTP GET calls. Você pode inspecionar o código no Visual Studio.You can inspect the code in Visual Studio.

Saiba mais sobre Funções do Azure.Learn more about Azure Functions.

As função Contar consulta do Armazenamento de tabela todos os TrackedObjects da tabela, muito simples.The Count function queries from the Table storage all TrackedObjects from the table, very simple. Por outro lado, a função Localizar usa um parâmetro de consulta name na solicitação GET e consulta o Armazenamento de tabelas para um TrackedObject correspondente e retorna um DTO como JSON.On the other hand the Find function takes a name query parameter from the GET request and queries the Table storage for a matching TrackedObject and returns a DTO as JSON.

Você pode implantar essa Função do Azure diretamente do Visual Studio.You can deploy this Azure Function directly from Visual Studio. Encontre aqui todas as informações sobre a implantação de Função do Azure.Find here all information regarding Azure Function deployment.

Depois de concluir a implantação, no portal do Azure, abra o recurso correspondente e clique em Configuração, que está na seção Configurações.Once you have completed the deployment, in the Azure Portal, open the corresponding resource and click on Configuration which is under the Settings section. Em Configurações do Aplicativo, forneça a Cadeia de conexão para o Armazenamento do Azure em que os Objetos Rastreados são armazenados.There on Application Settings you need to provide the Connection string to the Azure Storage where the Tracked Objects are stored. Clique em Configuração de Novo Aplicativo e use para nome: AzureStorageConnectionString e, para Valor, forneça a Cadeia de conexão correta.Click on New Application setting and use for name: AzureStorageConnectionString and for value provide the correct Connection string. Depois disso, clique em Salvar e a Função do Azure estará pronta para atender ao Bot que será criado em seguida.After that click on Save and the Azure Function is ready to server the Bot which you will create next.

Como criar um bot de conversaCreating a conversation Bot

Há várias maneiras de desenvolver um bot de conversa baseado no Bot Framework.There are several ways to develope a Bot Framework based conversational bot. Nesta lição, você usará o aplicativo da área de trabalho Bot Framework Composer, que é um designer visual perfeito para desenvolvimento rápido.In this lesson you will use the Bot Framework Composer desktop application which is a visual designer that is perfect for rapid development.

Você pode baixar as versões mais recentes do repositório do GitHub.You can download the latest releases from the Github repository. Ele está disponível para Windows, Mac e Linux.It is available for Windows, Mac, and Linux.

Depois que o Bot Framework Composer estiver instalado, inicie o aplicativo e você verá essa interface:Once the Bot Framework Composer is installed, start the application and you should see this interface:

Página Inicial do Bot Framework Composer

Preparamos um projeto do criador de bot que fornece os diálogos e os gatilhos necessários para este tutorial.We have prepared a bot composer project which provides the needed dialogues and triggers for this tutorial. Baixe o projeto Bot Framework Composer: BotComposerProject_TrackedObjectsBot.zip e o extraia para seu disco rígido.Download the Bot Framework Composer project: BotComposerProject_TrackedObjectsBot.zip and extract it to your hard drive.

Na barra superior, clique em Abrir e selecione o projeto do Bot Framework que você baixou, que se chama TrackedObjectsBot.On the top bar click on Open and select the Bot Framework project you have downloaded which is named TrackedObjectsBot. Depois que o projeto estiver totalmente carregado, você deverá ver o projeto pronto.After the project is fully loaded, you should see the project ready.

O Bot Framework Composer com o projeto TrackedObjectsBot aberto

Vamos nos concentrar no lado esquerdo, em que é possível ver o Painel Caixas de Diálogo.Let's focus on the left side where you can see the Dialogs Panel. Lá, você tem uma caixa de diálogo chamada TrackedObjectsBot sob a qual pode ver vários Gatilhos.There you have one dialog named TrackedObjectsBot under which you can see several Triggers.

Saiba mais sobre os conceitos do Bot Framework.Learn more about Bot Framework concepts.

Esses gatilhos fazem o seguinte:These triggers do the following:

SaudaçãoGreeting

Esse é o ponto de entrada do bot de chat quando sempre um usuário inicia uma conversa.This is the entry point of the chat bot when ever a user initiates a conversation.

Saudação do gatilho da caixa de diálogo do projeto TrackedObjectsBot

AskingForCountAskingForCount

Essa caixa de diálogo é disparada quando o usuário solicita a contagem de todos os Objetos Rastreados.This dialog is triggered when the user asks for counting all Tracked Objects. Estas são as frases de gatilho:These are the trigger phrases:

  • conte tudo para mimcount me all
  • quantos estão armazenadoshow many are stored

AskForCount do gatilho da caixa de diálogo do projeto TrackedObjectsBot

Graças ao LUIS, o usuário não precisa perguntar as frases exatamente dessa maneira, o que permite uma conversa natural para o usuário.Thanks to LUIS the user does not have to ask the phrases in that exact way which allows a natural conversation for the user.

Nesta caixa de diálogo, o bot também se comunicará com a Função do Azure de Contar. Veja mais sobre isso posteriormente.In this dialog the bot will also talk to the Count Azure Function, more about that later.

Intenção desconhecidaUnknown Intent

Essa caixa de diálogo será disparada se a entrada do usuário não se ajustar a nenhuma outra condição de gatilho e responder ao usuário tentando sua pergunta novamente.This dialogue is triggered if the input from the user does not fit any other trigger condition and responses the user with trying his question again.

Intenção desconhecida do gatilho da caixa de diálogo do projeto TrackedObjectsBot

FindEntityFindEntity

A última caixa de diálogo é mais complexa, ramificando e armazenando na memória dos bots.The last dialogue is more complex with branching and storing data in the bots memory. Ele solicita ao usuário o nome do Objeto Rastreado sobre o qual ele quer saber mais, executa uma consulta para a Função do Azure de Localizar e usa a resposta para continuar com a conversa.It asks the user for the name of the Tracked Object it want's to know more information about, performs a query to the Find Azure Function, and uses the response to proceed with the conversation.

FindEntity do gatilho da caixa de diálogo do projeto TrackedObjectsBot

Se o Objeto Rastreado não for encontrado, o usuário será informado e a conversa terminará.If the Tracked Object is not found, the user is informed and the conversation ends. Quando o Objeto Rastreado em questão for encontrado, a inicialização verificará quais propriedades estão disponíveis e relatará sobre elas.When the Tracked Object in question is found, the boot will check what properties are available and report on them.

Como adaptar o botAdapting the Bot

O gatilho AskingForCount e FindEntity precisam se comunicar com o back-end, o que significa que você precisa adicionar a URL correta da Função do Azure implantada anteriormente.The AskingForCount and FindEntity trigger need to talk to the backend, this means you have to add the correct URL of the Azure Function you deployed previously.

No painel de diálogo, clique em AskingForCount e localize a ação Enviar uma solicitação HTTP. Aqui, você pode ver o campo URL para o qual você precisa alterar a URL correta para o ponto de extremidade da função Contar.On the dialog panel click on AskingForCount and locate the Send an HTTP request action, here you can see the field URL which you need to change the correct URL for the Count function endpoint.

Configuração do ponto de extremidade do gatilho da caixa de diálogo AskingForCount do projeto TrackedObjectsBot

Por fim, procure o gatilho FindEntity e localize a ação Enviar uma solicitação HTTP; no campo URL, altere a URL para o ponto de extremidade da função Localizar.Finally, look for the FindEntity trigger and locate the Send an HTTP request action, in the URL field change the URL to the Find function endpoint.

Configuração do ponto de extremidade do gatilho da caixa de diálogo FindEntity do projeto TrackedObjectsBot

Com tudo definido, agora você está pronto para implantar o bot.With everything set you are now ready to deploy the Bot. Como você tem o Bot Framework Composer instalado, pode publicá-lo diretamente dele.Since you have Bot Framework composer installed, you can publish it directly from there.

Saiba mais sobre Publicar um bot do Bot Composer.Learn more about Publish a bot from Bot Composer.

Dica

Fique à vontade para explorar o bot adicionando mais frases de gatilho, novas respostas ou ramificação de conversa.Feel free playing around with Bot by adding more trigger phrases, new responses or conversation branching.

Parte 2 – Reunindo tudo no UnityPart 2 - Putting everything together in Unity

Preparando a cenaPreparing the scene

Na janela do projeto, navegue até a pasta Ativos > MRTK.Tutorials.AzureCloudServices > Pré-fabricados > Gerenciador.In the Project window, navigate to Assets > MRTK.Tutorials.AzureCloudServices > Prefabs > Manager folder.

Janela Projeto do Unity com o pré-fabricado ChatBotManager selecionado

Daí, mova o pré-fabricado ChatBotManager para a cena Hierarquia.From there move the prefab ChatBotManager into the scene Hierarchy.

Depois de adicionar o ChatBotManager à cena, clique no componente Gerenciador de Bot de Chat.Once you add the ChatBotManager to the scene, click on the Chat Bot Manager component. No Inspetor, você verá que há um campo Chave Secreta da Direct Line vazio que você precisa preencher.In the Inspector you will see that there is an empty Direct Line Secret Key field which you need to fill out.

Dica

Você pode recuperar a chave secreta do portal do Azure procurando o recurso do tipo Registro de Canais de Bot que você criou na primeira parte deste tutorial.You can retrieve the secret key from the Azure portal by looking for the resource of type Bot Channels Registration you have created in the first part of this tutorial.

Unity com o pré-fabricado ChatBotManager recém-adicionado ainda selecionado

Agora, você conectará o objeto ChatBotManager com o componente ChatBotController que está anexado ao objeto ChatBotPanel.Now you will connect the ChatBotManager object with the ChatBotController component that is attached to the ChatBotPanel object. Na hierarquia, selecione o ChatBotPanel e você verá um campo Gerenciador de Bot de Chat vazio, arraste da Hierarquia o objeto ChatBotManager para o campo Gerenciador de Bot de Chat vazio.In the Hierarchy select the ChatBotPanel and you will see an empty Chat Bot Manager field, drag from the Hierarchy the ChatBotManager object into the empty Chat Bot Manager field.

Unity com ChatBotPanel configurado

Em seguida, você precisa de uma forma de abrir o ChatBotPanel para que o usuário possa interagir com ele.Next you need a way to open the ChatBotPanel so that the user can interact with it. Na janela de cena, você pode ter notado que há um botão Bot de Chat no objeto MainMenu. Você o usará para resolver esse problema.From the Scene window you may have noticed that there is a Chat Bot side button on the MainMenu object, you will use it to solve this problem.

Na hierarquia, localize RootMenu > MainMenu > SideButtonCollection > ButtonChatBot e localize no Inspetor o script ButtonConfigHelper.In the Hierarchy locate RootMenu > MainMenu > SideButtonCollection > ButtonChatBot and locate in the Inspector the ButtonConfigHelper script. Lá, você verá um slot vazio no retorno de chamada do evento de OnClick() .There you will see an empty slot on the OnClick() event callback. Arraste e solte o ChatBotPanel para o slot de evento, na lista suspensa, navegue para GameObject e, em seguida, selecione no submenu SetActive (bool) e habilite a caixa de seleção.Drag and drop the ChatBotPanel to the event slot, from the dropdown list navigate GameObject, then select in the sub menu SetActive (bool) and enable the checkbox.

Unity com ButtonChatBot configurado

Agora, o bot de bate-papo pode ser pausado no menu principal e, com isso, a cena estará pronta para uso.Now the chat bot can be stared from the main menu and with that the scene is ready for use.

Como testar o botPutting the bot to a test

Como perguntar a quantidade de objetos rastreadosAsking about the quantity of tracked objects

Primeiro, você testa perguntando ao bot quantos Objetos Rastreados estão armazenados no banco de dados.First you test asking the bot how many Tracked Objects are stored in the database.

Observação

Desta vez, você deve executar o aplicativo do HoloLens 2 porque serviços como conversão de texto em fala podem não estar disponíveis no seu sistema.This time you must run the application from the HoloLens 2 because services like text-to-speech may not be available on your system.

Execute o aplicativo no seu HoloLens 2 e clique no botão Bot de Chat ao lado do menu principal.Run the application on your HoloLens 2 and click on the Chat Bot button next to the main menu. O bot o saudará, agora pergunte quantos objetos temos?The bot will be greeting you, now ask how many objects do we have? Ele deverá informar a quantidade e encerrar a conversa.It should tell you the quantity and end the conversation.

Como perguntar sobre um objeto acompanhadoAsking about a tracked object

Agora, execute o aplicativo novamente e, desta vez, peça encontre um objeto rastreado para mim, o bot perguntará o nome, e você deverá responder com "carro" ou o nome de outro Objeto Rastreado que você saiba que existe no banco de dados.Now run the application again and this time ask find me a tracked object, the bot will be asking you the name to which you should respond with the "car" or the name of an other Tracked Object you know exists in the database. O bot informará detalhes como a descrição e se há uma âncora espacial atribuída.The bot will tell you details like description and if it has a spatial anchor assigned.

Dica

Experimente pedir Objetos Rastreados que não existam e ouça como o bot responde.Try out asking for an Tracked Objects that does not exist and hear how the bot responds.

ParabénsCongratulations

Neste tutorial, você aprendeu como o Azure Bot Framework pode ser usado para interagir com o aplicativo por meio de conversa com linguagem natural.In this tutorial you learned how Azure Bot Framework can be used to interact with the application via conversation with natural language. Você aprendeu a desenvolver o próprio bot e conheceu todas as partes móveis para executá-lo.You learned how to develop your own bot and what all the moving pieces are to get it running,

ConclusãoConclusion

No decorrer desta série de tutoriais, você viu como os Serviços de Nuvem do Azure trouxeram recursos novos e empolgantes para seu aplicativo.Through the course of this tutorial series you experienced how Azure Cloud services brought new and exciting features to your application. Agora você pode armazenar dados e imagens na nuvem com Armazenamento do Azure, usar a Visão Personalizada do Azure para associar imagens e treinar um modelo, trazer objetos para um contexto local com Âncoras Espaciais do Azure e implementar o Azure Bot Framework desenvolvido com LUIS para adicionar um bot de conversa para um padrão de interação novo e natural.You can now store data and images in the cloud with Azure Storage, use Azure Custom Vision to associate images and train a model, bring objects to a local context with Azure Spatial Anchors, and implement Azure Bot Framework powered by LUIS to add a conversational bot for a new and natural interaction pattern.