名前空間: microsoft.graph
重要
Microsoft Graph の /beta バージョンの API は変更される可能性があります。 実稼働アプリケーションでこれらの API を使用することは、サポートされていません。 v1.0 で API を使用できるかどうかを確認するには、Version セレクターを使用します。
変更の要求された種類が Microsoft Graph の指定されたリソースに発生したときに変更通知を受信するため、リスナー アプリケーションに登録します。
サブスクリプションを作成できるリソースとサブスクリプションの制限事項を特定するには、「 リソース データの変更に関する通知の設定: サポートされているリソース」を参照してください。
一部のリソースは、リッチ通知、つまりリソース データを含む通知をサポートします。 これらのリソースの詳細については、「 リソース データを含む変更通知のセットアップ: サポートされるリソース」を参照してください。
この API は、次の国内クラウド展開で使用できます。
| グローバル サービス | 米国政府機関 L4 | 米国政府機関 L5 (DOD) | 21Vianet が運営する中国 |
|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ |
アクセス許可
サブスクリプションを作成するには、リソースに対する読み取りアクセス許可が必要です。 たとえば、メッセージの変更通知を受け取るには、アプリに Mail.Read アクセス許可が必要です。
要求されたリソースとアクセス許可の種類 (委任およびアプリケーション) によっては、以下の表で指定されているアクセス許可がこの API を呼び出すために最小限必要な特権となります。 より多くの特権アクセス許可を選択する前に 注意する ことを含め、詳細については、[アクセス許可] で次のアクセス許可を検索してください。
注:
- セキュリティ上の制限により、Microsoft Graph サブスクリプションでは、読み取りアクセス許可のみが必要な場合、書き込みアクセス許可はサポートされません。
- 一部のリソースは複数のシナリオで変更通知をサポートしており、それぞれ異なるアクセス許可が必要な場合があります。 その場合は、リソース パスを使用してシナリオを区別します。
| サポートされているリソース | 委任 (職場または学校のアカウント) | 委任 (個人用 Microsoft アカウント) | アプリケーション |
|---|---|---|---|
aiInsights /copilot/users/{userId}/onlineMeetings/getAllAiInsights 特定のユーザーが参加している会議からの Copilot AI 分析情報。 |
OnlineMeetingAiInsight.Read.All | サポートされていません。 | OnlineMeetingAiInsight.Read.All |
aiInsights /copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights 特定の会議に関する Copilot AI 分析情報。 |
OnlineMeetingAiInsight.Read.All | サポートされていません。 | OnlineMeetingAiInsight.Read.All |
aiInteraction copilot/users/{userId}/interactionHistory/getAllEnterpriseInteractions 特定のユーザーが参加している Copilot AI 対話。 |
AiEnterpriseInteraction.Read | サポートされていません。 | AiEnterpriseInteraction.Read.All、AiEnterpriseInteraction.Read.User |
aiInteraction copilot/interactionHistory/getAllEnterpriseInteractions organization における Copilot AI の対話。 |
サポートされていません。 | サポートされていません。 | AiEnterpriseInteraction.Read.All |
| approvalItems | サポートされていません。 | サポートされていません。 | ApprovalSolution.ReadWrite.All |
| callRecord | サポートされていません。 | サポートされていません。 | CallRecords.Read.All |
callRecording communications/onlineMeetings/getAllRecordings すべてのレコーディングがテナントで利用可能になります。 |
サポートされていません。 | サポートされていません。 | OnlineMeetingRecording.Read.All |
callRecording communications/onlineMeetings/{onlineMeetingId}/recordings 任意の記録が特定の会議で利用可能になります。 |
OnlineMeetingRecording.Read.All | サポートされていません。 | OnlineMeetingRecording.Read.All |
callRecording users/{userId}/onlineMeetings/getAllRecordings 特定のユーザーによって開催された会議で利用可能になる通話録音。 |
OnlineMeetingRecording.Read.All | サポートされていません。 | OnlineMeetingRecording.Read.All |
callRecording appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings 特定の Teams アプリがインストールされている会議で利用可能になる通話録音。 |
サポートされていません。 | サポートされていません。 | OnlineMeetingRecording.Read.All、OnlineMeetingRecording.Read。Chat |
callTranscript communications/onlineMeetings/getAllTranscripts トランスクリプトはすべてテナントで使用可能になります。 |
サポートされていません。 | サポートされていません。 | OnlineMeetingTranscript.Read.All |
callTranscript communications/onlineMeetings/{onlineMeetingId}/transcripts 任意のトランスクリプトが特定の会議で使用可能になります。 |
OnlineMeetingTranscript.Read.All | サポートされていません。 | OnlineMeetingTranscript.Read.All |
callTranscript users/{userId}/onlineMeetings/getAllTranscripts 特定のユーザーによって開催された会議で利用可能になる通話記録。 |
OnlineMeetingTranscript.Read.All | サポートされていません。 | OnlineMeetingTranscript.Read.All |
callTranscript appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTranscripts 特定の Teams アプリがインストールされている会議で利用可能になる通話記録。 |
サポートされていません。 | サポートされていません。 | OnlineMeetingTranscript.Read.All、OnlineMeetingTranscript.Read。Chat |
channel /teams/getAllChannels all channels in a organization. |
サポートされていません。 | サポートされていません。 | Channel.ReadBasic.All、ChannelSettings.Read.All |
channel /teams/{id}/channels 特定のチーム内のすべてのチャネル organization. |
Channel.ReadBasic.All、ChannelSettings.Read.All | サポートされていません。 | Channel.ReadBasic.All、ChannelSettings.Read.All |
チャット /chats organization 内のすべてのチャット。 |
サポートされていません。 | サポートされていません。 | Chat.ReadBasic.All、 Chat.Read.All、 Chat.ReadWrite.All |
チャット /chats/{id} 特定のチャット。 |
Chat.ReadBasic、 Chat.Read、 Chat.ReadWrite | サポートされていません。 | ChatSettings.Read です。Chat、ChatSettings.ReadWrite。Chat, Chat.管理.Chat, Chat.ReadBasic.All、Chat.Read.All、Chat.ReadWrite.All |
チャット /appCatalogs/teamsApps/{id}/installedToChats 特定の Teams アプリがインストールされている organization 内のすべてのチャット。 |
サポートされていません。 | サポートされていません。 | Chat.ReadBasic.WhereInstalled, Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled |
チャット /users/{id}/chats 特定のユーザーが参加しているすべてのチャット。 |
Chat.ReadBasic、 Chat.Read、 Chat.ReadWrite | サポートされていません。 | Chat.ReadBasic.All、 Chat.Read.All、 Chat.ReadWrite.All |
chatMessage /teams/{id}/channels/{id}/messages 特定のチャネル内のすべてのメッセージと返信。 |
ChannelMessage.Read.All、Group.Read.All、Group.ReadWrite.All | サポートされていません。 | ChannelMessage.Read.Group、ChannelMessage.Read.All |
chatMessage /teams/getAllMessages organization 内のすべてのチャネル メッセージ。 |
サポートされていません。 | サポートされていません。 | ChannelMessage.Read.All |
chatMessage /chats/{id}/messages チャット内のすべてのメッセージ。 |
Chat.Read、Chat.ReadWrite | サポートされていません。 | Chat.Read.All |
chatMessage /chats/getAllMessages organization 内のすべてのチャット メッセージ。 |
サポートされていません。 | サポートされていません。 | Chat.Read.All |
chatMessage /users/{id}/chats/getAllMessages 特定のユーザーが参加しているすべてのチャットのChatメッセージ。 |
Chat.Read、Chat.ReadWrite | サポートされていません。 | Chat.Read.All、Chat.ReadWrite.All |
chatMessage /appCatalogs/teamsApps/{id}/installedToChats/getAllMessages 特定の Teams アプリがインストールされているorganization内のすべてのチャットに対してメッセージをChatします。 |
サポートされていません。 | サポートされていません。 | Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled |
| contact | Contacts.Read | Contacts.Read | Contacts.Read |
conversationMember /chats/getAllMembers organization 内のすべてのチャットのメンバー。 |
サポートされていません。 | サポートされていません。 | ChatMember.Read.All, ChatMember.ReadWrite.All, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All |
conversationMember /chats/{id}/members 特定のチャットのメンバー。 |
ChatMember.Read, ChatMember.ReadWrite, Chat.ReadBasic, Chat.Read, Chat.ReadWrite | サポートされていません。 | ChatMember.Read.Chat, Chat.Manage.Chat, ChatMember.Read.All, ChatMember.ReadWrite.All, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All |
conversationMember /appCatalogs/teamsApps/{id}/installedToChats/getAllMembers 特定の Teams アプリがインストールされているorganization内のすべてのチャットのメンバー Chat。 |
サポートされていません。 | サポートされていません。 | ChatMember.Read.WhereInstalled、ChatMember.ReadWrite.WhereInstalled、Chat。ReadBasic.WhereInstalled, Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled |
conversationMember /teams/getAllMembers organization 内のすべてのチームのメンバー。 |
サポートされていません。 | サポートされていません。 | TeamMember.Read.All, TeamMember.ReadWrite.All |
conversationMember /teams/{id}/members 特定のチームのメンバー。 |
TeamMember.Read.All | サポートされていません。 | TeamMember.Read.All |
conversationMember /teams/{id}/channels/getAllMembers 特定のチームのすべてのプライベート チャネルのメンバー。 |
サポートされていません。 | サポートされていません。 | ChannelMember.Read.All |
conversationMember /teams/getAllChannels/getAllMembers |
サポートされていません。 | サポートされていません。 | ChannelMember.Read.All |
| driveItem (ユーザーの個人用 OneDrive) | サポートされていません。 | Files.ReadWrite | サポートされていません。 |
| driveItem (職場または学校の OneDrive) | Files.ReadWrite.All | サポートされていません。 | Files.ReadWrite.All |
| イベント | Calendars.Read | Calendars.Read | Calendars.Read |
| グループ | Group.Read.All | サポートされていません。 | Group.Read.All |
| グループ会話 | Group.Read.All | サポートされていません。 | サポートされていません。 |
Microsoft Entra Health 監視アラート /reports/healthmonitoring/alerts |
HealthMonitoringAlertConfig.ReadWrite.All | サポートされていません。 | HealthMonitoringAlertConfig.ReadWrite.All |
| リスト | Sites.ReadWrite.All | サポートされていません。 | Sites.ReadWrite.All |
| メッセージ | Mail.ReadBasic, Mail.Read | Mail.ReadBasic, Mail.Read | Mail.Read |
offerShiftRequest /teams/{id}/schedule/offerShiftRequests チーム内のオファー シフト要求に対する変更。 |
Schedule.Read.All、Schedule.ReadWrite.All | サポートされていません。 | Schedule.Read.All、Schedule.ReadWrite.All |
| オンライン会議 | サポートされていません。 | サポートされていません。 | OnlineMeetings.Read.All、OnlineMeetings.ReadWrite.All |
openShiftChangeRequest /teams/{id}/schedule/openShiftChangeRequests チームの空きシフト要求に対する変更。 |
Schedule.Read.All、Schedule.ReadWrite.All | サポートされていません。 | Schedule.Read.All、Schedule.ReadWrite.All |
| プレゼンス | Presence.Read.All | サポートされていません。 | サポートされていません。 |
| printer | サポートされていません。 | サポートされていません。 | Printer.Read.All, Printer.ReadWrite.All |
| printTaskDefinition | サポートされていません。 | サポートされていません。 | PrintTaskDefinition.ReadWrite.All |
| セキュリティの警告 | SecurityEvents.ReadWrite.All | サポートされていません。 | SecurityEvents.ReadWrite.All |
シフト /teams/{id}/schedule/shifts チーム内のシフトに対する変更。 |
Schedule.Read.All、Schedule.ReadWrite.All | サポートされていません。 | Schedule.Read.All、Schedule.ReadWrite.All |
swapShiftsChangeRequest /teams/{id}/schedule/swapShiftsChangeRequests チーム内のスワップ シフト要求に対する変更。 |
Schedule.Read.All、Schedule.ReadWrite.All | サポートされていません。 | Schedule.Read.All、Schedule.ReadWrite.All |
team /teams All teams in a organization. |
サポートされていません。 | サポートされていません。 | Team.ReadBasic.All、TeamSettings.Read.All |
team /teams/{id} 特定のチーム。 |
Team.ReadBasic.All、TeamSettings.Read.All | サポートされていません。 | Team.ReadBasic.All、TeamSettings.Read.All |
timeOffRequest /teams/{id}/schedule/timeOffRequests チーム内の休暇要求に対する変更。 |
Schedule.Read.All、Schedule.ReadWrite.All | サポートされていません。 | Schedule.Read.All、Schedule.ReadWrite.All |
| todoTask | Tasks.ReadWrite | Tasks.ReadWrite | Tasks.ReadWrite.All |
| ユーザー | User.Read.All | User.Read.All | User.Read.All |
| virtualEventWebinar | VirtualEvent.Read | サポートされていません。 | VirtualEvent.Read.All |
| virtualEventTownhall | VirtualEvent.Read | サポートされていません。 | VirtualEvent.Read.All |
| baseTask (非推奨) | Tasks.ReadWrite | Tasks.ReadWrite | サポートされていません。 |
注:
次のアクセス許可では、 リソース固有の同意が使用されます。
- OnlineMeetingRecording.Read.Chat
- OnlineMeetingTranscript.Read.Chat
- ChatSettings.Read.Chat
- ChatSettings.ReadWrite.Chat
- Chat.Manage.Chat
- ChannelMessage.Read.Group
- ChatMember.Read.Chat
- AiEnterpriseInteraction.Read.User
chatMessage
リソース データを含めるように chatMessage サブスクリプションを指定することもできます (includeResourceData を true に設定)。 その場合、暗号化が必要であり、そのようなサブスクリプションに encryptionCertificate が指定されていないと、サブスクリプションの作成は失敗します。
Prefer: include-unknown-enum-members 要求ヘッダーを使用して、chatMessage messageTypeのエボルベブル列挙型で次の値を取得します。 /teams/{id}/channels/{id}/messages および /chats/{id}/messages リソースのsystemEventMessage。
conversationMember
リソース データを含めるように conversationMember サブスクリプションを指定することができます (includeResourceData を true に設定)。 その場合、暗号化が必要であり、そのようなサブスクリプションに encryptionCertificate が指定されていないと、サブスクリプションの作成は失敗します。
チーム、チャネル、チャット
チーム、 チャネル、 チャット のサブスクリプションにリソース データを含めるように指定できます (includeResourceData を true に設定)。 その場合、暗号化が必要であり、そのようなサブスクリプションに encryptionCertificate が指定されていないと、サブスクリプションの作成は失敗します。
notifyOnUserSpecificProperties クエリ文字列パラメーターは、特定のチャットまたはユーザー レベルで変更をサブスクライブするときに使用できます。 サブスクリプションの作成時にクエリ文字列パラメーター notifyOnUserSpecificProperties を true に設定すると、2 種類のペイロードがサブスクライバーに送信されます。 1 つのタイプにはユーザー固有のプロパティが含まれており、もう 1 つはユーザー固有のプロパティなしで送信されます。 詳細については、「 Microsoft Graph を使用してチャットの変更通知を取得する」を参照してください。
aiInsights
Copilot AI 分析情報のサブスクリプションには、次の Copilot サービス プランを含む有効な Copilot ライセンスが必要です:
- Microsoft 365 Copilot Chat: 3f30311c-6b1e-48a4-ab79-725b469da960
aiInteraction
Copilot AI 対話のサブスクリプションには、次の Copilot サービス プランを含む有効な Copilot ライセンスが必要です:
- Microsoft 365 Copilot Chat: 3f30311c-6b1e-48a4-ab79-725b469da960
特定のユーザーが参加している Copilot AI 対話を対象とするサブスクリプションの場合、リソース パス内のユーザーには、有効な状態で以前のサービス プランが割り当てられている必要があります。
テナント全体の Copilot AI 対話を対象とするサブスクリプションの場合、テナントには、以前のすべての Copilot サービス プランを含む有効なライセンスがプロビジョニングされている必要があります。
driveItem
OneDrive アイテムのサブスクリプションには、さらに多くの制限が適用されます。 この制限は、サブスクリプションの作成および管理 (取得、更新、削除) に適用されます。
個人用 OneDrive では、そのドライブのルート フォルダーまたは任意のサブフォルダーにサブスクライブできます。 職場または学校の OneDrive では、ルート フォルダーのみを購読できます。 サブスクライブしたフォルダー、またはその階層内のファイル、フォルダー、またはその他の driveItem インスタンスで要求された変更に対して、変更通知が送信されます。 個々のファイルなど、フォルダーではない drive または driveItem インスタンスをサブスクライブすることはできません。
職場または学校用 OneDrive と SharePoint は、 driveItem で発生したセキュリティ イベントのアプリケーション通知を送信するサポートをサポートします。 これらのイベントをサブスクライブするには、prefer:includesecuritywebhooks ヘッダーを要求に追加してサブスクリプションを作成します。 サブスクリプションが作成された後、アイテムに対するアクセス許可が変更されたときに通知を受け取ります。 このヘッダーは、職場または学校の SharePoint と OneDrive に適用されますが、コンシューマーの OneDrive アカウントには適用されません。
連絡先、イベント、メッセージ
Outlook の連絡先、 イベント、 またはメッセージ リソースの変更をサブスクライブし、必要に応じて、暗号化されたリソース データを通知に含めるかどうかを POST 要求のペイロードで指定できます。
サブスクリプションの作成と管理 (取得、更新、および削除) には、リソースの読み取りスコープが必要です。 たとえば、メッセージに関する変更通知を受信するには、アプリに Mail.Read アクセス許可が必要です。 Outlook 変更通知は、委任されたアクセス許可スコープとアプリケーション アクセス許可スコープをサポートします。 次の制限がある点に注意してください。
委任されたアクセス許可では、サインインしているユーザーのメールボックス内のフォルダーにあるアイテムのみをサブスクライブできます。 たとえば、委任されたアクセス許可 Calendars.Read を使用して、別のユーザーのメールボックス内のイベントをサブスクライブすることはできません。
共有または委任フォルダーの Outlook 連絡先、イベント、メッセージの変更通知をサブスクライブするには、次のようにします。
- 対応するアプリケーション アクセス許可を使用して、テナントの任意のユーザーのフォルダーまたはメールボックス内にあるアイテムの変更をサブスクライブします。
- Outlook の共有アクセス許可 (Contacts.Read.Shared、Calendars.Read.Shared、Mail.Read.Shared、およびそれに相当する読み取り/書き込みアクセス許可) は、共有フォルダーまたは委任フォルダー内のアイテムの変更通知のサブスクライブをサポートし ていない ため、使用しないでください。
onlineMeetings, プレゼンス
onlineMeetings とプレゼンスのサブスクリプションでは、暗号化されたリソース データを含む通知のサブスクリプションを作成するときに、encryptionCertificate プロパティと encryptionCertificateId プロパティが必要です。 詳細については、「 リソース データを含めるように変更通知を設定する」を参照してください。 オンライン会議のサブスクリプションの詳細については、「 オンライン会議の変更通知を受け取る」を参照してください。
virtualEventWebinar と virtualEventTownhall
仮想イベントのサブスクリプションは、基本的な通知のみをサポートし、仮想イベントの少数のエンティティに制限されます。 サポートされているサブスクリプションの種類の詳細については、「 Microsoft Teams 仮想イベント更新プログラムの変更通知の取得」を参照してください。
HTTP 要求
POST /subscriptions
要求ヘッダー
| 名前 | 型 | 説明 |
|---|---|---|
| Authorization | string | ベアラー {token}。 必須です。 認証と認可についての詳細をご覧ください。 |
要求本文
要求本文で、subscription オブジェクトの JSON 表記を指定します。
応答
成功した場合、このメソッドは 201 Created 応答コードと応答本文の サブスクリプション オブジェクトを返します。
エラーがどのように返されるかの詳細については、「エラー応答」を参照してください。
例
要求
要求本文で、subscription オブジェクトの JSON 表記を指定します。
clientState と latestSupportedTlsVersion フィールドは省略可能です。
この要求は、現在サインインしているユーザーが受信した新しいメールに関する変更通知のサブスクリプションを作成します。
POST https://graph.microsoft.com/beta/subscriptions
Content-type: application/json
{
"changeType": "created",
"notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
"resource": "me/mailFolders('Inbox')/messages",
"expirationDateTime":"2016-11-20T18:23:45.9356913Z",
"clientState": "secretClientValue",
"latestSupportedTlsVersion": "v1_2"
}
要求本文で、subscription オブジェクトの JSON 表記を指定します。
clientState と latestSupportedTlsVersion フィールドは省略可能です。
サブスクリプションの重複動作
重複するサブスクリプションは許可されません。 サブスクリプション要求に、既存のサブスクリプションに含まれる同じ changeType および リソース の値が含まれている場合、要求は失敗し、HTTP エラー コードが 409 Conflictされ、エラー メッセージが Subscription Id <> already exists for the requested combinationされます。
リソースの例
リソース プロパティの有効な値を次に示します。
| リソースの種類 | 例 |
|---|---|
| approvalItems | solution/approval/approvalItems |
| callRecord | communications/callRecords |
| callRecording |
communications/onlineMeetings/getAllRecordings, communications/onlineMeetings/{onlineMeetingId}/recordings, users/{userId}/onlineMeetings/getAllRecordings, appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings |
| callTranscript |
communications/onlineMeetings/getAllTranscripts, communications/onlineMeetings/{onlineMeetingId}/transcripts, users/{userId}/onlineMeetings/getAllTranscripts, appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTranscripts |
| channel |
/teams/getAllChannels, /teams/{id}/channels |
| チャット |
/chats, /chats/{id} |
| chatMessage |
chats/{id}/messages, chats/getAllMessages, teams/{id}/channels/{id}/messages, teams/getAllMessages |
| contact | me/contacts |
| conversationMember |
/chats/{id}/members, /chats/getAllMembers, /teams/{id}/members, /teams/getAllMembers, /teams/{id}/channels/getAllMembers |
| driveItem | me/drive/root |
| イベント | me/events |
| グループ | groups |
| グループ会話 | groups('{id}')/conversations |
| 正常性監視アラート | reports/healthmonitoring/alerts |
| リスト | sites/{site-id}/lists/{list-id} |
| message |
me/mailfolders('inbox')/messages, me/messages |
| オンライン会議 | /communications/onlineMeetings/?$filter=JoinWebUrl eq '{JoinWebUrl}' |
| プレゼンス |
/communications/presences/{id} (単一ユーザー)、/communications/presences?$filter=id in ('{id}','{id}',…) (複数のユーザー) |
| printer | print/printers/{id}/jobs |
| printTaskDefinition | print/taskDefinitions/{id}/tasks |
| team |
/teams, /teams/{id} |
| user | users |
| todoTask | /me/todo/lists/{todoTaskListId}/tasks |
| セキュリティの警告 | security/alerts?$filter=status eq 'NewAlert' |
| baseTask (非推奨) | /me/tasks/lists/{Id}/tasks |
注:
me で始まる任意のパスは、meではなく users/{id} と一緒に使用して、現在のユーザーではなく特定のユーザーをターゲットにすることもできます。
応答
次の例は応答を示しています。
注: ここに示す応答オブジェクトは、読みやすさのために短縮されている場合があります。
HTTP/1.1 201 Created
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/beta/$metadata#subscriptions/$entity",
"id": "7f105c7d-2dc5-4530-97cd-4e7ae6534c07",
"resource": "me/mailFolders('Inbox')/messages",
"applicationId": "24d3b144-21ae-4080-943f-7067b395b913",
"changeType": "created",
"clientState": "secretClientValue",
"notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
"expirationDateTime": "2016-11-20T18:23:45.9356913Z",
"creatorId": "8ee44408-0679-472c-bc2a-692812af3437",
"latestSupportedTlsVersion": "v1_2",
"notificationContentType": "application/json"
}
例 2: Web プッシュ エンドポイントを対象とするサブスクリプションを作成する
次の例では、暗号化された変更通知をブラウザーネイティブの Web プッシュ エンドポイント ( web.push.apple.com、 fcm.googleapis.com、 updates.push.services.mozilla.com など) に配信するサブスクリプションを作成します。
このサブスクリプションを作成する前に、ブラウザー ベースのアプリケーションで次の条件を満たしている必要があります。
- サブスクリプション コレクションで getVapidPublicKey 関数を呼び出して、Microsoft Graph の VAPID 公開キー (RFC 8292) を取得します。
-
PushManager.subscribe({ applicationServerKey: <vapidPublicKey> })を呼び出して、ブラウザーのプッシュ サービスに登録します。 ブラウザーは、endpoint、p256dh、authの値を含むPushSubscriptionを返します。
次に、アプリケーションは、 notificationUrl を最小プッシュ サービス エンドポイント URL に設定し、 vapidPublicKey、 webPushEncryptionP256dhPublicKey、および webPushEncryptionSecret プロパティをブラウザによって返される値に設定してサブスクリプションを作成します。 作成後、Microsoft Graph は、格納されているキーを使用して RFC 8291 に従って各通知を暗号化し、プッシュ サービスに投稿する前に VAPID で要求に署名します。
要求
POST https://graph.microsoft.com/beta/subscriptions
Content-type: application/json
{
"changeType": "created,updated",
"notificationUrl": "https://web.push.apple.com/QKmFUwSBFK8g7iY4t1...",
"resource": "me/mailFolders('Inbox')/messages",
"expirationDateTime": "2026-12-31T11:00:00.0000000Z",
"clientState": "secretClientValue",
"vapidPublicKey": "BNKm...base64url-encoded-server-vapid-public-key...",
"webPushEncryptionP256dhPublicKey": "BNcR...base64url-encoded-client-public-key...",
"webPushEncryptionSecret": "tBHI...base64url-encoded-auth-secret..."
}
メモ:webPushEncryptionSecret プロパティは書き込み専用です。
GET応答で返されることはありません (nullとして返されます)。 値はシークレットとして扱います。
通知エンドポイントの検証
( notificationUrl プロパティで指定される) サブスクリプション通知エンドポイントは、「 ユーザー データの変更に関する通知の設定」で説明されているように検証要求に応答できる必要があります。 検証に失敗した場合、サブスクリプションを作成する要求は「400 要求が正しくありません」というエラーを返します。