📩

Microsoft Graph の変更通知を Microsoft Flow で受け取る

に公開

はじめに

Microsoft Graph では Webhook により変更通知を受け取ることができます。アクセス許可の内容から、個人利用ではなく組織管理向けの機能と考えられますが、Microsoft Flow でも受信できるか確認しました。今回はユーザーの変更通知を受け取る方法を紹介します。

https://docs.microsoft.com/ja-jp/graph/api/resources/webhooks?WT.mc_id=M365-MVP-5002941

フローの作成

変更通知を受け取るフロー

変更通知を受け取るためのサブスクリプションを作成する際、URL の検証のために Microsoft Graph から送信される validationToken を返す必要があります。

Microsoft Graph sends a POST request to the notification URL:
POST https://{notificationUrl}?validationToken={TokenDefinedByMicrosoftGraph}
The client must provide a response with the following characteristics within 10 seconds:
A 200 (OK) status code.
The content type must be text/plain.
The body must include the validation token provided by Microsoft Graph.

このため、クエリ文字列に validationToken が含まれる場合と含まれない場合で処理を分岐します。validationToken が含まれる場合は、上記の仕様通りのレスポンスを返します。含まれない場合は実際の変更通知となるため、ID を受け取ってユーザー情報を取得し、その情報をメールで送信します。

サブスクリプションを作成するフロー

サブスクリプションのエンドポイントは /subscriptions ですが、組織全体で共通ではなく、ユーザーやアプリケーション単位となっています。後述するサブスクリプションの更新を自動化するには、アプリケーションのアクセス許可 (Client Credentials Grant) を利用する必要があるため、サブスクリプションの作成も同様に行います。

フローの作成方法は以下の記事も参考になります。

https://idea.tostring.jp/?p=3726

notificationUrl には変更通知を受け取るフローの URL を指定します。

サブスクリプションを更新するフロー

サブスクリプションには有効期限があり (最大 3 日間)、更新しない場合は自動的に削除されます。継続的に変更通知を受け取るには、スケジュールで 1 日 1 回フローを実行し、有効期限を更新する必要があります。

おわりに

Microsoft Flow で実現できるため、LogicApps でも同様に構築できます。機能面では LogicApps での実装が適している場合もあります。変更通知の受信部分でカスタム処理が必要な場合は、Azure Functions への変更もご検討ください。

Discussion