Ejercicio: Extensión y optimización de extensiones de mensajes para su uso con Microsoft 365 Copilot

Completado

En este ejercicio, ampliará y optimizará la extensión de mensaje para su uso con Microsoft 365 Copilot. Agregue un nuevo parámetro denominado Audiencia de destino y actualice la lógica de extensión de mensaje para controlar varios parámetros. Por último, ejecute y depure la extensión de mensaje y pruébela en Copilot en Microsoft Teams.

Captura de pantalla de una respuesta en Microsoft 365 Copilot que contiene información devuelta por el complemento de extensión de mensaje. Se muestra una tarjeta adaptable que muestra la información del producto.

Actualización de la descripción de la aplicación

Especificar descripciones concisas y precisas en el manifiesto de la aplicación es fundamental para garantizar que Copilot sepa cuándo y cómo invocar el complemento. Actualice las descripciones de la aplicación, el comando y los parámetros en el manifiesto de la aplicación.

Abra Visual Studio y en el proyecto TeamsApp:

  1. En la carpeta appPackage , abra manifest.json

  2. Actualizar el objeto description

    {
        "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."
        },
    }
    

Adición de un nuevo parámetro

Agregue un nuevo parámetro que Copilot pueda usar. Este nuevo parámetro ayuda a los usuarios a buscar productos con Copilot dirigidos a diferentes audiencias, como individuos y empresas.

Continuar en Visual Studio y en el proyecto TeamsApp:

  1. En la matriz de parámetros , agregue el parámetro TargetAudience después del 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

En la descripción del parámetro TargetAudience se describe qué es y se explica que el parámetro debe aceptar los valores permitidos consumer o enterprise .

A continuación, actualice la descripción del comando para incluir el nuevo parámetro.

  • En la matriz de comandos , actualice la descripción del comando.

    {
        "commands": [
            {
                "id": "Search",
                "type": "query",
                "title": "Products",
                "description": "Find products by name or by target audience",
                "initialRun": true,
                "fetchTask": false,
                "context": [...],
                "parameters": [...]
            }
        ]
    }
    

Actualización de la lógica de extensión de mensaje

Para admitir el nuevo parámetro y admitir solicitudes complejas, actualice el método OnTeamsMessagingExtensionQueryAsync en el controlador de actividad del bot para controlar varios parámetros.

En primer lugar, actualice la clase ProductService para recuperar los productos en función de los parámetros de nombre y audiencia.

Continuando en Visual Studio en el proyecto ProductPlugin:

  1. En la carpeta Servicios , abra ProductsService.cs

  2. En el archivo, cree nuevos métodos denominados GetProductsByCategoryAsync y 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

A continuación, agregue un nuevo método a la clase MessageExtensionHelper para recuperar productos basados en los parámetros name y audience.

  1. En la carpeta Asistentes , abra MessageExtensionHelper.cs

  2. En el archivo, cree un nuevo método denominado RetrieveProducts que recupere productos basados en los parámetros name y audience.

    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

El método RetrieveProduct recupera productos en función de los parámetros name y audience. Si el parámetro name está vacío y el parámetro audience no está vacío, el método recupera los productos en función del parámetro audience. Si el parámetro name no está vacío y el parámetro audience está vacío, el método recupera los productos en función del parámetro name. Si los parámetros name y audience no están vacíos, el método recupera productos basados en ambos parámetros. Si ambos parámetros están vacíos, el método devuelve una lista vacía.

A continuación, actualice la clase SearchApp para controlar el nuevo parámetro.

  1. En la carpeta Buscar , abra SearchApp.cs

  2. En el método OnTeamsMessagingExtensionQueryAsync , reemplace el código siguiente:

    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

El método OnTeamsMessagingExtensionQueryAsync ahora recupera los parámetros name y audience de los parámetros de consulta. A continuación, recupera productos basados en los parámetros name y audience mediante el método RetrieveProducts .

Creación y actualización de recursos

Con todo listo, ejecute el proceso Preparar dependencias de aplicaciones de Teams para crear nuevos recursos y actualizar los existentes.

Continuar en Visual Studio:

  1. En Explorador de soluciones, haga clic con el botón derecho en el proyecto TeamsApp
  2. Expanda el menú Kit de herramientas de Teams y seleccione Preparar dependencias de aplicaciones de Teams.
  3. En el cuadro de diálogo Cuenta de Microsoft 365, seleccione Continuar.
  4. En el cuadro de diálogo Aprovisionar , seleccione Aprovisionar.
  5. En el cuadro de diálogo de advertencia del kit de herramientas de Teams , seleccione Aprovisionar.
  6. En el cuadro de diálogo Información del kit de herramientas de Teams , seleccione el icono cruzado para cerrar el cuadro de diálogo.

Ejecución y depuración

Con los recursos aprovisionados, inicie una sesión de depuración para probar la extensión de mensaje.

En primer lugar, inicie Dev Proxy para simular la API personalizada.

  1. Abrir una ventana de terminal

  2. Ejecute el siguiente comando para iniciar dev Proxy:

    devproxy --config-file "~appFolder/presets/learn-copilot-me-plugin/products-api-config.json"
    
  3. Si se le solicita, acepte la advertencia del certificado.

Nota:

Cuando se ejecuta Dev Proxy, actúa como un proxy de todo el sistema.

A continuación, inicie una sesión de depuración en Visual Studio:

  1. Para iniciar una nueva sesión de depuración, presione F5 o seleccione Iniciar en la barra de herramientas.

  2. Espere hasta que se abra una ventana del explorador y aparezca el cuadro de diálogo de instalación de la aplicación en el cliente web de Microsoft Teams. Si se le solicita, escriba las credenciales de la cuenta de Microsoft 365.

  3. En el cuadro de diálogo de instalación de la aplicación, seleccione Agregar.

  4. Abrir la aplicación Copilot en Microsoft Teams

  5. En el área redactar mensaje, abra el control flotante Complementos .

  6. En la lista de complementos, cambie el complemento de productos de Contoso para habilitarlo.

    Captura de pantalla de Microsoft 365 Copilot en Microsoft Teams con el complemento de productos contoso habilitado.

  7. Escriba Buscar productos de Contoso dirigidos a personas como mensaje y envíelo

  8. Esperar a que Copilot responda

    Captura de pantalla de Microsoft 365 Copilot en Microsoft Teams que muestra el mensaje copilot que se muestra al procesar la solicitud del usuario.

  9. En la respuesta de Copilot, se muestran los datos devueltos en la respuesta del complemento y se hace referencia al complemento en la respuesta.

    Captura de pantalla de una respuesta en Microsoft 365 Copilot que contiene información devuelta por el complemento de extensión de mensaje. Se muestra una tarjeta adaptable que muestra la información del producto.

  10. Para ver la tarjeta adaptable pertinente para el resultado, mantenga el puntero sobre las referencias en la respuesta de Copilot.

    Captura de pantalla de Microsoft 365 Copilot en Microsoft Teams que muestra una tarjeta adaptable con la información del producto mostrada. La tarjeta se muestra cuando el usuario mantiene el puntero sobre una referencia en la respuesta de Copilot.

Vuelva a Visual Studio y seleccione Detener en la barra de herramientas o presione Mayús + F5 para detener la sesión de depuración. Además, apague El proxy de desarrollo mediante Ctrl + C.