基本上,轮询触发器是一个事件,该事件定期调用服务来查找新数据。 轮询触发器与 Webhook 的不同之处在于,轮询触发器会启动一个事件来确定新数据是否可用,而 Webhook 则响应服务对新数据的推送。 当流确定新数据可用后,即可使用该数据执行操作。 本教程演示如何使用轮询触发器主动检索新数据。

  • Power Automate 订阅。
  • 构建 自定义连接器 的基本体验。
  • 了解轮询触发器如何获取新数据

    轮询触发器首先设置状态,然后在某个时间间隔内定期检查更新。 然后,该触发器请求自上次状态更新以来的所有新数据。 此外,触发器还会维护请求之间的状态上下文。

    以下示例概述了轮询触发器如何获取新数据。

  • 流运行时在触发器上对连接器中的 API 进行初始调用。
  • 然后,连接器会调用后端服务。
  • 然后,后端服务将所有当前数据返回到连接器。
  • 连接器反过来返回一条“202 已接受”消息、一个重试间隔,以及一个包含当前状态的位置标头。 重试间隔以秒为单位。 第一次调用始终用于建立数据的初始状态。
  • 在重试间隔超时后,流运行时使用位置标头和当前状态(在此示例中为 1)对连接器进行另一次调用。
  • 由于此状态现在为 1,因此连接器现在知道调用适当的 API 来进行适当的筛选,以便返回正确的数据集。 在此示例中,连接器将其转换为筛选的查询,该查询显示创建日期大于特定时间戳。
  • 在此示例中,自创建日期以后没有新数据,因此会将空值集发送回连接器。
  • 然后,连接器返回一条“202 已接受”消息、一个重试间隔,以及一个其中的状态尚未更改的位置标头。
  • 在重试间隔再次超时后,流运行时使用相同的位置标头和状态对连接器进行另一次调用。
  • 连接器再次使用创建日期进行适当的筛选。
  • 这一次,新数据自创建日期后变得可用,因此后端会将所有新数据的值返回到连接器。
  • 然后,连接器返回“200 正常”消息、重试间隔、带有新状态值的位置,以及包含在创建日期之后变得可用的所有新数据的值数组。 此时,流会启动。
  • 从 UI 创建轮询触发器

    本节演示如何在 Power Automate UI 中创建轮询触发器。 在此过程中,我们将从示例 TripPin 服务着手。 TripPin 服务是非常简单的 REST API,其中包含人员及其完成的行程的列表。

    若要使用 TripPin 服务,首先需要动态创建服务所需的 URL。 在浏览器的地址栏中输入 https://services.odata.org/TripPinRESTierService 。 这会返回本演示所需的元数据。 复制元数据并将其保存到文件供以后使用。

    若要设置 TripPin 服务并创建轮询触发器,请执行以下操作:

  • 在 Power Automate 中,选择 数据 > 自定义连接器 选项卡。

  • 自定义连接器 窗格中,选择 新建自定义连接器 ,然后选择 从空白创建

  • 在“创建自定义连接器”对话框中,输入自定义连接器的名称(在此示例中,可以使用 轮询测试 ),然后选择 继续

  • 常规 页上,指定说明和主机。 在此示例中,我们将使用已在 TripPin 元数据中作为主机返回的 services.odata.org URL。

    Value
  • 从示例导入 窗格中,我们将定义轮询触发器的请求。 选择 GET 作为谓词。 从你在动态创建服务所需的 URL 时收到的元数据中,将 URL 地址复制到 从示例导入 窗格中的 URL 。 在地址后添加 /People('{Person}')/Trips?$filter=TripId gt 0&$orderby=TripId desc 。 例如:

    https://services.odata.org/TripPinRESTierService/(S(<service number>))/People('{Person}')/Trips?$filter=TripId gt 0&$orderby=TripId desc

    请务必使用元数据中的实际数字,而不是 URL 中的 < 服务号 >。

    在此 URL 示例中,你将为单个人员创建请求, {Person} 是用户可以在流中指定的运行时变量。 接下来,指定你要获取用户输入的特定人员的行程。

    不过,不需获取所有行程,只需获取自上次轮询后的新行程。 $filter=TripId gt 0 表达式通过返回任何行程的 TripId 来获取新行程,前提是该 TripId 大于之前轮询的 TripId。 此处使用的数字 0 会在每次出现轮询触发器时自动更新。

    此外, $orderby=TripId desc 表达式指示以降序方式返回作为 TripId 的数据的顺序。 触发器要求数据按降序返回。 也就是说,后端服务返回的结果必须在触发器参数中进行反向排序,这样最新参数(如本示例中的 TripId)就是数据数组中返回的第一个值。

    选择 导入 按钮以导入示例数据。 请求区域现在显示谓词、URL、路径和查询参数。

  • 在请求区域中,选择 $filter 查询参数,然后选择 编辑 以显示 参数 对话框。

  • $filter 参数 对话框中,将 可见性 选项设置为 内部 。 此参数仅由连接器在内部使用,这会阻止用户进行任何更改。 有关可见性设置的详细信息,请参阅 x-ms-visibility OpenAPI 扩展

    选择 返回 可返回到请求区域。

  • 在请求区域中,选择 $orderby 查询参数,然后选择 编辑 以显示 参数 对话框。

  • $orderby 参数 对话框中,将 是否必需? 选项设置为 ,将 可见性 选项设置为 内部 。 同样,这些设置会阻止用户对此参数进行任何更改。

    此外,请在 默认值 框中输入 TripId desc 作为值。 这些设置会确保按相反的顺序给出结果。

    选择 返回 可返回到前一区域。

  • 响应 区域基于对操作的 HTTP 响应显示信息。 选择 添加默认响应

  • 定义轮询触发器的响应,然后选择 导入 。 使用下面提供的示例作为响应正文,这会自动为响应生成架构。

    "@odata.context":"https://services.odata.org/TripPinRESTierService/(S(< service number >))/$metadata#Collection(Microsoft.OData.Service.Sample.TrippinInMemory.Models.Trip)", "value":[ "TripId":2, "ShareId":"9ce142c3-5fd6-4a71-848e-220ebf1e9f3", "Name":"Honeymoon", "Budget":2650, "Description":"Happy honeymoon trip", "Tags":[ "Travel", "honeymoon" "StartsAt":"2014-02-01T00:00:00Z", "EndsAt":"2014-02-04T00:00:00Z" "TripId":1, "ShareId":"f94e9116-8bdd-4dac-ab61-08438d0d9a71", "Name":"Trip in Beijing", "Budget":2000, "Description":"Trip from Shanghai to Beijing", "Tags":[ "Travel", "Beijing" "StartsAt":"2014-02-01T00:00:00Z", "EndsAt":"2014-02-04T00:00:00Z"

    请务必使用元数据中的实际数字,而不是 URL 中的 < 服务号 >。

  • 触发器配置 区域中,选择用于监视 TripPin 中状态更改的参数。 在此示例中,要输入的参数为 $filter

    在此示例中,请在 指定要传递给所选查询参数的值 中使用以下表达式:

    TripId gt @{triggerBody().value[0].TripId}

    此表达式用于获取触发器运行时出现的最新结果。 在此处使用的表达式中,当 TripId 大于表达式的其余部分返回的值时,触发器就会运行。 如果 TripId 不大于表达式的其余部分返回的值,则不会出现触发器。

    选择包含触发器数据的集合 选项中,选择 @triggerBody().value 。 这是包含后端服务返回的触发器数据的数组。

  • 在向导顶部,选择 创建连接器

    使用轮询触发器

    完成所有配置后,即可在流中使用轮询触发器。 在本部分,我们将创建一个流,用于在每次记录特定人员的新行程时,轮询后端服务的更改。

  • flow.microsoft.com 中的页面左侧,选择 创建

  • 从空白开始 下,选择 即时流

  • 生成即时流 对话框中,选择 跳过 按钮。

  • 在搜索框中,输入 添加新行程时出现的触发器

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

  • 人员 流框中,输入 russellwhyte 作为要检查其行程的人员,然后选择 + 新建步骤

  • 选择操作 对话框中,选择 内置 选项卡,然后选择 日期/时间

  • 日期/时间 中选择 当前时间

  • 选择 保存 以保存新流。

    验证和故障排除

    若要验证是否已正确完成所有设置,请选择 我的流 ,然后选择 添加新行程时出现的触发器 -> 当前时间 流以查看运行历史记录。 由于流尚未运行,因此目前在历史记录中不应显示任何内容。

    若要测试流,需打开 Postman 应用程序,将新数据添加到 TripPin 中。

  • 在 Postman 中,选择 启动板 选项卡旁边的 + 图标。

  • 在无标题请求中,从左侧下拉框中选择 POST ,然后在 输入请求 URL 框中输入以下地址:

    https://services.odata.org/TripPinRESTierService/(S(<Service number))/People('russellwhyte')/Trips

    请务必使用元数据中的实际数字,而不是 URL 中的 < 服务号 >。

  • 在 POST 请求下,选择 正文 选项卡,然后选择 raw 。 在 raw 右侧的下拉列表中,选择 JSON

  • 在文本框中,输入以下文本:

    "TripId": 190, "ShareId": "9d9b2fa0-efbf-490e-a5e3-bac8f7d47354", "Name": "Trip in US", "Budget": 5000, "Description": "Trip from San Francisco to New York City", "Tags": [ "business", "New York meeting" "StartsAt": "2014-01-01T00:00:00Z", "EndsAt": "2014-01-04T00:00:00Z"
  • 选择 发送 ,将 POST 消息发送到 TripPin 站点。

    响应返回时的状态应为 201 Created

    现在,当你打开 我的流 并选择 添加新行程时出现的触发器 -> 当前时间 流时,就会在运行历史记录中看到触发器已出现。

    如果在 Postman 中为同一人运行另一个 POST 请求,则需更改 JSON 正文中的 TripId 值。 否则,会出现“409 冲突”错误。

    如果一切配置正确,每当 TripPin 中添加新行程时,您现在都会在 Microsoft Power Automate 中收到通知。

  • 为 Web API 创建自定义连接器
  • 使用 Microsoft Entra ID 对您的 API 和连接器进行身份验证
  • 我们非常感谢大家提出有关连接器平台问题或新功能想法的反馈。 要提供反馈,请转到 提交问题或获取连接器帮助 ,然后选择反馈类型。