创建 Microsoft Graph JSON 批量自定义连接器以实现自动电源
Microsoft Power Automate 超过 230 个开箱即用连接器。 其中许多连接器使用 Microsoft Graph Microsoft 产品的特定终结点进行通信。 此外,还有其他一些情况,我们可能需要使用服务的基本构建基块直接从 Power Automate 调用 Microsoft Graph,因为不存在直接与 Microsoft Graph 通信以覆盖整个 API 的连接器。
除了解决直接调用 Microsoft Graph的方案之外,许多 Microsoft Graph API 终结点仅支持委派权限。 Microsoft Power Automate 中的 HTTP 连接器支持非常灵活的集成,包括调用 Microsoft Graph。 但是,HTTP 连接器缺少缓存用户凭据以启用特定委派权限方案的功能。 在这些情况下,可以创建自定义连接器,为 Microsoft Graph API 提供包装,并允许使用具有委派权限的 API。
此实验涵盖上述两种方案。 首先,将创建自定义连接器,以启用与 Microsoft Graph集成,这需要委派权限。 其次,你将使用 $batch 请求终结点提供对 Microsoft Graph 的完整功能的访问权限,同时使用需要应用具有"登录"用户的委派权限。
备注
本教程介绍如何创建自定义连接器以在 Microsoft Power Automate 和 Azure 逻辑应用。 本教程假定你已阅读自定义 连接器概述 以了解过程。
先决条件
若要在本文中完成此练习,您需要以下各项:
- 管理员对租户Office 365访问权限。 如果没有,请访问开发人员Microsoft 365注册免费开发人员租户。
- 访问 Microsoft Power Automate。
反馈
Please provide any feedback on this tutorial in the GitHub repository.
创建 Azure AD 应用注册
在此练习中,您将创建一Azure Active Directory应用程序,该应用程序将用于为自定义连接器提供委派权限。
打开浏览器并导航到Azure Active Directory中心。 在左侧 Azure Active Directory 选择"应用注册"链接,然后在"应用"边栏选项卡的"管理"部分中 选择Azure Active Directory条目。

选择 "应用注册 "边栏选项卡顶部的"新建注册 " 菜单项。

在 MS Graph Batch App "名称 "字段中 输入。 在"支持的帐户类型" 部分,选择"任何组织目录中的帐户"。 将"重定向 URI"部分留 空,然后选择"注册 "。

在 "MS Graph批应用"边栏选项卡上,将 应用程序 (客户端) ID。 你将需要在下一练习中这样做。

在 "MS 批处理应用"边栏选项卡的"管理"Graph API 权限条目。 选择 "API 权限" 下的 "添加权限"。

在"请求 API 权限" 边栏选项卡中,选择 "Microsoft Graph", 然后选择"委派权限"。 搜索 group ,然后选择" 读取和写入所有组委派 "权限。 选择 边栏选项卡底部的 "添加权限"。

在 "MS 批处理应用"边栏选项卡 的"管理"部分选择"Graph和密码"条目,然后选择"新建 客户端密码"。 在 forever "说明 "中输入,然后选择"永不****过期"。 选择“添加”。

复制新密码的值。 你将需要在下一练习中这样做。

重要
此步骤至关重要,因为关闭此边栏选项卡后将无法访问密码。 将这个密码保存到文本编辑器中,以用于即将进行的练习。
若要启用对可通过 Microsoft Graph访问的其他服务(Teams属性)的管理,需要选择其他适当的作用域才能管理特定服务。 例如,若要扩展解决方案以允许创建OneNote笔记本或 Planner 计划、存储桶和任务,需要为相关 API 添加所需的权限范围。
创建自定义连接器
在此练习中,你将创建一个新的自定义连接器,可在 Microsoft Power Automate 或 Azure 逻辑应用。 OpenAPI 定义文件预内置有正确的 Microsoft Graph 路径和用于启用简单 $batch 导入的其他设置。
有两个选项可创建 Microsoft Graph:
- 从空白创建
- 导入 OpenAPI 文件
选项 1:从空白模板创建自定义连接器
打开浏览器并导航到MicrosoftPower Automate 。 使用租户管理员Office 365登录。 在 左侧 菜单中选择"数据",然后选择下拉菜单中的"自定义连接器"项。

在"自定义连接器" 页上,选择右上方的"新建自定义连接器"链接,然后在下拉菜单中选择"从空白创建"项。

在 MS Graph Batch Connector "连接器 名称"文本框 中输入。 Choose Continue.
在连接器配置 "常规 "页上,按如下所示填写字段。
- 方案: HTTPS
- 主机:
graph.microsoft.com - 基 URL:
/
选择 "安全 "按钮以继续。

在" 安全性 "页上,按如下所示填写字段。
- 选择 API 实现的身份验证:
OAuth 2.0 - 标识提供程序:
Azure Active Directory - 客户端 ID: 在上一练习中创建的应用程序 ID
- 客户端密码:你在上一练习中创建的密钥
- 登录 url:
https://login.windows.net - 租户 ID:
common - 资源
https://graph.microsoft.comURL: (尾随 /) - 范围:保留为空
选择 "定义 "按钮以继续。

在" 定义 "页上,选择 "新建操作 "并按如下所示填写字段。
- 摘要:
Batch - 说明:
Execute Batch with Delegate Permission - 操作 ID:
Batch - 可见性:
important

通过 选择 "从 示例中导入"创建请求 并填写字段,如下所示。
- 谓词:
POST - URL:
https://graph.microsoft.com/v1.0/$batch - 标题:保留为空
- 正文:
{}
选择“导入”。

选择 右上方 的"创建连接器"。 创建连接器后,从"安全"页复制生成的"重定向 URL" 页。

返回到在上一练习中创建的 Azure 门户 中注册的应用程序。 选择 左侧 菜单上的"身份验证"。 选择 添加平台",然后选择 Web。 在"重定向 URI"中输入从上一步骤复制的重定向 URL, 然后选择"配置 "。

选项 2:通过导入 OpenAPI 文件创建自定义连接器
使用文本编辑器新建一个名为 的空文件 MSGraph-Delegate-Batch.swagger.json 并添加以下代码。
{
"swagger": "2.0",
"info": {
"title": "MS Graph Batch Connector",
"description": "",
"version": "1.0"
},
"host": "graph.microsoft.com",
"basePath": "/",
"schemes": [
"https"
],
"consumes": [],
"produces": [],
"paths": {
"/v1.0/$batch": {
"post": {
"responses": {
"default": {
"description": "default",
"schema": {}
}
},
"summary": "Batch",
"description": "Execute Batch with Delegate Permission",
"operationId": "Batch",
"x-ms-visibility": "important",
"parameters": [
{
"name": "body",
"in": "body",
"required": false,
"schema": {
"type": "object",
"properties": {}
}
}
]
}
}
},
"definitions": {},
"parameters": {},
"responses": {},
"securityDefinitions": {
"oauth2_auth": {
"type": "oauth2",
"flow": "accessCode",
"authorizationUrl": "https://login.windows.net/common/oauth2/authorize",
"tokenUrl": "https://login.windows.net/common/oauth2/authorize",
"scopes": {}
}
},
"security": [
{
"oauth2_auth": []
}
],
"tags": []
}
打开浏览器并导航到MicrosoftPower Automate 。 使用租户管理员Office 365登录。 在 左侧 菜单中选择"数据",然后选择下拉菜单中的"自定义连接器"项。
在"自定义连接器" 页上,选择右上方的"新建自定义连接器"链接,然后在下拉菜单中选择"导入 OpenAPI 文件"项。
在 MS Graph Batch Connector "连接器 名称"文本框 中输入。 选择文件夹图标以上载 OpenAPI 文件。 浏览到 MSGraph-Delegate-Batch.swagger.json 您创建的文件。 选择 "继续 "上载 OpenAPI 文件。
在"连接器配置"页上,选择 导航菜单中 的"安全"链接。 填写字段,如下所示。
- 选择 API 实现的身份验证:
OAuth 2.0 - 标识提供程序:
Azure Active Directory - 客户端 ID: 在上一练习中创建的应用程序 ID
- 客户端密码:你在上一练习中创建的密钥
- 登录 url:
https://login.windows.net - 租户 ID:
common - 资源
https://graph.microsoft.comURL: (尾随 /) - 范围:保留为空
选择 右上方 的"创建连接器"。 创建连接器后,复制生成的 重定向 URL。

返回到在上一练习中创建的 Azure 门户 中注册的应用程序。 选择 左侧 菜单上的"身份验证"。 选择 添加平台",然后选择 Web。 在"重定向 URI"中输入从上一步骤复制的重定向 URL, 然后选择"配置 "。

为连接器授权
确保连接器可供使用的最后一个配置步骤是授权和测试自定义连接器以创建缓存的连接。
重要
以下步骤要求您使用管理员权限登录。
在 Microsoft Power Automate中,转到左侧的"数据"菜单项并选择"连接" 页。 选择" 新建连接" 链接。

找到自定义连接器,然后单击加号按钮完成连接。 使用租户管理员Office 365帐户Azure Active Directory登录。

当系统提示你提供请求的权限时,请检查"代表你的组织同意",然后选择"接受"以授权权限。

授权权限后,将创建一个Power Automate。
自定义连接器现已配置并启用。 应用和提供的权限可能会存在延迟,但连接器现已配置。
测试 Graph 浏览器中的批处理功能
在创建一Flow连接器之前,请使用Microsoft Graph 资源管理器发现 Microsoft Graph 中的 JSON 批处理的一些功能和Graph。
在浏览器中Graph Microsoft Graph资源管理器"。 使用租户管理员Office 365登录。 从示例 查询 中搜索 Batch。
选择左侧 菜单中的"执行并行 GET" 示例查询。 选择 屏幕右 上方的"运行查询"按钮。

示例批处理操作对三个 HTTP GET 请求进行批处理,并发布一个 HTTP POST 到 /v1.0/$batch Graph 终结点。
{
"requests": [
{
"url": "/me?$select=displayName,jobTitle,userPrincipalName",
"method": "GET",
"id": "1"
},
{
"url": "/me/messages?$filter=importance eq 'high'&$select=from,subject,receivedDateTime,bodyPreview",
"method": "GET",
"id": "2"
},
{
"url": "/me/events",
"method": "GET",
"id": "3"
}
]
}
返回的响应如下所示。 请注意 Microsoft Graph 返回的响应数组。 对批处理请求的响应可能按与 POST 中请求的顺序不同的顺序显示。 id该属性应该用于将单个批处理请求与特定批处理响应关联。
备注
为可读性,该响应已被截断。
{
"responses": [
{
"id": "1",
"status": 200,
"headers": {...},
"body": {...}
},
{
"id": "3",
"status": 200,
"headers": {...},
"body": {...}
}
{
"id": "2",
"status": 200,
"headers": {...},
"body": {...}
}
]
}
每个响应都包含 id 、 status 、 和 headers body 属性。 如果 status 请求的 属性指示失败,则 包含 body 从请求返回的任何错误信息。
为了确保对请求的操作顺序,可以使用 dependsOn 属性对单个请求进行排序。
除了排序和依赖关系操作之外,JSON 批处理还假定基本路径并执行来自相对路径的请求。 每个批处理请求元素根据指定从 OR /v1.0/$batch /beta/$batch 终结点执行。 这可能存在显著差异, /beta 因为终结点可能会返回其他输出,但可能不会在终结点中 /v1.0 返回。
例如,在 Microsoft Graph资源管理器 中执行以下两个查询。
- 使用 url
/v1.0/$batch查询终结点/me(复制和粘贴) 。
{
"requests": [
{
"id": 1,
"url": "/me",
"method": "GET"
}
]
}

现在,使用版本选择器下拉列表更改为 beta 终结点,并提出完全相同的请求。

返回的结果之间有什么区别? 尝试一些其他查询以确定一些差异。
除了与 和 终结点不同的响应内容之外,了解对未授予权限同意的批处理请求时 /v1.0 /beta 可能出现的错误也很重要。 例如,下面是一个批处理请求项,用于创建OneNote笔记本。
{
"id": 1,
"url": "/groups/65c5ecf9-3311-449c-9904-29a2c76b9a50/onenote/notebooks",
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"body": {
"displayName": "Meeting Notes"
}
}
但是,如果尚未授予OneNote笔记本的权限,则收到以下响应。 请注意状态代码和指示提供的 OAuth 令牌的错误消息不包括完成请求 403 (Forbidden) 的操作所需的范围。
{
"responses": [
{
"id": "1",
"status": 403,
"headers": {
"Cache-Control": "no-cache"
},
"body": {
"error": {
"code": "40004",
"message": "The OAuth token provided does not have the necessary scopes to complete the request.
Please make sure you are including one or more of the following scopes: Notes.ReadWrite.All,
Notes.Read.All (you provided these scopes: Group.Read.All,Group.ReadWrite.All,User.Read,User.Read.All)",
"innerError": {
"request-id": "92d50317-aa06-4bd7-b908-c85ee4eff0e9",
"date": "2018-10-17T02:01:10"
}
}
}
}
]
}
批处理中的每个请求将返回状态代码和结果或错误信息。 必须处理每个响应,才能确定单个批处理操作是成功还是失败。
创建流
在此练习中,你将创建一个流,以使用在之前练习中创建的自定义连接器来创建和配置 Microsoft 团队。 该流将使用自定义连接器发送 POST 请求以创建 Office 365 统一组,组创建完成后将暂停一段时间,然后发送 PUT 请求以将该组与 Microsoft 团队关联。
最后,流将类似于下图:

在浏览器中Power Automate Microsoft Office 365,然后使用租户管理员帐户登录。 在 左侧导航 栏中选择"我的流"。 选择 "新建",然后选择"即时--从空白"。 输入"Flow名称",然后选择"选择如何触发此流"下的"手动 Create Team 触发流"。 选择"创建"。
选择" 手动触发流" 项,然后选择" 添加输入",选择 "文本 ",然后 Name 输入作为标题。

选择 "新建步骤 ", Batch 在搜索框中键入。 添加 "MS Graph批处理连接器" 操作。 选择省略号,将此操作重命名为 Batch POST-groups 。
将以下代码添加到 操作正文 文本框中。
{
"requests": [
{
"url": "/groups",
"method": "POST",
"id": 1,
"headers": { "Content-Type": "application/json" },
"body": {
"description": "REPLACE",
"displayName": "REPLACE",
"groupTypes": ["Unified"],
"mailEnabled": true,
"mailNickname": "REPLACE",
"securityEnabled": false
}
}
]
}
通过从 REPLACE "添加动态内容 Name "菜单中的手动触发器中选择值 来替换每个 占位符。

选择 "新建步骤", delay 搜索并添加 Delay 操作并配置 1 分钟。
选择 "新建步骤 ", Batch 在搜索框中键入。 添加 "MS Graph批处理连接器" 操作。 选择省略号,将此操作重命名为 Batch PUT-team 。
将以下代码添加到 操作正文 文本框中。
{
"requests": [
{
"id": 1,
"url": "/groups/REPLACE/team",
"method": "PUT",
"headers": {
"Content-Type": "application/json"
},
"body": {
"memberSettings": {
"allowCreateUpdateChannels": true
},
"messagingSettings": {
"allowUserEditMessages": true,
"allowUserDeleteMessages": true
},
"funSettings": {
"allowGiphy": true,
"giphyContentRating": "strict"
}
}
}
]
}
选择占位符 REPLACE ,然后在动态 内容 窗格中选择"表达式"。 将以下公式添加到表达式 中。
body('Batch_POST-groups').responses[0].body.id

此公式指定我们要使用第一个操作的结果中的组 ID。

选择 "保存",然后选择 "测试 "以执行流。
提示
如果您收到类似 的错误 The template validation failed: 'The action(s) 'Batch_POST-groups' referenced by 'inputs' in action 'Batch_2' are not defined in the template' ,则表达式不正确,并可能引用它找不到的流操作。 确保您引用的操作名称完全匹配。
选择"我将执行触发器操作"单 选按钮,然后选择"保存&测试"。 在 对话框中 选择"继续"。 提供没有空格的名称,然后选择" 运行流 "创建团队。

最后,选择 "完成 "以查看活动日志。 流完成后,即Office 365组和团队。 选择批处理操作项以查看 JSON 批处理调用的结果。 此操作 outputs 的状态 Batch PUT-team 代码应为 201,以成功进行团队关联,如下图所示。

扩展流
上Flow中创建的模板使用 API 向 Microsoft Graph 提出两 $batch 个单独Graph。 通过此方式调用终结点可提供一些好处和灵活性,但在单个调用中执行对 Microsoft Graph请求时,终结点的真正功能将 $batch $batch $batch 实现。 在此练习中,您将扩展创建统一组和关联团队的示例,包括在单个请求中为团队创建多个默认 $batch 频道。
在浏览器中Power Automate Microsoft Office 365,然后使用租户管理员帐户登录。 选择在Flow中创建的模板,然后选择"编辑 "。
选择 "新建步骤 ", Batch 在搜索框中键入。 添加 "MS Graph批处理连接器" 操作。 选择省略号,将此操作重命名为 Batch POST-channels 。
将以下代码添加到 操作正文 文本框中。
{
"requests": [
{
"id": 1,
"url": "/teams/REPLACE/channels",
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"body": {
"displayName": "Marketing Collateral",
"description": "Marketing collateral and documentation."
}
},
{
"id": 2,
"dependsOn": [
"1"
],
"url": "/teams/REPLACE/channels",
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"body": {
"displayName": "Vendor Contracts",
"description": "Vendor documents, contracts, agreements and schedules."
}
},
{
"id": 3,
"dependsOn": [
"2"
],
"url": "/teams/REPLACE/channels",
"headers": {
"Content-Type": "application/json"
},
"method": "POST",
"body": {
"displayName": "General Client Agreements",
"description": "General Client documents and agreements."
}
}
]
}
请注意,上述三个请求使用 dependsOn 属性指定顺序,每个请求都将执行 POST 请求,以创建新团队中的新频道。
选择占位符的每个 REPLACE 实例,然后选择动态内容窗格中的"表达式"。 将以下公式添加到表达式 中。
body('Batch_PUT-team').responses[0].body.id

选择 "保存",然后选择 "测试"以执行Flow。 选择 "我将执行触发器操作"单 选按钮,然后选择"保存&测试"。 在"名称"字段中输入唯一的组 名称(不含 空格)并选择"运行流"以执行Flow。
启动Flow后,选择"完成"按钮 以查看活动日志。 当Flow完成后,针对创建的每个通道,操作的最终输出都有一个 Batch POST-channels 201 HTTP 状态响应。

浏览到Microsoft Teams租户管理员帐户Office 365登录。 验证你刚刚创建的团队是否显示,并包括请求创建的三个 $batch 频道。

虽然上述操作在本教程中作为单独的操作实现,但创建频道的调用可能作为操作中的其他 Batch POST-channels Batch PUT-team 调用添加。 这将在一次批处理调用中创建团队和所有频道。 自行尝试一下。
最后请记住 ,JSON 批处理 调用将返回每个请求的 HTTP 状态代码。 在生产过程中,您可能需要将结果的后处理与操作相结合,并验证每个响应是否具有 201 状态代码或对收到的其他任何状态代码进行 Apply to each 补偿。
恭喜!
已完成 Microsoft Power Automate Graph教程。 现在,你已拥有一个调用 Microsoft Graph工作自定义连接器,可以试验和添加新功能。 请访问Microsoft Graph概述,查看可以使用 Microsoft Graph 访问的所有数据。
反馈
Please provide any feedback on this tutorial in the GitHub repository.
你有关于此部分的问题? 如果有,请向我们提供反馈,以便我们对此部分作出改进。