Buscar mensajes

En este documento, se explica cómo usar el método search en el recurso Message de la API de Google Chat para buscar mensajes a los que tiene acceso el usuario autenticado.

Con la autenticación de usuarios, puedes buscar mensajes en todas las conversaciones a las que se unió el usuario o en una conversación específica. Por ejemplo, puedes buscar mensajes que contengan palabras clave específicas, mencionen al usuario, no se hayan leído o tengan archivos adjuntos.

En la API de Chat, un mensaje de Chat se representa con el recurso Message. Si bien los usuarios de Chat solo pueden enviar mensajes que contengan texto, las apps de Chat pueden usar muchas otras funciones de mensajería, como mostrar interfaces de usuario estáticas o interactivas, recopilar información de los usuarios y entregar mensajes de forma privada. Para obtener más información sobre las funciones de mensajería disponibles para la API de Chat, consulta la descripción general de los mensajes de Google Chat.

Requisitos previos

Node.js

Python

Java

Apps Script

Buscar mensajes

Para buscar mensajes con autenticación del usuario, pasa lo siguiente en tu solicitud:

  • Especifica el alcance de autorización chat.messages.readonly o chat.messages.

  • Realiza una llamada al método SearchMessages.

  • Establece parent en spaces/- para buscar en todos los espacios de los que el usuario es miembro. Si se usa cualquier otro valor, se producirá un error.

  • En el campo filter, especifica una cadena de consulta. La búsqueda puede incluir palabras clave y filtros.

En la siguiente muestra de código, se buscan mensajes no leídos que contienen la palabra clave "tareas":

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); } }

Cómo usar filtros y operadores de búsqueda

Puedes definir mejor los resultados de la búsqueda con palabras clave, campos y funciones en el campo filter. Para obtener más información, consulta SearchMessagesRequest.

Para buscar mensajes que contengan texto específico, ingresa las palabras clave. Por ejemplo, para buscar informes pendientes, usa pending reports.

Buscar por campo

Puedes filtrar los resultados por campos específicos de mensajes o espacios. Por ejemplo:

  • create_time: Filtra por la fecha y hora en que se creó el mensaje. Ejemplo: create_time > "2023-01-01T00:00:00Z"
  • sender.name: Filtra por el nombre del recurso del remitente. Ejemplo: sender.name = "users/1234567890"
  • space.name: Limita la búsqueda a un espacio específico. Ejemplo: space.name = "spaces/ABCDEFGH"
  • space.display_name: Filtra los espacios en función de una coincidencia parcial de su nombre visible. Los resultados se limitan a las cinco coincidencias de espacio más relevantes. Ejemplo: space.display_name:Project
  • attachment: Comprueba la presencia de archivos adjuntos. Ejemplo: attachment:*
  • annotations.user_mentions.user.name: Filtra por menciones. Ejemplo: annotations.user_mentions.user.name:"users/me"

Cómo buscar con funciones

El filtrado avanzado está disponible a través de las siguientes funciones:

  • has_link: Muestra los mensajes que contienen al menos un hipervínculo.
  • is_unread: Devuelve los mensajes que el usuario no leyó.

En diferentes campos, solo se admiten los operadores AND. Por ejemplo: sender.name = "users/me" AND is_unread()