Power Automate 「チャネル内のメッセージで応答します」でTeamsのスレッドに返信する

Power Automate

Microsoft Teams>「チャネル内のメッセージで応答する」というアクションを使用して特定のスレッドに返信する形式で投稿したいと思います。

やりたいこと

「休み」「早退」等の勤怠連絡メールを受信したら、その内容をTeamsの特定のスレッドに投稿したい。

私の所属するプロジェクトでは、殆どリモートワークとなっており、かつ、勤務時間もバラバラのため、始業時と終業時にメールで連絡を入れるルールとなっています。休みや遅刻、早退などの場合にもメールでの連絡です。

しかし、メールだと気づかないこともしばしば。というか、あまりにも沢山メールが来るので、「勤怠連絡」という受信フォルダを作って自動振り分け&既読にしています。なので気づくはずもありません!!!(!?)Teamsでメンション投げても返事ないなーと思ったら、休みだった・・・!なんてこともしょっちゅうです。

というわけで、イレギュラーな内容の場合のみTeamsにも投稿するようにしたいと思っています。

手順

Power Automateホーム>左ペインの「作成」を押下

「自動化したクラウドフロー」を押下

今回は「特定のメールを受信したら」がトリガーとなるので、「自動化したクラウドフロー」を選択します。

毎日〇時にリマインドを投稿するなどといった場合には「スケジュール済みクラウドフロー」、手動で投稿したい場合には「インスタントクラウドフロー」など目的によって選んでください。

フロー名とトリガーの設定

フロー名はなんでもOKです。パッと見で分かりやすいものを付けておくと良いかと思います。

「フローのトリガーを選択してください」は、フローが開始されるきっかけとなるアクションのことです。今回なら「特定のメールを受信」することなので、検索窓に「メール」と入力します。

「新しいメールが届いたとき」とあるので、これを選択して「作成」を押下します。

すると以下のような画面に遷移します。

フォルダー:Inbox

Inboxのままでも構いません。ただし、これは受信する全てのメールが対象となります。もし、トリガーを発生させるメールを絞る場合は、次のうちのいずれかの方法をとる必要があります。

  • 1:「フォルダー」に、対象としたいフォルダを指定する
  • 2:詳細オプション>ToやCCなどで、特定の差出人を設定する

今回は、1の方法で行います。あらかじめOutlookで「勤怠報告」というフォルダを作成して仕分けルールを設定しておき、Power Automateではそのフォルダを指定します。

「フォルダー」の右のほうにあるアイコンを押下して、受信トレイ>勤怠報告を指定。

フィルターの設定

次に、「勤怠報告」フォルダに届いたメールのうち「早退」や「午前休」などイレギュラーな内容が含まれているときだけTeamsに通知が行くよう設定します。

もし、件名に特定の文字が含まれている場合を条件にしたいなら「件名フィルター」に入力すればOKです。

ただし、件名フィルターは複数条件を設定することはできません。

「早退 午前休」のようにスペースを入れたりカンマを入れたりしてもダメです。

右上の「…」から「設定」を開きます。

トリガーの条件の「追加」を押下します。

トリガー条件を入力します。

ここには直接条件を記載します。

例えば、メールの件名に「休」「早退」「遅」いずれかに一致する場合(OR条件)

@or(contains(triggerBody()?['Subject'], '休'),contains(triggerBody()?['Subject'], '早退'),contains(triggerBody()?['Subject'], '遅'))

全ての条件にマッチする場合(AND条件)は、

@and(contains(triggerBody()?['Subject'], '休'),contains(triggerBody()?['Subject'], '早退'),contains(triggerBody()?['Subject'], '遅'))

となります。他にも、「Gmailのメールかどうか」を判定するには

@equals(last(split(triggerBody()?['from'],'@')),'gmail.com')

メール本文の内容をトリガーの条件にしたい場合は、

@contains(triggerBody()?['body'],'休みます')
@contains(triggerBody()?['bodyPreview'],'休みます')

といったように、カッコの中に検索対象としたいプロパティを指定します。

(bodyPreviewはString型のみ、bodyはHTML形式も含む場合があるので、特になにもなければbodyPreviewを見るようにしたほうがいいかもしれません)

式関数のリファレンス ガイド - Azure Logic Apps
Azure Logic Apps および Power Automate のワークフロー式関数のリファレンス ガイド。

条件に一致するメールを受信したらTeamsの特定のスレッドに投稿するようにする

「新しいステップ」を押下。

「Microsoft Teams」を押下。

「チャネル内のメッセージで応答します」を押下。

※以前は「メッセージへの返信の投稿」という名前だったようです。「チャネル内のメッセージで応答」って、いまいちわかりづらいですよね。。。

投稿者・投稿先の設定

「投稿者」にはデフォルトでFlow botと入っていますが、これだと投稿時にbotのアイコンになります。

「User」にすると手動でTeamsに投稿するのと同じような見た目になります。

「投稿先」は「チャネル」を選択。

ここで、「チーム」「チャネル」は候補が表示されるので選べばOKですが、「メッセージID」は直接入力になっています。

メッセージIDは、対象のスレッドのリンクをコピーして、

このリンクの「parentMessageId=」以降の数字の部分が「メッセージID」となります。

「メッセージ」にはメールの件名と本文を表示するように設定。

これでイレギュラーな勤怠連絡が来た際にTeamsのスレッドに自動投稿されるようになりました。

まとめ

私はそこまでIT系に強いわけでもなく、Power Automateを使い始めたのもつい最近です。そんなシロウトの目線で思ったのは、感覚的に進めやすい反面、素人には不親切な点があるなーということです。今回作成したフローのなかにも出てきた「メッセージID」はTeams側からとってこないといけないとか、条件指定がベタ書きだとか。普段からバリバリやってる人にとってはなんてことない内容なのかもしれないけど・・・。

あと、エラーの内容が分かりにくい。エラーメッセージには全然見当はずれなことが書いてあったりするから結局ソースを見ないと原因が分からないこともありました。

たぶん出来る人は当たり前のようにできているから、ネットで困ってる内容を調べても意外と出てこなかったりするので、初心者なりに模索しながら躓いたところを共有できればと思います!

コメント

タイトルとURLをコピーしました