Rechercher des messages

Ce document explique comment utiliser la méthode search sur la ressource Message de l'API Google Chat pour rechercher les messages auxquels l'utilisateur authentifié a accès.

Avec l'authentification des utilisateurs, vous pouvez rechercher des messages dans toutes les conversations auxquelles l'utilisateur a participé ou dans une conversation spécifique. Par exemple, vous pouvez rechercher les messages qui contiennent des mots clés spécifiques, mentionnent l'utilisateur, sont non lus ou comportent des pièces jointes.

Dans l'API Chat, un message Chat est représenté par la ressource Message. Alors que les utilisateurs de Chat ne peuvent envoyer que des messages contenant du texte, les applications Chat peuvent utiliser de nombreuses autres fonctionnalités de messagerie, y compris afficher des interfaces utilisateur statiques ou interactives, collecter des informations auprès des utilisateurs et envoyer des messages de manière privée. Pour en savoir plus sur les fonctionnalités de messagerie disponibles pour l'API Chat, consultez Présentation des messages Google Chat.

Prérequis

Node.js

Python

Java

Apps Script

Rechercher des messages

Pour rechercher des messages avec authentification de l'utilisateur, transmettez les éléments suivants dans votre requête :

  • Indiquez le champ d'application de l'autorisation chat.messages.readonly ou chat.messages.

  • Appelez la méthode SearchMessages.

  • Définissez parent sur spaces/- pour effectuer une recherche dans tous les espaces dont l'utilisateur est membre. Toute autre valeur entraînera une erreur.

  • Dans le champ filter, spécifiez une chaîne de requête de recherche. La requête peut inclure des mots clés et des filtres.

L'exemple de code suivant recherche les messages non lus contenant le mot clé "tasks" :

Node.js

/**
 * Searches for messages in Google Chat.
 * @param {string} filter The search query.
 */
async function searchMessages(filter) {
  const {ChatServiceClient} = require('@google-apps/chat').v1;

  // Instantiates a client
  const chatClient = new ChatServiceClient();

  // See https://github.com/googleworkspace/node-samples/blob/main/chat/client-libraries/cloud/authentication-utils.js
  // for an example of how to authenticate the request.

  // Construct request
  const request = {
    // Parent must be "spaces/-" to search across all spaces.
    parent: 'spaces/-',
    filter: filter,
  };

  // Run request
  const iterable = await chatClient.searchMessagesAsync(request);
  for await (const response of iterable) {
    console.log(response);
  }
}

searchMessages('tasks AND is_unread()');

Python

from google.apps import chat_v1

def search_messages(filter_str: str):
    """
    Searches for messages in Google Chat.
    Args:
        filter_str: The search query.
    """
    # Create a client
    client = chat_v1.ChatServiceClient()

    # See https://github.com/googleworkspace/python-samples/blob/main/chat/client-libraries/cloud/authentication_utils.py
    # for an example of how to authenticate the request.

    # Initialize request argument
    request = chat_v1.SearchMessagesRequest(
        # Parent must be "spaces/-" to search across all spaces.
        parent="spaces/-",
        filter=filter_str
    )

    # Make the request
    page_result = client.search_messages(request=request)

    # Handle the response
    for response in page_result:
        print(response)

search_messages('tasks AND is_unread()')

Java

import com.google.chat.v1.ChatServiceClient;
import com.google.chat.v1.SearchMessageResult;
import com.google.chat.v1.SearchMessagesRequest;

public class SearchMessages {
  public static void main(String[] args) throws Exception {
    searchMessages("tasks AND is_unread()");
  }

  /**
   * Searches for messages in Google Chat.
   *
   * @param filter The search query.
   */
  public static void searchMessages(String filter) throws Exception {
    // See https://github.com/googleworkspace/java-samples/blob/main/chat/client-libraries/cloud/src/main/java/com/google/workspace/api/chat/samples/AuthenticationUtils.java
    // for an example of how to authenticate the request.
    try (ChatServiceClient chatServiceClient = ChatServiceClient.create()) {
      SearchMessagesRequest request =
          SearchMessagesRequest.newBuilder()
              .setParent("spaces/-")
              .setFilter(filter)
              .build();
      for (SearchMessageResult result : chatServiceClient.searchMessages(request).iterateAll()) {
        System.out.println(result.getMessage().getText());
      }
    }
  }
}

Apps Script

javascript /** * Searches for messages in Google Chat. */ function searchMessages() { const filter = 'tasks AND is_unread()'; const url = 'https://chat.googleapis.com/v1/spaces/-/messages:search'; const request_payload = { filter: filter }; try { const response = UrlFetchApp.fetch(url, { method: 'post', headers: { 'Authorization': 'Bearer ' + ScriptApp.getOAuthToken() }, contentType: 'application/json', payload: JSON.stringify(request_payload) }); if (response.results) { for (const result of response.results) { console.log('Message text: %s', result.message.text); } } else { console.log('No messages found.'); } } catch (err) { console.log('Failed to search messages with error: %s', err.message); } }

Utiliser des filtres et des opérateurs de recherche

Vous pouvez affiner vos résultats de recherche en utilisant des mots clés, des champs et des fonctions dans le champ filter. Pour en savoir plus, consultez SearchMessagesRequest.

Pour rechercher des messages contenant un texte spécifique, saisissez les mots clés. Par exemple, pour rechercher les rapports en attente, utilisez pending reports.

Rechercher par champ

Vous pouvez filtrer les résultats par champ de message ou d'espace spécifique. Exemple :

  • create_time : filtrez par date de création du message. Exemple : create_time > "2023-01-01T00:00:00Z"
  • sender.name : filtre par nom de ressource de l'expéditeur. Exemple : sender.name = "users/1234567890"
  • space.name : limite la recherche à un espace spécifique. Exemple : space.name = "spaces/ABCDEFGH"
  • space.display_name : filtrez les espaces en fonction d'une correspondance partielle de leur nom à afficher. Les résultats sont limités aux cinq espaces les plus pertinents. Exemple : space.display_name:Project
  • attachment : vérifie la présence de pièces jointes. Exemple : attachment:*
  • annotations.user_mentions.user.name : filtrez par mentions. Exemple : annotations.user_mentions.user.name:"users/me"

Rechercher à l'aide de fonctions

Le filtrage avancé est disponible via les fonctions suivantes :

  • has_link : renvoie les messages contenant au moins un lien hypertexte.
  • is_unread : renvoie les messages que l'utilisateur n'a pas lus.

Seuls les opérateurs AND sont acceptés dans les différents champs. Exemple : sender.name = "users/me" AND is_unread().