Crear suscripción
Espacio de nombres: microsoft.graph
Suscribe una aplicación de escucha para que reciba notificaciones de cambio cuando se realiza el tipo de cambios solicitado en el recurso especificado de Microsoft Graph.
Para identificar los recursos para los que puede crear suscripciones y las limitaciones de las suscripciones, consulte Configuración de notificaciones para cambios en los datos de recursos: recursos admitidos.
Algunos recursos admiten notificaciones enriquecidas, es decir, notificaciones que incluyen datos de recursos. Para obtener más información sobre estos recursos, vea Configurar notificaciones de cambios que incluyen datos de recursos: recursos admitidos.
Esta API está disponible en las siguientes implementaciones nacionales de nube.
Servicio global | Gobierno de EE. UU. L4 | Us Government L5 (DOD) | China operada por 21Vianet |
---|---|---|---|
✅ | ✅ | ✅ | ✅ |
Permisos
Para crear una suscripción es necesario un ámbito de lectura para el recurso. Por ejemplo, para obtener notificaciones de cambio de mensajes, la aplicación necesita el permiso Mail.Read
.
Según el recurso y el tipo de permisos (delegado o de aplicación) solicitado, el permiso especificado en la tabla siguiente es el menos privilegiado necesario para llamar a esta API. Para obtener más información, incluidas las precauciones antes de elegir los permisos, busque los siguientes permisos en Permisos.
Recurso admitido | Delegado (cuenta profesional o educativa) | Delegado (cuenta de Microsoft personal) | Aplicación |
---|---|---|---|
callRecord (/communications/callRecords) | No compatible | No compatible | CallRecords.Read.All |
callRecording communications/onlineMeetings/getAllRecordings Todas las grabaciones de una organización. |
No admitida. | No admitida. | OnlineMeetingRecording.Read.All |
callRecording communications/onlineMeetings/{onlineMeetingId}/recordings Todas las grabaciones de una reunión específica. |
OnlineMeetingRecording.Read.All | No admitida. | OnlineMeetingRecording.Read.All |
callRecording users/{userId}/onlineMeetings/getAllRecordings Grabación de llamadas que está disponible en una reunión organizada por un usuario específico. |
OnlineMeetingRecording.Read.All | No admitida. | OnlineMeetingRecording.Read.All |
callTranscript communications/onlineMeetings/getAllTranscripts Todas las transcripciones de una organización. |
No admitida. | No admitida. | OnlineMeetingTranscript.Read.All |
callTranscript communications/onlineMeetings/{onlineMeetingId}/transcripts Todas las transcripciones de una reunión específica. |
OnlineMeetingTranscript.Read.All | No admitida. | OnlineMeetingTranscript.Read.All |
callTranscript users/{userId}/onlineMeetings/getAllTranscripts Transcripción de llamadas que está disponible en una reunión organizada por un usuario específico. |
OnlineMeetingTranscript.Read.All | No admitida. | OnlineMeetingTranscript.Read.All |
channel (/teams/getAllChannels: todos los canales de una organización) | No compatible | No compatible | Channel.ReadBasic.All, ChannelSettings.Read.All |
channel (/teams/{id}/channels) | Channel.ReadBasic.All, ChannelSettings.Read.All | No compatible | Channel.ReadBasic.All, ChannelSettings.Read.All |
chat (/chats: todos los chats de una organización) | No compatible | No compatible | Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All |
chat (/chats/{id}) | Chat.ReadBasic, Chat.Read, Chat.ReadWrite | No compatible | ChatSettings.Read.Chat*, ChatSettings.ReadWrite.Chat*, Chat.Manage.Chat*, Chat.ReadBasic.All, Chat.Read.All, Chat.ReadWrite.All |
chat /appCatalogs/teamsApps/{id}/installedToChats Todos los chats de una organización donde está instalada una aplicación de Teams determinada. |
No se admite | No compatible | Chat.ReadBasic.WhereInstalled, Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled |
chatMessage (/teams/{id}/channels/{id}/messages) | ChannelMessage.Read.All | No admitido | ChannelMessage.Read.Group*, ChannelMessage.Read.All |
chatMessage (/teams/getAllMessages: todos los mensajes del canal en la organización) | No admitido | No admitido | ChannelMessage.Read.All |
chatMessage (/chats/{id}/messages) | Chat.Read, Chat.ReadWrite | No admitido | Chat.Read.All |
chatMessage (/chats/getAllMessages: todos los mensajes de chat en la organización) | No admitido | No admitido | Chat.Read.All |
chatMessage (/users/{id}/chats/getAllMessages: mensajes de chat para todos los chats de los que forma parte un usuario determinado) | Chat.Read, Chat.ReadWrite | No compatible | Chat.Read.All, Chat.ReadWrite.All |
chatMessage /appCatalogs/teamsApps/{id}/installedToChats/getAllMessages Mensajes de chat para todos los chats de una organización donde está instalada una aplicación de Teams determinada. |
No se admite | No se admite | Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled |
contact | Contacts.Read | Contacts.Read | Contacts.Read |
conversationMember (/chats/getAllMembers) | No compatible | No compatible | 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 | No compatible | 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 Miembros de chat para todos los chats de una organización en la que está instalada una aplicación de Teams determinada. |
No admitida. | No admitida. | ChatMember.Read.WhereInstalled, ChatMember.ReadWrite.WhereInstalled, Chat.ReadBasic.WhereInstalled, Chat.Read.WhereInstalled, Chat.ReadWrite.WhereInstalled |
conversationMember (/teams/{id}/members) | TeamMember.Read.All | No compatible | TeamMember.Read.All |
conversationMember (/teams/{id}/channels/getAllMembers) | No compatible | No compatible | ChannelMember.Read.All |
driveItem (OneDrive personal del usuario) | No admitido | Files.Read | No admitido |
driveItem (OneDrive para la Empresa) | Files.Read.All | No compatible | Files.Read.All |
evento | Calendars.Read | Calendars.Read | Calendars.Read |
grupo | Group.Read.All | No admitido | Group.Read.All |
conversación de grupo | Group.Read.All | No se admite | No se admite |
lista | Sites.Read.All | No se admite | Sites.Read.All |
message | Mail.ReadBasic, Mail.Read | Mail.ReadBasic, Mail.Read | Mail.Read |
offerShiftRequest (/teams/{id}/schedule/offerShiftRequests) Cambios en cualquier solicitud de turno de oferta en un equipo. |
Schedule.Read.All, Schedule.ReadWrite.All | No admitida. | Schedule.Read.All, Schedule.ReadWrite.All |
openShiftChangeRequest (/teams/{id}/schedule/openShiftChangeRequests) Cambios en cualquier solicitud de turno abierta en un equipo. |
Schedule.Read.All, Schedule.ReadWrite.All | No admitida. | Schedule.Read.All, Schedule.ReadWrite.All |
presencia | Presence.Read.All | No se admite | No compatible |
printer | No admitido | No admitido | Printer.Read.All, Printer.ReadWrite.All |
printTaskDefinition | No admitido | No admitido | PrintTaskDefinition.ReadWrite.All |
alerta de seguridad | SecurityEvents.ReadWrite.All | No admitido | SecurityEvents.ReadWrite.All |
shift (/teams/{id}/schedule/shifts) Cambios en cualquier turno de un equipo. |
Schedule.Read.All, Schedule.ReadWrite.All | No admitida. | Schedule.Read.All, Schedule.ReadWrite.All |
swapShiftsChangeRequest (/teams/{id}/schedule/swapShiftsChangeRequests) Cambios en cualquier solicitud de cambio de turno en un equipo. |
Schedule.Read.All, Schedule.ReadWrite.All | No admitida. | Schedule.Read.All, Schedule.ReadWrite.All |
team (/teams: todos los equipos de una organización) | No compatible | No compatible | Team.ReadBasic.All, TeamSettings.Read.All |
team (/teams/{id}) | Team.ReadBasic.All, TeamSettings.Read.All | No compatible | Team.ReadBasic.All, TeamSettings.Read.All |
timeOffRequest (/teams/{id}/schedule/timeOffRequests) Cambios en cualquier solicitud de tiempo de descuento en un equipo. |
Schedule.Read.All, Schedule.ReadWrite.All | No admitida. | Schedule.Read.All, Schedule.ReadWrite.All |
todoTask | Tasks.ReadWrite | Tasks.ReadWrite | No compatible |
user | User.Read.All | User.Read.All | User.Read.All |
virtualEventWebinar | VirtualEvent.Read | No admitida. | VirtualEvent.Read.All |
Se recomienda usar los permisos como se documentan en la tabla anterior. Debido a las restricciones de seguridad, las suscripciones de Microsoft Graph no admiten permisos de acceso de escritura cuando solo se necesitan permisos de acceso de lectura.
Nota: Los permisos marcados con * usan un consentimiento específico del recurso.
chatMessage
Las suscripciones de chatMessage se pueden especificar para incluir datos de recursos. Si se especifica para incluir datos de recursos (includeResourceData establecido en true
), se requiere cifrado. Se produce un error en la creación de la suscripción si no se especifica un encryptionCertificate para dichas suscripciones.
Debe usar el encabezado de Prefer: include-unknown-enum-members
solicitud para obtener los siguientes valores en la enumeración evolvablechatMessagemessageType: systemEventMessage
for /teams/{id}/channels/{id}/messages
y /chats/{id}/messages
resource.
Nota:
/teams/getAllMessages
, /chats/getAllMessages
, /me/chats/getAllMessages
, /users/{id}/chats/getAllMessages
y /appCatalogs/teamsApps/{id}/installedToChats/getAllMessages
son API de uso medido; se pueden aplicar modelos de pago y requisitos de licencia .
/teams/getAllMessages
y /chats/getAllMessages
admiten tanto los modelos de model=B
model=A
pago como , /me/chats/getAllMessages
/users/{id}/chats/getAllMessages
y /appCatalogs/teamsApps/{id}/installedToChats/getAllMessages
solo model=B
admiten .
Si no especifica un modelo de pago en la consulta, se usará el modo de evaluación predeterminado.
Nota:
Para agregar o cambiar un modelo de pago para un recurso suscrito de una notificación de cambio, debe crear una nueva suscripción de notificación de cambio con el nuevo modelo de pago; Actualizar una notificación de cambio existente no funciona.
conversationMember
las suscripciones conversationMember se pueden especificar para incluir datos de recursos. Si se especifica para incluir datos de recursos (includeResourceData establecido en true
), se requiere cifrado. Se produce un error en la creación de la suscripción si no se especifica un encryptionCertificate.
Nota:
/teams/getAllMembers
, /chats/getAllMembers
y /appCatalogs/teamsApps/{id}/installedToChats/getAllMembers
son API de uso medido; se pueden aplicar modelos de pago y requisitos de licencia .
/teams/getAllMembers
y /chats/getAllMembers
admiten los modelos de model=A
pago y model=B
.
/appCatalogs/teamsApps/{id}/installedToChats/getAllMembers
solo model=B
admite .
Si no especifica un modelo de pago en la consulta, se usará el modo de evaluación predeterminado.
Nota:
Para agregar o cambiar un modelo de pago para un recurso suscrito de una notificación de cambio, debe crear una nueva suscripción de notificación de cambio con el nuevo modelo de pago; Actualizar una notificación de cambio existente no funciona.
equipo, canal y chat
se pueden especificar suscripciones de equipo, canal y chat para incluir datos de recursos. Si se especifica para incluir datos de recursos (includeResourceData establecido en true
), se requiere cifrado. Se produce un error en la creación de la suscripción si no se especifica un encryptionCertificate.
Puede usar el parámetro de cadena de consulta notifyOnUserSpecificProperties al suscribirse a cambios en un chat determinado o en el nivel de usuario. Al establecer el parámetro de cadena de consulta notifyOnUserSpecificPropertiestrue
en durante la creación de la suscripción, se envían dos tipos de cargas al suscriptor. Un tipo contiene propiedades específicas del usuario y el otro se envía sin ellas. Para obtener más información, consulte Obtención de notificaciones de cambios para chats con Microsoft Graph.
Nota:
/appCatalogs/teamsApps/{id}/installedToChats
tiene requisitos de concesión de licencias y pagos, que solo admiten específicamente model=B
.
Si no se especifica ningún modelo, se usará el modo de evaluación.
Nota:
Para agregar o cambiar un modelo de pago para un recurso suscrito de una notificación de cambio, debe crear una nueva suscripción de notificación de cambio con el nuevo modelo de pago; Actualizar una notificación de cambio existente no funciona.
Ejemplo de solicitud
Especifique el parámetro de consulta model
en la propiedad del recurso en el cuerpo de la solicitud.
POST https://graph.microsoft.com/v1.0/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
Se aplicarán otras limitaciones a las suscripciones de los elementos de OneDrive. Estas limitaciones se aplican para crear y administrar (obtener, actualizar y eliminar) las suscripciones.
En OneDrive personal, puede suscribirse a la carpeta raíz o a cualquier subcarpeta de la unidad. En OneDrive para la Empresa, puede suscribirse solo a la carpeta raíz. Se envían las notificaciones de cambio para los tipos de cambios solicitados en la carpeta suscrita o cualquier archivo, carpeta o en otras instancias de driveItem de su jerarquía. No puede suscribirse a instancias de drive o driveItem que no sean carpetas, como archivos individuales.
Soporte técnico de OneDrive para la Empresa y SharePoint para enviar notificaciones de aplicación de eventos de seguridad que se producen en un driveItem. Para suscribirse a estos eventos, agregue el prefer:includesecuritywebhooks
de usuario a su solicitud para crear una suscripción. Una vez creada la suscripción, recibirá notificaciones cuando cambien los permisos de un elemento. Este encabezado se aplica a SharePoint y OneDrive para la Empresa, pero no a las cuentas de OneDrive de usuario.
contactos, eventos y mensajes
Puede suscribirse a los cambios en los recursos de Outlook de contacto, evento o mensaje.
Crear y administrar (obtener, actualizar y eliminar) una suscripción requiere un ámbito de lectura para el recurso. Por ejemplo, para obtener notificaciones de cambio de mensajes, la aplicación necesita el permiso Mail.Read. Las notificaciones de cambio de Outlook admiten ámbitos de permisos delegados y de aplicación. Tenga en cuenta las siguientes limitaciones:
El permiso delegado es compatible con la suscripción a los elementos en las carpetas que se encuentran solo en el buzón del usuario que ha iniciado sesión. Por ejemplo, no puede usar el permiso delegado Calendars.Read para suscribirse a eventos en el buzón de otro usuario.
Para suscribirse y cambiar las notificaciones de eventos, contactos o mensajes de Outlook en carpetas compartidas o delegadas:
- Use los permisos de aplicación correspondientes para suscribirse a los cambios de los elementos de una carpeta o un buzón de cualquier usuario del espacio empresarial.
- No use los permisos de uso compartido de Outlook (Contacts.Read.Shared, Calendars.Read.Shared, Mail.Read.Shared y sus homólogos de lectura y escritura), ya que no admiten la suscripción a notificaciones de cambios en elementos de carpetas compartidas o delegadas.
presencia
Las suscripciones en presencia requieren que se cifren los datos de recursos incluidos en una notificación de cambio. Especifique siempre el parámetro encryptionCertificate al crear una suscripción para evitar errores. Vea más información sobre configurar notificaciones de cambios para incluir datos de recursos.
virtualEventWebinar
Las suscripciones en eventos virtuales solo admiten notificaciones básicas y están limitadas a algunas entidades de un evento virtual. Para obtener más información sobre los tipos de suscripción admitidos, consulte Obtención de notificaciones de cambios para las actualizaciones de eventos virtuales de Microsoft Teams.
Solicitud HTTP
POST /subscriptions
Encabezados de solicitud
Nombre | Tipo | Descripción |
---|---|---|
Authorization | string | {token} de portador. Obligatorio. Obtenga más información sobre la autenticación y la autorización. |
Cuerpo de la solicitud
En el cuerpo de la solicitud, proporcione una representación JSON del objeto de suscripción.
Respuesta
Si se ejecuta correctamente, este método devuelve un código de respuesta 201 Created
y un objeto de suscripción en el cuerpo de la respuesta.
Vea Respuestas de error para obtener detalles sobre la manera en que se devuelven los errores.
Ejemplo
Solicitud
En el ejemplo siguiente se muestra una solicitud para enviar una notificación de cambio cuando el usuario recibe un correo nuevo.
POST https://graph.microsoft.com/v1.0/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"
}
En el cuerpo de la solicitud, proporcione una representación JSON del objeto subscription.
Los campos clientState
y latestSupportedTlsVersion
son opcionales.
Comportamiento de suscripción duplicada
No se permiten suscripciones duplicadas. Cuando una solicitud de suscripción contiene los mismos valores para changeType y el recurso que contiene una suscripción existente, se produce un error en la solicitud con un código 409 Conflict
de error HTTP y el mensaje Subscription Id <> already exists for the requested combination
de error .
Ejemplos de recursos
A continuación puede ver algunos valores válidos para la propiedad de recurso de la suscripción:
Tipo de recurso | Ejemplos |
---|---|
Registros de llamadas | communications/callRecords |
callRecording |
communications/onlineMeetings/getAllRecordings , communications/onlineMeetings/{onlineMeetingId}/recordings , users/{userId}/onlineMeetings/getAllRecordings |
callTranscript |
communications/onlineMeetings/getAllTranscripts , communications/onlineMeetings/{onlineMeetingId}/transcripts , users/{userId}/onlineMeetings/getAllTranscripts |
Mensaje de chat |
chats/{id}/messages , chats/getAllMessages , teams/{id}/channels/{id}/messages , teams/getAllMessages |
Contactos | me/contacts |
Conversaciones | groups('{id}')/conversations |
Unidades | me/drive/root |
Eventos | me/events |
Grupos | groups |
Lista | sites/{site-id}/lists/{list-id} |
Correo |
me/mailfolders('inbox')/messages , me/messages |
Presencia |
/communications/presences/{id} (usuario único), /communications/presences?$filter=id in ('{id}','{id}',…) (varios usuarios) |
printer | print/printers/{id}/jobs |
PrintTaskDefinition | print/taskDefinitions/{id}/tasks |
Security alert | security/alerts?$filter=status eq 'New' |
todoTask | /me/todo/lists/{todoTaskListId}/tasks |
Users | users |
Nota: cualquier ruta de acceso que comience con
me
también se puede usar conusers/{id}
en lugar deme
para establecer como destino un usuario específico en lugar del usuario actual.
Respuesta
En el ejemplo siguiente se muestra la respuesta.
Nota: Se puede acortar el objeto de respuesta que se muestra aquí para mejorar la legibilidad.
HTTP/1.1 201 Created
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$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"
}
Validación de extremo de notificación
El extremo de notificación de la suscripción (especificado en la propiedad notificationUrl
) debe poder responder a una solicitud de validación, como se describe en Configurar las notificaciones para cambios en los datos de usuario. Si se produce un error de validación, la solicitud para crear la suscripción devuelve un error 400 de solicitud incorrecta.