Recevoir des notifications de modification pour les mises à jour d’événements d’appel de réunion Microsoft Teams
Les notifications de modification dans Microsoft Graph vous permettent de vous abonner à l’appel démarré, à l’appel terminé et à la liste mise à jour pour les réunions en ligne Microsoft Teams. Les notifications de modification vous offrent un modèle à faible latence en vous permettant de conserver un abonnement. Vous pouvez également obtenir les données de ressource dans les notifications et ainsi éviter d’appeler l’API pour obtenir la charge utile.
Un abonnement a une période d’expiration maximale de trois jours. Pour conserver l’abonnement pendant plus de cette période, une demande de renouvellement d’abonnement doit être effectuée. Pour plus d’informations, consultez Mettre à jour l’abonnement. Un utilisateur peut également attendre l’expiration de l’abonnement et créer un nouvel abonnement avec la même ressource de réunion.
Cette ressource prend en charge les notifications avec des données de ressource. Pour plus d’informations sur la configuration des notifications avec des données de ressources, consultez Configurer des notifications de modification qui incluent des données de ressource.
Remarque
À compter du 30 juin 2024, pour obtenir les modifications apportées à un appel de réunion actif, nous vous recommandons de vous abonner aux notifications enrichies.
Autorisations
Type d’autorisation | Autorisations (de celle qui offre le plus de privilèges à celle qui en offre le moins) | Versions prises en charge |
---|---|---|
Déléguée (compte professionnel ou scolaire) | Non prise en charge. | Non prise en charge. |
Déléguée (compte Microsoft personnel) | Non prise en charge. | Non prise en charge. |
Application | OnlineMeetings.Read.All, OnlineMeetings.ReadWrite.All | bêta |
S’abonner à des événements d’appel de réunion en ligne
Pour obtenir des notifications de modification pour les événements d’appel d’une réunion, abonnez-vous à , où joinWebUrl
est la valeur encodée url de l’URL de participation à /communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents
la réunion.
Par exemple, le joinWebUrl
dans l’URL suivante doit être acquis pour une réunion en ligne.
https://teams.microsoft.com/l/meetup-join/19%3ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%40thread.v2/0?context=%7b%22Tid%22%3a%22909c6581-5130-43e9-88f3-fcb3582cde37%22%2c%22Oid%22%3a%22048c94fb-dda6-48b8-9fc8-6740ee418fb9%22%7d
Pour parquer un abonnement, l’argument doit être codé url et utilisé comme joinWebUrl
dans la propriété de ressource, comme illustré dans l’exemple suivant.
https%3A%2F%2Fteams.microsoft.com%2Fl%2Fmeetup-join%2F19%253ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%2540thread.v2%2F0%3Fcontext%3D%257b%2522Tid%2522%253a%2522909c6581-5130-43e9-88f3-fcb3582cde37%2522%252c%2522Oid%2522%253a%2522048c94fb-dda6-48b8-9fc8-6740ee418fb9%2522%257d
Remarque
Remplacez par {JoinWebUrl}
la valeur réelle encodée par l’URL lorsque vous indiquez la ressource. La valeur JoinWebURL de la réunion est incluse dans la propriété joinWebUrl de la ressource onlineMeeting ou dans le client Teams pour une réunion.
Définissez includeResourceData
sur true
et fournissez les valeurs appropriées pour encryptionCertificate
et encryptionCertificateId
pour vous abonner aux notifications enrichies.
Exemple de charge utile d’abonnement aux notifications enrichies
POST https://graph.microsoft.com/beta/subscriptions
Content-Type: application/json
{
"changeType": "updated",
"notificationUrl": "https://webhook.azurewebsites.net/api/resourceNotifications",
"resource": "communications/onlineMeetings(joinWebUrl='https%3A%2F%2Fteams.microsoft.com%2Fl%2Fmeetup-join%2F19%253ameeting_ZmYwZTEyYjctZjA5MS00OTkzLWJhNzEtYzFiZDVjNGE0OGFj%2540thread.v2%2F0%3Fcontext%3D%257b%2522Tid%2522%253a%2522909c6581-5130-43e9-88f3-fcb3582cde37%2522%252c%2522Oid%2522%253a%2522048c94fb-dda6-48b8-9fc8-6740ee418fb9%2522%257d')/meetingCallEvents",
"includeResourceData": true,
"encryptionCertificate": "{base64encodedCertificate}",
"encryptionCertificateId": "{customId}",
"expirationDateTime": "2021-02-01T11:00:00.0000000Z",
"clientState": "{secretClientState}"
}
Remarque
Les abonnements aux notifications de base sont disponibles pour les notifications de modification pour les appels de réunion. Toutefois, étant donné que les notifications de base contiennent uniquement l’ID de ressource et aucun autre détail, et qu’une API qui obtient des données d’appel de réunion avec cet ID n’est pas disponible, nous vous recommandons de vous abonner aux notifications enrichies pour les notifications de modification pour les appels de réunion. Pour plus d’informations, consultez la section Notifications enrichies .
Notifications enrichies
Lorsque vous vous abonnez à des notifications enrichies pour les événements de modification dans un appel de réunion actif, les détails des modifications sont chiffrés dans la charge utile de notification.
Exemple de charge utile de notification enrichie
{
"value": [{
"subscriptionId": "{Subscription id}",
"clientState": "{secret client state}",
"changeType": "updated",
"tenantId": "{Organization/Tenant id}",
"resource": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"subscriptionExpirationDateTime": "2022-02-28T00:00:00.0000000Z",
"resourceData": {
"@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"@odata.type": "#microsoft.graph.callevent",
"id": "{notificationId}'"
},
"organizationId": "{Organization/Tenant id}",
"encryptedContent": {
"data": "{Encrypted content}",
"dataSignature": "{Encrypted data signature}",
"dataKey": "{Encrypted data key for encrypting content}",
"encryptionCertificateId": "{User specified id of encryption certificate}",
"encryptionCertificateThumbprint": "{Encrpytion certification thumbprint}"
}
}],
"validationTokens": ["{Validation Tokens}"]
}
Types de notifications d’événements
Voici les événements de réunion pris en charge :
- callStarted : événements pour le début de l’appel de réunion.
- callEnded : événements pour la fin de l’appel de réunion.
- rosterUpdated : événements pour quand un participant rejoint et quitte l’appel ou la salle d’attente.
- L’événement rosterUpdated contient une collection de modifications apportées aux participants à l’appel de réunion dans participants@delta. Cette collection illustre les modifications apportées aux participants de l’utilisateur dans la liste des appels de réunion. Les participants avec la propriété removedState représentent les participants qui ont quitté la collection. Pour plus d’informations, consultez participant.
Exemples de charge utile déchiffrée
CallStarted
{
"@odata.type":"#microsoft.graph.callevent",
"@odata.id":"communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id":"{notificationId}'",
"eventType":"callStarted",
"eventDateTime":"2022-02-28T00:00:00.0000000Z",
}
CallEnded
{
"@odata.type":"#microsoft.graph.callevent",
"@odata.id":"communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id":"{notificationId}",
"eventType":"callEnded",
"eventDateTime":"2022-02-28T00:00:00.0000000Z",
}
RosterUpdated : le participant rejoint la modalité d’appel ou de lobby
{
"@odata.type": "#microsoft.graph.callevent",
"@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id": "{notificationId}",
"eventType": "rosterUpdated",
"eventDateTime": "2022-02-28T00:00:00.0000000Z",
"participants@delta": [
{
"info": {
"identity": {
"user": {
"id": "f3ce5e01-0724-43c7-ae4d-80ca18703a96",
"displayName": "A user roster update in the call",
"tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
}
}
},
"isInLobby": false,
"id": "e1018298-976a-4956-93e8-f58e43b0016c"
},
{
"info": {
"identity": {
"user": {
"id": "e8bbbe0e-6e3d-42db-9082-213abbe8ee5c",
"displayName": "User roster update in the lobby of the call",
"tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
}
}
},
"isInLobby": true,
"id": "a7cc3ddb-a469-410d-8057-44dba3b0c073"
}
]
}
RosterUpdated : le participant entre dans un état inactif (pas dans la salle d’attente ou l’appel)
{
"@odata.type": "#microsoft.graph.callevent",
"@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id": "{notificationId}",
"eventType": "rosterUpdated",
"eventDateTime": "2022-02-28T00:00:00.0000000Z",
"participants@delta": [
{
"info": {
"identity": {
"user": {
"id": "f3ce5e01-0724-43c7-ae4d-80ca18703a96",
"displayName": "A user change within the meeting call",
"tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
}
}
},
"isInLobby": false,
"removedState": {
"reason": "Participant has entered an inactive state in the roster."
},
"id": "e1018298-976a-4956-93e8-f58e43b0016c"
}
]
}
RosterUpdated : le participant quitte l’appel
{
"@odata.type": "#microsoft.graph.callevent",
"@odata.id": "communications/onlineMeetings(joinWebUrl='{joinWebUrl}')/meetingCallEvents",
"id": "{notificationId}",
"eventType": "rosterUpdated",
"eventDateTime": "2022-02-28T00:00:00.0000000Z",
"participants@delta": [
{
"info": {
"identity": {
"user": {
"id": "e98eb11c-8385-445e-8b19-4a2f169ac5bc",
"displayName": "User that is leaving the call",
"tenantId": "f69f5191-20ae-4093-8dae-3ec09edeb253"
}
}
},
"isInLobby": false,
"removedState": {
"reason": "Participant has left the meeting call."
},
"id": "347040dd-aa51-4ada-8a44-510c65a3a2d3"
}
]
}