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}')/meetingCallEventsla 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"
    }
  ]
}