むむ…Teamsチャネル投稿時に、同じチャネルに自動投稿するフローを作成したら、無限ループになってしまいましたぞ…!
そのようなフローの場合、「トリガー条件」を上手く使うとよいです!
この記事では、Power Automateのトリガーの種類と、トリガー条件の使い方について解説します。
- Power Automateのトリガーの種類
- Webhookトリガーと、ポーリングトリガーの違い
- トリガー条件の使い方
例えばTeams投稿のトリガーで、特定の人がメッセージ投稿したときのみをトリガーしたい場合等、トリガー条件を使うと、不要なフローの実行を減らすことができます。
要求数の制限がシビアなフロー等では、特に重要な設定になるので、ぜひご活用ください。
Youtube動画で見たい方は、こちらからどうぞ!
Power Automateのトリガーの種類
Power Automateでフローを開始するためのトリガーの種類は3つあります。

インスタントトリガーは、手動でフローが実行されるもので、スケジュールトリガーは、定期的なスケジュールを設定してフローがじどう実行されるものです。
自動トリガーでは、何かのイベントをきっかけに、自動でフローが実行されます。
これらのトリガーの種類について、もう少し具体例をあげて説明します。
インスタント(手動)トリガー
インスタントトリガーは、手動でフローの実行を開始するものです。

フローの一覧画面から、実行ボタンをクリックしてフローを実行したり、Power Appsのボタンクリック時にフローを実行したりできます。
Teamsからアダプティブカード等を使ってフローを実行する場合も、このインスタントクラウドフローになりますな!
スケジュールトリガー
スケジュールトリガーは、設定したスケジュールでフローを自動実行してくれるものです。

例えば、毎日、毎週、毎月等で設定したり、月曜日~金曜日の毎朝9時に実行する等の設定ができます。
定期的なデータのバックアップや、リマインドフロー等によく使われます。
自動トリガー
自動トリガーは、Power Automateのコネクタで選択できるあらゆるイベントが発生したときをトリガーにフローを自動実行できます。

例えば、SharePointリストに新しいデータが登録されたときや、Teamsチャネルに新しいメッセージが投稿されたとき、新しいメールを受信したときなどのトリガーがあります。
さらに、自動トリガーの種類としては、Webhookトリガーとポーリングトリガーの2種類に分けられます。

Webhookトリガーはイベント発生時にサービスから、Power Automateに通知が送られるため、イベント発生後、すぐにフローが実行されます。
例えばTeamsチャットへのメッセージ投稿時は、このWebhookトリガーです。
一方、ポーリングトリガーは、定期的にイベントが発生しているか確認しに行くもので、イベントの発生後、フローが実行されるまでにタイムラグが発生します。
例えば、Teamsチャネルへのメッセージ投稿時は、このポーリングトリガーになります。
トリガーが、Webhookか、ポーリングかを見分けるには、コードビューで、Typeを確認すると分かります。

Typeの最後にWebhookと書いてある場合は、Webhookトリガーで、それ以外はポーリングトリガーです。
また、ポーリングトリガーの場合、定期的にイベントの発生を確認しにいくため、その確認頻度を設定する項目が、パラメーターにあります。
フローがすぐに実行される場合と、タイムラグがある場合があるな…と思ったら、ここを確認してみてください。
トリガー条件とは?
トリガー条件とは、「設定」の「トリガー条件」から設定することができ、ここで設定した条件に当てはまる場合のみ、フローを実行することができます。
例えばTeamsチャネルメッセージ投稿時のトリガーで、以下のようにトリガー条件を設定した場合、投稿者(表示名)がパワ実であればフローが実行され、それ以外の投稿者である場合は、フローが実行されません。

フローが実行されない場合、フローの実行履歴にも残りません。
特にアクション数の多いフロー等は、要求数の制限を気にする必要があるため、このトリガー条件を上手く活用するとよいかと思います。
トリガー条件設定の具体例
トリガー条件の具体的な設定方法を実際の画面で見てみましょう!
今回は例として、以下のトリガー条件を設定してみます。
- Teamsチャネル投稿時のトリガーで、Botによる投稿を対象としたくない
- 月曜~金曜の9時~17時の間、30分おきにスケジュール実行したい
①Teamsチャネル投稿時のトリガーで、Botによる投稿は対象にしない
例えば以下のように、Teamsチャネルでユーザーが何等かの投稿をした場合、同じスレッドにBotによるメッセージを返信するフローを作ったとします。


しかしこのままでは、Botによるメッセージ投稿が、またトリガーとなり、無限ループになってしまいます。
条件分岐を使い無限ループを回避することも可能ですが、今回の場合は、トリガー条件を使うのがより良い実装となります。
トリガーの「設定」から、「トリガー条件」の「+追加」をクリックし、以下のような@から始まる条件式を書けばOKです。

@not(equals(triggerOutputs()?['body']?['from']?['application']?['applicationIdentityType'], 'bot'))
この設定では、投稿者のTypeがbotではない場合、という条件を設定しています。
実際にテストをしてみると、最初のユーザーによるチャネルへの投稿時は、フローが実行され、Botから自動でチャネルへの返信がきますが、Botによる投稿はフローがトリガーされません。

このような感じで、トリガー条件を使うことができます。

②月曜~金曜の9時~17時の間、30分おきにスケジュール実行する
このトリガーは、スケジュール済みのクラウドフローから作成し、30分おきに実行するように設定します。

まず、9時~17時の間実行する設定をトリガー条件に入れてみましょう。
設定のトリガー条件を追加し、以下のような式を書けばOKです。

@and(greaterOrEquals(int(formatDateTime(convertFromUtc(utcNow(),'Tokyo Standard Time'),'HH')), 9), lessOrEquals(int(formatDateTime(convertFromUtc(utcNow(),'Tokyo Standard Time'),'HH')), 17))
条件として、現在時刻の時間が9時以上、17時未満という設定にしています。
ここまでで、毎日9時~17時に30分おきにフローが実行できる設定となりましたな!
さらにここに、土日を除く月曜日~金曜日の間という条件を加える場合、以下のように式を修正します。
@and(greaterOrEquals(int(formatDateTime(convertFromUtc(utcNow(),'Tokyo Standard Time'),'HH')),9),less(int(formatDateTime(convertFromUtc(utcNow(),'Tokyo Standard Time'),'HH')),17),and(greaterOrEquals(dayOfWeek(convertFromUtc(utcNow(),'Tokyo Standard Time')),1),lessOrEquals(dayOfWeek(convertFromUtc(utcNow(),'Tokyo Standard Time')),5)))
これは、DayOfWeek関数を使い、フローが実行された日が何曜日かを数値で判定しています。
正直設定が複雑で、自分で式を書くのは難しいですな…
このような式を設定したい場合、ChatGPT等の生成AIの活用をおすすめします!
生成AIを活用してトリガー条件式を書く
例えば今回の場合、ChatGPTに以下のように質問すると、設定したいトリガー条件の式を作成してくれます。

ChatGPTが回答してくれた式をベースに必要であれば修正を加えてテストしていきます。

例えば今回のように、最初は毎日9時~17時の間で実行する条件式を試し、それが上手くいったら、月曜日~金曜日という条件を追加する感じです。


生成AIで作成された式も必ず正しいというわけではないため、少しずつテストしながら、試していくとよいかと思います。
最後に
本日は、Power Automateのトリガーの種類と、トリガー条件の使い方を解説しました。
Power Automateのトリガーには、以下の3つ種類があります。
- インスタント(手動)トリガー
- スケジュールトリガー
- 自動トリガー
自動トリガーには、Webhook形式と、ポーリング形式があり、ポーリング形式の場合、イベント発生からフロー実行までにタイムラグがあります。
Webhook形式
- イベントが発生したときに、Power Automateに通知が送られる
- イベントが発生したら、すぐにフローが実行される
ポーリング形式
- 定期的にイベントの発生を確認しにいく
- イベントの発生後、フローが実行されるまでにタイムラグがある
フローのトリガー条件を設定すると、不要なフローの実行を削減することができるので、ぜひご活用ください!