SharePoint サイトの運用でよくある課題が、サイトを作成したものの見に来てくれない人がいることです。こうしたユーザーに対して色々と働きかけるのですが、どうしてもこうしてもそうした人をゼロにするのは難しいものです。

サイトに掲載された情報を知ってもらうという目的であれば、サイトを見に来てもらう必要は必ずしもありません。サイトを見ずとも、掲載された情報を少しでも知ってもらえないかと考えました。それをきっかけにサイトを見てくれるかもしれませんし…。

というわけで、SharePoint のニュース機能を利用して投稿された情報を定期的にまとめて、メールでユーザーに送る方法を考えてみます。しかも、Power Automate を利用して自動的に送られたら最高ですね。

そんなこんなで試してみたことを書いておきます。

SharePoint ニュースの情報を取得する

SharePoint に投稿されたニュースの情報をまとめて取得するようなアクションは、Power Automate に標準で用意されている SharePoint コネクタでは提供されていませんでした。そこで、SharePoint コネクタの「SharePoint に HTTP 要求を送信します」アクションを利用してみます。

なにか使える API はあるかな…と、SharePoint の API を色々と深堀していくと「/_api/v2.1/getMultiSiteNews」という謎のエンドポイントを発見することができました。これは、SharePoint のニュース Web パーツの裏側で利用されているものです。API のドキュメントにも記載がなく、SharePoint 内部で利用するためだけにあるようです。ただし、ちょっと試したところ Power Automate からも呼び出せそうです。

/_api/v2.1/getMultiSiteNews を呼び出してみる

それでは、さっそく Power Automate からこの API を利用してみます。

設定項目設定値
サイトのアドレスアクセス権のある適当なサイトを選択
方法POST
URI_api/v2.1/getMultiSiteNews?$expand=analytics($expand=allTime),thumbnails&$top=10
ヘッダーなし
ボディ以下の通り
{
    "sites": [
        "ccabea4f-3ffc-4c4f-bf40-eef0be183306,764ef0f2-711d-4d34-a7df-ad16b76bf8ac",
        "dbc5b8a6-a9a3-4140-88df-7b5ac8d43dfc,53a85720-c9d6-4b0d-a4ba-9e772cb66acf"
    ],
    "filterByAudience": false,
    "preferredLanguage": "ja-jp"
}

簡単にポイントだけ解説すると、URI に含まれる $top プロパティで取得件数の上限を指定できます。また、ボディには、ニュースを取得したいサイトの Site ID と Web ID をセットにした値を「<Site ID>,<Web ID>」の形式にしたものを sites の配列に入れて指定します。配列なので複数の値を指定することができ、これによって複数のサイトに投稿されたニュースをまとめて取得することができます。

Site ID と Web ID を調べる

ここで必要になる Site ID と Web ID も「SharePoint に HTTP 要求を送信します」アクションを利用して調べることができます。

設定項目設定値
サイトのアドレスSite ID を調べたいサイト
方法GET
URI_api/site/id
ヘッダーなし
ボディなし
設定項目設定値
サイトのアドレスWeb ID を調べたいサイト
方法GET
URI_api/web/id
ヘッダーなし
ボディなし

これらを設定したアクションを実行すると、それぞれの ID が結果として返ってきます。

ダイジェストメールを作成する

API で取得できた情報を元にメールを作成して送ってみます。まずは、API を呼び出した「SharePoint に HTTP 要求を送信します」から出力された body を、定番の「JSON の解析」によって Power Automate で扱いやすく変換します。

そうしたらこれをHTML のテーブルタグに変換するため「HTML テーブルの作成」アクションを利用します。「JSON の解析」から出力された value を「開始」の値にセットします。「ヘッダー」や「値」は、表示したいものを任意に設定しましょう。

今回はタイトルにリンクを設定したかったので、式を利用して次のように設定しています。

concat(
    '<a href="',
    item()?['webUrl'],
    '" target="_blank">',
    item()?['title'],
    '</a>'
)

また、ニュースの公開日を示す firstPublishedDate は UTC になっているので、日本の時間に変換しておきました。

convertFromUtc(
    item()?['firstPublishedDate'],
    'Tokyo Standard Time',
    'yyyy/MM/dd HH:mm'
)

最後にテーブルタグを整形したり見た目を整えるためのスタイルタグを作成したりするのですが、ここは以前作成した「Power Automate を使って月曜朝に先週のニュースをまとめ読みする」を参考に、同じ方法で行いました。

これらの情報をまとめて、メールを送信して完成です!

実行結果を確認する

これが実行されると、つぎのようなメールが届きます。

今回はテーブルを利用したあっさりデザインですが、目を引くようにもうちょっと見た目にこだわっても良いかもしれないですね。

さいごに

そんなわけで、SharePoint のニュース機能を利用して投稿された情報に気づいてもらうべく、ダイジェストメールを Power Automate で自動送信する方法を試してみました。毎週 1 回などで定期的に送っても良さそうですね。ただし、あまり頻繁に送りすぎると、結局はメールも見てもらえなくなりそうなので、そのさじ加減が難しそうです。

今回紹介した /_api/v2.1/getMultiSiteNews の API は、ドキュメントにも記載がなく、SharePoint 内部で利用されているもののため、突然の仕様変更もあるかもしれませんのでお気をつけください。