Nachrichten suchen

In diesem Dokument wird erläutert, wie Sie die Methode search für die Ressource Message der Google Chat API verwenden, um nach Nachrichten zu suchen, auf die der authentifizierte Nutzer Zugriff hat.

Mit der Nutzerauthentifizierung können Sie in allen Unterhaltungen, an denen der Nutzer teilgenommen hat, oder in einer bestimmten Unterhaltung nach Nachrichten suchen. Sie können beispielsweise nach Nachrichten suchen, die bestimmte Keywords enthalten, in denen der Nutzer erwähnt wird, die ungelesen sind oder die Anhänge haben.

In der Chat API wird eine Chatnachricht durch die Message-Ressource dargestellt. Während Chat-Nutzer nur Nachrichten mit Text senden können, können Chat-Apps viele andere Messaging-Funktionen nutzen, darunter das Anzeigen statischer oder interaktiver Benutzeroberflächen, das Erfassen von Informationen von Nutzern und das private Senden von Nachrichten. Weitere Informationen zu den Messaging-Funktionen, die für die Chat API verfügbar sind, finden Sie unter Google Chat-Nachrichten – Übersicht.

Vorbereitung

Node.js

Python

Java

Apps Script

Nachrichten suchen

Wenn Sie nach Nachrichten mit Nutzerauthentifizierung suchen möchten, übergeben Sie Folgendes in Ihrer Anfrage:

  • Geben Sie den Autorisierungsbereich chat.messages.readonly oder chat.messages an.

  • Rufen Sie die Methode SearchMessages auf.

  • Legen Sie parent auf spaces/- fest, um in allen Gruppenbereichen zu suchen, in denen der Nutzer Mitglied ist. Die Verwendung eines anderen Werts führt zu einem Fehler.

  • Geben Sie im Feld filter einen Suchanfragestring an. Die Abfrage kann Keywords und Filter enthalten.

Im folgenden Codebeispiel wird nach ungelesenen Nachrichten gesucht, die das Keyword „tasks“ enthalten:

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

Suchfilter und ‑operatoren verwenden

Sie können Ihre Suchergebnisse mithilfe von Keywords, Feldern und Funktionen im Feld filter eingrenzen. Weitere Informationen finden Sie unter SearchMessagesRequest.

Wenn Sie nach Nachrichten suchen möchten, die bestimmten Text enthalten, geben Sie die Suchbegriffe ein. Wenn Sie beispielsweise nach ausstehenden Berichten suchen möchten, verwenden Sie pending reports.

Nach Feld suchen

Sie können Ergebnisse nach bestimmten Nachrichten- oder Gruppenbereichsfeldern filtern. Beispiel:

  • create_time: Filtern Sie nach dem Zeitpunkt, zu dem die Nachricht erstellt wurde. Beispiel: create_time > "2023-01-01T00:00:00Z"
  • sender.name: Nach dem Ressourcennamen des Absenders filtern. Beispiel: sender.name = "users/1234567890"
  • space.name: Die Suche auf einen bestimmten Bereich beschränken. Beispiel: space.name = "spaces/ABCDEFGH"
  • space.display_name: Filtert Bereiche basierend auf einer teilweisen Übereinstimmung ihres Anzeigenamens. Die Ergebnisse sind auf die fünf besten Übereinstimmungen beschränkt. Beispiel: space.display_name:Project
  • attachment: Prüft, ob Anhänge vorhanden sind. Beispiel: attachment:*
  • annotations.user_mentions.user.name: Nach Erwähnungen filtern. Beispiel: annotations.user_mentions.user.name:"users/me"

Mit Funktionen suchen

Die erweiterte Filterung ist über die folgenden Funktionen verfügbar:

  • has_link: Gibt Nachrichten zurück, die mindestens einen Hyperlink enthalten.
  • is_unread: Gibt Nachrichten zurück, die vom Nutzer noch nicht gelesen wurden.

In verschiedenen Feldern werden nur AND-Operatoren unterstützt. Beispiel: sender.name = "users/me" AND is_unread().