Referência da API REST de Notificações de Fluxo de Contínuo do Outlook (versão prévia)
Aplica-se a: Exchange Online | Office 365 | Hotmail.com | Live.com | MSN.com | Outlook.com | Passport.com
Observação
Esta versão da documentação cobre a API de notificações de fluxo contínuo em versão prévia. Os recursos de versão prévia estão sujeitos a alterações antes da finalização e podem fazer com que seu código deixe de funcionar. Por essa razão, em geral, você deve usar somente uma versão de produção de uma API em seu código de produção. Se disponível, a versão v2.0 é a preferida no momento.
A API REST de Notificações de Fluxo de Contínuo do Outlook envia notificações em uma conexão direta para permitir que aplicativos clientes aprendam sobre alterações nos dados da caixa de correio do usuário. Esses dados podem estar nos dados de email, calendário, contato ou tarefa do usuário, protegidos pelo Active Directory do Azure no Office 365 ou nas contas da Microsoft, especificamente nestes domínios: Hotmail.com, Live.com, MSN.com, Outlook.com e Passport.com.
Observação
Para simplificar a referência, o restante deste artigo usa o Outlook.com para incluir esses domínios de conta da Microsoft.
Visão geral
O serviço de notificações por fluxo contínuo do Office 365 estabelece uma conexão direta com um cliente e fornece notificações de alterações de dados solicitadas por um aplicativo cliente.
Quando um aplicativo se inscreve para notificações de um tipo de evento de alteração em um recurso específico (como mensagens na Caixa de Entrada do usuário), uma conexão longa é estabelecida entre o servidor do Office 365 e o cliente. Quando ocorre um evento de disparo (como uma nova mensagem na Caixa de Entrada), o serviço do Office 365 transmite uma notificação para o cliente. O cliente analisa a notificação e executa ações de acordo com sua lógica de negócios, como obter a nova mensagem e atualizar a contagem não lida.
Comparar fluxo contínuo e notificações por push
Os aplicativos de email, calendário e CRM geralmente usam notificações para atualizar seu cache local, exibições de cliente correspondentes ou sistema de back-end após as alterações. O Outlook oferece suporte a notificações de fluxo contínuo e por push. notificações. As notificações por push exigem que o cliente forneça um serviço web de ouvinte para receber notificações do servidor do Office 365, enquanto as notificações de fluxo contínuo exigem apenas uma conexão direta entre o cliente e o servidor do Office 365. Quando uma conexão com o servidor é estabelecida, a conexão permanece aberta por um período especificado. Durante esse tempo, o cliente publica uma solicitação GetNotifications
longa apenas uma vez; sempre que um evento de gatilho ocorre, o servidor pode simplesmente enviar uma notificação como parte do fluxo de resposta. Isso continua até que a conexão expire, o cliente desconecte a conexão ou ocorra um problema na rede.
Use a API REST de Notificações de Fluxo Contínuo
Autenticação
Para assinar, receber e fechar notificações, especifique os escopos apropriados para os tipos de recursos para os quais você deseja ser notificado.
Escopo mínimo necessário
Um dos escopos de leitura a seguir correspondente ao recurso de destino:
- https://outlook.office.com/mail.read
- https://outlook.office.com/calendars.read
- https://outlook.office.com/contacts.read
- https://outlook.office.com/tasks.read
- wl.imap
- wl.calendars
- wl.contacts_calendars
- wl.basic
Como qualquer API REST do Outlook, você deve incluir um token de acesso válido a cada solicitação à API de Notificações por Fluxo Contínuo do Outlook. Para obter um token de acesso você deve ter registrado e identificado o seu aplicativo e obtido a autorização adequada.
Saiba mais aqui sobre algumas opções simplificadas de registro e autorização. Tenha isso em mente ao prosseguir com as operações específicas na API de notificações.
Versão da API
Atualmente, esta API está no status de versão prévia e está disponível apenas no ponto de extremidade da API REST da versão beta:
https://outlook.office.com/api/beta/
Usuário de destino
As solicitações da API de Notificações por Fluxo Contínuo são sempre realizadas em nome do usuário atual.
Operações de notificação de fluxo contínuo
Assinar para receber alterações no meu email, calendário, contatos ou tarefas
Assina notificações de fluxo contínuo quando emails, eventos de calendário, contatos ou tarefas são alterados em uma caixa de correio do Office 365 ou do Outlook.com. Este é o primeiro passo para um cliente começar a receber notificações de um recurso (uma entidade ou coleção de entidades).
POST https://outlook.office.com/api/beta/me/subscriptions
Especifique no corpo da solicitação as seguintes propriedades necessárias para uma solicitação de assinatura de fluxo contínuo. Para mais informações, consulte Entidades de Notificação.
odata.type - Incluir
"@odata.type":"#Microsoft.OutlookServices.StreamingSubscription"
.ChangeType - Especifica os tipos de eventos a serem monitorados para esse recurso. Veja ChangeType para os tipos suportados.
Resource - Especifica o recurso para monitorar e receber notificações. Você pode usar parâmetros de consulta opcionais,
$filter
ou$select
, para refinar as condições para uma notificação ou incluir propriedades específicas em uma notificação avançada. A seguir estão os recursos suportados:Uma pasta ou pasta de pesquisa comum para mensagens, eventos, contatos ou tarefas. Como exemplos:
https://outlook.office.com/api/beta/me/mailfolders('inbox')/messages
https://outlook.office.com/api/beta/me/taskfolders('{folder_id}')/tasks
Ou uma coleção de entidades de nível superior, mensagens, eventos, contatos ou tarefas, como:
https://outlook.office.com/api/beta/me/messages
https://outlook.office.com/api/beta/me/events
https://outlook.office.com/api/beta/me/contacts
https://outlook.office.com/api/beta/me/tasks
Se a solicitação de assinatura for bem-sucedida, uma ID de assinatura será retornado. Por padrão, essa ID de assinatura expira em 90 minutos, a menos que o cliente comece a ouvir notificações em uma conexão. Portanto, enquanto a conexão estiver aberta, a assinatura será renovada automaticamente.
Exemplo de solicitação de assinatura
A solicitação a seguir cria uma assinatura de fluxo contínuo para alterações criadas, atualizadas e excluídas para a caixa de entrada do usuário.
POST https://outlook.office.com/api/beta/me/subscriptions HTTP/1.1
Content-Type: application/json
{
@odata.type: "#Microsoft.OutlookServices.StreamingSubscription",
Resource: "https://outlook.office.com/api/beta/me/mailfolders('inbox')/Messages",
ChangeType: "Created,Updated,Deleted"
}
Exemplo de resposta de assinatura
Uma resposta bem-sucedida retorna o HTTP 201 e inclui a ID da assinatura. Este é um exemplo de resposta:
HTTP/1.1 201 Created
{
"@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Subscriptions/$entity",
"@odata.type":"#Microsoft.OutlookServices.StreamingSubscription",
"@odata.id":"https://outlook.office.com/api/beta/Users('266efe5a-0fd7-4edd-877b-b2d1e561f193@ae01a323-3934-4475-a32d-af1274312bb0')/Subscriptions('RUM4OEJFNUIQUQ4MQ==')",
"Id":"RUM4OEJFNUIQUQ4MQ==",
"Resource":"https://outlook.office.com/api/beta/me/mailfolders('inbox')/Messages",
"ChangeType":"Created, Updated, Deleted, Missed"
}
Refinar as condições de notificação
Você pode limitar as notificações a um subconjunto de itens usando uma $filter
cláusula. Por exemplo, a solicitação de assinatura a seguir cria uma assinatura que aciona uma notificação somente quando são feitas alterações nas mensagens com o campo de assunto "Suplementos".
POST https://outlook.office.com/api/beta/me/subscriptions HTTP/1.1
Content-Type: application/json
{
@odata.type: "#Microsoft.OutlookServices.StreamingSubscription",
Resource: "https://outlook.office.com/api/beta/me/mailfolders('inbox')/Messages?$filter=Subject%20eq%20%27Supplements%27",
ChangeType: "Created,Updated,Deleted"
}
Uma resposta de assinatura bem sucedida será semelhante a esta:
HTTP/1.1 201 Created
{
"@odata.context":"https://outlook.office.com/api/beta/$metadata#Me/Subscriptions/$entity",
"@odata.type":"#Microsoft.OutlookServices.StreamingSubscription",
"@odata.id":"https://outlook.office.com/api/beta/Users('266efe5a-0fd7-4edd-877b-b2d1e561f193@ae01a323-3934-4475-a32d-af1274312bb0')/Subscriptions('MjcwOUQ2MjEtQUQ4MQ==')",
"Id":"MjcwOUQ2MjEtQUQ4MQ==",
"Resource":"https://outlook.office.com/api/beta/me/mailfolders('inbox')/Messages?$filter=Subject%20eq%20%27Supplements%27",
"ChangeType":"Created, Updated, Deleted, Missed"
}
Inscrever-se para notificações avançadas de fluxo contínuo
Uma assinatura configurada para que uma coleção de recursos retorne o ID de uma instância de recurso que foi alterada. Você precisa obter separadamente as propriedades dessa instância. O primeiro pedido de assinatura acima é um exemplo desse tipo de assinatura. O fluxo de notificação na próxima seção mostra apenas a ID do recurso que é retornado em uma notificação.
Você pode alternativamente usar um $select
parâmetro na solicitação de assinatura, especificar as propriedades nas quais você está interessado e também ter esses valores de propriedade retornados nas notificações de fluxo contínuo.
Este é um exemplo que solicita notificações por fluxo contínuo para incluir a propriedade Subject quando um evento é criado:
POST https://outlook.office.com/api/beta/me/subscriptions HTTP/1.1
Content-Type: application/json
{
@odata.type:"#Microsoft.OutlookServices.StreamingSubscription",
Resource: "https://outlook.office.com/api/beta/me/events?$select=Subject",
ChangeType: "Created"
}
Depois de inscrever-se com sucesso em notificações avançadas de fluxo contínuo, escute as notificações para obter a propriedade Assunto em conteúdos de notificação avançada.
Ouvir as notificações
O cliente cria uma conexão POST pendente de longa duração para as assinaturas especificadas, para solicitar que o servidor inicie as notificações de fluxo contínuo.
POST https://outlook.office.com/api/beta/Me/GetNotifications
Esta solicitação POST não é concluída até que o ConnectionTimeoutinMinutes
especificado seja atingido e o servidor termine o blob JSON na resposta, ou se houver outros problemas e o cliente ou o servidor fecharem a conexão.
Enquanto a conexão estiver aberta, todas as assinaturas usando a conexão serão renovadas automaticamente. Se a conexão terminar, essas assinaturas também expirarão em 90 minutos, a menos que o cliente configure uma nova conexão para essas assinaturas.
Certifique-se de que o código que faz essa solicitação POST manipule o código de status de retorno HTTP 404 Not found
, que seria retornado se uma assinatura especificada tivesse expirado. Se isso acontecer, solicite uma nova assinatura antes de ouvir suas notificações novamente.
Parâmetro obrigatório do corpo | Tipo | Descrição |
---|---|---|
ConnectionTimeoutInMinutes | int32 | O número de minutos em que a conexão deve permanecer ativa. |
KeepAliveNotificationIntervalInSeconds | int32 | O intervalo usado pelo servidor para enviar notificações keep alive, para notificar o cliente de que a conexão permanece aberta. |
SubscriptionIds | Collection(String) | IDs das assinaturas que serão notificadas nesta conexão. |
Exemplo de solicitações de escuta
POST https://outlook.office.com/api/beta/Me/GetNotifications HTTP/1.1
Content-Type: application/json
{
ConnectionTimeoutInMinutes: 30,
KeepAliveNotificationIntervalInSeconds: 15,
SubscriptionIds: [
"N0UzMEU4RjMtMjg1Ri00OEFGLUE5NzEtRDM5MkI3NjBDMDY5XzdFMzU4QTE1LTFCQjAtNDc4NS04MTg2LUYwRjFFNUVFNTNDRg=="
]
}
Você pode usar a mesma conexão longa para ouvir notificações de várias assinaturas incluindo mais de uma ID de assinatura na solicitação POST.
POST https://outlook.office.com/api/beta/Me/GetNotifications HTTP/1.1
Content-Type: application/json
{
ConnectionTimeoutInMinutes: 30,
KeepAliveNotificationIntervalInSeconds: 15,
SubscriptionIds: [
"N0UzMEU4RjMtMjg1Ri00OEFGLUE5NzEtRDM5MkI3NjBDMDY5XzdFMzU4QTE1LTFCQjAtNDc4NS04MTg2LUYwRjFFNUVFNTNDRg==",
"Dc4NS04MTg2LUYwRjFFNUVFNTNDRgN0UzMEU4RjMtMjg1Ri00OEFGLUE5NzEtRDM5MkI3NjBDMDY5XzdFMzU4QTE1LTFCQjAtN=="
]
}
Exemplo de notificação de fluxo
Depois que o serviço é configurado, o cliente recebe o início do blob JSON das notificações.
{
{"@odata.context":"https://outlook.office.com/api/beta/metadata#Notifications",
"value": [
O servidor envia uma notificação keep alive em intervalos fixos para manter a conexão aberta e ativa. Esse intervalo é definido pelo cliente na propriedade KeepAliveNotificationIntervalInSeconds
. O formato da notificação keep alive é o seguinte:
{
"@odata.type": "#Microsoft.OutlookServices.KeepAliveNotification",
"Status": "OK"
}
Quando ocorre uma alteração controlada no servidor, o servidor envia uma notificação ao cliente por meio da conexão. Em cada notificação, o servidor define a SubscriptionExpirationDateTime
propriedade, e continua renovando-a enquanto a notificação anterior for bem-sucedida.
{
"@odata.type": "#Microsoft.OutlookServices.Notification",
"Id": null,
"SubscriptionId": "N0UzMEU4...",
"SubscriptionExpirationDateTime": "2016-09-09T18:36:42.3454926Z",
"SequenceNumber": 9,
"ChangeType": "Created",
"Resource": "https://outlook.office.com/api/beta/Users('bee8ce18AAA')/Messages('AAMkADdlAA=')",
"ResourceData": {
"@odata.type": "#Microsoft.OutlookServices.Message",
"@odata.id": "https://outlook.office.com/api/beta/Users('bee8ce18AAA')/Messages('AAMkADdlAA=')",
"@odata.etag": "W/\"CQAAABYAAAB+0z/4Ly/1ToDr5FGl5k99AAABl5Do\"",
"Id": "AAMkADdlAA="
}
}
Quando seu aplicativo estiver atendendo a várias notificações na mesma conexão longa, você poderá usar o campo SubscriptionId
para determinar qual assinatura enviou a notificação.
Observação
A segunda notificação e as notificações subsequentes enviadas a partir do servidor têm uma vírgula inicial antes do colchete de abertura para tornar a notificação válida no JSON.
,{
"Id": null,
"SubscriptionId": "N0UzMEU4...",
...
}
Amostra de conteúdo de notificação avançada
Se a sua solicitação de assinatura especificar que determinadas propriedades sejam retornadas, as cargas de notificação incluirão os valores dessas propriedades. De acordo com o exemplo acima para inscrever-se em notificações avançadas, um conteúdo de notificação avançada que inclui a propriedade Subject pode ser assim:
{
"@odata.context": "https://outlook.office.com/api/beta/$metadata#Notifications",
{
"@odata.type": "#Microsoft.OutlookServices.Notification",
"Id": null,
"SubscriptionId": "QjQzNzAwBQQ==",
"SubscriptionExpirationDateTime": "2017-01-18T00:57:28.6134733Z",
"SequenceNumber": 1,
"ChangeType": "Created",
"Resource": "https://outlook.office.com/api/beta/Users('6ed6de00-b4c1-4f9b-8ce0-30908c54da0a@ea54488f-a8f6-4c8d-acad-c3a1da54f79f')/Events('AAMkAGAAAAACisAAA=')",
"ResourceData": {
"@odata.type": "#Microsoft.OutlookServices.Event",
"@odata.id": "https://outlook.office.com/api/beta/Users('6ed6de00-b4c1-4f9b-8ce0-30908c54da0a@ea54488f-a8f6-4c8d-acad-c3a1da54f79f')/Events('AAMkAGAAAAACisAAA=')",
"@odata.etag": "W/\"IpGjeMHoYUS/RhJxluiSeAAAAAAyoQ==\"",
"Id": "AAMkAGAAAAACisAAA=",
"Subject": "Quarterly meeting CY17Q1"
}
}
]
}
Feche a conexão
Quando o tempo limite especificado na propriedade ConnectionTimeoutInMinutes
é atingido, o servidor fecha a conexão e envia o fim do blob JSON, da seguinte maneira.
]
}
A conexão pode ser descartada em outras circunstâncias, como problemas de rede e alterações no servidor, como reinicializações. O cliente pode usar as notificações keep alive para determinar se a conexão ainda está ativa ou foi descartada. Neste último caso, o cliente deve tentar se reconectar usando a ID de assinatura existente. Se a ID de assinatura expirou, uma nova solicitação de assinatura deverá ser feita para restabelecer a conexão.
Se o cliente não quiser mais ouvir uma assinatura, o cliente pode cancelar a solicitação POST e cancelar a conexão. Da próxima vez que o servidor tentar enviar uma notificação, ele receberá um erro, detectará a queda da conexão, interromperá as notificações de manutenção e fechará a conexão.
Entidades de notificação e enumerações
Assinatura
Representa a assinatura base. Esta é uma classe base abstrata.
Tipo base: Entity
Propriedade | Tipo | Descrição | É gravável? | Filtráveis |
---|---|---|---|---|
Recurso | sequência de caracteres | Especifica o recurso cujas alterações serão monitoradas. | Sim | N/D |
Changetype | Changetype | Indica os tipos de eventos que gerarão uma notificação. Veja ChangeType para saber os tipos suportados. | Sim | N/D |
Notificação
Representa uma notificação enviada ao cliente.
Tipo base: Entity
Propriedade | Tipo | Descrição | É gravável? | Filtráveis |
---|---|---|---|---|
SubscriptionId | sequência de caracteres | Identificador único para a assinatura. | Não | N/D |
SequenceNumber | int32 | Indica o valor da sequência da notificação de alteração. | Não | N/D |
Changetype | sequência de caracteres | Indica o tipo de evento que gerou a notificação. Veja ChangeType para os tipos suportados. | Não | N/D |
Recurso | sequência de caracteres | Especifica o item de recurso que está sendo monitorado para alterações | Não | N/D |
ResourceData | Entidade | Identifica a entidade que mudou. Esta é uma propriedade de navegação | Não | N/D |
Changetype
Uma enumeração que especifica os tipos de eventos que ocorrem nos recursos com suporte que podem gerar uma notificação.
Valores com suporte:
- Confirmado
- Criado
- Excluído
- Perdido. Uma notificação
Missed
ocorre quando o serviço de notificações não consegue enviar a notificação solicitada. - Atualizado
Próximas etapas
Se você estiver pronto para começar a criar um aplicativo ou apenas quiser aprender mais, temos tudo o que você precisa.
- Comece com as APIs REST de Email, Calendário e Contatos.
- Quer exemplos? Nós temos.
Se preferir, aprenda mais sobre como usar a plataforma do Office 365:
- API REST do Outlook no Centro de Desenvolvimento do Outlook
- Visão geral sobre desenvolvimento na plataforma do Office 365
- Autenticação de aplicativo do Office 365 e autorização de recursos
- Registrar manualmente seu aplicativo no Azure AD para que ele possa acessar as APIs do Office 365
- Uso da API REST do Outlook
- Referência de APIs REST de e-mail
- Referência de APIs REST do Calendário
- Referência de APIs REST de contatos
- Referência de recurso para as APIs REST de E-mail, Calendário, Contatos e Tarefa