练习 - 扩展和优化用于智能 Microsoft 365 Copilot 副驾驶®的消息扩展

已完成

在本练习中,你将扩展和优化消息扩展,以便与 智能 Microsoft 365 Copilot 副驾驶® 一起使用。 添加名为“目标受众”的新参数,并更新消息扩展逻辑以处理多个参数。 最后,运行并调试消息扩展,并在 Microsoft Teams 的 Copilot 中对其进行测试。

智能 Microsoft 365 Copilot 副驾驶®中包含消息扩展插件返回的信息的答案的屏幕截图。将显示一个自适应卡,其中显示了产品信息。

更新应用说明

在应用清单中指定简洁准确的说明对于确保 Copilot 知道何时以及如何调用插件至关重要。 更新应用清单中的应用、命令和参数说明。

打开 Visual Studio,并在 TeamsApp 项目中:

  1. appPackage 文件夹中,打开 manifest.json

  2. 更新 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."
        },
    }
    

添加新参数

添加 Copilot 可以使用的新参数。 这个新参数可帮助用户使用 Copilot 查找针对不同受众(例如个人和企业)的产品。

在 Visual Studio 和 TeamsApp 项目中继续:

  1. parameters 数组中,在 ProductName 参数后面添加 TargetAudience 参数。

    {    
        "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

TargetAudience 参数的说明描述了它是什么,并说明该参数应接受 ConsumerEnterprise are allowed 值。

接下来,更新命令说明以包含新参数。

  • 命令数组中,更新命令的说明

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

更新消息扩展逻辑

若要支持新参数并支持复杂的提示,请更新机器人活动处理程序中的 OnTeamsMessagingExtensionQueryAsync 方法以处理多个参数。

首先,更新 ProductService 类,以基于名称和访问群体参数检索产品。

继续在 Visual Studio 中的 ProductPlugin 项目中:

  1. “服务” 文件夹中,打开 ProductsService.cs

  2. 在 文件中,创建名为 GetProductsByCategoryAsyncGetProductsByNameAndCategoryAsync 的新方法

    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

接下来,向 MessageExtensionHelper 类添加新方法,以基于名称和访问群体参数检索产品。

  1. “帮助程序” 文件夹中,打开 MessageExtensionHelper.cs

  2. 在 文件中,创建一个名为 RetrieveProducts 的新方法,该方法根据名称和受众参数检索产品。

    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

RetrieveProduct 方法根据名称和受众参数检索产品。 如果 name 参数为空,并且 audience 参数不为空,则 该方法将根据 audience 参数检索产品。 如果 name 参数不为空,并且 audience 参数为空,则该方法将基于 name 参数检索产品。 如果名称和受众参数都不为空,则该方法会基于这两个参数检索产品。 如果这两个参数都为空,该方法将返回一个空列表。

接下来,更新 SearchApp 类以处理新参数。

  1. “搜索 ”文件夹中,打开 SearchApp.cs

  2. OnTeamsMessagingExtensionQueryAsync 方法中,替换以下代码:

    var name = MessageExtensionHelpers.GetQueryParameterValueByName(query.Parameters, "ProductName");
    
    var productService = new ProductsService(tokenResponse.Token);
    var products = await productService.GetProductsByNameAsync(name);
    

    替换成:

    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

OnTeamsMessagingExtensionQueryAsync 方法现在从查询参数中检索名称和受众参数。 然后,它使用 RetrieveProducts 方法根据名称和受众参数检索产品。

创建和更新资源

一切准备就绪后,运行 准备 Teams 应用依赖项 过程以创建新资源并更新现有资源。

在 Visual Studio 中继续:

  1. 解决方案资源管理器中,右键单击 TeamsApp 项目
  2. 展开“Teams 工具包”菜单,选择“准备 Teams 应用依赖项
  3. “Microsoft 365 帐户”对话框中,选择“继续
  4. 在“预配”对话框中,选择“预配
  5. “Teams 工具包警告”对话框中,选择“预配
  6. “Teams 工具包信息 ”对话框中,选择交叉图标以关闭对话框

运行和调试

预配资源后,启动调试会话以测试消息扩展。

首先,启动开发代理以模拟自定义 API。

  1. 打开终端窗口

  2. 运行以下命令以启动开发代理:

    devproxy --config-file "~appFolder/presets/learn-copilot-me-plugin/products-api-config.json"
    
  3. 如果出现提示,请接受证书警告

注意

当开发代理运行时,它充当系统范围的代理。

接下来,在 Visual Studio 中启动调试会话:

  1. 若要启动新的调试会话,请按 F5 或从工具栏中选择“ 启动

  2. 等待浏览器窗口打开,应用安装对话框显示在 Microsoft Teams Web 客户端中。 如果出现提示,请输入Microsoft 365 帐户凭据。

  3. 在应用安装对话框中,选择 “添加”

  4. 在 Microsoft Teams 中打开 Copilot 应用

  5. 在撰写消息区域中,打开 “插件” 浮出控件

  6. 在插件列表中,切换 Contoso 产品 插件以启用它

    Microsoft Teams 中启用了 Contoso 产品插件的智能 Microsoft 365 Copilot 副驾驶®的屏幕截图。

  7. 输入 “查找面向个人的 Contoso 产品 ”作为你的消息并发送它

  8. 等待 Copilot 响应

    Microsoft Teams 中智能 Microsoft 365 Copilot 副驾驶®的屏幕截图,其中显示了处理用户请求时显示的副驾驶消息。

  9. 在 Copilot 响应中,显示插件响应中返回的数据,并在响应中引用插件

    智能 Microsoft 365 Copilot 副驾驶®中包含消息扩展插件返回的信息的答案的屏幕截图。将显示一个自适应卡,其中显示了产品信息。

  10. 若要查看与结果相关的自适应卡片,请将鼠标悬停在 Copilot 响应中的引用上

    Microsoft Teams 中智能 Microsoft 365 Copilot 副驾驶®的屏幕截图,其中显示了一个自适应卡片,其中显示了产品信息。当用户将鼠标悬停在 Copilot 响应中的引用上时,将显示卡。

返回到 Visual Studio 并从工具栏中选择“ 停止 ”,或按 Shift + F5 停止调试会话。 此外,使用 Ctrl + C 关闭开发代理。