将 Webhook 作为触发器用于 Azure 逻辑应用和 Power Automate
Webhook 是用于提供事件通知的简单 HTTP 回调。 Azure 逻辑应用和 Power Automate 都允许将 Webhook 用作触发器。 逻辑应用或流侦听此触发器,只要触发器触发即执行操作。 本教程演示如何将 Webhook 用作触发器。
备注
我们将使用 GitHub 作为可以通过 Webhook 发送通知的服务示例,但此处演示的方法可以扩展到任何使用 Webhook 的服务。
先决条件
- 以下订阅之一:
- Azure,如果您使用的是逻辑应用
- Power Automate
- 构建逻辑应用或流以及自定义连接器的基本体验。
- 如果使用的是逻辑应用,请先创建 Azure 逻辑应用自定义连接器。
- 基本了解 Webhook。
- 对 OpenAPI 规范(以前称为 Swagger)的基本了解。
- GitHub 帐户。
- 本教程的示例 OpenAPI 定义。
OpenAPI 定义
Webhook 在逻辑应用和 Power Automate 中实现为自定义连接器的一部分,因此,您需要提供 OpenAPI 定义来定义 Webhook 的外形。 如果您想要创建触发器但没有 OpenAPI 定义,您可以使用自定义连接器向导中的触发器 UI 来定义 webhook 触发器。
OpenAPI 定义包含三个组成部分,它们对 Webhook 的正常运行至关重要:
- 创建 Webhook
- 定义来自 API(在此处为 GitHub)的传入挂钩请求
- 删除 Webhook
创建 Webhook
Webhook 在 GitHub 端根据 HTTP POST 创建到 /repos/{owner}/{repo}/hooks
。 创建新的逻辑应用或流时,它会使用 OpenAPI 定义中定义的触发器发布到此 URL。 它还会在触发器被修改时发布到 URL。 在以下示例中,post
属性包含将发布到 GitHub 的请求的架构。
"/repos/{owner}/{repo}/hooks": {
"x-ms-notification-content": {
"description": "Details for Webhook",
"schema": {
"$ref": "#/definitions/WebhookPushResponse"
}
},
"post": {
"description": "Creates a Github webhook",
"summary": "Triggers when a PUSH event occurs",
"operationId": "webhook-trigger",
"x-ms-trigger": "single",
"parameters": [
{
"name": "owner",
"in": "path",
"description": "Name of the owner of targeted repository",
"required": true,
"type": "string"
},
{
"name": "repo",
"in": "path",
"description": "Name of the repository",
"required": true,
"type": "string"
},
{
"name": "Request body of webhook",
"in": "body",
"description": "This is the request body of the Webhook",
"schema": {
"$ref": "#/definitions/WebhookRequestBody"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/WebhookCreationResponse"
}
}
}
}
},
重要
"x-ms-trigger": "single"
属性是一个架构扩展,告知逻辑应用和 Power Automate 要在设计器中的可用触发器列表内显示此 Webhook,因此,请务必包含此属性。
定义来自 API 的传入挂钩请求
传入挂钩请求(从 GitHub 发送到逻辑应用或 Power Automate 的通知)的形状在自定义 x-ms-notification-content
属性中定义,如上一个示例中所示。 它不需要包含请求的整个内容,只需包含您需要在逻辑应用或流中使用的部分即可。
删除 Webhook
OpenAPI 定义必须包括如何删除 webhook 的定义。 如果更新了触发器或者删除了逻辑应用或流,则逻辑应用和 Power Automate 会尝试删除 Webhook。
"/repos/{owner}/{repo}/hooks/{hook_Id}": {
"delete": {
"description": "Deletes a Github webhook",
"operationId": "DeleteTrigger",
"parameters": [
{
"name": "owner",
"in": "path",
"description": "Name of the owner of targeted repository",
"required": true,
"type": "string"
},
{
"name": "repo",
"in": "path",
"description": "Name of the repository",
"required": true,
"type": "string"
},
{
"name": "hook_Id",
"in": "path",
"description": "ID of the Hook being deleted",
"required": true,
"type": "string"
}
]
}
},
删除 Webhook 调用不包含教程标头。 连接器中使用的相同连接也用于删除 webhook 调用。
重要
要使逻辑应用或 Power Automate 能够删除某个 Webhook,在创建该 Webhook 时,API 必须在 201 响应中包含一个 Location
HTTP 标头。 Location
标头应包含与 HTTP DELETE 一起使用的 Webhook 的路径。 例如,GitHub 的响应附带的 Location
遵循以下格式:https://api.github.com/repos/<user name>/<repo name>/hooks/<hook ID>
。
在 GitHub 中启用身份验证
将 Webhook 请求发送到逻辑应用或 Power Automate 的 API 通常使用某种形式的身份验证,GitHub 也不例外。 GitHub 支持多种类型的身份验证;我们将在本教程中使用 GitHub 个人访问令牌。
导航到 GitHub 并登录(如果尚未执行该操作)。
在右上角选择您的个人资料图片,然后在菜单中选择设置。
在左侧菜单中,选择开发人员设置,然后选择个人访问令牌。
选择生成新令牌按钮,然后根据要求确认您的密码。
在令牌说明框中,输入说明。
选中 admin:repo_hook 复选框。
选择生成令牌按钮。
记下你的新令牌。
重要
你将无法再次访问此令牌。 应将其复制并粘贴到某个位置,以便稍后在本教程中使用。
导入 OpenAPI 定义
首先为逻辑应用或 Power Automate 导入 OpenAPI 定义。
为逻辑应用导入 OpenAPI 定义
转到 Azure 门户,打开前面在创建 Azure 逻辑应用自定义连接器中创建的逻辑应用连接器。
在连接器的菜单中,选择逻辑应用连接器,然后选择编辑。
在常规下,选择上载 OpenAPI 文件,然后导航到您下载的 OpenAPI 文件。
为 Power Automate 导入 OpenAPI 定义
选择右上角的齿轮图标,然后选择自定义连接器。
依次选择创建自定义连接器、导入 Postman 集合。
为自定义连接器输入名称,然后导航到您下载的 OpenAPI 文件,选择连接。
参数 值 自定义连接器标题 “GitHubDemo”
完成自定义连接器的创建
在常规页上,选择继续。
在安全性页的身份验证类型下,选择基本身份验证。
在基本身份验证部分中,为标签字段输入文本用户名和密码。 这些只是在逻辑应用或流中使用触发器时将显示的标签。
在向导顶部,请确保名称设置为“GitHubDemo”,然后选择创建连接器。
您现在已准备好在逻辑应用或流中使用触发器了,或者您可以阅读有关如何从 UI 创建触发器的信息。
从 UI 创建 Webhook 触发器
在本节中,我们将向您展示如何在 UI 中创建触发器,而无需在 OpenAPI 定义中包含任何触发器定义。 从基准 OpenAPI 定义开始,或在自定义连接器向导中从头开始。
在 “常规”页上,确保指定说明和 URL。
参数 值 说明 “GitHub is a social source code repository。” URL “api.github.com” 在安全性页上,配置基本身份验证(与上一节一样)。
在定义页上,选择 + 新建触发器,然后填写触发器的说明。 在此示例中,你将创建一个触发器,一向存储库发出拉取请求就会触发该触发器。
参数 值 摘要 “Triggers when a pull request is made to a selected repository” 说明 “Triggers when a pull request is made to a selected repository” 操作 ID “webhook-PR-trigger” 可见性 “无”(请参见下方了解更多信息) 触发器类型 “Webhook” 逻辑应用或流中的操作和参数的可见性属性包含以下选项:
- 无:通常在逻辑应用或流中显示
- 高级:在其他菜单下隐藏
- 内部:向用户隐藏
- 重要:始终先向用户显示
请求区域基于对操作的 HTTP 请求显示信息。 选择从示例导入。
定义 Webhook 触发器的请求,然后选择导入。 我们为您提供了一个用于导入的示例(在图像下方)。 有关详细信息,请参阅 GitHub API 参考。 逻辑应用和 Power Automate 会自动添加标准的
content-type
和安全标头,因此,在从示例导入时无需定义这些标头。参数 值 动词 “POST” URL “https://api.github.com/repos/{owner}/{repo}/hooks” 正文 请参阅以下内容 { "name": "web", "active": true, "events": [ "pull_request" ], "config": { "url": "http://example.com/webhook" } }
响应区域基于对操作的 HTTP 响应显示信息。 选择添加默认响应。
定义 Webhook 触发器的响应,然后选择导入。 同样,我们为您提供了一个用于导入的示例。 有关详细信息,请参阅 GitHub API 参考。
{ "action": "opened", "number": 1, "pull_request": { "html_url": "https://github.com/baxterthehacker/public-repo/pull/1", "state": "open", "locked": false, "title": "Update the README with new information", "user": { "login": "baxterthehacker", "type": "User" } } }
在触发器配置区域,选择应从 GitHub 接收回拨 URL 值的参数。 这是
config
对象中的url
属性。在向导顶部,输入名称,然后选择创建连接器。
使用 Webhook 作为触发器
完成所有配置后,即可在逻辑应用或流中使用该 Webhook。 接下来,请创建一个流,每当 GitHub 存储库收到 git 推送时,该流就会向 Power Automate 移动应用发送推送通知。
在 flow.microsoft.com 中的页面顶部,选择我的流。
选择从空白开始创建,然后在下一页上,选择搜索数百个连接器和触发器。
在适用于 Power Automate 的设计器中,搜索以前注册的自定义连接器。
在列表中选择该项目以将其用作触发器。
由于这是你首次使用此自定义连接器,因此必须连接到它。 输入连接信息,然后选择创建。
参数 值 连接名称 描述性名称 用户名 您的 GitHub 用户名 密码 您以前创建的个人访问令牌 输入有关要监视的存储库的详细信息。 您可以识别 OpenAPI 文件中 WebhookRequestBody 对象提供的字段。
参数 价值 负责人 要监视的存储库的所有者 存储库 要监视的存储库 重要
你应使用你的帐户有权访问的存储库。 做到这一点的最简单方法是使用你自己的存储库。
选择 + 新建步骤,然后选择添加操作。
搜索并选择推送通知操作。
使用动态内容对话框中的值在文本字段和其他字段中输入一些文本。 请注意,这些值来自 OpenAPI 文件中的 WebhookPushResponse 对象。
参数 值 连接名称 描述性名称 用户名 您的 GitHub 用户名 密码 您以前创建的个人访问令牌 在页面顶部,为流提供名称并单击选择创建流。
验证和故障排除
若要验证是否所有内容均已正确设置,请选择我的流,然后选择此新流旁边的信息图标,查看运行历史记录:
你应已从 Webhook 创建过程中至少看到一个“已成功”运行。 这表示已在 GitHub 端成功创建了 Webhook。
如果运行失败,可以钻取到运行详细信息,查看失败的原因。 如果是由于“404 未找到”响应而导致失败,那么你的 GitHub 帐户很可能没有正确的权限,无法在你使用的存储库上创建 Webhook。
摘要
如果所有内容均已正确配置,那么现在每当所选 GitHub 存储库上收到 git 推送时,您都将在 Power Automate 移动应用中收到推送通知。 执行上述过程,你便可以在流中使用任何支持 Webhook 的服务作为触发器。
后续步骤
提供反馈
我们非常感谢大家提出有关连接器平台问题或新功能想法的反馈。 要提供反馈,请转到提交问题或获取连接器帮助,然后选择反馈类型。