将 Webhook 作为触发器用于 Azure 逻辑应用和 Power Automate

Webhook 是用于提供事件通知的简单 HTTP 回调。 Azure 逻辑应用和 Power Automate 都允许将 Webhook 用作触发器。 逻辑应用或流侦听此触发器,只要触发器触发即执行操作。 本教程演示如何将 Webhook 用作触发器。

备注

我们将使用 GitHub 作为可以通过 Webhook 发送通知的服务示例,但此处演示的方法可以扩展到任何使用 Webhook 的服务。

先决条件

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 个人访问令牌。

  1. 导航到 GitHub 并登录(如果尚未执行该操作)。

  2. 在右上角选择您的个人资料图片,然后在菜单中选择设置

    设置

  3. 在左侧菜单中,选择开发人员设置,然后选择个人访问令牌

  4. 选择生成新令牌按钮,然后根据要求确认您的密码。

    生成新令牌

  5. 令牌说明框中,输入说明。

  6. 选中 admin:repo_hook 复选框。

    admin:repo_hook

  7. 选择生成令牌按钮。

  8. 记下你的新令牌。

    新令牌

    重要

    你将无法再次访问此令牌。 应将其复制并粘贴到某个位置,以便稍后在本教程中使用。

导入 OpenAPI 定义

首先为逻辑应用Power Automate 导入 OpenAPI 定义。

为逻辑应用导入 OpenAPI 定义

  1. 转到 Azure 门户,打开前面在创建 Azure 逻辑应用自定义连接器中创建的逻辑应用连接器。

  2. 在连接器的菜单中,选择逻辑应用连接器,然后选择编辑

    编辑逻辑应用连接器

  3. 常规下,选择上载 OpenAPI 文件,然后导航到您下载的 OpenAPI 文件。

    显示“上载 OpenAPI 文件”选项的屏幕截图。

为 Power Automate 导入 OpenAPI 定义

  1. 转到 flow.microsoft.com

  2. 选择右上角的齿轮图标,然后选择自定义连接器

    自定义连接器

  3. 依次选择创建自定义连接器导入 Postman 集合

    创建自定义连接器

  4. 为自定义连接器输入名称,然后导航到您下载的 OpenAPI 文件,选择连接

    显示用于输入名称的字段的屏幕截图。

    参数
    自定义连接器标题 “GitHubDemo”

完成自定义连接器的创建

  1. 常规页上,选择继续

  2. 安全性页的身份验证类型下,选择基本身份验证

  3. 基本身份验证部分中,为标签字段输入文本用户名密码。 这些只是在逻辑应用或流中使用触发器时将显示的标签。

    基本身份验证

  4. 在向导顶部,请确保名称设置为“GitHubDemo”,然后选择创建连接器

您现在已准备好在逻辑应用或流中使用触发器了,或者您可以阅读有关如何从 UI 创建触发器的信息。

从 UI 创建 Webhook 触发器

在本节中,我们将向您展示如何在 UI 中创建触发器,而无需在 OpenAPI 定义中包含任何触发器定义。 从基准 OpenAPI 定义开始,或在自定义连接器向导中从头开始。

  1. “常规”页上,确保指定说明和 URL。

    参数
    说明 “GitHub is a social source code repository。”
    URL “api.github.com”
  2. 安全性页上,配置基本身份验证(与上一节一样)。

  3. 定义页上,选择 + 新建触发器,然后填写触发器的说明。 在此示例中,你将创建一个触发器,一向存储库发出拉取请求就会触发该触发器。

    创建触发器 1

    参数
    摘要 “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”

    逻辑应用或流中的操作和参数的可见性属性包含以下选项:

    • :通常在逻辑应用或流中显示
    • 高级:在其他菜单下隐藏
    • 内部:向用户隐藏
    • 重要:始终先向用户显示
  4. 请求区域基于对操作的 HTTP 请求显示信息。 选择从示例导入

    定义页 - 从示例导入

  5. 定义 Webhook 触发器的请求,然后选择导入。 我们为您提供了一个用于导入的示例(在图像下方)。 有关详细信息,请参阅 GitHub API 参考。 逻辑应用和 Power Automate 会自动添加标准的 content-type 和安全标头,因此,在从示例导入时无需定义这些标头。

    创建触发器 2

    参数
    动词 “POST”
    URL “https://api.github.com/repos/{owner}/{repo}/hooks”
    正文 请参阅以下内容
    {
      "name": "web",
      "active": true,
      "events": [
        "pull_request"
      ],
      "config": {
        "url": "http://example.com/webhook"
      }
    }
    
  6. 响应区域基于对操作的 HTTP 响应显示信息。 选择添加默认响应

    “定义”页 - 响应

  7. 定义 Webhook 触发器的响应,然后选择导入。 同样,我们为您提供了一个用于导入的示例。 有关详细信息,请参阅 GitHub API 参考

    创建触发器 3

    {
      "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"
        }
      }
    }
    
  8. 触发器配置区域,选择应从 GitHub 接收回拨 URL 值的参数。 这是 config 对象中的 url 属性。

    创建触发器 4

  9. 在向导顶部,输入名称,然后选择创建连接器

使用 Webhook 作为触发器

完成所有配置后,即可在逻辑应用或流中使用该 Webhook。 接下来,请创建一个流,每当 GitHub 存储库收到 git 推送时,该流就会向 Power Automate 移动应用发送推送通知。

  1. flow.microsoft.com 中的页面顶部,选择我的流

  2. 选择从空白开始创建,然后在下一页上,选择搜索数百个连接器和触发器

    搜索连接器

  3. 在适用于 Power Automate 的设计器中,搜索以前注册的自定义连接器。

    新触发器

    在列表中选择该项目以将其用作触发器。

  4. 由于这是你首次使用此自定义连接器,因此必须连接到它。 输入连接信息,然后选择创建

    新连接

    参数
    连接名称 描述性名称
    用户名 您的 GitHub 用户名
    密码 您以前创建的个人访问令牌
  5. 输入有关要监视的存储库的详细信息。 您可以识别 OpenAPI 文件中 WebhookRequestBody 对象提供的字段。

    存储库信息

    参数 价值
    负责人 要监视的存储库的所有者
    存储库 要监视的存储库

    重要

    你应使用你的帐户有权访问的存储库。 做到这一点的最简单方法是使用你自己的存储库。

  6. 选择 + 新建步骤,然后选择添加操作

  7. 搜索并选择推送通知操作。

    推送通知

  8. 使用动态内容对话框中的值在文本字段和其他字段中输入一些文本。 请注意,这些值来自 OpenAPI 文件中的 WebhookPushResponse 对象。

    推送通知详细信息

    参数
    连接名称 描述性名称
    用户名 您的 GitHub 用户名
    密码 您以前创建的个人访问令牌
  9. 在页面顶部,为流提供名称并单击选择创建流

    流名称

验证和故障排除

若要验证是否所有内容均已正确设置,请选择我的流,然后选择此新流旁边的信息图标,查看运行历史记录:

  • 你应已从 Webhook 创建过程中至少看到一个“已成功”运行。 这表示已在 GitHub 端成功创建了 Webhook。

  • 如果运行失败,可以钻取到运行详细信息,查看失败的原因。 如果是由于“404 未找到”响应而导致失败,那么你的 GitHub 帐户很可能没有正确的权限,无法在你使用的存储库上创建 Webhook。

摘要

如果所有内容均已正确配置,那么现在每当所选 GitHub 存储库上收到 git 推送时,您都将在 Power Automate 移动应用中收到推送通知。 执行上述过程,你便可以在流中使用任何支持 Webhook 的服务作为触发器。

后续步骤

提供反馈

我们非常感谢大家提出有关连接器平台问题或新功能想法的反馈。 要提供反馈,请转到提交问题或获取连接器帮助,然后选择反馈类型。