Szukaj wiadomości

W tym dokumencie wyjaśniamy, jak używać metody search w zasobie Message interfejsu Google Chat API do wyszukiwania wiadomości, do których uwierzytelniony użytkownik ma dostęp.

Dzięki uwierzytelnianiu użytkownika 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, które zawierają określone słowa kluczowe, wspominają użytkownika, są nieprzeczytane lub mają załączniki.

W interfejsie Chat API wiadomość na czacie jest reprezentowana przez Messagezasób. Użytkownicy Google Chat mogą wysyłać tylko wiadomości tekstowe, ale aplikacje na czacie mogą korzystać z wielu innych funkcji przesyłania wiadomości, w tym wyświetlać statyczne lub interaktywne interfejsy użytkownika, zbierać informacje od użytkowników i dostarczać 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

Google Apps Script

Wyszukiwanie wiadomości

Aby wyszukać wiadomości z uwierzytelnianiem użytkownika, w żądaniu podaj te informacje:

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

  • Wywołaj metodę SearchMessages.

  • 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.

Poniższy przykładowy kod wyszukuje nieprzeczytane wiadomości zawierające słowo kluczowe „tasks”:

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

Google 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 doprecyzować, używając słów kluczowych, pól i funkcji w polu filter. Więcej informacji znajdziesz w sekcji SearchMessagesRequest.

Aby wyszukać wiadomości zawierające określony tekst, wpisz słowa kluczowe. Aby na przykład wyszukać raporty oczekujące, użyj 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: filtrowanie 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 przestrzenie na podstawie częściowego dopasowania ich wyświetlanej nazwy. 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 w tych funkcjach:

  • 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 przypadku różnych pól obsługiwane są tylko operatory AND. Na przykład: sender.name = "users/me" AND is_unread().