Exercício – Expandir e otimizar extensões de mensagens para utilização com Microsoft 365 Copilot
Neste exercício, vai expandir e otimizar a extensão de mensagens para utilização com Microsoft 365 Copilot. Adiciona um novo parâmetro denominado Público-alvo e atualiza a lógica da extensão da mensagem para processar vários parâmetros. Por fim, executa e depura a sua extensão de mensagem e testa-a no Copilot no Microsoft Teams.
Atualizar descrição da aplicação
Especificar descrições concisas e precisas no manifesto da aplicação é fundamental para garantir que o Copilot sabe quando e como invocar o plug-in. Atualize as descrições de aplicação, comando e parâmetro no manifesto da aplicação.
Abra o Visual Studio e no projeto TeamsApp:
Na pasta appPackage , abra manifest.json
Atualizar o objeto de descrição
{ "description": { "short": "Product look up tool.", "full": "Get real-time product information and share them in a conversation. Search by product name or target audience. ${{APP_DISPLAY_NAME}} works with Microsoft 365 Chat. Find products at Contoso. Find Contoso products called mark8. Find Contoso products named mark8. Find Contoso products related to Mark8. Find Contoso products aimed at individuals. Find Contoso products aimed at businesses. Find Contoso products aimed at individuals with the name mark8. Find Contoso products aimed at businesses with the name mark8." }, }
Adicionar um novo parâmetro
Adicione um novo parâmetro que o Copilot pode utilizar. Este novo parâmetro ajuda os utilizadores a procurar produtos com o Copilot destinado a diferentes audiências, como indivíduos e empresas.
Continuar no Visual Studio e no projeto TeamsApp:
Na matriz de parâmetros , adicione o parâmetro TargetAudience após o parâmetro ProductName .
{ "parameters": [ { "name": "ProductName", "title": "Product name", "description": "The name of the product as a keyword", "inputType": "text" }, { "name": "TargetAudience", "title": "Target audience", "description": "Audience that the product is aimed at. Consumer products are sold to individuals. Enterprise products are sold to businesses", "inputType": "text" } ] }
Save your changes
A descrição do parâmetro TargetAudience descreve o que é e explica que o parâmetro deve aceitar valores de Consumidor ou Enterprise permitidos.
Em seguida, atualize a descrição do comando para incluir o novo parâmetro.
Na matriz de comandos , atualize a descrição do comando
{ "commands": [ { "id": "Search", "type": "query", "title": "Products", "description": "Find products by name or by target audience", "initialRun": true, "fetchTask": false, "context": [...], "parameters": [...] } ] }
Atualizar a lógica da extensão de mensagens
Para suportar o novo parâmetro e suportar pedidos complexos, atualize o método OnTeamsMessagingExtensionQueryAsync no Processador de Atividades do Bot para processar vários parâmetros.
Primeiro, atualize a classe ProductService para obter produtos com base nos parâmetros de nome e audiência.
Continuar no Visual Studio no projeto ProductPlugin:
Na pasta Serviços , abra ProductsService.cs
No ficheiro, crie novos métodos denominados GetProductsByCategoryAsync e GetProductsByNameAndCategoryAsync
internal async Task<Product[]> GetProductsByCategoryAsync(string category) { var response = await _httpClient.GetAsync($"{_baseUri}products?category={category}"); response.EnsureSuccessStatusCode(); var jsonString = await response.Content.ReadAsStringAsync(); return System.Text.Json.JsonSerializer.Deserialize<Product[]>(jsonString); } internal async Task<Product[]> GetProductsByNameAndCategoryAsync(string name, string category) { var response = await _httpClient.GetAsync($"{_baseUri}?name={name}&category={category}"); response.EnsureSuccessStatusCode(); var jsonString = await response.Content.ReadAsStringAsync(); return System.Text.Json.JsonSerializer.Deserialize<Product[]>(jsonString); }
Save your changes
Em seguida, adicione um novo método à classe MessageExtensionHelper para obter produtos com base no nome e nos parâmetros de audiência.
Na pasta Auxiliares , abra MessageExtensionHelper.cs
No ficheiro, crie um novo método chamado RetrieveProducts que obtém produtos com base no nome e nos parâmetros de audiência.
internal static async Task<IList<Product>> RetrieveProducts(string name, string audience, ProductsService productsService) { IList<Product> products; if (string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(audience)) { products = await productsService.GetProductsByCategoryAsync(audience); } else if (!string.IsNullOrEmpty(name) && string.IsNullOrEmpty(audience)) { products = await productsService.GetProductsByNameAsync(name); } else if (!string.IsNullOrEmpty(name) && !string.IsNullOrEmpty(audience)) { products = await productsService.GetProductsByNameAndCategoryAsync(name, audience); } else { products = []; } return products; }
Save your changes
O método RetrieveProduct obtém produtos com base nos parâmetros de nome e audiência. Se o parâmetro name estiver vazio e o parâmetro de audiência não estiver vazio, o método obtém os produtos com base no parâmetro de audiência. Se o parâmetro name não estiver vazio e o parâmetro de audiência estiver vazio, o método obtém os produtos com base no parâmetro name. Se os parâmetros de nome e audiência não estiverem vazios, o método obtém os produtos com base em ambos os parâmetros. Se ambos os parâmetros estiverem vazios, o método devolve uma lista vazia.
Em seguida, atualize a classe SearchApp para processar o novo parâmetro.
Na pasta Procurar , abra SearchApp.cs
No método OnTeamsMessagingExtensionQueryAsync , substitua o seguinte código:
var name = MessageExtensionHelpers.GetQueryParameterValueByName(query.Parameters, "ProductName"); var productService = new ProductsService(tokenResponse.Token); var products = await productService.GetProductsByNameAsync(name);
Por:
var name = MessageExtensionHelpers.GetQueryParameterValueByName(query.Parameters, "ProductName"); var audience = MessageExtensionHelpers.GetQueryParameterValueByName(query.Parameters, "TargetAudience"); var productService = new ProductsService(tokenResponse.Token); var products = await MessageExtensionHelpers.RetrieveProducts(name, audience, productService);
Save your changes
O método OnTeamsMessagingExtensionQueryAsync obtém agora os parâmetros de nome e audiência a partir dos parâmetros de consulta. Em seguida, obtém produtos com base nos parâmetros de nome e audiência com o método RetrieveProducts .
Criar e atualizar recursos
Com tudo agora implementado, execute o processo Preparar Dependências de Aplicações do Teams para criar novos recursos e atualizar os existentes.
Continuar no Visual Studio:
- No Gerenciador de Soluções, clique com o botão direito do rato no projeto TeamsApp
- Expanda o menu Do Teams Toolkit , selecione Preparar Dependências de Aplicações do Teams
- Na caixa de diálogo Conta do Microsoft 365 , selecione Continuar
- Na caixa de diálogo Aprovisionar, selecione Aprovisionar
- Na caixa de diálogo de aviso Do Teams Toolkit , selecione Aprovisionar
- Na caixa de diálogo Informações do Teams Toolkit , selecione o ícone cruzado para fechar a caixa de diálogo
Executar e depurar
Com os recursos aprovisionados, inicie uma sessão de depuração para testar a extensão da mensagem.
Primeiro, inicie o Proxy de Programador para simular a API personalizada.
Abrir uma janela de terminal
Execute o seguinte comando para iniciar o Proxy de Programador:
devproxy --config-file "~appFolder/presets/learn-copilot-me-plugin/products-api-config.json"
Se lhe for pedido, aceite o aviso de certificado
Observação
Quando o Proxy de Programador está em execução, funciona como um proxy ao nível do sistema.
Em seguida, inicie uma sessão de depuração no Visual Studio:
Para iniciar uma nova sessão de depuração, prima F5 ou selecione Iniciar na barra de ferramentas
Aguarde até que seja aberta uma janela do browser e a caixa de diálogo de instalação da aplicação seja apresentada no cliente Web do Microsoft Teams. Se lhe for pedido, introduza as credenciais da sua conta do Microsoft 365.
Na caixa de diálogo de instalação da aplicação, selecione Adicionar
Abrir a aplicação Copilot no Microsoft Teams
Na área de composição de mensagens, abra a lista de opções Plug-ins
Na lista de plug-ins, alterne o plug-in produtos da Contoso para o ativar
Introduza Localizar produtos Contoso destinados a indivíduos como a sua mensagem e envie-os
Aguarde que o Copilot responda
Na resposta Copilot, os dados devolvidos na resposta do plug-in são apresentados e o plug-in é referenciado na resposta
Para ver o Cartão Adaptável relevante para o resultado, paire o cursor sobre as referências na resposta copilot
Regresse ao Visual Studio e selecione Parar na barra de ferramentas ou prima Shift + F5 para parar a sessão de depuração. Além disso, encerre o Proxy de Programador com Ctrl + C.