Rechercher des messages

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

Avec l'authentification de l'utilisateur, 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 des messages contenant des mots clés spécifiques, mentionnant l'utilisateur, non lus ou contenant des pièces jointes.

Dans l'API Chat, un message de chat est représenté par la Message ressource. Alors que les utilisateurs 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 la présentation des messages Google Chat.

Prérequis

Node.js

Python

Java

Apps Script

Rechercher des messages

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

  • Spécifiez le champ d'application d'autorisation chat.messages.readonly ou chat.messages.

  • Appelez la SearchMessages méthode.

  • Définissez parent sur spaces/- pour effectuer une recherche dans tous les espaces dont l'utilisateur est membre. Toute autre valeur génère 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 à l'aide de mots clés, de champs et de 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.

Recherche par champ

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

  • create_time: filtrez par heure de création du message. Exemple : create_time > "2023-01-01T00:00:00Z"
  • sender.name: filtrez par nom de ressource de l'expéditeur. Exemple : sender.name = "users/1234567890"
  • space.name: limitez 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 premières correspondances d'espace. Exemple : space.display_name:Project
  • attachment: vérifiez 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 qui n'ont pas été lus par l'utilisateur.

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