Exporter du contenu avec les API d’exportation Microsoft Teams

Exporter du contenu avec les API d’exportation Microsoft Teams

Les API d’exportation Teams offrent la possibilité d’exporter des messages 1:1, des conversations de groupe, des conversations de réunion et des messages de canal à partir de Microsoft Teams. Si votre organisation a besoin d’exporter des messages Microsoft Teams, vous pouvez le faire en utilisant les API d’exportation Teams. Un message de conversation représente un message individuel dans un canal ou une conversation. Ce message peut être un message racine ou faire partie d’un fil de discussion spécifié par la propriété replyToId dans le message de conversation.

Utilisations des API d’exportation

Voici quelques exemples d’utilisation des API d’exportation :

  • Exemple 1 : Si vous avez activé Microsoft Teams dans votre organisation et que vous souhaitez exporter tous les messages Microsoft Teams à ce jour en utilisant la programmation, vous pouvez le faire en spécifiant la plage de dates pour un utilisateur ou une équipe donnée.

  • Exemple 2 : Si vous souhaitez exporter quotidiennement tous les messages d’utilisateur ou d’équipe en utilisant la programmation et en fournissant une plage de dates, les API d’exportation peuvent récupérer tous les messages créés ou mis à jour pendant la période spécifiée.

  • (Bêta) Exemple 3 : Si vous souhaitez exporter par programmation les liens vers les enregistrements de réunion Teams d’un organisateur de réunion donné, puis télécharger les enregistrements réels.

  • (Bêta) Exemple 4 : Si vous souhaitez exporter par programmation les liens vers les transcriptions de réunion Teams d’un organisateur de réunion donné, puis télécharger les transcriptions réelles.

Prise en charge des API d’exportation Teams

Les API d’exportation Teams offrent les fonctionnalités suivantes :

  • Exportation en bloc de messages Teams : Les API d’exportation Teams prennent en charge jusqu’à 200 RPS (requêtes par seconde) par application par locataire et 600 RPS pour une application. Avec ces limites, vous devriez être en mesure d’exporter en bloc des messages Teams.

  • Contexte de l’application : Pour appeler Microsoft Graph, votre application doit obtenir un jeton d’accès à partir de la Plateforme d’identités Microsoft. Ce jeton d’accès contient des informations sur votre application et les autorisations qu’elle a pour les ressources et les API disponibles via Microsoft Graph. Pour obtenir un jeton d’accès, votre application doit être enregistrée auprès de la Plateforme d’identités Microsoft et être autorisée par un utilisateur ou un administrateur à accéder aux ressources Microsoft Graph dont elle a besoin.

  • Environnement hybride : Les API d’exportation prennent en charge les messages envoyés par les utilisateurs configurés dans un environnement hybride (Exchange local et Teams). Tous les messages envoyés par les utilisateurs configurés pour un environnement hybride sont accessibles via les API d’exportation.

  • Messages supprimés par l’utilisateur : Les messages supprimés par les utilisateurs du client Teams sont accessibles via les API d’exportation pendant une période de 21 jours à compter de la suppression.

  • Pièces jointes de message : Les API d’exportation incluent les liens vers les pièces jointes qui sont envoyées avec les messages. En utilisant les API d’exportation, vous pouvez récupérer les fichiers joints dans les messages.

  • Réactions : Les API d’exportation prennent en charge les réactions initiées par un utilisateur sur un message Teams. Les réactions actuellement prises en charge sont “cœur”, “colère”, “like”, “triste”, “surpris” et “rire”. En plus des réactions, les API d’exportation prennent également en charge l’historique des modifications des réactions, qui comprend les modifications et les mises à jour apportées à une réaction sur un message.

  • Messages de canal partagés : Les API d’exportation prennent en charge la capture de messages à partir d’un canal partagé.

  • Équipes supprimées : Les API d’exportation prennent en charge la capture des messages à partir des équipes supprimées et des canaux privés supprimés.

  • Propriétés du message de conversation : Veuillez vous référer à la liste complète des propriétés prises en charge par les API d’exportation Teams.

  • Messages de contrôle : Les API d’exportation prennent en charge la capture des messages de contrôle en plus des messages générés par l’utilisateur. Les messages de contrôle sont des messages générés par le système qui s’affichent dans le client Teams et contiennent des informations importantes telles que “L’utilisateur A a ajouté l’utilisateur B à la conversation et a partagé tout l’historique de la conversation” avec l’horodatage. Les messages système permettent à l’appelant d’obtenir des informations sur les événements qui se sont produits dans une équipe, un canal ou une conversation. Actuellement, l’API d’exportation prend en charge les événements “Ajouter un membre” et “Supprimer un membre” pour les conversations, les équipes et les canaux standards.

À lire aussi  Solaranlage 2023

Comment accéder aux API d’exportation Teams

Pour accéder aux API d’exportation Teams, vous pouvez utiliser les requêtes suivantes :

  • Exemple 1 : Il s’agit d’une requête simple pour récupérer tous les messages d’un utilisateur ou d’une équipe sans filtre :

    GET https://graph.microsoft.com/v1.0/users/{id}/chats/getAllMessages
    GET https://graph.microsoft.com/v1.0/teams/{id}/channels/getAllMessages
  • Exemple 2 : Il s’agit d’un exemple de requête pour récupérer tous les messages d’un utilisateur ou d’une équipe en spécifiant des filtres de date et d’heure et les 50 premiers messages :

    GET https://graph.microsoft.com/v1.0/users/{id}/chats/getAllMessages?$top=50&$filter=lastModifiedDateTime gt 2020-06-04T18:03:11.591Z and lastModifiedDateTime lt 2020-06-05T21:00:09.413Z
    GET https://graph.microsoft.com/v1.0/teams/{id}/channels/getAllMessages?$top=50&$filter=lastModifiedDateTime gt 2020-06-04T18:03:11.591Z and lastModifiedDateTime lt 2020-06-05T21:00:09.413Z
  • (Bêta) Exemple 3 : Il s’agit d’un exemple de requête pour récupérer les liens vers tous les enregistrements de réunions Teams disponibles pour un utilisateur. Le filtre TOP est pris en charge, tout comme pour les messages de conversation :

    GET https://graph.microsoft.com/beta/users/{id}/onlineMeetings/getAllRecordings?$filter=MeetingOrganizerId eq '{id}'
  • (Bêta) Exemple 4 : Il s’agit d’un exemple de requête pour récupérer les liens vers toutes les transcriptions de réunions Teams disponibles pour un utilisateur. Le filtre TOP est pris en charge, tout comme pour les messages de conversation :

    GET https://graph.microsoft.com/beta/users/{id}/onlineMeetings/getAllTranscripts?$filter=MeetingOrganizerId eq '{id}'

Prérequis pour accéder aux API d’exportation Teams

Pour accéder aux API d’exportation Teams, vous devez prendre en compte les points suivants :

  • Les API Microsoft Teams dans Microsoft Graph qui accèdent à des données sensibles sont considérées comme des API protégées. Vous pouvez appeler ces API tant que les conditions d’accès sans utilisateur sont remplies.

  • Les autorisations d’application sont utilisées par les applications qui s’exécutent sans utilisateur connecté. Ces autorisations ne peuvent être approuvées que par un administrateur. Les autorisations suivantes sont nécessaires :

    • Chat.Read.All : permet d’accéder à tous les messages de conversation 1:1, de groupe et de réunion
    • ChannelMessage.Read.All : permet d’accéder à tous les messages de canal
    • User.Read.All : permet d’accéder à la liste des utilisateurs d’un locataire
    • OnlineMeetingTranscript.Read.All : permet d’accéder aux transcriptions pour toutes les réunions Teams planifiées 1:n
    • OnlineMeetingRecording.Read.All : permet d’accéder aux enregistrements pour toutes les réunions Teams planifiées 1:n
À lire aussi  Les meilleures solutions d’enregistrement de trajets : Comparatif de 4 carnets de route électroniques

Conditions de licence pour les API d’exportation Teams

L’API d’exportation prend en charge les scénarios de sécurité et de conformité (S+C) ainsi que les scénarios d’utilisation générale via un paramètre de requête de modèle. Les scénarios S+C (modèle A) incluent une capacité de démarrage et nécessitent un abonnement E5, tandis que les scénarios d’utilisation générale (modèle B) sont disponibles pour tous les abonnements et ne nécessitent qu’une consommation. Pour plus d’informations sur la capacité de démarrage et les frais de consommation, consultez les conditions de licence et de paiement pour les API Microsoft Graph Teams.

Pour les API bêta, il n’existe actuellement aucune application de licence ou d’utilisation du modèle A ou du modèle B. Cependant, cela est susceptible de changer à l’avenir.

Scénarios S+C / Modèle A

Ces scénarios sont limités aux applications exécutant des fonctions de sécurité et/ou de conformité. Les utilisateurs doivent disposer de licences E5 spécifiques pour utiliser cette fonctionnalité et bénéficier d’une capacité de démarrage. La capacité de démarrage est calculée par utilisateur, par mois et regroupée au niveau du locataire. Pour une utilisation au-delà de la capacité de démarrage, les propriétaires d’applications seront facturés en fonction de la consommation d’API. Le modèle A permet d’accéder uniquement aux messages des utilisateurs disposant d’une licence E5 affectée.

  • Nom du partenaire : Solution de partenaire d’archivage et de conformité Microsoft Teams

Scénarios d’utilisation générale / Modèle B

Ces scénarios sont disponibles pour tous les scénarios qui ne sont pas liés à la sécurité et à la conformité. Aucune licence ou capacité de démarrage n’est requise. Lorsque les compteurs de consommation sont disponibles, les propriétaires d’applications seront facturés pour tous les appels d’API mensuels.

Les partenaires suivants sont certifiés. Votre entreprise peut choisir de travailler avec n’importe quelle combinaison de ces partenaires au sein de votre entreprise.

  • Nom du partenaire : Solution de sauvegarde et de récupération Microsoft Teams
  • Nom du partenaire : Solution de sauvegarde et de récupération Microsoft Teams

Étapes suivantes

Si vous êtes un fournisseur souhaitant rejoindre le programme de certification, veuillez remplir le formulaire à l’étape suivante. Si vous avez besoin de fournir un contexte et des détails supplémentaires, envoyez un e-mail à l’équipe de l’écosystème MS Teams (TeamsCategoryPartner@microsoft.com).

Mode d’évaluation (par défaut)

Aucune déclaration de modèle n’autorise l’accès aux API avec une utilisation limitée pour chaque application demandée à des fins d’évaluation.

Représentation JSON

L’exemple suivant est une représentation JSON de la ressource de conversation :

{
  "id": "string (identifiant)",
  "replyToId": "string (identifiant)",
  "from": {"@odata.type": "microsoft.graph.identitySet"},
  "etag": "string",
  "messageType": "string",
  "createdDateTime": "string (horodatage)",
  "lastModifiedDateTime": "string (horodatage)",
  "deletedDateTime": "string (horodatage)",
  "subject": "string",
  "from": {
    "application": null,
    "device": null,
    "conversation": null,
    "user": {
      "id": [{"@odata.type": "microsoft.graph.user"}],
      "displayName": "Nom de l'utilisateur",
      "userIdentityType": "aadUser"
    }
  },
  "body": {"@odata.type": "microsoft.graph.itemBody"},
  "summary": "string",
  "chatId": [{"@odata.type": "microsoft.graph.chat"}],
  "attachments": [{"@odata.type": "microsoft.graph.chatMessageAttachment"}],
  "mentions": [{"@odata.type": "microsoft.graph.chatMessageMention"}],
  "importance": "string",
  "locale": "string"
}

L’exemple suivant est une représentation JSON de la ressource d’enregistrement :

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(meetingRecording)",
  "@odata.count": 2,
  "@odata.nextLink": "https://graph.microsoft.com/beta/users('{userId}')/onlineMeetings/getAllRecordings?$filter=MeetingOrganizerId+eq+%27{userId}%27&$skiptoken=MSMjMCMjTkNaYVNIQjVVbXRPYWxaV1dscGFWVGg1V2pOb1IxUXpRWGxrUm1oTFVrWmtTV1ZyYkhwUlZVWm9UMWR3VEdWWGRFTlJWVVpDVVZFOVBRPT0%3d",
  "value": [
    {
      "@odata.type": "#microsoft.graph.meetingRecording",
      "id": "6263af16-b660-41d0-a17b-83fbd15a39c7",
      "meetingId": "MSoxMjczYTAxNi0yMDFkRLTmOTUtODA5My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1BBXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy",
      "meetingOrganizerId": "{userId}",
      "createdDateTime": "2022-08-03T20:43:36.2573447Z",
      "recordingContentUrl": "https://graph.microsoft.com/beta/users/{userId}/onlineMeetings/MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy/recordings/MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh/content"
    },
    {
      "@odata.type": "#microsoft.graph.meetingRecording",
      "id": "{recordingId}",
      "meetingId": "{meetingId}",
      "meetingOrganizerId": "{userId}",
      "createdDateTime": "2022-08-03T20:44:11.2635254Z",
      "recordingContentUrl": "https://graph.microsoft.com/beta/users/{userId}/onlineMeetings/{meetingId}/recordings/{recordingId}/content"
    }
  ]
}

L’exemple suivant est une représentation JSON de la ressource de transcription :

{
  "@odata.context": "https://graph.microsoft.com/beta/$metadata#Collection(callTranscript)",
  "@odata.count": 2,
  "@odata.nextLink": "https://graph.microsoft.com/beta/users('{userId}')/onlineMeetings/getAllTranscripts?$filter=MeetingOrganizerId+eq+%27{userId}%27&$skiptoken=MSMjMCMjTkNaYVNIQjVVbXRPYWxaV1dscGFWVGg1V2pOb1IxUXpRWGxrUm1oTFVrWmtTV1ZyYkhwUlZVWm9UMWR3VEdWWGRFTlJWVVpDVVZFOVBRPT0%3d",
  "value": [
    {
      "@odata.type": "#microsoft.graph.callTranscript",
      "id": "MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh",
      "meetingId": "MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy",
      "meetingOrganizerId": "{userId}",
      "transcriptContentUrl": "https://graph.microsoft.com/beta/users/{userId}/onlineMeetings/MSoxMjczYTAxNi0yMDFkLTRmOTUtODA4My0xYjdmOTliM2VkZWIqMCoqMTk6bWVldGluZ19aR1F3WTJZNE9XTXROekppWlMwME1XWTRMVGc0TWpBdE1ERXdOV1kzWlRsak9UTXlAdGhyZWFkLnYy/transcripts/MSMjMCMjMGFjNmUwZTgtYmZjYy00NDQxLTk2MGYtZjllNjVhNjI0NzBh/content",
      "createdDateTime": "2022-08-03T20:43:36.6248355Z"
    },
    {
      "@odata.type": "#microsoft.graph.callTranscript",
      "id": "{transcriptId}",
      "meetingId": "{meetingId}",
      "meetingOrganizerId": "{userId}",
      "transcriptContentUrl": "https://graph.microsoft.com/beta/users/{userId}/onlineMeetings/{meetingId}/transcripts/{transcriptId}/content"
    }
  ]
}

Pour plus d’informations, consultez la documentation sur l’utilisation des API Graph pour extraire la transcription.

À lire aussi  Des logiciels fiscaux et des applications pour la déclaration de revenus en 2022

Filtres d’API d’exportation

L’API d’exportation hébergée sur le service Graph Teams extrait tous les messages utilisateur de la boîte de réception utilisateur Substrate en utilisant users/{userId}/chats/getAllMessages. L’API d’exportation récupère les messages envoyés et reçus pour un utilisateur, ce qui entraîne l’exportation de messages en double lors de l’appel de l’API pour tous les utilisateurs du fil de conversation.

L’API d’exportation dispose de paramètres de filtre qui permettent d’optimiser les messages retournés pour un fil de conversation. L’API GET prend en charge de nouveaux paramètres de filtre qui permettent d’extraire des messages en fonction des messages d’événement utilisateur, de bot, d’application et système envoyés. Le paramètre “filter” prend en charge les messages envoyés par les éléments suivants :

  • Utilisateurs (plusieurs ID d’utilisateur pris en charge dans la même requête)
  • Applications (bots, connecteurs, etc.)
  • Utilisateurs anonymes
  • Utilisateurs fédérés (utilisateurs d’accès externe)
  • Messages d’événement système (messages de contrôle)

Ces paramètres sont inclus dans la requête $filter. Si aucun de ces paramètres n’est inclus dans la requête, les messages de tous les utilisateurs présents dans les conversations utilisateur spécifiées seront retournés.

Les scénarios de filtrage pris en charge sont les suivants :

  • $filter=from/application/applicationIdentityType eq '<appType>' (bots/tenantBots/connectors, etc.)
  • $filter=from/user/id eq '<oid>' (any number of id filters)
  • $filter=from/user/userIdentityType eq 'anonymousGuest'
  • $filter=from/user/userIdentityType eq 'federatedUser' (guest/external)
  • $filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' (sent by app or userid)
  • $filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'anonymousGuest' (sent by app or anonymous)
  • $filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'federatedUser' (sent by app or federated)
  • $filter=from/application/applicationIdentityType eq '<appType>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by app, anonymous or federated)
  • $filter=from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' (sent by any number of userid or anonymous)
  • $filter=from/user/id eq '<oid>' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated)
  • $filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated or anonymous)
  • $filter=from/application/applicationIdentityType eq '<appType>' or from/user/id eq '<oid>' or from/user/userIdentityType eq 'anonymousGuest' or from/user/userIdentityType eq 'federatedUser' (sent by any number of userid or federated or anonymous) or messsageType eq 'systemEventMessage' (<any of the previous filters>) and (lastModifiedDateTime+gt+<date>+and+lastModifiedDateTime+lt+<date>)

Ces paramètres peuvent être combinés entre eux en utilisant les opérateurs OR ainsi qu’en les combinant avec le paramètre $filter pour lastModifiedDateTime.