為 Microsoft Power Automate 使用輪詢觸發程序

輪詢觸發程序基本上是事件,會定期呼叫服務以尋找新的資料。 輪詢觸發程序與 Webhook 的不同之處在於輪詢觸發程序會起始一個事件來判斷是否能取得新資料,而 Webhook 則會回應服務所推送的新資料。 當流程判斷能取得新資料,您就可以對該資料執行動作。 本教學課程示範如何使用輪詢觸發程序來主動擷取新的資料。

先決條件

輪詢觸發程序的運作方式

輪詢觸發程序一開始會先設定狀態,然後再定期檢查一段時間間隔內是否有更新。 接著,觸發程序會要求自上次狀態更新之後的所有新資料。 此外,觸發程序也會在要求與要求間維持狀態內容。

下列範例提供輪詢觸發程序如何取得新資料的基本概觀。

輪詢觸發程序如何取得資料

  1. 流程執行階段會叫用在觸發程序上的初始呼叫,以呼叫連接器中的 API。

  2. 連接器會接著呼叫後端服務。

  3. 後端服務再將所有目前的資料傳回給連接器。

  4. 連接器依次回傳 202 接受訊息、重試間隔與包含目前狀態的位置標頭。 重試間隔會以秒為單位。 第一次呼叫都會用來建立資料的初步狀態。

  5. 重試間隔逾時之後,流程執行階段會使用位置標頭和目前的狀態對連接器進行另一次呼叫,在此範例中,狀態等於 1。

  6. 因為此狀態現在等於 1,連接器現在能夠呼叫適當的 API 來執行適當篩選,使正確的資料集能被回傳。 在此範例中,連接器會將此轉譯成表示建立日期大於某個時間戳記的篩選查詢。

  7. 在此範例中,自建立日期之後就沒有新的資料,因此會傳回空集合的值給連接器。

  8. 連接器接著會回傳 202 已接受訊息、重試間隔、與狀態未變更的位置標頭。

  9. 重試間隔再次逾時之後,流程執行階段會使用相同的位置標頭和狀態,對連接器進行另一次呼叫。

  10. 同樣地,連接器會使用建立日期來進行適當的篩選。

  11. 這一次,建立日期之後有可取得的新資料,因此後端會將所有新資料的值傳回給連接器。

  12. 然後,連接器會傳回 200 確定訊息、重試間隔、具有新狀態值的位置、以及一組陣列的值 (含有建立日期之後所有可取得新資料)。 至此,流程便會開始。

從 UI 建立輪詢觸發程序

本節示範如何在 Power Automate UI 中建立輪詢觸發程序。 在此程序中,您會使用範例 TripPin 服務當作起點。 TripPin 服務是非常簡單的 REST API,包含一組人員清單與他們進行過的旅行。

若要使用 TripPin 服務,您必須先動態建立服務所需的 URL。 在瀏覽器的網址列中輸入 https://services.odata.org/TripPinRESTierService。 這會回傳此示範所需的中繼資料。 複製並把中繼資料儲存為檔案以供稍後使用。

設定 TripPin 服務並建立輪詢觸發程序:

  1. 在 Power Automate 中,選取資料>自訂連接器索引標籤。

  2. 自訂連接器窗格中選取新增自訂連接器,接著選取從空白建立

  3. 在建立自訂連接器對話方塊中,輸入自訂連接器的名稱 (在此範例中,您可以使用輪詢測試),然後選取繼續

  4. 一般頁面上,輸入描述並指定主機。 在此範例中,您會使用 TripPin 中繼資料所傳回的 services.odata.org URL 作為主機。

    參數
    描述 「TripPin 是一個範例旅遊網站。」
    主機 "services.odata.org"

    新增描述和主機

  5. 安全性 頁面上,選擇沒有驗證作為驗證類型。

    輪詢驗證

  6. 定義頁面上,選擇 + 新增觸發程序,然後填入觸發程序的描述。 在此範例中,您會建立一個當新旅行被新增到人員的旅程時,就會啟動的觸發程序。

    建立新的觸發程序

    參數
    摘要 「新增新旅行時觸發」
    描述 「新增新旅行時觸發」
    作業識別碼 "OnNewTrip"
    可視性 "none" (如需詳細資訊,請參閱下方列表)
    觸發程序類型 「輪詢」

    流程中,在作業和參數的可視性屬性有下列選項:

    • :於流程中正常顯示
    • 進階:隱藏在額外的功能表底下
    • 內部:對使用者隱藏
    • 重要:一律優先對使用者顯示
  7. 要求區域會根據動作的 HTTP 要求來顯示資訊。 選擇從範例匯入

    定義頁面 - 從範例匯入

  8. 從範例匯入窗格中,您將定義輪詢觸發程序的要求。 針對動詞,請選取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 中的 <service number>。

    在此 URL 範例中,您會建立個別人員 (person) 的要求,而 {Person} 是使用者在流程中可指定的執行階段變數。 接下來,請指定您想要取得使用者所輸入特定人員的旅行。

    但是,您不想要取得所有旅行;您只想要取得在上次輪詢之後所出現的新旅行。 $filter=TripId gt 0 運算式能夠回傳 TripId 大於前次輪詢的 TripId 的旅行,這可以取得新的旅行。 此處使用的數字 0 會在每次輪詢觸發程序發生時自動更新。

    並且,$orderby=TripId desc 運算式表示資料順序將以 TripId 遞減的順序來回傳。 以遞減順序傳回是觸發程序的要求。 也就是說,後端服務所傳回的結果在觸發程序參數中必然會被反向排序,讓最新的參數 (例如此範例中的 TripId) 成為資料陣列所傳回的第一個值。

    從範例功能表匯入

    選取匯入按鈕以匯入範例資料。 要求區域現在會顯示動詞、URL、路徑、和查詢參數。

  9. 在要求區域中,選取 $filter 查詢參數,然後選擇編輯以顯示參數對話方塊。

    編輯篩選參數

  10. $filter參數對話方塊中,將可見度選取項目設定為內部。 此參數僅供連接器於內部使用,這可以防止使用者進行任何變更。 如需可見度設定的詳細資訊,請參閱 x-ms-visibility OpenAPI 擴充功能

    選取返回以返回要求區域。

    編輯篩選參數

  11. 在要求區域中,選取 $orderby 查詢參數,然後選擇編輯以顯示參數對話方塊。

  12. $orderby參數對話方塊中,將必要? 選取項目設定為,並將可見度選取項目設定為內部。 同樣地,這些設定可防止使用者對此參數進行任何變更。

    此外,請在預設值方塊中輸入 TripId desc 作為值。 這些設定可確保結果會以反向順序提供。

    選取返回以返回上一個區域。

    編輯 orderby 參數

  13. 回覆區域會根據動作的 HTTP 回覆來顯示資訊。 選取新增預設回應

    新增預設輪詢回應

  14. 定義輪詢觸發程序的回應,然後選擇匯入。 使用以下提供的範例來作為回應本文,這將會為回應自動建置結構描述。

    新增輪詢回應本文

    
    {
        "@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 中的 <service number>。

  15. 觸發程序設定區域中,選取用來監視 TripPin 狀態變更的參數。 在此範例中,輸入的參數是 $filter

    在此範例中,請於指定要傳遞至所選取查詢參數的值中使用下列運算式:

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

    這個運算式可用來在觸發程序每次執行時取得最新結果。 在您於此處使用的運算式中,當 TripId 大於運算式其餘部分所傳回的值時,觸發程序便會執行。 如果 TripId 未大於運算式其餘部分所傳回的值,則不會發生任何觸發程序。

    選取包含觸發程序資料的集合選取項目中,選擇**@triggerBody().value**。 這是包含後端服務所回傳的觸發程序資料的陣列。

    輪詢觸發程序設定

  16. 在精靈頂端,選取建立連接器

使用輪詢觸發程序

您現在已設定好所有項目,可以在流程中使用輪詢觸發程序。 在此節中,您會建立一個流程,每當特定人員記錄了新旅行時,輪詢後端服務是否有變更。

  1. flow.microsoft.com 中,於頁面左側選擇建立

  2. 從空白開始下方,選擇即時流程

  3. 組建即時流程對話方塊中,選取略過按鈕。

  4. 在搜尋方塊中,輸入新增新旅行時觸發

    在搜尋方塊中顯示搜尋文字的螢幕擷取畫面。

    選擇清單中要用來做為觸發程序的項目。

  5. 人員流程方塊中,輸入 russellwhyte 作為您要檢查其旅行的人員,然後選取 + 新增步驟

    顯示 [人員] 方塊和 [新增步驟] 按鈕的螢幕擷取畫面。

  6. 選擇動作對話方塊中,選取內建索引標籤,然後選取日期時間

    顯示 [選擇動作] 對話方塊的螢幕擷取畫面。

  7. 日期時間中,選取目前時間

    顯示 [目前時間] 按鈕的螢幕擷取畫面。

  8. 選取儲存以儲存新流程。

驗證與疑難排解

若要確認所有項目都已正確設定,請選擇我的流程,然後選擇新增新旅行時觸發 -> 目前時間 流程以檢視執行歷程記錄。 因為流程尚未被執行過,所以目前記錄不會顯示任何內容。

若要測試流程,您必須開啟 Postman 應用程式,以將新資料新增至 TripPin。

  1. 在 Postman 中,選取啟動列索引標籤旁邊的**+** 圖示。

  2. 在未命名的要求中,從左邊的下拉式方塊中選取POST,然後在輸入要求 URL方塊中輸入下列位址:

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

    注意

    請務必使用中繼資料中的實際數字,而不是 URL 中的 <service number>。

  3. 在 POST 要求下,選取本文索引標籤,然後選擇原始。 在原始右邊的下拉式清單中,選擇 JSON

  4. 在文字方塊中輸入下列文字:

    {
         "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"
    }
    
  5. 選取傳送 將 POST 訊息傳送至 TripPin 網站。

    傳送 POST 訊息

    回應應該會與 201 Created 狀態一起回傳。

現在,當您開啟我的流程,然後選擇新增新旅行時觸發 -> 目前時間流程時,就會在執行歷程記錄中看到已執行的觸發程序。

已執行觸發程序

注意

如果您在 Postman 中針對同一人執行另一個 POST 要求,則必須在 JSON 本文中變更 TripId 值。 否則,將會出現 409 衝突錯誤。

摘要

如果所有項目都已正確設定,則現在每當有新的旅程新增至 TripPin 時,您就會在 Microsoft Power Automate 中收到通知。

後續步驟

提供意見反應

非常感謝您提供有關連接器平台問題,或新功能構想的意見反應。 若要提供意見反應,請移至提交問題或取得連接器說明,然後選取您的意見反應類型。