Cómo buscar espacios

En esta guía, se explica cómo usar el search() método en el Space recurso de la API de Google Chat para buscar espacios con nombre en una organización de Google Workspace.

El recurso Space representa un lugar donde las personas y las apps de Chat pueden enviar mensajes, compartir archivos y colaborar. Existen varios tipos de espacios:

  • Los mensajes directos (MD) son conversaciones entre dos usuarios o entre un usuario y una app de Chat.
  • Los chats en grupo son conversaciones entre tres o más usuarios y apps de Chat.
  • Los espacios con nombre son lugares persistentes donde las personas envían mensajes, comparten archivos y colaboran.

Si eres administrador de Google Workspace y quieres buscar en todos los espacios de tu organización, incluidos los espacios privados a los que no te uniste, consulta Cómo buscar y administrar espacios como administrador de Google Workspace para llamar a la API con privilegios de administrador (useAdminAccess=true).

Cuando se buscan espacios con autenticación de usuario sin privilegios de administrador, el método busca espacios con nombre (spaceType de SPACE) a los que el usuario autenticado tiene acceso, como los espacios de los que es miembro, dentro de su organización.

Requisitos previos

Node.js

Python

Java

Apps Script

Busca espacios con autenticación de usuario

Para buscar espacios en Google Chat sin privilegios de administrador, pasa lo siguiente en tu solicitud:

  • Con autenticación de usuario, especifica el alcance de autorización chat.spaces.readonly o chat.spaces.
  • Llama al search() método en el Space recurso.
  • Establece useAdminAccess en false (o omite el parámetro).
  • Especifica los parámetros de búsqueda query para filtrar los resultados:
    • spaceType = "SPACE": Es obligatorio cuando se especifica query y el único valor admitido es SPACE.
    • displayName: Filtra por nombre visible del espacio con el operador HAS (:) . Por ejemplo, displayName:"Project". El texto que se debe hacer coincidir se tokeniza y cada token se hace coincidir con el prefijo sin distinción entre mayúsculas y minúsculas y de forma independiente como una substring en cualquier lugar del displayName del espacio. Nota: Cuando useAdminAccess es false, displayName es obligatorio en tu consulta para recuperar resultados significativos; de lo contrario, el método muestra una respuesta vacía.
    • externalUserAllowed: Filtra de forma opcional si se permiten invitados externos en el espacio (true o false).
  • De manera opcional, especifica pageSize para limitar la cantidad máxima de espacios que se mostrarán (hasta 1000) o pageToken para recuperar las páginas posteriores de los resultados.
  • De manera opcional, especifica orderBy para ordenar los resultados de la búsqueda (createTime desc o relevance desc). Nota: relevance desc está disponible a través del Programa de versión preliminar para desarrolladores de Google Workspace.

En los diferentes campos de la consulta, solo se admiten operadores AND. Por ejemplo: spaceType = "SPACE" AND displayName:"Hello" AND externalUserAllowed = "true". Dentro de displayName y externalUserAllowed, se admiten operadores OR si deseas hacer coincidir varios criterios.

En el siguiente ejemplo, se buscan espacios con nombre que contengan "Project" en su nombre visible:

Node.js

/**
 * This sample shows how to search for spaces without administrator privileges.
 *
 * It relies on the @google-apps/chat npm package.
 */
// Read the documentation for more details:
// https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search

const {ChatServiceClient} = require('@google-apps/chat');
const {auth} = require('google-auth-library');

async function main() {
  // Create a client
  const chatClient = new ChatServiceClient({
    authClient: await auth.getClient({
      scopes: ['https://www.googleapis.com/auth/chat.spaces.readonly']
    })
  });

  // Initialize request arguments.
  // When useAdminAccess is false, spaceType and displayName are required in query.
  const request = {
    query: 'spaceType = "SPACE" AND displayName:"Project"',
    useAdminAccess: false
  };

  // Call the API and iterate over the paginated response
  const iterable = chatClient.searchSpacesAsync(request);
  for await (const result of iterable) {
    console.log('Found space:', result.space.displayName, result.space.name);
  }
}

main().catch(console.error);

Python

"""
This sample shows how to search for spaces without administrator privileges.
"""
from google.apps import chat_v1
import google.auth

# Read the documentation for more details:
# https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search

def search_spaces():
    # Create a client
    scopes = ["https://www.googleapis.com/auth/chat.spaces.readonly"]
    credentials, _ = google.auth.default(scopes=scopes)
    client = chat_v1.ChatServiceClient(credentials=credentials)

    # Initialize request arguments.
    # When use_admin_access is False, space_type and display_name are required in query.
    request = chat_v1.SearchSpacesRequest(
        query='spaceType = "SPACE" AND displayName:"Project"',
        use_admin_access=False
    )

    # Make the request and iterate over the paginated results.
    page_result = client.search_spaces(request)
    for result in page_result.results:
        print(f"Found space: {result.space.display_name} ({result.space.name})")

if __name__ == "__main__":
    search_spaces()

Java

/**
 * This sample shows how to search for spaces without administrator privileges.
 */
import com.google.chat.v1.ChatServiceClient;
import com.google.chat.v1.ChatServiceClient.SearchSpacesPagedResponse;
import com.google.chat.v1.SearchSpacesRequest;
import com.google.chat.v1.SearchSpaceResult;

// Read the documentation for more details:
// https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search

public class SearchSpaces {
  public static void main(String[] args) 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 = AuthenticationUtils.createClientWithUserCredentials(
        ImmutableList.of("https://www.googleapis.com/auth/chat.spaces.readonly"))) {
      SearchSpacesRequest request = SearchSpacesRequest.newBuilder()
          .setQuery("spaceType = \"SPACE\" AND displayName:\"Project\"")
          .setUseAdminAccess(false)
          .build();

      SearchSpacesPagedResponse response = chatServiceClient.searchSpaces(request);

      for (SearchSpaceResult result : response.iterateAll()) {
        System.out.printf("Found space: %s (%s)\n", result.space.getDisplayName(), result.space.getName());
      }
    }
  }
}

Apps Script

/**
 * This sample shows how to search for spaces without administrator privileges.
 */
// Read the documentation for more details:
// https://developers.google.com/workspace/chat/api/reference/rest/v1/spaces/search

function searchSpaces() {
  try {
    // Call the API
    // When useAdminAccess is false, spaceType and displayName are required in query.
    const response = Chat.Spaces.search({
      query: 'spaceType = "SPACE" AND displayName:"Project"',
      useAdminAccess: false
    });

    if (response.results && response.results.length > 0) {
      response.results.forEach(result => {
        console.log('Found space: %s (%s)', result.space.displayName, result.space.name);
      });
    } else {
      console.log('No matching spaces found.');
    }
  } catch (err) {
    console.log('Failed to search spaces: ' + err.message);
  }
}

La API de Chat muestra una lista paginada de espacios que coinciden con la consulta y a los que puede acceder el usuario que realiza la llamada.