Szukaj wiadomości

Z tego dokumentu dowiesz się, jak używać metody search w zasobie Message interfejsu Google Chat API do wyszukiwania wiadomości, do których ma dostęp uwierzytelniony użytkownik.

Dzięki uwierzytelnianiu użytkowników, możesz wyszukiwać wiadomości we wszystkich rozmowach, w których uczestniczy użytkownik, lub w konkretnej rozmowie. Możesz na przykład wyszukiwać wiadomości zawierające określone słowa kluczowe, wzmianki o użytkowniku, nieprzeczytane wiadomości lub wiadomości z załącznikami.

W interfejsie Chat API wiadomość w Google Chat jest reprezentowana przez zasób Message. Użytkownicy Google Chat mogą wysyłać tylko wiadomości tekstowe, ale aplikacje Google Chat mogą korzystać z wielu innych funkcji przesyłania wiadomości, w tym wyświetlania statycznych lub interaktywnych interfejsów użytkownika, zbierania informacji od użytkowników i dostarczania wiadomości prywatnie. Więcej informacji o funkcjach przesyłania wiadomości dostępnych w interfejsie Chat API znajdziesz w artykule Omówienie wiadomości w Google Chat.

Wymagania wstępne

Node.js

Python

Java

Apps Script

Wyszukiwanie wiadomości

Aby wyszukać wiadomości za pomocą uwierzytelniania użytkowników, w żądaniu podaj te informacje:

  • Określ zakres autoryzacji chat.messages.readonly lub chat.messages.

  • Wywołaj SearchMessages metodę.

  • Ustaw parent na spaces/-, aby wyszukiwać we wszystkich pokojach, w których użytkownik jest członkiem. Użycie innej wartości spowoduje błąd.

  • W polu filter określ ciąg zapytania. Zapytanie może zawierać słowa kluczowe i filtry.

Ten przykładowy kod wyszukuje nieprzeczytane wiadomości zawierające słowo kluczowe „zadania”:

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

Używanie filtrów i operatorów wyszukiwania

Wyniki wyszukiwania możesz zawęzić, używając słów kluczowych, pól i funkcji w polu filter. Więcej informacji znajdziesz w artykule SearchMessagesRequest.

Aby wyszukać wiadomości zawierające określony tekst, wpisz słowa kluczowe. Aby na przykład wyszukać oczekujące raporty, użyj zapytania pending reports.

Wyszukiwanie według pola

Wyniki możesz filtrować według określonych pól wiadomości lub pokoju. Na przykład:

  • create_time: filtruj według czasu utworzenia wiadomości. Przykład: create_time > "2023-01-01T00:00:00Z"
  • sender.name: filtruj według nazwy zasobu nadawcy. Przykład: sender.name = "users/1234567890"
  • space.name: ogranicz wyszukiwanie do konkretnego pokoju. Przykład: space.name = "spaces/ABCDEFGH"
  • space.display_name: filtruj pokoje na podstawie częściowego dopasowania ich nazwy wyświetlanej. Wyniki są ograniczone do 5 najlepiej pasujących pokoi. Przykład: space.display_name:Project
  • attachment: sprawdź, czy są załączniki. Przykład: attachment:*
  • annotations.user_mentions.user.name: filtruj według wzmianek. Przykład: annotations.user_mentions.user.name:"users/me"

Wyszukiwanie za pomocą funkcji

Filtrowanie zaawansowane jest dostępne dzięki tym funkcjom:

  • has_link: zwraca wiadomości zawierające co najmniej 1 hiperlink.
  • is_unread: zwraca wiadomości, które nie zostały przeczytane przez użytkownika.

W różnych polach obsługiwane są tylko operatory AND. Przykład: sender.name = "users/me" AND is_unread().