Exercício – Expandir e otimizar extensões de mensagens para utilização com Microsoft 365 Copilot

Concluído

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.

Captura de ecrã de uma resposta no Microsoft 365 Copilot que contém informações devolvidas pelo plug-in da extensão da mensagem. É apresentada uma card adaptável que mostra as informações do produto.

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:

  1. Na pasta appPackage , abra manifest.json

  2. 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:

  1. 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"
            }
        ]
    }
    
  2. 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:

  1. Na pasta Serviços , abra ProductsService.cs

  2. 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);
    }
    
  3. 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.

  1. Na pasta Auxiliares , abra MessageExtensionHelper.cs

  2. 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;
    }
    
  3. 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.

  1. Na pasta Procurar , abra SearchApp.cs

  2. 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);
    
  3. 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:

  1. No Gerenciador de Soluções, clique com o botão direito do rato no projeto TeamsApp
  2. Expanda o menu Do Teams Toolkit , selecione Preparar Dependências de Aplicações do Teams
  3. Na caixa de diálogo Conta do Microsoft 365 , selecione Continuar
  4. Na caixa de diálogo Aprovisionar, selecione Aprovisionar
  5. Na caixa de diálogo de aviso Do Teams Toolkit , selecione Aprovisionar
  6. 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.

  1. Abrir uma janela de terminal

  2. Execute o seguinte comando para iniciar o Proxy de Programador:

    devproxy --config-file "~appFolder/presets/learn-copilot-me-plugin/products-api-config.json"
    
  3. 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:

  1. Para iniciar uma nova sessão de depuração, prima F5 ou selecione Iniciar na barra de ferramentas

  2. 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.

  3. Na caixa de diálogo de instalação da aplicação, selecione Adicionar

  4. Abrir a aplicação Copilot no Microsoft Teams

  5. Na área de composição de mensagens, abra a lista de opções Plug-ins

  6. Na lista de plug-ins, alterne o plug-in produtos da Contoso para o ativar

    Captura de ecrã a mostrar Microsoft 365 Copilot no Microsoft Teams com o plug-in de produtos Contoso ativado.

  7. Introduza Localizar produtos Contoso destinados a indivíduos como a sua mensagem e envie-os

  8. Aguarde que o Copilot responda

    Captura de ecrã de Microsoft 365 Copilot no Microsoft Teams a mostrar a mensagem copilot apresentada durante o processamento do pedido do utilizador.

  9. Na resposta Copilot, os dados devolvidos na resposta do plug-in são apresentados e o plug-in é referenciado na resposta

    Captura de ecrã de uma resposta no Microsoft 365 Copilot que contém informações devolvidas pelo plug-in da extensão da mensagem. É apresentada uma card adaptável que mostra as informações do produto.

  10. Para ver o Cartão Adaptável relevante para o resultado, paire o cursor sobre as referências na resposta copilot

    Captura de ecrã do Microsoft 365 Copilot no Microsoft Teams a mostrar um Cartão Ajustável com informações de produto apresentadas. A card é apresentada quando o utilizador paira o rato sobre uma referência 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.