在本文中,详细了解如何构建 Teams 应用功能。 下面是适用于 Teams 平台功能的分步指南列表。
| # | 功能 | 分步指南 |
|---|---|---|
| 1. | Bot | 使用 Microsoft 365 Agents Playground 调试 AI 聊天机器人 |
| 2. | 消息扩展 | 生成基于 API 的消息扩展 |
| 3. | Tab | 使用 C sharp 生成第一个选项卡应用 |
| 4. | SSO | 使用 SSO 身份验证生成机器人 |
使用 Microsoft 365 Agents Playground 调试 AI 聊天机器人
使用 Teams AI 聊天机器人应用开始Microsoft Teams 应用开发,并使用 Microsoft 365 Agents Playground (以前称为 Teams 应用测试工具) 进行调试。 Agents Playground 使调试基于机器人的应用变得轻松。 无需Microsoft 365 开发人员帐户、隧道或 Teams 应用和机器人注册即可使用 Agents Playground。
教程:调试 AI 聊天机器人
先决条件
你可以与机器人聊天,并在 Teams 中查看消息和自适应卡片。 还可以使用活动触发器在 Agents Playground 中模拟活动。
注意
- 代理演练仅在 Microsoft 365 代理工具包的 v5.4.0 中可用, (以前称为 Teams 工具包) 。
- 仅桌面和 Web 客户端支持 Agents Playground。
本分步指南可帮助你使用代理工具包生成 AI 聊天机器人,并使用测试工具进行调试。 完成本指南后,你将看到以下输出,用户可以在其中访问和使用 AI 聊天机器人:
| 安装 | 用于使用... |
|---|---|
| Visual Studio Code或 Visual Studio | JavaScript、TypeScript 或 C# 生成环境。 使用最新版本。 |
| Microsoft 365 代理工具包 | Microsoft Visual Studio Code扩展,用于为应用创建项目基架。 使用代理工具包 v5.4.0。 有关详细信息,请参阅 安装代理工具包。 |
| Node.js | 后端 JavaScript 运行时环境。 有关详细信息,请参阅 项目类型的Node.js 版本兼容性表。 |
| OpenAI 或 Azure OpenAI | 首先创建 OpenAI API 密钥以使用 OpenAI 的 GPT。 如果要在 Azure 中托管应用或访问资源,则必须创建Azure OpenAI 服务。 |
| Microsoft Edge(推荐)或 Google Chrome | 包含开发人员工具的浏览器。 |
为 AI 聊天机器人应用创建项目工作区
Teams 应用的机器人功能可创建聊天机器人或对话机器人。 它与 Web 服务通信,促进其服务的使用。 机器人可以执行简单的自动化任务,例如交付客户服务。 可以获取天气预报、进行预订或使用对话机器人提供的任何其他服务。
由于已准备好创建这些应用,因此可以设置用于创建 AI 聊天机器人应用的新 Teams 项目。
创建机器人项目工作区
如果先决条件已到位,让我们开始吧!
打开 Visual Studio Code。
在Visual Studio Code活动栏中选择“Microsoft 365 代理工具包
”图标。选择 “创建新代理/应用”。
选择“Teams> 代理Azure OpenAI> 立即输入输入Azure API 服务密钥
选择“ Teams 的基本代理”。 如果需要机器人的其他功能,请选择所需的选项。
选择编程语言作为 JavaScript。
选择“ 默认文件夹”。
若要更改默认位置,请执行以下步骤:
选择“ 浏览”。
选择项目工作区的位置。
选择 “选择文件夹”。
为应用输入合适的 名称,然后选择 Enter 键。
此时会显示一个对话框,你需要选择“是”或“否”来信任此文件夹中文件的作者。
现在,已成功创建 AI 聊天机器人项目工作区。
浏览机器人应用源代码
完成基架搭建后,在Visual Studio Code的“资源管理器”部分中浏览项目目录和文件。
| 文件夹或文件名 | 目录 |
|---|---|
env/.env.playground |
包含可提交到 Git 的环境变量的配置文件。 |
env/.env.playground.user |
包含环境变量(包括凭据)的配置文件,默认情况下不会提交到 Git。 |
appPackage |
应用清单模板文件和应用图标 (color.png 和 outline.png) 。 |
appPackage/manifest.json |
用于在本地和远程环境中运行应用的应用清单。 |
src/app.js |
处理 AI 聊天机器人的业务逻辑。 |
m365agents.yml |
这是代理工具包的主要项目文件。 项目文件定义了两个主要内容:属性和配置和阶段定义。 |
m365agents.local.yml |
这将替代 m365agents.yml 启用本地执行和调试的作。 |
m365agents.playground.yml |
这将替代 m365agents.yml 在测试工具中启用本地执行和调试的作。 |
生成并运行 AI 聊天机器人应用
为 AI 聊天机器人创建 Open AI 密钥和终结点
转到Azure 门户。
选择“创建资源”并搜索“Azure Open AI”。
选择“Azure打开 AI”,然后选择“创建”。
填写所需的详细信息,然后选择“ 下一步”。
选择“ 所有网络(包括 Internet)都可以访问此资源 ”,然后选择“ 下一步”。
填写所需的详细信息,然后选择“ 下一步”。
选择“创建”。
已成功为 AI 聊天机器人创建密钥和终结点。
注意
还可以获取 OpenAI API 密钥来调试 AI 聊天机器人。
获取 Azure Open AI 密钥和终结点
选择“ 转到资源”。
从左窗格中选择“ 密钥和终结点 ”,然后复制 “密钥 和 终结点”。 可以复制 KEY 1 或 KEY 2。
保存 KEY 和 终结点 以供进一步使用。
从左窗格中选择 “模型部署 ”,然后选择“ 管理部署”。
此时会显示Azure“打开 AI 工作室”窗口。
从左窗格中选择“ 部署 ”,然后选择“ + 创建新部署”。
选择以下详细信息:
更新Azure Open AI 密钥和终结点
在 Visual Studio Code 中打开项目。
在“资源管理器”下,转到 env.env.playground.user> 文件。
输入 SECRET_AZURE_OPENAI_API_KEY 和 SECRET_AZURE_OPENAI_ENDPOINT。
... SECRET_AZURE_OPENAI_API_KEY=<azure-openai-api-key> SECRET_AZURE_OPENAI_ENDPOINT=<azure-openai-endpoint>转到 src>app.js 文件。
注释
OpenAI代码并取消注释Azure OpenAI代码。在 中
azureDefaultDeployment输入Azure Open AI 部署名称。// Use OpenAI // apiKey: config.openAIKey, // defaultModel: "gpt-3.5-turbo", azureApiKey: config.azureOpenAIKey, azureDefaultDeployment: "gpt-35-turbo", azureEndpoint: config.azureOpenAIEndpoint,
调试并运行 AI 聊天机器人应用
活动触发器
有两种类型的活动触发器:
预定义的活动触发器
Agents Playground 提供预定义的活动触发器来测试机器人的功能。
| 类别 | 活动 | 处理程序 |
|---|---|---|
| 触发安装更新活动 | 安装机器人 卸载机器人 |
onInstallationUpdate onInstallationUpdateAdded onInstallationUpdate onInstallationUpdateRemove |
| 触发对话更新活动 | 添加用户 添加机器人 添加通道 |
onMembersAdded onTeamsMembersAddedEvent onMembersAdded onTeamsMembersAddedEvent onTeamsChannelCreatedEvent |
| 删除用户 删除机器人 删除频道 删除团队 |
onMembersRemoved onTeamsMembersRemovedEvent onMembersRemoved onTeamsMembersRemovedEvent onTeamsChannelDeletedEvent onTeamsTeamDeletedEvent |
|
| 重命名通道 重命名团队 |
onTeamsChannelRenamedEvent onTeamsTeamRenamedEvent |
注意
并非所有范围都提供所有类型的活动。 例如,不能在个人聊天或群组聊天中添加或删除频道。
预定义的活动触发器可在代理场的 “模拟活动 ”菜单中使用。
若要模拟 “添加用户” 活动,请执行以下步骤:
在“代理演练”中,转到 模拟活动>添加用户。
此时会显示一个对话框来预览活动处理程序。
选择“ 发送活动”。
机器人发送以下响应:
自定义活动触发器
例如,可以使用 自定义活动 来自定义活动触发器, reactionsAdded 以满足机器人应用的要求。 Agents Playground 会自动填充活动的必需属性。 还可以修改活动类型并添加更多属性。
选择模拟 活动>自定义活动。
添加
messageReaction以在 属性下type自定义活动:{ "type": "messageReaction", "reactionsAdded": [ { "type": "like" } ], "replyToId": "d60fd1cb-3e8f-44ef-849c-404806ba1b47" }选择“ 发送活动”。
机器人在响应中发送
onReactionsAdded处理程序。
完成挑战
你想出了这样的输出吗?
恭喜! 已成功创建 AI 聊天机器人应用。 现在,你已了解如何在 Agents Playground 中调试 AI 聊天机器人应用。
生成基于 API 的消息扩展
使用 API 构建的消息扩展 (基于 API 的) 通过允许 Teams 应用与外部服务交互来显著增强其功能。 基于 API 的消息扩展可以减少在不同应用程序之间切换的需要,从而帮助简化工作流。
教程:生成基于 API 的消息扩展
注意
基于 API 的消息扩展仅支持搜索命令。
可以使用基于 API 的消息扩展来集成业务工作流中常用的外部服务。 例如,经常使用 CRM 系统进行客户管理的企业可以使用消息扩展直接从 Teams 提取和显示客户数据。 此应用可减少在不同应用程序之间切换的需要,从而节省时间并提高效率。 Teams 提供的所有平台(包括桌面、Web 和移动版)都支持此功能。
生成消息扩展的先决条件
下面是生成和部署应用所需的工具列表。
| 安装 | 用于使用... |
|---|---|
| Microsoft Teams | Microsoft Teams,通过聊天、会议或通话应用与你合作的每个人进行协作 - 所有这些都在一个位置。 |
| Microsoft Edge(推荐)或 Google Chrome | 包含开发人员工具的浏览器。 |
| Visual Studio Code | JavaScript、TypeScript 或 SharePoint 框架 (SPFx) 生成环境。 使用版本 1.55 或更高版本。 |
| Microsoft 365 开发人员帐户 | 具有安装应用的相应权限的 Teams 帐户的访问权限。 |
| Azure帐户 | 访问Azure资源。 |
| OpenAPI 说明 (OAD) 文档 | 介绍 API 功能的文档。 有关详细信息,请参阅 OpenAPI 说明。 |
设置 Teams 开发租户
租户类似于 Teams 中组织的空间或容器,可在其中聊天、共享文件和运行会议。 此空间也是上传和测试自定义应用的位置。 让我们验证是否已准备好使用租户进行开发。
检查自定义应用上传选项
创建应用后,必须在 Teams 中加载应用,而无需分发它。 此过程称为自定义应用上传。 登录到 Microsoft 365 帐户以查看此选项。
注意
自定义应用上传对于在 Teams 本地环境中预览和测试应用是必需的。 如果未启用,则无法在 Teams 本地环境中预览和测试应用。
是否已拥有租户,并且是否具有管理员访问权限? 我们来检查,如果你真的这样做了!
验证是否可以在 Teams 中上传自定义应用:
在 Teams 客户端中,选择“ 应用” 图标。
选择“管理应用”。
选择 “上传应用”。
查找“ 上传自定义应用”选项。 如果看到 选项,则表示已启用自定义应用上传。
注意
如果找不到上传自定义应用的选项,请联系 Teams 管理员。
创建免费的 Teams 开发人员租户 (可选)
如果没有 Teams 开发人员帐户,可以免费获取它。 加入 Microsoft 365 开发人员计划!
选择“ 立即加入 ”,然后按照屏幕上的说明进行作。
在欢迎屏幕中,选择“ 设置 E5 订阅”。
设置管理员帐户。 完成后,将显示以下屏幕。
使用刚刚设置的管理员帐户登录到 Teams。 验证在 Teams 中是否具有 “上传自定义应用 ”选项。
获取免费Azure帐户
如果要在 Azure 中托管应用或访问资源,则必须拥有Azure订阅。 在开始之前创建一个免费帐户。
你拥有设置帐户的所有工具。 接下来,让我们设置开发环境并开始生成! 选择要首先生成的应用。
创建 OpenAPI 说明文档
OpenAPI 说明 (OAD) 是行业标准规范,概述了 OpenAPI 文件的结构和概述方式。 它是一种与语言无关、可读的格式,用于描述 API。 人类和机器都很容易读取和写入。 该架构是计算机可读的,以 YAML 或 JSON 表示。
若要与 API 交互,需要一个 OpenAPI 说明文档。 OpenAPI 说明文档必须满足以下条件:
auth不能指定 属性。JSON 和 YAML 是支持的格式。
支持 OpenAPI 版本 2.0 和 3.0.x。
Teams 不支持 oneOf、anyOf、allOf,并且不支持 (swagger.io) 构造。
不支持为请求构造数组,但支持 JSON 请求正文中的嵌套对象。
请求正文(如果存在)必须是 application/Json,以确保与各种 API 兼容。
为
servers.url属性定义 HTTPS 协议服务器 URL。仅支持单个参数搜索。
仅允许一个不带默认值的必需参数。
仅支持 POST 和 GET HTTP 方法。
OpenAPI 说明文档必须具有
operationId。作不得要求不带默认值的标头或 Cookie 参数。
命令必须正好具有一个参数。
确保 OpenAPI 说明文档中没有远程引用。
具有默认值的必需参数被视为可选参数。
在本教程中,我们使用以下 OpenAPI 说明作为示例:
OpenAPI 说明
openapi: 3.0.1 info: title: OpenTools Plugin description: A plugin that allows the user to find the most appropriate AI tools for their use cases, with their pricing information. version: 'v1' servers: - url: https://gptplugin.opentools.ai paths: /tools: get: operationId: searchTools summary: Search for AI Tools parameters: - in: query name: search required: true schema: type: string description: Used to search for AI tools by their category based on the keywords. For example, a search for "tool to create music" provides a list of tools that can create music. responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/searchToolsResponse' "400": description: Search Error content: application/json: schema: ref: '#/components/schemas/searchToolsError' components: schemas: searchToolsResponse: required: - search type: object properties: tools: type: array items: type: object properties: name: type: string description: The name of the tool. opentools_url: type: string description: The URL to access the tool. main_summary: type: string description: A summary of what the tool is. pricing_summary: type: string description: A summary of the pricing of the tool. categories: type: array items: type: string description: The categories assigned to the tool. platforms: type: array items: type: string description: The platforms that this tool is available on. description: The list of AI tools. searchToolsError: type: object properties: message: type: string description: Message of the error.注意
确保 该
required: true属性仅可用于一个参数。 如果有多个必需参数,则可以将其他参数的必需属性更新为required: false。
可以验证 OpenAPI 说明文档是否有效。 若要验证,请执行以下步骤:
转到 Swagger 或 OpenAPI 验证程序 并验证 OpenAPI 说明文档。
保存 OpenAPI 说明文档。
转到 Swagger 编辑器。
在左窗格中,将 OpenAPI 说明粘贴到编辑器中。
在右窗格中,选择“ GET”。
选择“ 试用”。
输入 搜索 参数的值作为 创建音乐的工具。
选择“ 执行”。 swagger 编辑器显示包含产品列表的响应。
转到 服务器响应>响应正文。
在 下
products,从列表中复制第一个产品,并将其保存以供将来参考。
创建响应呈现模板
OpenAPI 说明文档需要响应呈现模板,以便应用响应 GET 或 POST 请求。 响应呈现模板由自适应卡片模板、预览卡模板和元数据组成。
自适应卡片模板
若要创建自适应卡片模板,请执行以下步骤:
转到 ChatGPT ,并在消息撰写区域中询问以下查询:
Create an Adaptive Card Template that binds to the following response: "categories": [ "Music Generation", "AI Detection" ], "chatbot_short_url": "https://goto.opentools.ai/c/ai-music-generator", "main_summary": "AI Music Generator is an AI-powered music composing tool that allows users to create original and personalized music for various purposes. It can generate melodies, harmonies, and rhythms tailored to specific needs and preferences, with customization options such as genre, mood, length, and instrumentation. The tool is designed for creative individuals, from beginners to professionals, and can produce high-quality music in seconds. Every generated piece of music is royalty-free and can be used instantly, with no limitations on beat creation. With advanced AI technology, AI Music Generator makes music production accessible to everyone.", "name": "AI Music Generator", "opentools_url": "https://goto.opentools.ai/ai-music-generator", "platforms": [ "Web", "App", "API" ]选择“ 发送消息”。
ChatGPT 使用绑定到示例数据的自适应卡片模板生成响应。 保存自适应卡片模板以供将来参考。
下面是自适应卡片模板的示例:
自适应卡片模板
{ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", "type": "AdaptiveCard", "version": "1.4", "body": [ { "type": "TextBlock", "text": "AI Music Generator", "weight": "Bolder", "size": "Large" }, { "type": "TextBlock", "text": "Categories", "size": "Medium" }, { "type": "TextBlock", "text": "Music Generation, AI Detection", "wrap": true }, { "type": "TextBlock", "text": "Description", "size": "Medium" }, { "type": "TextBlock", "text": "AI Music Generator is an AI-powered music composing tool that allows users to create original and personalized music for various purposes. It can generate melodies, harmonies, and rhythms tailored to specific needs and preferences, with customization options such as genre, mood, length, and instrumentation. The tool is designed for creative individuals, from beginners to professionals, and can produce high-quality music in seconds. Every generated piece of music is royalty-free and can be used instantly, with no limitations on beat creation. AI Music Generator is powered by advanced AI technology, and it makes music production accessible to everyone.", "wrap": true }, { "type": "TextBlock", "text": "Platform", "size": "Medium" }, { "type": "TextBlock", "text": "Web, App, API", "wrap": true } ], "actions": [ { "type": "Action.OpenUrl", "title": "Learn More", "url": "https://goto.opentools.ai/ai-music-generator" }, { "type": "Action.OpenUrl", "title": "Try It", "url": "https://goto.opentools.ai/c/ai-music-generator" } ] }若要验证生成的自适应卡片是否绑定到示例数据,请执行以下步骤:
转到 “选择主机应用”,然后从下拉列表中选择“ Microsoft Teams ”。
转到 卡片有效负载编辑器 并粘贴自适应卡片模板代码。
转到 示例数据编辑器 并粘贴之前保存的 GET API 响应。
选择 “预览模式”。 自适应卡片设计器显示自适应卡片,其中包含将响应绑定到模板的数据。
创建预览卡模板
预览卡模板可以包含 title、 subtitle 和 image 属性。 如果 API 响应没有图像,则可以删除图像属性。
下面是预览卡模板的示例:
预览卡模板
"previewCardTemplate": {
"title": "${if(name, name, 'N/A')}",
"subtitle": "$${if(price, price, 'N/A')}"
}
为 title 和 subtitle创建 if 条件,其中:
- 如果存在名称,机器人将使用名称。
- 如果名称不存在,机器人将使用 NA。
例如,"title": "Name: ${if(name, name, 'N/A')}"。
保存预览卡模板以供将来参考。
响应呈现模板
响应呈现模板必须符合 托管在 的 https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.ResponseRenderingTemplate.schema.json架构。
若要创建响应呈现模板,请执行以下步骤:
创建 JSON 文件并将以下代码添加到该文件:
{ "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.ResponseRenderingTemplate.schema.json", "version": "1.0", "jsonPath": "", "responseLayout": "", "responseCardTemplate": { }, "previewCardTemplate": { } }按如下所示更新响应呈现模板中的属性:
# 属性名称 值 1. "$schema""https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.ResponseRenderingTemplate.schema.json"2. "version""1.0"
version是要使用的呈现模板的版本。3. "jsonPath""tools"
jsonPath是响应 JSON 响应中的一个或多个结果的路径。jsonPath将 添加到 API 响应中产品列表中的相关数据/数组。 在本例中,jsonPath为 工具。 有关如何确定 JSON 路径的详细信息,请参阅 使用 JSON 路径查询 JSON。4. "responseLayout""list"
responseLayout指定附件的布局。 用于结果类型的响应。 支持的类型是列表和网格。 如果响应正文包含具有多个元素(如文本、标题和图像)的对象,则必须将响应布局设置为list。 如果 API 响应仅包含图像或缩略图,则必须将响应布局设置为grid。5. "responseCardTemplate"粘贴之前保存的自适应卡片模板代码。
responseCardTemplate是一个自适应卡片模板,用于将 JSON 响应映射到自适应卡片。6. "previewCardTemplate"粘贴之前保存的预览卡模板代码。
previewCardTemplate是预览卡模板用于在消息扩展浮出控件中显示结果的预览。将响应呈现模板保存在保存 OpenAPI 说明文档的同一文件夹中。
以下代码是响应呈现模板的示例:
响应呈现模板
{
"$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.ResponseRenderingTemplate.schema.json",
"version": "1.0",
"jsonPath": "tools",
"responseLayout": "list",
"responseCardTemplate": {
"type": "AdaptiveCard",
"version": "1.4",
"body": [
{
"type": "TextBlock",
"text": "AI Music Generator",
"weight": "Bolder",
"size": "Large"
},
{
"type": "TextBlock",
"text": "Categories",
"size": "Medium"
},
{
"type": "TextBlock",
"text": "Music Generation, AI Detection",
"wrap": true
},
{
"type": "TextBlock",
"text": "Description",
"size": "Medium"
},
{
"type": "TextBlock",
"text": "AI Music Generator is an AI-powered music composing tool that allows users to create original and personalized music for various purposes. It can generate melodies, harmonies, and rhythms tailored to specific needs and preferences, with customization options such as genre, mood, length, and instrumentation. The tool is designed for creative individuals, from beginners to professionals, and can produce high-quality music in seconds. Every generated piece of music is royalty-free and can be used instantly, with no limitations on beat creation. With advanced AI technology, AI Music Generator makes music production accessible to everyone.",
"wrap": true
},
{
"type": "TextBlock",
"text": "Platform",
"size": "Medium"
},
{
"type": "TextBlock",
"text": "Web, App, API",
"wrap": true
}
],
"actions": [
{
"type": "Action.OpenUrl",
"title": "Learn More",
"url": "https://goto.opentools.ai/ai-music-generator"
},
{
"type": "Action.OpenUrl",
"title": "Try It",
"url": "https://goto.opentools.ai/c/ai-music-generator"
}
]
},
"previewCardTemplate": {
"title": "${if(name, name, 'N/A')}",
"subtitle": "$${if(price, price, 'N/A')}"
}
}
创建应用清单
现在,需要 (以前称为 Teams 应用清单) 创建应用清单。 应用清单介绍了你的应用如何集成到 Microsoft Teams 产品中。
创建 Teams 应用清单
若要创建清单,请执行以下步骤:
创建新的 JSON 文件。 应用清单必须符合 应用清单架构中定义的架构的 1.20 版本。
将以下代码添加到 JSON 文件:
应用清单
{ "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.20/MicrosoftTeams.schema.json", "manifestVersion": "1.20", "version": "1.0.3", "id": "<<YOUR-MICROSOFT-APP-ID>>", "packageName": "com.microsoft.teams.extension", "developer": { "name": "Teams App, Inc.", "websiteUrl": "https://www.example.com", "privacyUrl": "https://www.example.com/termofuse", "termsOfUseUrl": "https://www.example.com/privacy" }, "icons": { "color": "color.png", "outline": "outline.png" }, "name": { "short": "Search ME API", "full": "Search ME API full" }, "description": { "short": "product app for testing API Message Extensions", "full": "product app for testing API Message Extensions" }, "accentColor": "#FFFFFF", "composeExtensions": [ { "composeExtensionType": "", "apiSpecificationFile": "", "commands": [ { "context": [ "compose" ], "type": "query", "title": "API for fetching Klarna.", "id": "", "parameters": [ { "name": "", "title": "", "description": "" } ], "description": "", "apiResponseRenderingTemplateFile": "" } ] } ], "permissions": [ "identity", "messageTeamMembers" ], "validDomains": [] }按如下所示更新应用清单属性:
- 将 替换为
<<YOUR-MICROSOFT-APP-ID>>机器人Microsoft应用 ID。 - 将 的值
composeExtensionType更新为apiBased。 - 将 的值
apiSpecificationFile更新为 OpenAPI 说明文件的路径。 - 将 的值
commands.id更新为searchTools。 - 将 的值
commands.title更新为Search for AI Tools。 - 将 的值
commands.description更新为Search for AI Tools。 - 将 的值
parameters.name更新为search。 如果没有参数,则值必须是查询参数;properties.name如果引用请求正文架构中的属性,则这些值必须是查询参数。 - 将
apiResponseRenderingTemplateFile更新为响应呈现模板文件的路径。 - 将 的值
validDomains更新为service URLOpenAPI 说明文件中定义的终结点。
- 将 替换为
将 Teams 应用清单保存在保存 OpenAPI 说明文档和响应呈现模板的同一文件夹中。
需要彩色图像和轮廓图像。 这些图像应包含在 文件夹中,并在 Teams 应用清单中引用。
压缩文件夹的内容。 zip 文件必须包含以下文件:
- OpenAPI 说明文档
- 响应呈现模板
- 应用部件清单
- 彩色图标
- 大纲图标
将自定义应用上传到 Teams
登录到 Teams 测试环境以在 Teams 中测试应用。 若要在 Teams 中上传自定义应用,请执行以下步骤:
转到 Microsoft Teams 并使用测试租户凭据登录。
转到 “应用>”“管理应用>”“上传应用”。
选择 “上传自定义应用”。
选择创建的 zip 文件,然后选择“ 打开”。
选择“添加”。
选择 “打开”。
转到聊天,然后从邮件撰写区域选择 + ,然后搜索你的应用。
选择应用并进行搜索查询。
应用在聊天窗口中使用自适应卡片进行响应。
选择“发送”。
恭喜! 你做到了! 你已了解如何使用 OpenAPI 说明文档创建基于 API 的消息扩展。
使用 SSO 身份验证生成机器人
Microsoft Teams 中的对话机器人执行由用户启动的重复自动化任务,例如客户服务。 用户需要多次登录,而无需单一登录 (SSO) 身份验证。 使用 SSO 身份验证方法,用户无需多次登录到机器人。
教程:使用 SSO 身份验证生成机器人
机器人的行为方式不同,具体取决于它所涉及的对话:
- 频道和群组聊天聊天中的机器人需要用户访问 @mention 机器人。
- 一对一对话中的机器人不要求 @mention。 用户发送的所有消息都路由到机器人。
本分步指南可帮助你生成具有 SSO 身份验证的机器人。 你将看到以下输出:
生成机器人的先决条件
确保安装以下工具并设置开发环境:
| 安装 | 用于使用... |
|---|---|
| Microsoft Teams | Microsoft Teams,在一个位置通过聊天、会议和通话应用与你合作的每个人进行协作。 |
| Visual Studio 2022 | 可以在 Visual Studio 2022 中安装企业版,并安装 ASP.NET 和 Web 开发工作负载。 使用最新版本。 |
| Microsoft 365 开发人员帐户 | 具有安装应用的相应权限的 Teams 帐户的访问权限。 |
| 开发隧道 | Teams 应用功能 (对话机器人、消息扩展和传入 Webhook) 需要入站连接。 隧道将开发系统连接到 Teams。 开发隧道是一种功能强大的工具,用于安全地将 localhost 打开到 Internet 并控制谁有权访问。 Visual Studio 2022 版本 17.7.0 或更高版本中提供了开发隧道。 或者 还可以使用 ngrok 作为隧道,将开发系统连接到 Teams。 对于仅包含选项卡的应用,这不是必需的。 此包使用 npm devDependencies) 安装在项目目录 (中。 |
注意
下载 ngrok 后,注册并安装 authtoken。
设置 Teams 开发租户
租户类似于空间或容器,你可以在 Teams 中为组织聊天、共享文件和运行会议。 还可以上传和测试自定义应用。
检查自定义应用上传选项
创建应用后,必须在 Teams 中加载应用,而无需分发它。 此过程称为自定义应用上传。 登录到 Microsoft 365 帐户以查看此选项。
注意
自定义应用上传对于在 Teams 本地环境中预览和测试应用是必需的。 启用应用上传以在本地 Teams 中预览和测试应用。
是否已拥有租户,并且是否具有管理员访问权限? 我们来检查,如果你真的这样做了!
在 Teams 中验证自定义上传应用:
在 Teams 客户端中,选择“ 应用” 图标。
选择“管理应用”。
选择 “上传应用”
查找“ 上传自定义应用”选项。 如果看到 选项,则表示已启用自定义应用上传。
注意
如果没有上传自定义应用的选项,请联系 Teams 管理员。
创建免费的 Teams 开发人员租户
如果没有 Teams 开发人员帐户,可以免费获取它。 加入 Microsoft 365 开发人员计划!
选择“ 立即加入 ”,然后按照屏幕上的说明进行作。
在欢迎屏幕中,选择 “设置 E5 订阅”。
设置管理员帐户。 完成后,将显示以下屏幕。
使用刚设置的新管理员帐户登录到 Teams。 验证在 Teams 中是否具有 “上传自定义应用 ”选项。
设置本地环境
按照以下步骤克隆存储库:
选择“ 代码”。
在下拉菜单中,选择“ 使用 GitHub Desktop 打开”。
选择“ 克隆”。
注册Microsoft Entra应用
以下步骤可帮助你在Azure 门户中创建和注册机器人:
- 创建并注册Azure应用。
- 创建客户端密码以启用机器人的 SSO 身份验证。
- 添加 Teams 频道以部署机器人。
- 使用开发隧道创建到 Web 服务器终结点的隧道, (建议) 或 ngrok。
- 将消息传送终结点添加到你创建的开发隧道。
添加应用注册
转到Azure 门户。
选择“应用注册”。
选择“ + 新建注册”。
输入应用的名称。
根据需要选择租户选项。
选择“注册”。
你的应用已在 Microsoft Entra ID 中注册。 此时会显示应用概述页。
注意
保存 应用程序 (客户端的应用 ID) ID 和 目录 (租户) ID 以供进一步使用。
创建隧道
按照以下两种方法之一创建隧道。
打开 Visual Studio。
选择 “创建新项目”。
在搜索框中,输入 “ASP.NET”。 在搜索结果中,选择“ASP.NET Core Web 应用”。
选择 下一步。
输入 “项目名称 ”,然后选择“ 下一步”。
选择“创建”。
此时会显示概述窗口。
在调试下拉列表中,选择“ 开发隧道 (无活动隧道) >创建隧道...”。
将出现一个弹出窗口。
在弹出窗口中更新以下详细信息:
- 帐户:输入Microsoft或 GitHub 帐户。
- 名称:输入隧道的名称。
- 隧道类型:从下拉列表中选择“ 临时”。
- 访问:从下拉列表中选择“ 公共”。
选择“确定”。
此时会显示一个弹出窗口,显示已成功创建开发隧道。
选择“确定”。
可以在调试下拉列表中找到已创建的隧道,如下所示:
选择 F5 以在调试模式下运行应用程序。
如果出现 “安全警告 ”对话框,请选择“ 是”。
将出现一个弹出窗口。
选择 继续。
开发隧道主页将在新的浏览器窗口中打开,开发隧道现在处于活动状态。
转到 Visual Studio,选择“ 查看 > 输出”。
在 “输出 控制台”下拉菜单中,选择“ 开发隧道”。
输出控制台显示开发隧道 URL。
添加 Web 身份验证
在左窗格中的 “管理”下,选择“ 身份验证”。
选择 “添加平台>Web”。
通过将 追加
auth-end到完全限定的域名,输入应用的重定向 URI。 例如,https://your-devtunnel-domain/auth-end或https://your-ngrok-domain/auth-end。在 “隐式授予和混合流”下,选中“ 访问令牌 和 ID 令牌 ”复选框。
选择“配置”。
在 “Web”下,选择“ 添加 URI”。
输入
https://token.botframework.com/.auth/web/redirect。选择“保存”。
创建客户端密码
注意
如果遇到错误 ,租户范围策略会阻止客户端机密。有关详细信息,请与租户管理员联系。可以改为创建证书。 有关分步说明,请参阅 为应用注册创建证书。
在左窗格中的 “管理”下,选择“ 证书 & 机密”。
在 “客户端机密”下,选择“ + 新建客户端密码”。
此时会显示 “添加客户端机密 ”窗口。
输入 “说明”。
选择“添加”。
在“ 值”下,选择“ 复制到剪贴板 ”以保存客户端密码值以供进一步使用。
添加 API 权限
在左窗格中,选择“ API 权限”。
选择“ + 添加权限”。
选择 Microsoft Graph。
选择“委托的权限”。
选择“ User>User.Read”。
选择 添加权限。
注意
- 如果未向应用授予 IT 管理员同意,用户必须在首次使用应用时提供同意。
- 仅当Microsoft Entra应用在不同租户中注册时,用户才需要同意 API 权限。
添加应用程序 ID URI
在左窗格中的 “管理”下,选择“ 公开 API”。
在 “应用程序 ID URI”旁边,选择“ 添加”。
以 格式更新 应用程序 ID URI ,
api://botid-{AppID}然后选择“ 保存”。
添加范围
在左窗格中的 “管理”下,选择“ 公开 API”。
选择“ + 添加范围”。
输入 “access_as_user ”作为 “作用域名称”。
在 “谁可以同意?”下,选择“ 管理员和用户”。
更新其余字段的值,如下所示:
输入 Teams 可以访问用户的个人资料作为管理员同意显示名称。
输入“允许 Teams 以当前用户身份调用应用的 Web API”作为管理员同意说明。
输入 Teams 可以访问用户配置文件,并代表用户发出请求 作为 用户同意显示名称。
输入“启用 Teams”以调用此应用的 API,其权限与用户同意说明相同。
确保将“状态”设置为“已启用”。
选择“添加作用域”。
下图显示了字段和值:
注意
作用域名称必须与末尾追加的应用程序 ID URI
/access_as_user匹配。
添加客户端应用程序
在左窗格中的 “管理”下,选择“ 公开 API”。
在 “授权的客户端应用程序”下,确定要为应用的 Web 应用程序授权的应用程序。
选择“ + 添加客户端应用程序”。
添加 Teams 移动或桌面和 Teams Web 应用程序。
对于 Teams 移动版或桌面版:输入 客户端 ID 作为
1fec8e78-bce4-4aaf-ab1b-5451cc387264。
对于 Teams Web:输入 客户端 ID 作为
5e3ce6c0-2b1f-4285-8d4b-75ee78787346。
选中“ 授权的范围 ”复选框。
选择“添加应用程序”。
下图显示了 客户端 ID:
更新清单
在左窗格中,选择“ 清单”。
将 的值
requestedAccessTokenVersion设置为2,然后选择“ 保存”。
创建机器人
创建Azure机器人资源
注意
如果已在 Teams 中测试机器人,请注销此应用和 Teams。 若要查看此更改,请再次登录。
转到“主页”。
选择“ + 创建资源”。
在搜索框中,输入“Azure机器人”。
选择“Enter”。
选择“Azure机器人”。
选择“创建”。
在机器人 句柄中输入机器人名称。
从下拉列表中选择 订阅 。
从下拉列表中选择 资源组 。
如果没有现有的资源组,可以创建新的资源组。 若要创建新的资源组,请执行以下步骤:
- 选择“ 新建”。
- 输入资源名称,然后选择“ 确定”。
- 从 “新建资源组 位置”下拉列表中选择一个位置。
在 “定价”下,选择“ 更改计划”。
选择 FO Free>Select。
在 “Microsoft应用 ID”下,选择“ 应用类型 ”作为 “多租户”。
在 “创建类型”中,选择“ 使用现有应用注册”。
输入 应用 ID。
注意
不能使用相同的 Microsoft应用 ID 创建多个机器人。
然后“审阅 + 创建”。
验证通过后,选择“ 创建”。
机器人需要几分钟时间进行预配。
选择“转到资源”。
已成功创建Azure机器人。
添加 Teams 频道
在左窗格中,选择“ 频道”。
在 “可用频道”下,选择“ Microsoft Teams”。
选中复选框以接受 服务条款。
选择“ 同意”。
选择“应用”。
添加消息传送终结点
使用以下方法之一添加消息传送终结点:
使用 输出 控制台中的开发隧道 URL 作为消息传送终结点。
在左窗格中的 “设置”下,选择“ 配置”。
以 格式
https://your-devtunnel-domain/api/messages更新消息传送终结点。
选择“应用”。
已在机器人服务Azure成功设置机器人。
注意
如果 Application Insights 检测密钥 显示错误,请使用 应用 ID 进行更新。
添加 OAuth 连接设置
在左窗格中,选择“ 配置”。
选择“添加 OAuth 连接设置”。
在 “新建连接设置”下,更新以下详细信息:
- 名称:输入新连接设置的名称。 可以在机器人服务代码的设置中使用名称。
- 服务提供程序:从下拉列表中选择“Azure Active Directory v2”。
- 客户端 ID:更新 Microsoft应用 ID。
- 客户端密码:更新客户端机密 值。
- 令牌交换 URL:更新 应用程序 ID URI。
- 租户 ID:输入 “通用”。
- 作用域:输入 User.Read。
选择“保存”。
设置应用设置和清单文件
转到克隆存储库中的 appsettings.json 文件。
打开 appsettings.json 文件并更新以下信息:
- 设置为
"MicrosoftAppId"机器人 Microsoft应用 ID。 - 将 设置为
"MicrosoftAppPassword"机器人的客户端机密 ID 值。 - 设置为
ConnectionNameOAuth 连接名称。 - 设置为
"MicrosoftAppType"MultiTenant。 - 设置为
"MicrosoftAppTenantId"common。
- 设置为
转到克隆存储库中的 manifest.json 文件。
打开 manifest.json 文件并更新以下更改:
- 将 的所有匹配项
"{TODO: MicrosoftAppId}"替换为 Microsoft应用 ID。 - 设置为
"<<domain-name>>"ngrok 或开发隧道域。
- 将 的所有匹配项
生成并运行服务
打开 Visual Studio。
转到 “文件>打开>项目/解决方案...”。
从 bot-conversation-sso-quickstart>csharp_dotnetcore 文件夹中,选择 “BotConversationSsoQuickstart.sln 文件”。
选择 F5 运行项目。
如果出现 “安全警告 ”对话框,请选择“ 是”。
此时会打开一个网页,并显示消息 “机器人已准备就绪!”。
注意
仅当导航到 localhost URL 时,才会显示此页面。
故障 排除
如果收到 “找不到包” 错误,请执行以下步骤:
- 转到 “工具”>“NuGet 包管理器>”“包管理器设置”。
- 在出现的 “选项” 窗口中,选择“ NuGet 包管理器>包源”。
- 选择“添加”。
- 在 “名称”中,输入
nuget.org,并在 “源”中输入https://api.nuget.org/v3/index.json。 - 选择“ 更新 ”和 “确定”。
- 重新生成项目。
在 Teams 中上传机器人
在克隆的存储库中,转到 Microsoft-Teams-Samples>示例>bot-conversation-sso-quickstart>csharp_dotnetcore>TeamsApp>appPackage。
使用 appPackage 文件夹中存在的以下文件创建 .zip 文件:
- manifest.json
- outline.png
- color.png
转到 Microsoft Teams。
- 在 Teams 客户端中,选择“ 应用”。
- 选择“管理应用”。
- 选择 “上传应用”。
- 查找“ 上传自定义应用”选项。
选择“ 打开 ”以上传已在 “清单” 文件夹中创建的 .zip 文件。
选择“ 添加 ”,将机器人添加到聊天。
选择 “打开”。
可以通过向机器人发送消息来与机器人交互。 机器人将交换 SSO 令牌并代表你调用 图形 API。 除非你发送注销消息,否则它会让你保持登录状态。
向机器人发送消息。 聊天机器人首次请求同意。
对于桌面:选择“ 继续 ”,向 Teams 客户端授予访问机器人的权限。
注意
现在,你已使用机器人应用配置 SSO,这是你唯一必须同意的时间。
对于移动设备:选择“ 接受”。
注意
现在,你已在移动设备中配置了机器人应用的 SSO,这是你唯一需要同意的时间。
你想出了这样的东西吗?
你已完成本教程,开始生成具有 SSO 身份验证的机器人。
使用 C sharp 生成第一个选项卡应用
通过生成第一个具有选项卡功能的 Teams 应用,开始Microsoft Teams 应用开发。
在本教程中,你将了解:
- 如何设置新项目。
- 如何使用 C# 生成具有选项卡功能的应用,Microsoft Visual Studio 2022。
教程:使用 C 生成第一个选项卡应用#
本分步指南可帮助你使用 Microsoft 365 代理工具包 (以前称为 Teams 工具包) 生成选项卡。 完成本指南后,你将看到以下输出:
生成应用的先决条件
下面是生成和部署 Teams 应用时需要安装的工具列表。
| 安装 | 用于使用... |
|---|---|
| Microsoft Teams | Microsoft Teams,在一个位置通过聊天、会议和通话应用与你合作的每个人协作。 |
|
Visual Studio 2022 |
可以在 Visual Studio 2022 中安装企业版,并安装 ASP.NET 和 Web 开发工作负载。 使用最新版本。 |
| Microsoft 365 代理工具包 | 一个 Visual Studio 扩展,用于为应用创建项目基架。 使用最新版本。 |
安装代理工具包
Agents Toolkit 使用工具为应用创建项目基架,帮助简化开发过程。 它为所有选定的功能创建必要的目录结构,并准备好生成项目所需的文件。
可以下载最新的 Visual Studio 安装程序。 代理工具包在 Visual Studio 中作为扩展提供。
打开 Visual Studio 安装程序后,在弹出的工作负载窗口中。
选择 “ASP.NET 和 Web 开发”。
在“安装详细信息”>下,选择“Microsoft Teams 开发工具”。
选择“安装”。
选择“ 启动”。 此时会显示 Visual Studio 2022 应用窗口。
转到 “扩展>管理扩展”。
此时会显示“管理扩展”窗口:
在左窗格中,选择“ 已安装”。 Microsoft 365 代理工具包扩展可用。
设置 Teams 开发租户
租户类似于 Teams 中组织的空间或容器,可在其中聊天、共享文件和运行会议。 此空间也是上传和测试自定义应用的位置。 让我们验证是否已准备好使用租户进行开发。
检查自定义应用上传选项
创建应用后,必须在 Teams 中加载应用,而无需分发它。 此过程称为自定义应用上传。 登录到 Microsoft 365 帐户以查看此选项。
注意
自定义应用上传对于在 Teams 本地环境中预览和测试应用是必需的。 如果未启用,则无法在 Teams 本地环境中预览和测试应用。
是否已拥有租户和管理员访问权限? 如果这样做,让我们检查!
验证是否可以在 Teams 中上传自定义应用:
打开“Microsoft Teams”,选择“ 应用” 图标。
选择“管理应用”。
选择 “上传应用”。
查找 “上传自定义应用 ”选项。 如果看到 选项,则表示已启用自定义应用上传。
注意
如果找不到上传自定义应用的选项,请与 Teams 管理员联系。
创建免费的 Teams 开发人员租户 (可选)
如果没有 Teams 帐户,可以免费获取它。 加入 Microsoft 365 开发人员计划!
选择“ 立即加入 ”,然后按照屏幕上的说明进行作。
在欢迎屏幕中,选择 “设置 E5 订阅”。
设置管理员帐户。 完成后,将显示以下屏幕:
使用设置的管理员帐户登录到 Teams。 验证是否已在 Teams 中 “上传自定义应用 ”选项。
获取免费Azure帐户
如果要在 Azure 中托管应用或访问资源,则必须拥有Azure订阅。 在开始之前创建一个免费帐户。
现在,你已准备好设置帐户的所有工具。 接下来,让我们设置开发环境并开始生成! 选择要首先创建的应用。
使用 C sharp 为选项卡应用创建项目工作区
通过创建第一个应用开始Microsoft Teams 应用开发。 此应用使用选项卡功能。 如果先决条件已到位,让我们开始吧!
以下步骤可帮助你在 Visual Studio 中为选项卡应用创建项目工作区:
打开 Visual Studio。
选择“ 新建项目”。
在搜索框中,输入 Teams。
选择 “Microsoft 365 代理>下一步”。
输入以下详细信息以配置新项目。
在“项目名称”中输入所需的 项目名称。
选择保存项目文件和文件夹所需的位置。
选择“创建”。
选择 “Tab>创建”。
Teams 选项卡应用在几秒钟内创建。
使用 C sharp 生成并运行第一个选项卡应用
使用代理工具包设置项目工作区后,生成选项卡应用。
登录到 Microsoft 365 帐户
使用 Microsoft 365 帐户登录到 Teams。 如果使用 Microsoft 365 开发人员计划租户,则注册时设置的管理员帐户是 Microsoft 365 帐户。
在解决方案资源管理器的“解决方案 MyTeamsApp”下,右键单击“MyTeamsApp”。
选择 “Microsoft 365 代理工具包>”,选择“Microsoft 365 帐户”。
选择 “Microsoft 365 帐户>继续”。
在 Visual Studio 中本地生成并运行应用
若要在本地构建并运行应用程序:
选择 “调试>”“开始调试 ”或选择“ F5”。
Visual Studio 启动调试过程,并在浏览器中打开 Teams Web 客户端。 如果出现提示,请使用 Microsoft 365 帐户登录。
选择“添加”。
选择“ 打开 ”以在个人范围内打开应用。
或者,可以搜索并选择所需的范围,或者从列表中选择频道或聊天,然后在对话框中移动以选择“ 转到”。
恭喜,你的第一个选项卡应用正在 Teams 上运行!
了解如何排查应用未在本地运行的问题。
若要在 Teams 中成功运行应用,请确保已在 Teams 帐户中启用自定义应用上传。 可以在 先决条件 部分了解有关自定义应用上传的详细信息。
你已成功使用 C# 创建了选项卡应用。 Agents Toolkit 已向应用的目录结构添加了必要的基架。 本教程现已完成。