Cerca messaggi

Questo documento spiega come utilizzare il metodo search nella risorsa Message dell'API Google Chat per cercare i messaggi a cui l'utente autenticato ha accesso.

Con l'autenticazione utente, puoi cercare messaggi in tutte le conversazioni a cui l'utente ha partecipato o all'interno di una conversazione specifica. Ad esempio, puoi cercare messaggi che contengono parole chiave specifiche, menzionano l'utente, sono non letti o hanno allegati.

Nell'API Chat, un messaggio di Chat è rappresentato dalla risorsa Message. Mentre gli utenti di Chat possono inviare solo messaggi di testo, le app di chat possono utilizzare molte altre funzionalità di messaggistica, tra cui la visualizzazione di interfacce utente statiche o interattive, la raccolta di informazioni dagli utenti e l'invio privato di messaggi. Per scoprire di più sulle funzionalità di messaggistica disponibili per l'API Chat, consulta la panoramica dei messaggi di Google Chat.

Prerequisiti

Node.js

Python

Java

Apps Script

Cercare messaggi

Per cercare messaggi con autenticazione utente, passa quanto segue nella richiesta:

  • Specifica l'ambito di autorizzazione chat.messages.readonly o chat.messages.

  • Chiama il metodo SearchMessages.

  • Imposta parent su spaces/- per eseguire ricerche in tutti gli spazi di cui l'utente è membro. L'utilizzo di qualsiasi altro valore genera un errore.

  • Nel campo filter, specifica una stringa di query di ricerca. La query può includere parole chiave e filtri.

Il seguente esempio di codice cerca i messaggi da leggere che contengono la parola chiave "attività":

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

Utilizzare filtri e operatori di ricerca

Puoi perfezionare i risultati di ricerca utilizzando parole chiave, campi e funzioni nel campo filter. Per saperne di più, consulta SearchMessagesRequest.

Per cercare messaggi che contengono un testo specifico, inserisci le parole chiave. Ad esempio, per cercare i report in attesa, utilizza pending reports.

Cerca per campo

Puoi filtrare i risultati in base a campi specifici di messaggi o spazi. Ad esempio:

  • create_time: filtra in base all'ora in cui è stato creato il messaggio. Esempio: create_time > "2023-01-01T00:00:00Z"
  • sender.name: filtra in base al nome della risorsa del mittente. Esempio: sender.name = "users/1234567890"
  • space.name: limita la ricerca a uno spazio specifico. Esempio: space.name = "spaces/ABCDEFGH"
  • space.display_name: filtra gli spazi in base a una corrispondenza parziale del nome visualizzato. I risultati sono limitati alle prime cinque corrispondenze di spazi. Esempio: space.display_name:Project
  • attachment: controlla la presenza di allegati. Esempio: attachment:*
  • annotations.user_mentions.user.name: filtra per menzioni. Esempio: annotations.user_mentions.user.name:"users/me"

Cercare utilizzando le funzioni

Il filtro avanzato è disponibile tramite le seguenti funzioni:

  • has_link: restituisce i messaggi che contengono almeno un link ipertestuale.
  • is_unread: restituisce i messaggi che non sono stati letti dall'utente.

Nei diversi campi sono supportati solo gli operatori AND. Ad esempio: sender.name = "users/me" AND is_unread().