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

名前空間: microsoft.graph

重要

Microsoft Graph のバージョンの /beta API は変更される可能性があります。 実稼働アプリケーションでこれらの API を使用することは、サポートされていません。 API が v1.0 で使用できるかどうかを確認するには、 バージョン セレクターを使用します。

注意事項

この機能を baseTask または baseTaskList で使用する既存のアプリは、これらのリソースに基づいて構築された To Do API セットが 2022 年 5 月 31 日の時点で非推奨になっているので、更新する必要があります。 その API セットは、2022 年 8 月 31 日にデータを戻すことを停止します。 todoTask に基づいて構築された API セットを使用してください。

変更の要求された種類が Microsoft Graph の指定されたリソースに発生したときに変更通知を受信するため、リスナー アプリケーションに登録します。

変更通知のサブスクライブをサポートするリソースのリストについては、[アクセス許可] セクションの表を参照してください。

一部のリソースは、変更通知に暗号化されたリソース データを含めるオプションをサポートしています。 これらのリソースには、 chatMessage連絡先イベントメッセージonlineMeetings 、プレゼンスが含 まれます。 詳細については、「Microsoft Graph でのリソース データを含む変更通知の設定」および「Outlook リソースの変更通知」を参照してください。

アクセス許可

サブスクリプションを作成するには、リソースに対する読み取りアクセス許可が必要です。 たとえば、メッセージに関する変更通知を受信するには、アプリに Mail.Read アクセス許可が必要です。

要求されたリソースとアクセス許可の種類 (委任およびアプリケーション) によっては、以下の表で指定されているアクセス許可がこの API を呼び出すために最小限必要な特権となります。 より多くの特権アクセス許可を選択する前に 注意する ことを含め、詳細については、[アクセス許可] で次のアクセス許可を検索してください。

サポートされているリソース 委任 (職場または学校のアカウント) 委任 (個人用 Microsoft アカウント) アプリケーション
baseTask (非推奨) Tasks.ReadWrite Tasks.ReadWrite 非サポート
callRecord (/communications/callRecords) 非サポート 非サポート CallRecords.Read.All
チャネル (/teams/getAllChannels – 組織内のすべてのチャネル) 非サポート 非サポート Channel.ReadBasic.All、ChannelSettings.Read.All
チャネル (/teams/{id}/channels) Channel.ReadBasic.All、ChannelSettings.Read.All 非サポート Channel.ReadBasic.All、ChannelSettings.Read.All
チャット (/chats – 組織内のすべてのチャット) サポート対象外 非サポート Chat.ReadBasic.All、 Chat.Read.All、 Chat.ReadWrite.All
チャット (/chats/{id}) Chat.ReadBasic、 Chat.Read、 Chat.ReadWrite 非サポート ChatSettings.Read.Chat , ChatSettings.ReadWrite.Chat, Chat.Manage.Chat*, 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 -- all channel messages in organization) 非サポート 非サポート ChannelMessage.Read.All
chatMessage (/chats/{id}/messages) Chat.Read、Chat.ReadWrite 非サポート Chat.Read.All
chatMessage (/chats/getAllMessages -- all chat messages in organization) 非サポート 非サポート Chat.Read.All
チャット メッセージ (/users/{id}/chats/getAllMessages -- 特定のユーザーが参加しているすべてのチャットのチャット メッセージ) Chat.Read、Chat.ReadWrite 非サポート Chat.Read.All、Chat.ReadWrite.All
contact Contacts.Read Contacts.Read Contacts.Read
conversationMember (/chats/getAllMembers) サポート対象外 非サポート 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 (/teams/getAllMembers) 非サポート 非サポート TeamMember.Read.All, TeamMember.ReadWrite.All
conversationMember (/teams/{id}/members) TeamMember.Read.All 非サポート TeamMember.Read.All
conversationMember (/teams/{id}/channels/getAllMembers) サポート対象外 非サポート ChannelMember.Read.All
driveItem (ユーザーの個人用 OneDrive) サポート対象外 Files.ReadWrite サポート対象外
driveItem (OneDrive for Business) Files.ReadWrite.All サポート対象外 Files.ReadWrite.All
イベント Calendars.Read Calendars.Read Calendars.Read
グループ Group.Read.All サポート対象外 Group.Read.All
グループ会話 Group.Read.All 非サポート 非サポート
リスト Sites.ReadWrite.All サポート対象外 Sites.ReadWrite.All
メッセージ Mail.ReadBasic, Mail.Read Mail.ReadBasic, Mail.Read Mail.Read
オンライン会議 非サポート 非サポート OnlineMeetings.Read.All、OnlineMeetings.ReadWrite.All
プレゼンス Presence.Read.All 非サポート サポート対象外
プリンター 非サポート 非サポート Printer.Read.All, Printer.ReadWrite.All
printTaskDefinition 非サポート 非サポート PrintTaskDefinition.ReadWrite.All
セキュリティの警告 SecurityEvents.ReadWrite.All サポート対象外 SecurityEvents.ReadWrite.All
team (/teams – 組織内のすべてのチーム) 非サポート 非サポート Team.ReadBasic.All、TeamSettings.Read.All
team (/teams/{id}) Team.ReadBasic.All、TeamSettings.Read.All 非サポート Team.ReadBasic.All、TeamSettings.Read.All
todoTask Tasks.ReadWrite Tasks.ReadWrite 非サポート
user User.Read.All User.Read.All User.Read.All

前の表に記載されているように、アクセス許可を使用することをお勧めします。 セキュリティ上の制限により、読み取りアクセス許可のみが必要な場合、Microsoft Graph サブスクリプションは書き込みアクセス許可をサポートしません。

: * でマークされた権限は、リソース固有の同意を使用します。

chatMessage

chatMessage サブスクリプションは、リソース データを含めるように指定できます。 リソース データを含めるように指定した場合 (includeResourceDatatrue に設定)、暗号化が必要です。 そのようなサブスクリプションに encryptionCertificate が指定されていない場合、サブスクリプションの作成は失敗します。 アプリケーションのアクセス許可を使用して chatMessage サブスクリプションを作成する前に、アクセスを要求する必要がある場合があります。 詳細については、「Microsoft Teams の保護された API」を参照してください。

Prefer: include-unknown-enum-members 要求ヘッダーを使用して、chatMessagemessageTypeEvolvable 列挙型 で次の値を取得する必要があります。/teams/{id}/channels/{id}/messages および /chats/{id}/messages リソースの systemEventMessage

注意

/teams/getAllMessages/chats/getAllMessages/me/chats/getAllMessages、および /users/{id}/chats/getAllMessages には、ライセンスと支払いの要件 があります。 /teams/getAllMessages/chats/getAllMessages では、model=Amodel=B の両方のクエリ パラメーターがサポートされ、/me/chats/getAllMessages/users/{id}/chats/getAllMessages は、 model=B のみがサポートされています。 モデルが指定されていない場合は、評価モードが使用されます。

conversationMember

conversationMember サブスクリプションは、リソース データを含めるために指定できます。 リソース データを含めるように指定した場合 (includeResourceDatatrue に設定)、暗号化が必要です。 encryptionCertificateが指定されていない場合、サブスクリプションの作成は失敗します。

注意

/teams/getAllMembers/chats/getAllMembers には ライセンス要件と支払い要件 があります。 /teams/getAllMembers/chats/getAllMembers では model=Amodel=B の両方がサポートされています。 モデルが指定されていない場合は、評価モードが使用されます。

チーム、チャネル、チャット

チームチャネルチャット のサブスクリプションを指定して、リソース データを含めることができます。 リソース データを含めるように指定した場合 (includeResourceDatatrue に設定)、暗号化が必要です。 encryptionCertificateが指定されていない場合、サブスクリプションの作成は失敗します。

要求の例

要求本文の リソース プロパティで、model クエリ パラメーターを指定します。

POST https://graph.microsoft.com/beta/subscriptions
Content-type: application/json

{
   "changeType": "created",
   "notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
   "resource": "chats/getAllMessages?model=A",
   "expirationDateTime":"2016-11-20T18:23:45.9356913Z",
   "clientState": "secretClientValue",
   "latestSupportedTlsVersion": "v1_2"
}

driveItem

OneDrive アイテムのサブスクリプションには追加の制限が適用されます。 この制限は、サブスクリプションの作成および管理 (取得、更新、削除) に適用されます。

個人用 OneDrive では、そのドライブのルート フォルダーまたは任意のサブフォルダーにサブスクライブできます。 OneDrive for Business の場合、サブスクライブできるのはルート フォルダーのみです。 サブスクライブしたフォルダー、または階層内の任意のファイル、フォルダー、あるいは他の driveItem インスタンスに関する変更の要求された種類についての変更通知が送信されます。 個別のファイルなどのフォルダーではない、ドライブ インスタンスまたは driveItem インスタンスをサブスクライブすることはできません。

OneDrive for Business と SharePoint は、driveItem で発生するセキュリティ イベントのアプリケーション通知の送信をサポートします。 これらのイベントをサブスクライブするには、prefer:includesecuritywebhooks ヘッダーを要求に追加してサブスクリプションを作成します。 サブスクリプションが作成された後、アイテムに対するアクセス許可が変更されたときに通知を受け取ります。 このヘッダーは、SharePoint と OneDrive for Business には適用できますが、コンシューマー向け OneDrive アカウントには適用できません。

連絡先、イベント、メッセージ

Outlook の連絡先イベント、または メッセージ のリソースの変更をサブスクライブし、必要に応じて、通知に暗号化されたリソース データを含めるかどうかを POST 要求ペイロードで指定できます。

サブスクリプションの作成と管理 (取得、更新、および削除) には、リソースの読み取りスコープが必要です。 たとえば、メッセージに関する変更通知を受信するには、アプリに Mail.Read アクセス許可が必要です。 Outlook 変更通知は、委任されたアクセス許可スコープとアプリケーション アクセス許可スコープをサポートします。 次の制限がある点に注意してください。

  • 委任されたアクセス許可では、サインインしているユーザーのメールボックス内のフォルダーにあるアイテムのみをサブスクライブできます。 委任されたアクセス許可 Calendars.Read を使用して、別のユーザーのメールボックス内のイベントをサブスクライブすることなどはできません。

  • 共有または委任 フォルダーの Outlook 連絡先、イベント、メッセージの変更通知をサブスクライブするには、次のようにします。

    • 対応するアプリケーション アクセス許可を使用して、テナントの 任意 のユーザーのフォルダーまたはメールボックス内にあるアイテムの変更をサブスクライブします。
    • Outlook 共有アクセス許可 (Contacts.Read.Shared、Calendars.Read.Shared、Mail.Read.Shared、および対応する読み取り/書き込み) は使用しないでください。それらは、共有フォルダーまたは委任フォルダーにあるアイテムの変更通知のサブスクライブをサポート していない からです。

onlineMeetings、プレゼンス

onlineMeetingsプレゼンス のサブスクリプションでは、暗号化されたリソース データを含む通知用の サブスクリプションを作成するときに、encryptionCertificate プロパティと encryptionCertificateId プロパティが必要です。 詳細については、 リソース データを含める変更通知の設定に関するページを参照してください。 オンライン会議サブスクリプションの詳細については、「オンライン会議 の変更通知を取得する」を参照してください。

HTTP 要求

POST /subscriptions

要求ヘッダー

名前 説明
Authorization string ベアラー {token}。必須。

要求本文

要求本文で、subscription オブジェクトの JSON 表記を指定します。

応答

成功した場合、このメソッドは 201 Created 応答コードと応答本文の サブスクリプション オブジェクトを返します。

エラーがどのように返されるかの詳細については、「エラー応答」を参照してください。

要求

要求本文で、subscription オブジェクトの JSON 表記を指定します。 clientStatelatestSupportedTlsVersion フィールドは省略可能です。

この要求は、現在サインインしているユーザーが受信した新しいメールに関する変更通知のサブスクリプションを作成します。

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 フィールドはオプションです。

リソースの例

リソース プロパティの有効な値を次に示します。

リソースの種類
baseTask (非推奨) /me/tasks/lists/{Id}/tasks
通話レコード communications/callRecords
チャンネル /teams/getAllChannels, /teams/{id}/channels
チャット /chats, /chats/{id}
チャット メッセージ chats/{id}/messages, chats/getAllMessages, teams/{id}/channels/{id}/messages, teams/getAllMessages
連絡先 me/contacts
ConversationMember /chats/{id}/members, /chats/getAllMembers, /teams/{id}/members, /teams/getAllMembers, /teams/{id}/channels/getAllMembers
会話 groups('{id}')/conversations
ドライブ me/drive/root
イベント me/events
グループ groups
リスト sites/{site-id}/lists/{list-id}
メール me/mailfolders('inbox')/messages, me/messages
OnlineMeetings /communications/onlineMeetings/?$filter=JoinWebUrl eq '{JoinWebUrl}'
プレゼンス /communications/presences/{id} (単一ユーザー)、/communications/presences?$filter=id in ('{id}','{id}',…) (複数のユーザー)
プリンター print/printers/{id}/jobs
printTaskDefinition print/taskDefinitions/{id}/tasks
Teams /teams, /teams/{id}
ユーザー users
todoTask /me/todo/lists/{todoTaskListId}/tasks
セキュリティの警告 security/alerts?$filter=status eq 'NewAlert'

注: 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"
}

通知エンドポイントの検証

サブスクリプション通知エンドポイント ( notificationUrl プロパティで指定) は、「 ユーザー データの変更の通知を設定する」の説明に従って検証要求に応答できる必要があります。 検証に失敗した場合、サブスクリプションを作成する要求は「400 要求が正しくありません」というエラーを返します。