基本上,轮询触发器是一个事件,该事件定期调用服务来查找新数据。 轮询触发器与 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 和连接器进行身份验证
我们非常感谢大家提出有关连接器平台问题或新功能想法的反馈。 要提供反馈,请转到
提交问题或获取连接器帮助
,然后选择反馈类型。