Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Namespace: microsoft.graph
Importante
As APIs na versão /beta no Microsoft Graph estão sujeitas a alterações. Não há suporte para o uso dessas APIs em aplicativos de produção. Para determinar se uma API está disponível na v1.0, use o seletor Versão.
Inscreve um aplicativo de ouvinte para receber notificações de alterações quando o tipo de alteração solicitado ocorrer no recurso especificado no Microsoft Graph.
Para identificar os recursos para os quais você pode criar assinaturas e as limitações de assinaturas, consulte Configurar notificações de alterações nos dados do recurso: Recursos com suporte.
Alguns recursos dão suporte a notificações avançadas, ou seja, notificações que incluem dados de recursos. Para obter mais informações sobre esses recursos, consulte Configurar notificações de alteração que incluem dados de recursos: Recursos com suporte.
Essa API está disponível nas seguintes implantações de nuvem nacional.
| Serviço global | Governo dos EUA L4 | US Government L5 (DOD) | China operada pela 21Vianet |
|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ |
Permissões
A criação de uma assinatura requer permissão de leitura para o recurso. Por exemplo, para receber notificações de alteração em mensagens, seu aplicativo precisa das permissões Mail.Read.
Dependendo do recurso e do tipo de permissão (delegado ou aplicativo) solicitado, a permissão especificada na tabela a seguir é a menos privilegiada necessária para fazer chamadas a esta API. Para saber mais, incluindo ter cuidado antes de escolher as permissões, pesquise as permissões a seguir em Permissões.
Observação
- Devido a restrições de segurança, as assinaturas do Microsoft Graph não dão suporte a permissões de acesso de gravação quando apenas as permissões de acesso de leitura são necessárias.
- Alguns recursos são compatíveis com notificações de alteração em vários cenários, cada um dos quais pode exigir permissões diferentes. Nesses casos, use o caminho do recurso para diferenciar os cenários.
| Recurso com suporte | Delegada (conta corporativa ou de estudante) | Delegada (conta pessoal da Microsoft) | Application |
|---|---|---|---|
aiInsights /copilot/users/{userId}/onlineMeetings/getAllAiInsights Insights de IA do Copilot de reuniões das quais um determinado usuário faz parte. |
OnlineMeetingAiInsight.Read.All | Sem suporte. | OnlineMeetingAiInsight.Read.All |
aiInsights /copilot/users/{userId}/onlineMeetings/{onlineMeetingId}/aiInsights Insights de IA do Copilot para uma reunião específica. |
OnlineMeetingAiInsight.Read.All | Sem suporte. | OnlineMeetingAiInsight.Read.All |
aiInteraction copilot/users/{userId}/interactionHistory/getAllEnterpriseInteractions Interações de IA do Copilot das quais um determinado usuário faz parte. |
AiEnterpriseInteraction.Read | Sem suporte. | AiEnterpriseInteraction.Read.All, AiEnterpriseInteraction.Read.User |
aiInteraction copilot/interactionHistory/getAllEnterpriseInteractions Interações de IA do Copilot em uma organização. |
Sem suporte. | Sem suporte. | AiEnterpriseInteraction.Read.All |
| approvalItems | Sem suporte. | Sem suporte. | ApprovalSolution.ReadWrite.All |
| callRecord | Sem suporte. | Sem suporte. | CallRecords.Read.All |
callRecording communications/onlineMeetings/getAllRecordings Qualquer gravação fica disponível no locatário. |
Sem suporte. | Sem suporte. | OnlineMeetingRecording.Read.All |
callRecording communications/onlineMeetings/{onlineMeetingId}/recordings Qualquer gravação fica disponível para uma reunião específica. |
OnlineMeetingRecording.Read.All | Sem suporte. | OnlineMeetingRecording.Read.All |
callRecording users/{userId}/onlineMeetings/getAllRecordings Uma gravação de chamada que se torna disponível em uma reunião organizada por um usuário específico. |
OnlineMeetingRecording.Read.All | Sem suporte. | OnlineMeetingRecording.Read.All |
callRecording appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllRecordings Uma gravação de chamada que se torna disponível em uma reunião em que um determinado aplicativo do Teams está instalado. |
Sem suporte. | Sem suporte. | OnlineMeetingRecording.Read.All, OnlineMeetingRecording.Read. Chat |
callTranscript communications/onlineMeetings/getAllTranscripts Qualquer transcrição fica disponível no locatário. |
Sem suporte. | Sem suporte. | OnlineMeetingTranscript.Read.All |
callTranscript communications/onlineMeetings/{onlineMeetingId}/transcripts Qualquer transcrição fica disponível para uma reunião específica. |
OnlineMeetingTranscript.Read.All | Sem suporte. | OnlineMeetingTranscript.Read.All |
callTranscript users/{userId}/onlineMeetings/getAllTranscripts Uma transcrição de chamada que fica disponível em uma reunião organizada por um usuário específico. |
OnlineMeetingTranscript.Read.All | Sem suporte. | OnlineMeetingTranscript.Read.All |
callTranscript appCatalogs/teamsApps/{id}/installedToOnlineMeetings/getAllTranscripts Uma transcrição de chamada que se torna disponível em uma reunião em que um determinado aplicativo do Teams está instalado. |
Sem suporte. | Sem suporte. | OnlineMeetingTranscript.Read.All, OnlineMeetingTranscript.Read. Chat |
canal /teams/getAllChannels Todos os canais em uma organização. |
Sem suporte. | Sem suporte. | Channel.ReadBasic.All, ChannelSettings.Read.All |
canal /teams/{id}/channels Todos os canais em uma equipe específica em uma organização. |
Channel.ReadBasic.All, ChannelSettings.Read.All | Sem suporte. | Channel.ReadBasic.All, ChannelSettings.Read.All |
chat /chats Todos os chats em uma organização. |
Sem suporte. | Sem suporte. | Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All |
chat /chats/{id} Um chat específico. |
Chat.ReadBasic, Chat.Read, Chat.ReadWrite | Sem suporte. | ChatSettings.Read. Chat, ChatSettings.ReadWrite. Chat, Chat. Gerar. Chat, Chat. ReadBasic.All, Chat. Read.All, Chat. ReadWrite.All |
chat /appCatalogs/teamsApps/{id}/installedToChats Todos os chats em uma organização onde um determinado aplicativo do Teams está instalado. |
Sem suporte. | Sem suporte. | Chat. ReadBasic.WhereInstalled, Chat. Read.WhereInstalled, Chat. ReadWrite.WhereInstalled |
chat /users/{id}/chats Todos os chats dos quais um determinado usuário faz parte. |
Chat.ReadBasic, Chat.Read, Chat.ReadWrite | Sem suporte. | Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All |
chatMessage /teams/{id}/channels/{id}/messages Todas as mensagens e respostas em um canal específico. |
ChannelMessage.Read.All, Group.Read.All, Group.ReadWrite.All | Sem suporte. | ChannelMessage.Read.Group, ChannelMessage.Read.All |
chatMessage /teams/getAllMessages Todas as mensagens de canal na organização. |
Sem suporte. | Sem suporte. | ChannelMessage.Read.All |
chatMessage /chats/{id}/messages Todas as mensagens em um chat. |
Chat.Read, Chat.ReadWrite | Sem suporte. | Chat.Read.All |
chatMessage /chats/getAllMessages Todas as mensagens de chat em uma organização. |
Sem suporte. | Sem suporte. | Chat.Read.All |
chatMessage /users/{id}/chats/getAllMessages Mensagens de Chat para todos os chats dos quais um determinado usuário faz parte. |
Chat.Read, Chat.ReadWrite | Sem suporte. | Chat.Read.All, Chat.ReadWrite.All |
chatMessage /appCatalogs/teamsApps/{id}/installedToChats/getAllMessages Mensagens de Chat para todos os chats em uma organização onde um determinado aplicativo do Teams está instalado. |
Sem suporte. | Sem suporte. | Chat. Read.WhereInstalled, Chat. ReadWrite.WhereInstalled |
| contato | Contacts.Read | Contacts.Read | Contacts.Read |
conversationMember /chats/getAllMembers Membros de todos os chats em uma organização. |
Sem suporte. | Sem suporte. | ChatMember.Read.All, ChatMember.ReadWrite.All, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All |
conversationMember /chats/{id}/members Membros de um chat específico. |
ChatMember.Read, ChatMember.ReadWrite, Chat.ReadBasic, Chat.Read, Chat.ReadWrite | Sem suporte. | 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 Membros do Chat para todos os chats em uma organização onde um determinado aplicativo do Teams está instalado. |
Sem suporte. | Sem suporte. | ChatMember.Read.WhereInstalled, ChatMember.ReadWrite.WhereInstalled, Chat. ReadBasic.WhereInstalled, Chat. Read.WhereInstalled, Chat. ReadWrite.WhereInstalled |
conversationMember /teams/getAllMembers Membros em todas as equipes de uma organização. |
Sem suporte. | Sem suporte. | TeamMember.Read.All, TeamMember.ReadWrite.All |
conversationMember /teams/{id}/members Membros de uma equipe específica. |
TeamMember.Read.All | Sem suporte. | TeamMember.Read.All |
conversationMember /teams/{id}/channels/getAllMembers Membros em todos os canais privados de uma equipe específica. |
Sem suporte. | Sem suporte. | ChannelMember.Read.All |
conversationMember /teams/getAllChannels/getAllMembers |
Sem suporte. | Sem suporte. | ChannelMember.Read.All |
| driveItem (OneDrive pessoal de um usuário) | Sem suporte. | Files.ReadWrite | Sem suporte. |
| driveItem (OneDrive corporativo ou de estudante) | Files.ReadWrite.All | Sem suporte. | Files.ReadWrite.All |
| evento | Calendars.Read | Calendars.Read | Calendars.Read |
| grupo | Group.Read.All | Sem suporte. | Group.Read.All |
| conversa em grupo | Group.Read.All | Sem suporte. | Sem suporte. |
Alerta de monitoramento do Microsoft Entra Health /reports/healthmonitoring/alerts |
HealthMonitoringAlertConfig.ReadWrite.All | Sem suporte. | HealthMonitoringAlertConfig.ReadWrite.All |
| list | Sites.ReadWrite.All | Sem suporte. | Sites.ReadWrite.All |
| message | Mail.ReadBasic, Mail.Read | Mail.ReadBasic, Mail.Read | Mail.Read |
offerShiftRequest /teams/{id}/schedule/offerShiftRequests Alterações em qualquer solicitação de turno de oferta em uma equipe. |
Schedule.Read.All, Schedule.ReadWrite.All | Sem suporte. | Schedule.Read.All, Schedule.ReadWrite.All |
| onlineMeeting | Sem suporte. | Sem suporte. | OnlineMeetings.Read.All, OnlineMeetings.ReadWrite.All |
openShiftChangeRequest /teams/{id}/schedule/openShiftChangeRequests Alterações em qualquer solicitação de turno aberto em uma equipe. |
Schedule.Read.All, Schedule.ReadWrite.All | Sem suporte. | Schedule.Read.All, Schedule.ReadWrite.All |
| presence | Presence.Read.All | Sem suporte. | Sem suporte. |
| impressora | Sem suporte. | Sem suporte. | Printer.Read.All, Printer.ReadWrite.All |
| printTaskDefinition | Sem suporte. | Sem suporte. | PrintTaskDefinition.ReadWrite.All |
| alerta de segurança | SecurityEvents.ReadWrite.All | Sem suporte. | SecurityEvents.ReadWrite.All |
shift /teams/{id}/schedule/shifts Mudanças em qualquer turno em uma equipe. |
Schedule.Read.All, Schedule.ReadWrite.All | Sem suporte. | Schedule.Read.All, Schedule.ReadWrite.All |
swapShiftsChangeRequest /teams/{id}/schedule/swapShiftsChangeRequests Alterações em qualquer solicitação de turno de troca em uma equipe. |
Schedule.Read.All, Schedule.ReadWrite.All | Sem suporte. | Schedule.Read.All, Schedule.ReadWrite.All |
team /teams Todas as equipes em uma organização. |
Sem suporte. | Sem suporte. | Team.ReadBasic.All, TeamSettings.Read.All |
team /teams/{id} Uma equipe específica. |
Team.ReadBasic.All, TeamSettings.Read.All | Sem suporte. | Team.ReadBasic.All, TeamSettings.Read.All |
timeOffRequest /teams/{id}/schedule/timeOffRequests Alterações em qualquer solicitação de folga em uma equipe. |
Schedule.Read.All, Schedule.ReadWrite.All | Sem suporte. | Schedule.Read.All, Schedule.ReadWrite.All |
| todoTask | Tasks.ReadWrite | Tasks.ReadWrite | Tasks.ReadWrite.All |
| user | User.Read.All | User.Read.All | User.Read.All |
| virtualEventWebinar | VirtualEvent.Read | Sem suporte. | VirtualEvent.Read.All |
| virtualEventTownhall | VirtualEvent.Read | Sem suporte. | VirtualEvent.Read.All |
| baseTask (preterido) | Tasks.ReadWrite | Tasks.ReadWrite | Sem suporte. |
Observação
As seguintes permissões usam o consentimento específico do recurso:
- 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
As assinaturas chatMessage podem ser especificadas para incluir dados de recursos (includeResourceData definido como true). Nesse caso, a criptografia é necessária e a criação da assinatura falhará se um encryptionCertificate não for especificado para essas assinaturas.
Use o cabeçalho da Prefer: include-unknown-enum-members solicitação para obter os seguintes valores em chatMessage, messageType, enumeração evolutiva: systemEventMessage for /teams/{id}/channels/{id}/messages e /chats/{id}/messages resource.
conversationMember
As assinaturas conversationMember podem ser especificadas para incluir dados de recursos (includeResourceData definido como true). Nesse caso, a criptografia é necessária e a criação da assinatura falhará se um encryptionCertificate não for especificado para essas assinaturas.
Equipe, canal e chat
As assinaturas de equipe, canal e chat podem ser especificadas para incluir dados de recursos (includeResourceData definido como true). Nesse caso, a criptografia é necessária e a criação da assinatura falhará se um encryptionCertificate não for especificado para essas assinaturas.
Você pode usar o parâmetro da cadeia de caracteres de consulta notifyOnUserSpecificProperties ao assinar alterações em um chat específico ou no nível do usuário. Quando você define o parâmetro de cadeia de caracteres de consulta notifyOnUserSpecificProperties durante true a criação da assinatura, dois tipos de conteúdo são enviados ao assinante. Um tipo contém propriedades específicas do usuário e o outro é enviado sem elas. Para obter mais informações, consulte Obter notificações de alteração para chats usando o Microsoft Graph.
aiInsights
As assinaturas no Copilot AI Insights exigem uma licença válida do Copilot que inclua o seguinte plano de serviço do Copilot:
- Microsoft 365 Copilot Chat: 3f30311c-6b1e-48a4-ab79-725b469da960
aiInteraction
As assinaturas nas interações de IA do Copilot exigem uma licença válida do Copilot que inclua o seguinte plano de serviço do Copilot:
- Microsoft 365 Copilot Chat: 3f30311c-6b1e-48a4-ab79-725b469da960
Para assinaturas direcionadas a interações de IA do Copilot das quais um determinado usuário faz parte, o usuário no caminho do recurso deve ter os planos de serviço anteriores atribuídos a ele em um estado válido.
Para assinaturas que direcionam interações de IA do Copilot para todo o locatário, o locatário deve ter licenças válidas provisionadas que incluam todos os planos de serviço anteriores do Copilot.
driveItem
Mais limitações se aplicam a assinaturas em itens do OneDrive. As limitações se aplicam para criação e gerenciamento de assinaturas (receber, atualizar e excluir assinaturas).
No OneDrive pessoal, você pode se inscrever em qualquer pasta raiz ou qualquer subpasta da unidade. No OneDrive corporativo ou de estudante, você pode assinar apenas a pasta raiz. As notificações de alteração são enviadas para as alterações solicitadas na pasta assinada ou em qualquer arquivo, pasta ou outras instâncias de driveItem em sua hierarquia. Você não pode se inscrever em instâncias de drive ou driveItem que não sejam pastas, como arquivos individuais.
OneDrive para trabalho ou escola e suporte do SharePoint enviando ao seu aplicativo notificações de eventos de segurança que ocorrem em um driveItem. Para se inscrever nestes eventos, adicionar o cabeçalho prefer:includesecuritywebhooks a sua solicitação para criar uma assinatura. Após a criação da assinatura, você receberá notificações quando as permissões sobre uma mudança de item forem alteradas. Esse cabeçalho se aplica ao SharePoint e ao OneDrive corporativo ou de estudante, mas não a contas de consumidor do OneDrive.
contato, evento e mensagem
Você pode assinar as alterações nos recursos de contato, evento ou mensagem do Outlook e, opcionalmente, especificar no conteúdo da solicitação POST se deseja incluir dados de recursos criptografados nas notificações.
Criar e gerenciar (obter, atualizar e excluir) uma assinatura requer um escopo de leitura para o recurso. Por exemplo, para receber notificações de alteração nas mensagens, seu aplicativo precisa da permissão Mail.Read. As notificações de alteração do Outlook dão suporte a escopos de permissão de aplicativo e delegados. Observe as seguintes limitações:
A permissão delegada dá suporte a inscrição de itens em pastas apenas na caixa de correio do usuário conectado. Por exemplo, você não pode usar a permissão delegada Calendars.Read para assinar eventos na caixa de correio de outro usuário.
Se inscrever para alterar as notificações de contatos, eventos no Outlook ou mensagens em pastascompartilhadas ou delegadas:
- Usar a permissão de aplicativos correspondentes para inscrever as alterações dos itens em uma pasta ou uma caixa de correio de qualquer usuários no locatário.
- Não use as permissões de compartilhamento do Outlook (Contacts.Read.Shared, Calendars.Read.Shared, Mail.Read.Shared e suas contrapartes de leitura/gravação), pois elas não dão suporte à assinatura para notificações de alteração em itens em pastas compartilhadas ou delegadas.
onlineMeetings, presença
As assinaturas em onlineMeetingse presença exigem a propriedade encryptionCertificate e encryptionCertificateId ao criar uma assinatura para notificações com dados de recursos criptografados. Para obter mais informações, consulte Configuração de notificações de alteração para incluir dados de recursos. Para obter detalhes sobre assinaturas de reuniões online, consulte Obter notificações de alteração para reuniões online.
virtualEventWebinar e virtualEventTownhall
As assinaturas em eventos virtuais dão suporte apenas a notificações básicas e estão limitadas a algumas entidades de um evento virtual. Para obter mais informações sobre os tipos de assinatura com suporte, consulte Obter notificações de alteração para atualizações de eventos virtuais do Microsoft Teams.
Solicitação HTTP
POST /subscriptions
Cabeçalhos de solicitação
| Nome | Tipo | Descrição |
|---|---|---|
| Autorização | string | {token} de portador. Obrigatório. Saiba mais sobre autenticação e autorização. |
Corpo da solicitação
No corpo da solicitação, forneça uma representação JSON do objeto de assinatura.
Resposta
Se for bem-sucedido, esse método retornará um código de 201 Created resposta e um objeto de assinatura no corpo da resposta.
Para detalhes sobre como os erros são retornados, confira Respostas de erro.
Exemplo
Solicitação
No corpo da solicitação, forneça uma representação JSON do objeto subscription.
Os campos clientState e latestSupportedTlsVersion são opcionais.
Essa solicitação cria uma assinatura para notificações de alteração sobre novos emails recebidos pelo usuário conectado no momento.
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"
}
No corpo da solicitação, forneça uma representação JSON do objeto subscription.
Os campos clientState e latestSupportedTlsVersion são opcionais.
Comportamento de assinatura duplicada
Assinaturas duplicadas não são permitidas. Quando uma solicitação de assinatura contém os mesmos valores para changeType e resource que uma assinatura existente contém, a solicitação falha com um código 409 Conflictde erro HTTP e a mensagem Subscription Id <> already exists for the requested combinationde erro .
Exemplos de recursos
A seguir estão os valores válidos para a propriedade de recurso.
| Tipo de recurso | Exemplos |
|---|---|
| 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 |
| canal |
/teams/getAllChannels, /teams/{id}/channels |
| chat |
/chats, /chats/{id} |
| chatMessage |
chats/{id}/messages, chats/getAllMessages, teams/{id}/channels/{id}/messages, teams/getAllMessages |
| contato | me/contacts |
| conversationMember |
/chats/{id}/members, /chats/getAllMembers, /teams/{id}/members, /teams/getAllMembers, /teams/{id}/channels/getAllMembers |
| driveItem | me/drive/root |
| event | me/events |
| group | groups |
| conversa em grupo | groups('{id}')/conversations |
| alerta de monitoramento de integridade | reports/healthmonitoring/alerts |
| list | sites/{site-id}/lists/{list-id} |
| message |
me/mailfolders('inbox')/messages, me/messages |
| onlineMeeting | /communications/onlineMeetings/?$filter=JoinWebUrl eq '{JoinWebUrl}' |
| presença |
/communications/presences/{id} (usuário único), /communications/presences?$filter=id in ('{id}','{id}',…) (vários usuários) |
| impressora | print/printers/{id}/jobs |
| printTaskDefinition | print/taskDefinitions/{id}/tasks |
| equipe |
/teams, /teams/{id} |
| user | users |
| todoTask | /me/todo/lists/{todoTaskListId}/tasks |
| alerta de segurança | security/alerts?$filter=status eq 'NewAlert' |
| baseTask (preterido) | /me/tasks/lists/{Id}/tasks |
Observação
Qualquer caminho que comece com me também pode ser usado com users/{id} em vez de para direcionar um usuário específico em vez do me usuário atual.
Resposta
O exemplo a seguir mostra a resposta.
Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.
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"
}
Exemplo 2: criar uma assinatura direcionada a um ponto de extremidade de Push da Web
O exemplo a seguir cria uma assinatura que fornece notificações de alteração criptografadas para um ponto de extremidade de Push da Web nativo do navegador (como web.push.apple.com, fcm.googleapis.com, ou updates.push.services.mozilla.com).
Antes de criar essa assinatura, o aplicativo baseado em navegador deve:
- Chame a função getVapidPublicKey na coleção de assinaturas para obter a chave pública VAPID do Microsoft Graph (RFC 8292).
- Ligue
PushManager.subscribe({ applicationServerKey: <vapidPublicKey> })para se registrar no serviço de push do navegador. O navegador retorna umPushSubscriptioncontendoendpoint,p256dh, eauthvalores.
Em seguida, o aplicativo cria a assinatura com a notificationUrl definida como a URL do ponto de extremidade do serviço de push simples e as propriedades vapidPublicKey, webPushEncryptionP256dhPublicKey e webPushEncryptionSecret definidas para os valores retornados pelo navegador. Após a criação, o Microsoft Graph criptografa cada notificação por RFC 8291 usando as chaves armazenadas e assina a solicitação com VAPID antes de postar no serviço de push.
Solicitação
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..."
}
Observação: A propriedade webPushEncryptionSecret é somente gravação. Nunca é retornado nas
GETrespostas (retornado comonull). Trate o valor como um segredo.
Validação de ponto de extremidade de notificação
O ponto de extremidade de notificação de assinatura (especificado na propriedade notificationUrl ) deve ser capaz de responder a uma solicitação de validação, conforme descrito em Configurar notificações para alterações nos dados do usuário. Se a validação falhar, a solicitação para criar a assinatura retornará um erro de Solicitação Incorreta 400.