Utiliser l’API Microsoft Recherche pour rechercher des messages Teams

Utilisez l’API Microsoft Recherche dans Microsoft Graph pour rechercher des informations dans les messages Teams, retourner les messages classés par pertinence et afficher une expérience de recherche dédiée. La recherche s’applique au corps et aux pièces jointes des messages dans les messages Teams de l’utilisateur connecté.

Attention

Le schéma de l’API de recherche a changé dans la version bêta. Certaines propriétés d’une demande de recherche et d’une réponse ont été renommées ou supprimées. Pour plus d’informations, consultez Avertissement de dépréciation de modification de schéma. Les exemples de cette rubrique montrent le schéma à jour.

La recherche de messages Teams recherche également les pièces jointes. Les types de fichiers pris en charge pour la recherche de pièces jointes de message sont les mêmes que ceux de la recherche SharePoint Online.

Exemples

Exemple 1 : message de conversation Recherche Teams

Demande

L’exemple suivant interroge les messages de conversation Teams dans le stockage de conversation Teams de l’utilisateur connecté qui contient la chaîne « test » dans n’importe quelle partie du message de conversation (nom de l’expéditeur, corps du message ou pièces jointes). La requête retourne les 25 premiers résultats. Les résultats de la recherche sont classés par dateTime décroissant.

POST https://graph.microsoft.com/beta/search/query
Content-Type: application/json

{
  "requests": [
    {
      "entityTypes": [
        "chatMessage"
      ],
      "query": {
        "queryString": "test"
      },
      "from": 0,
      "size": 25
    }
  ]
}

Réponse

Voici un exemple de réponse, qui contient un message qui correspond au critère de recherche.

HTTP/1.1 200 OK
Content-type: application/json

{
    "value": [
        {
            "searchTerms": [
                "test"
            ],
            "hitsContainers": [
                {
                    "hits": [
                        {
                            "hitId": "AAMkAGIwMDA5MmY0LWY5ZTgtNGY5YS04NzczLWNhNjc0ZGIyZDBjYgBGAAAAAADm35sgHbzESapJ8+BjBlhEBwDAYtphe7dsRbDrOT/HAHoKAAAAAAEpAADAYtphe7dsRbDrOT/HAHoKAAFwxQGaAAA=",
                            "rank": 1,
                            "summary": "...Test with the TDF account",
                            "resource": {
                                "@odata.type": "microsoft.graph.chatMessage",
                                "id": "1657782060227",
                                "createdDateTime": "2022-07-14T07:01:01Z",
                                "lastModifiedDateTime": "2022-07-14T07:01:03Z",
                                "subject": "",
                                "importance": "normal",
                                "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGIwMDA5MmY0LWY5ZTgtNGY5YS04NzczLWNhNjc0ZGIyZDBjYgBGAAAAAADm35sgHbzESapJ8%2BBjBlhEBwDAYtphe7dsRbDrOT%2FHAHoKAAAAAAEpAADAYtphe7dsRbDrOT%2FHAHoKAAFwxQGaAAA%3D&exvsurl=1&viewmodel=ReadMessageItem",
                                "from": {
                                    "emailAddress": {
                                        "name": "Goncalo Torres",
                                        "address": "gtorres@contoso.com"
                                    }
                                },
                                "channelIdentity": {},
                                "etag": "1657782060227",
                                "chatId": "19:bdeff6bfed7f4b159cdf7fdd61aeacaa@thread.v2"
                            }
                        }
                    ],
                    "total": 1,
                    "moreResultsAvailable": false
                }
            ]
        }
    ]
}

Exemple 2 : Recherche messages de résultats principaux

Demande

L’exemple suivant utilise la requête de recherche présentée dans l’exemple 1 et trie les résultats par pertinence.

POST https://graph.microsoft.com/v1.0/search/query
Content-Type: application/json

{
  "requests": [
    {
      "entityTypes": [
        "chatMessage"
      ],
      "query": {
        "queryString": "test"
      },
      "from": 0,
      "size": 15,
      "enableTopResults": true
    }
  ]
}

Réponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "value": [
        {
            "searchTerms": [
                "test"
            ],
            "hitsContainers": [
                {
                    "hits": [
                        {
                            "hitId": "AAMkAGIwMDA5MmY0LWY5ZTgtNGY5YS04NzczLWNhNjc0ZGIyZDBjYgBGAAAAAADm35sgHbzESapJ8+BjBlhEBwDAYtphe7dsRbDrOT/HAHoKAAAAAAEpAADAYtphe7dsRbDrOT/HAHoKAAFwxQGaAAA=",
                            "rank": 1,
                            "summary": "...Test with the TDF account",
                            "resource": {
                                "@odata.type": "microsoft.graph.chatMessage",
                                "id": "1657782060227",
                                "createdDateTime": "2022-07-14T07:01:01Z",
                                "lastModifiedDateTime": "2022-07-14T07:01:03Z",
                                "subject": "",
                                "importance": "normal",
                                "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGIwMDA5MmY0LWY5ZTgtNGY5YS04NzczLWNhNjc0ZGIyZDBjYgBGAAAAAADm35sgHbzESapJ8%2BBjBlhEBwDAYtphe7dsRbDrOT%2FHAHoKAAAAAAEpAADAYtphe7dsRbDrOT%2FHAHoKAAFwxQGaAAA%3D&exvsurl=1&viewmodel=ReadMessageItem",
                                "from": {
                                    "emailAddress": {
                                        "name": "Goncalo Torres",
                                        "address": "gtorres@contoso.com"
                                    }
                                },
                                "channelIdentity": {},
                                "etag": "1657782060227",
                                "chatId": "19:bdeff6bfed7f4b159cdf7fdd61aeacaa@thread.v2"
                            }
                        }
                    ],
                    "total": 1,
                    "moreResultsAvailable": false
                }
            ]
        }
    ]
}

Exemple 3 : Recherche message Teams avec KQL

Termes d’étendue pris en charge

Vous pouvez utiliser les termes d’étendue suivants dans votre requête KQL (Keyword Query Language).

Termes de l’étendue Description Exemple
de Recherche uniquement pour les messages envoyés par la personne délimitée. from :bob
hasAttachment Recherche uniquement pour les messages qui contiennent ou ne contiennent pas de pièces jointes. hasAttachment :true
IsRead Recherche uniquement pour les messages qui ont été lus ou qui n’ont pas été lus. IsRead :true
IsMentioned Recherche uniquement pour les messages qui ne vous mention pas. IsMentioned :true
mentions Recherche uniquement pour les messages qui mentionnent quelqu’un. mentions :497b7a2a9e1a48d780e82965d2fc3a81 (il s’agit de l’ID utilisateur sans « - »)
envoyé Recherche uniquement pour les messages envoyés à la plage de dates délimitée. envoyé > le 14/07/2022
au Recherche uniquement pour les messages envoyés à la personne délimitée, partiellement pris en charge pour le message en un-à-un. to :bob

Demande

L’exemple suivant montre comment rechercher un message contenant Contoso que Bob a envoyé à Alice après le 14/07/2022.

POST https://graph.microsoft.com/v1.0/search/query
Content-Type: application/json

{
  "requests": [
    {
      "entityTypes": [
        "chatMessage"
      ],
      "query": {
        "queryString": "contoso from:bob to:alice sent>2022-07-14"
      },
      "from": 0,
      "size": 15,
      "enableTopResults": true
    }
  ]
}

Réponse

HTTP/1.1 200 OK
Content-type: application/json

{
    "value": [
        {
            "searchTerms": [
                "test"
            ],
            "hitsContainers": [
                {
                    "hits": [
                        {
                            "hitId": "AAMkAGIwMDA5MmY0LWY5ZTgtNGY5YS04NzczLWNhNjc0ZGIyZDBjYgBGAAAAAADm35sgHbzESapJ8+BjBlhEBwDAYtphe7dsRbDrOT/HAHoKAAAAAAEpAADAYtphe7dsRbDrOT/HAHoKAAFwxQGaAAA=",
                            "rank": 1,
                            "summary": "...Contoso Test with the TDF account",
                            "resource": {
                                "@odata.type": "microsoft.graph.chatMessage",
                                "id": "1657782060227",
                                "createdDateTime": "2022-07-15T07:01:01Z",
                                "lastModifiedDateTime": "2022-07-15T07:01:03Z",
                                "subject": "",
                                "importance": "normal",
                                "webLink": "https://outlook.office365.com/owa/?ItemID=AAMkAGIwMDA5MmY0LWY5ZTgtNGY5YS04NzczLWNhNjc0ZGIyZDBjYgBGAAAAAADm35sgHbzESapJ8%2BBjBlhEBwDAYtphe7dsRbDrOT%2FHAHoKAAAAAAEpAADAYtphe7dsRbDrOT%2FHAHoKAAFwxQGaAAA%3D&exvsurl=1&viewmodel=ReadMessageItem",
                                "from": {
                                    "emailAddress": {
                                        "name": "bob",
                                        "address": "bob@contoso.com"
                                    }
                                },
                                "channelIdentity": {},
                                "etag": "1657782060228",
                                "chatId": "19:bdeff6bee3df4b159bad3fdd61aeacaa@thread.v2"
                            }
                        }
                    ],
                    "total": 1,
                    "moreResultsAvailable": false
                }
            ]
        }
    ]
}

Limitations connues

  • Vous pouvez accéder uniquement au message Teams de l’utilisateur connecté ou au message dans lequel l’utilisateur est inclus.
  • L’API de recherche Teams ne retourne pas toutes les propriétés définies dans chatMessage. Vous pouvez utiliser l’API Teams pour récupérer plus de détails sur n’importe quel message.
  • Pour les messages Teams, la propriété total du type searchHitsContainer contient le nombre de résultats sur la page, et non le nombre total de résultats correspondants.
  • Le tri des résultats n’est pas pris en charge pour les messages.
  • Vous ne pouvez pas utiliser cette API avec d’autres types d’entités pour l’instant.

Représentation JSON

Voici une représentation JSON de toutes les propriétés récupérables actuellement disponibles pour la recherche chatMessage .

{
  "channelIdentity": {"@odata.type": "microsoft.graph.channelIdentity"},
  "chatId": "string",
  "createdDateTime": "string (timestamp)",
  "etag": "string",
  "from": {"@odata.type": "microsoft.graph.chatMessageFromIdentitySet"},
  "id": "string (identifier)",
  "importance": "string",
  "lastModifiedDateTime": "string (timestamp)",
  "subject": "string",
  "webUrl": "string"
}

Étapes suivantes