Power Automate Teams へRSS をスケジュール通知するサンプル (翻訳・土日対応)

はじめに

今回は以前に自社、現場で作成したPower Automate(クラウドフロー)でRSSを定期的に取得しTeamsへ通知する実装サンプルについて記事にいたしました。
以前 RPACommunityさんでLT登壇させていただいた際の内容という感じですが、実装部分の記事を作っていなかったのであらためて記事にしています。併せて土日は通知しない場合の調整について追加しています。

以前の登壇資料など

以前LT登壇した際の内容は以下記事でご紹介しています。

登壇時は以下のフローを①~③の順で実装を行って展開、都度改修した流れとなっていますが、
本記事では完成形を作成するサンプルとしています。

・ベース:クラウドフローのテンプレートをベースに改修
・対象記事はPower AppsやPower Autoamteなどの英語記事

  1. 翻訳(Microsoft Translator V2) →対象記事が英語の場合に翻訳する
  2. スレッド化(同じスレッドに追記) →Teamsの同チャネル上にスレッド化して追記する実装
  3. ウルトラC(とっておきの秘策)     →作成者をお偉い人に変更する(ネタバレ→詳細はスライドご確認ください)

前提:Teamsにある標準のRSS機能

そもそもTeamsには標準でRSSコネクタがあり簡単にTeamsへの追加は可能です。
ダイジェストの頻度なども調整可能です。

だた今回ご紹介する実装とは以下が異なります。これらを対応したい場合のサンプルという感じです。
・英語版しかないためそのまま表示される →翻訳をかけたい
・チャネルに1投稿ずつの追加となる   →1スレッドにまとめたい
※通知元がRSSとなるかユーザーORボットとなる違いもあり

以降、Power Automateを使った定期的RSSの通知フロー(翻訳あり)を作成していきます。

クラウドフローのテンプレートを使用

Power Automate の一覧画面で「テンプレート」を選択します。
あまり活用されていないかもしれませんが、結構種類あります。(おおむね英語版ですが)

検索に「RSS」を入力してフィルターをかけ以下を選択してください。
「毎日の RSS フィードのニュースのダイジェストを取得する」


選択すると以下のような概要、認証確認する画面があるので、続行をクリックします。

※Notificationアクションは後々Teams投稿へ変更します。

TIPS一から作成ももちろんできますが、テンプレートをベースに調整すればサクッと作成できますし、
実装の参考にもなるためサンプルではテンプレートを使っています。

以下のようなフローが作成されると思います。現在だとモダンのエディターですね。
せっかくなので(慣れてないですが)このままモダンで調整箇所を説明していきます。

トリガーでスケジュールを調整する 

トリガーを開いて実行するタイミングを調整します。
初期値では毎日になっていますが、本サンプルでは月~金までの通知に調整します。時間は仮で9時に。
※月~金の場合は後述するRSSの取得期間の調整が必要です。毎日ならそのままでOK

Interval  : 1 、Frequency :週
Time Zone :(UTC+9:00)大阪、札幌、東京
On These Days :月曜日~金曜日
時間: 9時  分:00
※Start Timeはこの日時以降としたい場合に指定、指定なしの場合は空でよい

RSSのURLを指定する

現状未入力のためエラーとなっています。こちらにRSSFeedのURLを指定します。
今回はPower Apps BlogのRSSFeedを指定します。おおむねトップURLに/feedとなっているかと思います。

NOTE★注意
最近Power Apps、Power Automateについては新しい様式となり、URLも変わっていました。
以前のURLを開いた場合はリダイレクトされて新しいURLのページ表示されますが、Feed取得については
以前のURLを指定したままだと取ってこれないようです!

以下、現在のURLを記載しています。BIはまだ以前のままですが同様に変更される可能性がありますので、
変更を確認されたら対象URLの切り替えてください。

https://www.microsoft.com/en-us/power-platform/blog/power-apps/feed/
Power Automateは「https://www.microsoft.com/en-us/power-platform/blog/power-automate/feed/
Power BIは「https://powerbi.microsoft.com/en-us/blog/feed/」です。※Apps、Automate同様に変更の可能性あり

feedにアクセスすると上記のようにRSSの情報ページとなる

フローに戻り、RSSのURLに指定します。
他のパラメータはそのままで問題ないと思います。

TIPS以降、適宜保存しながらフローを修正していってください。

フィルターアクションを調整する(月~金対応)

次のアクションでフィルターしている箇所があります。
簡単には数式でpublishDateが今の時刻より-2日以降のデータを対象にしています。

トリガーのスケジュールを毎日としている場合そのままで問題ありません。
今回月~金に動作させるため、そのままだと金曜日の取得後~土曜日の更新が反映されません。
そのため以下のように数式を変更します。
dayOfWeek関数で曜日を判定し、1→月曜日の場合は‐4、それ以外は‐2という内容です。

Code//毎日の場合 →変更なし
adddays(utcnow(), -2)

Code//月~金の場合 →月曜日の場合は‐4、それ以外は‐2日以降
if(equals(dayOfWeek(utcNow()),1),adddays(utcnow(), -4),adddays(utcnow(), -2))

翻訳アクションを追加する

今回は英語記事を取って来ているのでこのアクションを入れています。日本語の記事の場合は不要です。
以下のCompose(作成アクション)の中身は以下のようになっています。
一旦、この下に翻訳アクションを追加します。

「Microsoft Translator V2」の「テキストの翻訳」を追加

Composeアクションの下に「Microsoft Translator V2」の「テキストの翻訳」を追加します。
パラメータは以下のようにします。
テキストの部分は上記Composeで使われている動的コンテンツ「Title」です。
これをコピーして貼り付けてもOKですし、この記事の以下を数式で張り付けるでもOKです。

・テキスト: items(‘Compose_the_links_for_each_blog_post’)[‘title’]
・ターゲット言語:日本語
・ソース言語:英語 (空でも自動判定してくれると思うが念のため)
・カテゴリ:空のまま
・テキストの種類:plain (プレーンテキスト)

TIPS翻訳API「Microsoft Translator V2」はプレミアムライセンスなしでも使えます! 
APIキーなしでも1 日 /55,000 文字、1 分/ 100 リクエストまで無料で使えます。詳細は公式をご確認ください。
Microsoft Translator V2 – Connectors | Microsoft Learn

概要(Summary)用の翻訳アクションも追加

続いて、概要(Summary)用の翻訳アクションも追加して設定します。
上記とテキストのみ Title から Summaryとなる変更なので、コピーして貼り付けての一部修正が手早いと思います。

以下のようにアクションを指定して右クリックで「アクションのコピー」
+アイコンの部分で右クリックして、「アクションの貼り付け」
→コピーされたアクションが追加されます。

追加されたアクションの以下を修正します。
アクション名:テキストの翻訳-Summary (なんでもいいが分かりやすい内容にする)
テキスト:以下の通り、[‘title’][‘summary’] に修正します。

翻訳アクションが追加出来たら順番を入れ替え

2つの翻訳アクションが追加出来たら順番を入れ替えます。
以下のように先に翻訳アクションを持ってきてComposeをその次に移動します。

ComposeアクションのTitleとSummaryを翻訳後の結果に差し替え

次にComposeアクションのTitleとSummaryを翻訳後の結果に差し替えます。
以下のように元々titleが入っている部分をタイトル用の翻訳されたテキストへ、
summaryをSummary用の翻訳されたテキストへ変更します。

HTMLの書式は任意に変更

上記のHTML書式について、そのままでもいいですが、変更したければ調整が可能です。
自分の場合は日付が入っていない点や上に日付、次にタイトルとしたかった点などを調整しました。
一応調整例としてサンプルを上げておきます。

Code<tr><td><h3><a href=”@{items(‘Compose_the_links_for_each_blog_post’)?[‘primaryLink’]}”>@{body(‘テキストの翻訳’)}</a></h3></td></tr><tr><td style=”color: #777777;”>Posted at  @{formatDateTime(item()?[‘publishDate’], ‘t’)}GMT</td></tr><tr><td>@{body(‘テキストの翻訳-Summary’)}</td></tr>

↓ 日付を追加、順番を変更してタイトルの方を少し大きくするなどの調整

Code<tr><td style=”color: #777777;”>Posted at @{formatDateTime(item()?[‘publishDate’], ‘yyyy/MM/dd HH:mm’)} GMT</td></tr><tr><td><h5><a href=”@{items(‘Compose_the_links_for_each_blog_post’)?[‘primaryLink’]}”>@{body(‘テキストの翻訳’)}</a></h5></td></tr><tr><td>@{body(‘テキストの翻訳-Summary’)}</td></tr>

調整前後のサンプルです

チャネルのひとつのスレッドへ返信する実装にする

上記でFeedの取得、フィルター、翻訳まで完了です。次からTeamsへ投稿する実装を行います。

Notificationアクションを削除

元々あるアクションの「Notificationアクション(Send an email)」は使わないのでひとまず削除します。

Notificationアクションを削除

事前にTeamsへ投稿用のスレッドを作成する

そのままチャネルへ投稿する場合であれば、「チャットまたはチャネルでメッセージを投稿する」アクションで
構いませんが、その場合、以下のように投稿のたびにひとつのスレッドが出来ます。
ひとつのチャネル内にこのRSSのみとするのであればこちらでよいと思います。
今回はひとつのチャネル内にPower Apps、Power Automate、Power BIなどそれぞれ投稿したい。
そのため、それぞれを一つのスレッドにまとめたい場合の実装となります。

「チャットまたはチャネルでメッセージを投稿する」の場合、以下のように投稿単位で日々スレッドが出来ます。
ひとつのRSS専用チャネルにする場合はこちらでよいと思います。※詳細は登壇記事などご参考ください。

普通に投稿するアクションの場合はスレッドが都度作成される

投稿したいチャネルに以下のようにタイトルを付けて投稿します。その投稿のリンクをコピーします。

コピーしたリンクをテキストに張り付け、以下のうち「parentMessageId=」の後から&までの数値を控えます。
以下で赤くしている部分です。これが作成した投稿のIDとなっています。

チャネル内のメッセージで応答しますを追加する

フロー編集画面へ戻り、Notificationアクションがあった場所へ以下アクションを追加します。
「チャネル内のメッセージで応答します」

チャネルへ応答アクションの内容を調整する

上記で追加したアクションを以下の概要で調整します。
投稿者は「Flow bot」 または「User」で選択可能です。今回は「Flow bot」としてみます。
MessageIDは上記で控えたIDを指定し、その他はプルダウンで指定が可能です。
メッセージには作成アクションの結果をTableタグで囲ったものを指定します。

Code<table>@{join(outputs(‘Compose’),”)}</table>

TIPS登壇資料ではこの部分をUserとし自分となっているのが嫌だったので、後々えらい人にフローをコピーして所有者となってもらい、偉い人を送信者とするという技をウルトラCとして発表していました!

動作を確認

上記でこのフローの実装が完了です。テスト実行して動作を確認しましょう。
その際に一旦取得対象を調整して以前のデータも取ってくるようにします。

初回はフィルターの日付を調整

実装上ではフィルターアクションで前日(月曜の場合は金土以降)でー4、‐2で調整していましたが、
この範囲に投稿がなかった場合は取れませんし、実装時点でRSSの持っている情報(数十件位?)を一気に取ってきたいので日付を調整します。例では‐100としてます。

ちなみにApply to eachではFliterした結果から15件までのループとされています。そのため一気に取れても15件までです。(RSSの保持も大体それくらいと思いますが)それ以上必要な場合はこの部分も増やすなど調整ください。

謎の不具合?投稿メッセージがうまく保存されない

と、書きながら試してみたところ、なぜかテーブル形式にならない。。
よく見たら最後のチャットへの応答アクションのメッセージが何度いれても以下のように変わってしまいます。。

保存して一旦開きなおしたりしても変わってしまう。理由不明。。

とりあえずクラシックデザイナーに変更して再保存したらそのまま保存できました。(ので深追いはしてない)
以下のような感じで10件まで取れていました。

NOTE上記動作を確認したら、フィルターの日付部分は元に戻すのを忘れないようにしましょう。
そうしないと毎回これくらいが追加されてしまいます。

Code//一気に取得用に調整していたフィルターアクションの数式を元に戻す
if(equals(dayOfWeek(utcNow()), 1), adddays(utcnow(), -4), adddays(utcnow(), -2))

Flow bot と ユーザーどっちにするか

今回はFlow botでの通知としました。Flow botにしてもフロー作成者経由のものとして名前は表示されますが、
通知は自分にも来る点はいいですね。後システムがやっている感は増します。
ただ、Flow botのメッセージを自分が削除できない点がテストなどしていてうっとおしいですね。
ユーザーにした場合は基本作成者(接続で使用しているユーザー)として送信されます。
この場合のデメリットは自分に通知が来ない。自分が表に出てる感が増す。
という点でしょうか。

RPACommunityさんのLT登壇時はここを解消するためにえらい人に変更して自分にも通知が来るし、えらい人が送っている感あるのでメンバーが見る率高まる。えらい人も参加している感じになっていいことが多いとしてましたw
この辺はケースバイケースで調整という感じですかね。

おわりに

というわけで今回はひさしぶりにクラウドフローの記事でした。
実装自体は相当前(3年くらい?)にやった内容で、かつ、1年前に登壇した際に話した内容なので
新しい情報感は皆無ですが、実装方法はブログにしたほうが分かりやすいかと思い記事にしてみました。

上記のようにPower Appsに加えて、Power Automate、Power BI、Copilot Studio、Power Pagesも作って
是非最新情報を取得・共有いただくのに役立てていただければと思います。
もちろんその他ブログなどのRSSを取得にもお役立てください。それでは。

関連記事

以前LT登壇した際の内容は以下記事でご紹介しています。

この記事は役に立ちましたか?

もし参考になりましたら、下記のボタンで教えてください。

ヨウセイ

ヨウセイ

一般職からSharePoint、C#、.NET系技術者へ、そこからPower App、Power Automate技術者へと転身。 ワンランク上のおっさんはPower Appsでシステム開発が出来る〜! qiitaや自社HPでも技術ブログを書いていました。

関連記事

コメント

この記事へのコメントはありません。

CONTENTS