Microsoft Power Automate のポーリング トリガーを使用する

ポーリング トリガーは基本的に、新しいデータを検索するサービスへの定期的な呼び出しを行うイベントです。 ポーリング トリガーは次の点で Webhook と異なります。ポーリング トリガーは新しいデータが利用可能かどうかを判断するためにイベントを開始するのに対して、Webhook はサービスからの新しいデータのプッシュに応答します。 フローによって新しいデータが利用可能であると判断されたら、そのデータを使用して操作を実行できます。 このチュートリアルでは、ポーリング トリガーを使用して、積極的に新しいデータを取得する方法について説明します。

前提条件

ポーリング トリガーのしくみ

ポーリング トリガーは、状態を設定することによって始まり、一定の間隔で定期的に更新をチェックします。 次にトリガーは、前回の状態の更新以降のすべての新しいデータを要求します。 また、トリガーでは要求間の状態コンテキストも保持されます。

次の例は、ポーリング トリガーが新しいデータを取得するしくみについて、基本的な概要を示します。

ポーリング トリガーがデータを取得するしくみ

  1. フロー ランタイムは、コネクタの API に対するトリガーの最初の呼び出しを行います。

  2. 次に、コネクタはバックエンド サービスを呼び出します。

  3. 次にバックエンド サービスは、現在のデータをすべてコネクタに返します。

  4. コネクタは、202 受領済みメッセージ、再試行間隔、現在の状態を含む場所ヘッダーを返します。 再試行間隔は秒単位です。 この最初の呼び出しは常に、データの準備状態を確立するために使用されます。

  5. 再試行間隔がタイムアウトした後、フロー ランタイムは場所ヘッダーと現在の状態 (この例では 1) を使用して、コネクタに対して別の呼び出しを行います。

  6. コネクタは、この状態が 1 であるため、適切なフィルター処理を実行する適切な API を呼び出して、正しいデータ セットが返されことを認識します。 この例では、コネクタは、これを作成日の値が特定のタイムスタンプよりも大きいことを示す、フィルターされたクエリに変換します。

  7. この例では、作成日以降に新しいデータが存在しないため、空の値セットがコネクタに返送されます。

  8. コネクタは、202 受領済みメッセージ、再試行間隔、状態が変更されていない場所ヘッダーを返します。

  9. 再試行間隔が再度タイムアウトになった後、フロー ランタイムは同じ場所ヘッダーと状態を使用して、コネクタに対して別の呼び出しを行います。

  10. この場合も、コネクタは作成日を使用して適切なフィルター処理を実行します。

  11. 今回は、作成日以降に新しいデータが利用可能になっているため、バックエンドはすべての新しいデータの値をコネクタに返します。

  12. コネクタは、200 OK メッセージ、再試行間隔、新しい状態値を持つ場所、および作成日以降に利用可能になったすべての新しいデータを含む値の配列を返します。 この時点で、フローが開始されます。

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 を使用します。

    パラメーター Value
    説明 "TripPin は旅行 Web サイトの一例です。"
    ホスト "services.odata.org"

    説明とホストを追加する

  5. セキュリティ ページで、認証の種類として認証なしを選択します。

    ポーリングの認証

  6. 定義 ページで、+ 新規トリガー を選択して、トリガーの説明を入力します。 この例では、個人の旅程に新しい旅行が追加されたときに起動するトリガーを作成します。

    新しいトリガーを作成する

    パラメーター Value
    概要 "新しい旅行が追加されるときのトリガー"
    説明 "新しい旅行が追加されるときのトリガー"
    操作 ID "OnNewTrip"
    可視性 "なし" (詳細については、下の一覧を参照してください)
    トリガーの種類 "ポーリング"

    フローでの操作とパラメーター用の可視性プロパティには、次のオプションがあります:

    • なし: フローに通常表示
    • 詳細: 追加メニューでは非表示
    • 内部: ユーザーには非表示
    • 重要: 必ずユーザーに最初に表示
  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 の <サービス番号> の代わりに、必ずメタデータからの実際の数値を使用してください。

    この URL の例では、個人に対する要求を作成しており、{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 の <サービス番号> の代わりに、必ずメタデータからの実際の数値を使用してください。

  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 で、Launchpad タブの横にある + アイコンを選択します。

  2. 無題の要求で、左側のドロップダウン ボックスから POST を選択してから、要求 URL の入力ボックスに次のアドレスを入力します。

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

    注意

    URL の <サービス番号> の代わりに、必ずメタデータからの実際の数値を使用してください。

  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 で通知を受け取ることができるようになります。

次のステップ

フィードバックを提供する

コネクタ プラットフォームの問題点や新機能のアイデアなどのフィードバックをお待ちしています。 フィードバックを提供するには、「問題を送信するか、コネクタに関するヘルプを入手する」にアクセスし、フィードバックの種類を選択します。