Power AutomateとFormsを使って、興味のあるニュースを配信する仕組みを作る

はじめに

「舟越さん、ブログにPower Automateの記事書かないんですか?書きましょうよ!」と言われていた事を思い出し、Power Automateネタで一つ書いてみることにしました。

何かのサービスに登録する際、興味のあるジャンルにチェックを入れると、その内容のニュースが届く、というような仕組みがあるかと思います。

こんな感じです。

こういう仕組みを社内で手軽に出来ないかなー、Power AutomateとFormsを使ったら出来そうだなー、と思ってやってみました。

全体の流れを考える

考えました。

ユーザーはFormsから興味のあるジャンルを登録します。これが、登録ジャンル一覧のExcelに保存されます。

配信記事は別途Excelにまとめておきます。記事配信用のPower Automateを実行すると、ユーザーの登録ジャンルに該当する記事のみがメールで配信されます。

事前準備

Formsを作る

今回は社内用を想定しています。「名前を記録」に設定しておけば、ユーザーのIDは自動で取得可能です。

また、今回は話をシンプルにするために、このFormsでは新規登録のみ出来るようにします。ジャンルの変更、配信の停止は考えません。そのため、「1人につき1つの回答」にもチェックを入れます。

ジャンルは複数選択肢にチェックを入れる形式にします。

Formsのデータを確認しておく

Formsに入力されるデータを事前に見ておきます。実際の回答画面から送信してみます。

複数選択肢の場合、チェックを入れた項目の値が;で区切られた形になります。

確認したら一度結果はリセットしておきます。

登録ジャンル一覧用のExcelを作る

Formsに格納されたデータはExcelで確認できますが、直接Power Automateから参照は出来ません。なので、Formsに入力されたデータは別途用意したExcelに保存されるようにします。

必要な列を作成し、テーブルとして定義しておきます。

配信記事一覧用のExcelを作る

記事一覧を作成します。今回は、ExcelのファイルとしてはFormsデータ格納用と同じファイルにし、シートおよびテーブルを分けました。ここもテーブルを定義しておく必要があります。

Power Automateを作成する:Formsからのデータを整形して登録ジャンル一覧を作る

Formsからの応答を受け付けて詳細を取得する

今回はFormsへの投稿をトリガーにします。「Forms」で検索し、「新しい応答が送信されるとき」のトリガーを選び、先ほど作成したフォームを選択します

新しいステップを追加し、Formsの「応答の詳細を取得する」のアクションを選びます。フォームIDは同じものを、応答IDには、トリガーで取得した応答IDを指定します。この辺りはFormsをトリガーにするときのお約束となります。

Excelにデータを追加する

取得したFormsのデータをExcelに格納します。Excelの「表に行を追加」アクションを追加し、事前準備したExcelを指定します。

IDにはFormsで取得したデータの「Responders' Email」を、ジャンルには「配信を希望するジャンルを選んでください」を指定します。

動作確認する

Formsからデータを入力し、Excelに反映されることを確認します

元のデータには無かった[や"が気になりますが、まあ大丈夫でしょう。

同様に、test02からも回答してデータを用意しておきます。

Power Automateを作成する:Excelのデータを元に必要な情報だけ配信する

手動で実行するトリガーを用意する

先ほどの

今回は、投稿側が任意のタイミングで手動で配信することにします。

変数を初期化する

個人ごとにカスタマイズしたニュース記事を格納するための変数を用意しておきます。

Excelのデータを読み込む

Excelの「表内に存在する行を一覧表示」を使って、登録者一覧を読み込んでおきます。

ループの設定

今回、登録者一覧のユーザー毎に処理をすることになります。コントロールからApply to eachを選びます。

出力として、先ほど取得した登録者一覧の情報のvalueを指定します

ユーザープロフィールを取得する

UPNかメールアドレスさえあれば、元のデータにユーザーの姓や名などの情報が無くてもMicrosoft 365の情報から引っ張ってくる事が出来ます。その準備として、「ユーザー プロフィールの取得 (V2)」を追加し、Excel上のID(UPN)をセットしておきます。

文字列変数にヘッダー文を設定する

「変数の設定」のアクションを追加し、最初に定義した変数にhtmlを使って分を入れます。また、ユーザー毎に「〇〇さん」と表示したいので、ここでは 「ユーザー プロフィールの取得 (V2)」で取得した表示名を設定します

条件分岐で、ジャンルごとの記事を入れるかどうか判断していく

ユーザーがどのジャンルを希望しているかどうかによって、記事の生成を変更するため、条件分岐で判断していきます。今回は一つずつ見ていくことにします。まずは、登録者の希望ジャンルに「政治」があるかどうか確認します。

ジャンルに「政治」が含まれている場合は、フィルタークエリでジャンルが政治のものだけデータを持ってきます。

こんなイメージです。オレンジ色の記事だけ抜き出します。

この結果を「文字列変数に追加」で追記していきます。今回は、記事のタイトルをh2タグで、内容をpタグで囲いました。

あとは、これと同じことを、ジャンルの数だけ繰り返します。

メールを送信する

最後に、「メールを送信」で登録ユーザー毎にカスタマイズしたメールを送ります。本文には、ここまでの条件分岐で必要な情報を入れた文字列変数を指定します。

動作確認をする

想定される動作の確認

では、実際に意図した通りに動くか見てみます。今回は、すでに登録者のデータがそろっているので、2番目のフローが意図したとおりに動くかの確認がメインです。

まず、どのように配信されれば意図通りか確認しておきましょう。

今回の登録者一覧はこうなっています。

IDジャンル
test01@example.com["政治","グルメ"]
test02@example.com["政治","経済","スポーツ"]
登録者一覧

一方、配信記事はこのようになっています。

NewsIDタイトルジャンル内容
1ついに法案可決政治長らく議論されてきたあの法案が、与党賛成多数のため…
2株価高値更新経済本日も株価は高値を更新しました。これで3日連続の…
3リーグ王者決定スポーツ最終節までもつれた上位争い、待っていたのは意外な結果…
4新じゃがレシピグルメ新じゃがの季節です!旬の新じゃがを使ったレシピを…
5最新の内閣支持率政治独自に行った内閣支持率の情報です。今回の調査では…
配信記事一覧

ユーザー毎に配信される記事の想定はこうなります。

NewsIDタイトルジャンルtest01test02
1ついに法案可決政治
2株価高値更新経済
3リーグ王者決定スポーツ
4新じゃがレシピグルメ
5最新の内閣支持率政治
想定配信記事

実際の送信結果

では、意図通り配信できるか試してみます。

フローを保存したら実行するだけです。

まず、フローの実行結果としては成功しました。

配信されたメールはどうでしょうか。

まずはTest01へのメールです。わかりやすくするために、メールのキャプチャの横に表を並べました。

続いて、Test02へのメールです。同様に表も添えます。

登録したジャンルの記事だけが記事になり、かつ、一見、個別にメールを送ったかのように届いていました。

おわりに

これで、Formsを使ってジャンル登録をしてもらい、登録内容に応じてメールを配信する、という仕組みが出来ました。

実際に運用する場合は、登録だけではなくジャンルの変更と登録の解除も必要になるかと思いますが、まずは登録までを記事としてまとめてみました。

投稿者プロフィール
舟越 匠

舟越 匠

人材戦略部に所属。社内向けの技術研修をメインにしつつ、JBS Tech BlogやMS認定資格取得の推進役もやっています。資格としてはAzure Solutions Architect Expertを所持。Power AutomateやLogic Appsで楽をするのが好きです。

執筆記事一覧