Tìm kiếm tin nhắn

Tài liệu này giải thích cách sử dụng phương thức search trên tài nguyên Message của Google Chat API để tìm kiếm những tin nhắn mà người dùng đã xác thực có quyền truy cập.

Với tính năng xác thực người dùng, bạn có thể tìm kiếm tin nhắn trong tất cả cuộc trò chuyện mà người dùng đã tham gia hoặc trong một cuộc trò chuyện cụ thể. Ví dụ: bạn có thể tìm kiếm những tin nhắn chứa từ khoá cụ thể, đề cập đến người dùng, chưa đọc hoặc có tệp đính kèm.

Trong Chat API, tin nhắn trên Chat được biểu thị bằng tài nguyên Message. Mặc dù người dùng Chat chỉ có thể gửi tin nhắn chứa văn bản, nhưng các ứng dụng Chat có thể sử dụng nhiều tính năng nhắn tin khác, bao gồm cả việc hiển thị giao diện người dùng tĩnh hoặc tương tác, thu thập thông tin từ người dùng và gửi tin nhắn riêng tư. Để tìm hiểu thêm về các tính năng nhắn tin có trong API Chat, hãy xem Tổng quan về tin nhắn trên Google Chat.

Điều kiện tiên quyết

Node.js

Python

Java

Apps Script

Tìm kiếm thư

Để tìm kiếm thư có xác thực người dùng, hãy truyền nội dung sau trong yêu cầu của bạn:

  • Chỉ định phạm vi uỷ quyền chat.messages.readonly hoặc chat.messages.

  • Gọi phương thức SearchMessages.

  • Đặt parent thành spaces/- để tìm kiếm trong tất cả không gian mà người dùng là thành viên. Việc sử dụng bất kỳ giá trị nào khác sẽ dẫn đến lỗi.

  • Trong trường filter, hãy chỉ định một chuỗi truy vấn tìm kiếm. Cụm từ tìm kiếm có thể bao gồm từ khoá và bộ lọc.

Mã mẫu sau đây tìm kiếm những thư chưa đọc có chứa từ khoá "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());
      }
    }
  }
}

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

Sử dụng bộ lọc và toán tử tìm kiếm

Bạn có thể tinh chỉnh kết quả tìm kiếm bằng cách sử dụng từ khoá, trường và hàm trong trường filter. Để biết thêm thông tin, hãy xem SearchMessagesRequest.

Để tìm tin nhắn có chứa văn bản cụ thể, hãy nhập từ khoá. Ví dụ: để tìm báo cáo đang chờ xử lý, hãy sử dụng pending reports.

Tìm kiếm theo trường

Bạn có thể lọc kết quả theo các trường cụ thể của tin nhắn hoặc không gian. Ví dụ:

  • create_time: Lọc theo thời gian tạo thư. Ví dụ: create_time > "2023-01-01T00:00:00Z"
  • sender.name: Lọc theo tên tài nguyên của người gửi. Ví dụ: sender.name = "users/1234567890"
  • space.name: Giới hạn phạm vi tìm kiếm trong một không gian cụ thể. Ví dụ: space.name = "spaces/ABCDEFGH"
  • space.display_name: Lọc không gian dựa trên một phần tên hiển thị trùng khớp. Kết quả chỉ bao gồm 5 không gian phù hợp nhất. Ví dụ: space.display_name:Project
  • attachment: Kiểm tra xem có tệp đính kèm hay không. Ví dụ: attachment:*
  • annotations.user_mentions.user.name: Lọc theo lượt đề cập. Ví dụ: annotations.user_mentions.user.name:"users/me"

Tìm kiếm bằng hàm

Bạn có thể dùng tính năng lọc nâng cao thông qua các hàm sau:

  • has_link: Trả về những thông báo có chứa ít nhất một siêu liên kết.
  • is_unread: Trả về những thông báo mà người dùng chưa đọc.

Trên nhiều trường, hệ thống chỉ hỗ trợ toán tử AND. Ví dụ:sender.name = "users/me" AND is_unread().