Quản lý luồng

API Gmail sử dụng tài nguyên Thread để nhóm các email trả lời chứa thư gốc thành một cuộc trò chuyện hoặc chuỗi. Thao tác này cho phép bạn truy xuất tất cả thư trong một cuộc trò chuyện theo thứ tự, giúp dễ dàng nắm bắt ngữ cảnh cho thư hoặc tinh chỉnh kết quả tìm kiếm.

Giống như tin nhắn, các luồng cũng có thể được áp dụng nhãn. Tuy nhiên, không giống như tin nhắn, bạn không thể tạo luồng mà chỉ có thể xoá luồng. Tuy nhiên, bạn có thể chèn tin nhắn vào một chuỗi.

Nội dung

Truy xuất chuỗi

Luồng là một cách đơn giản để truy xuất tin nhắn theo thứ tự trong một cuộc trò chuyện. Bằng cách liệt kê một nhóm chuỗi tin nhắn, bạn có thể chọn nhóm tin nhắn theo cuộc trò chuyện và cung cấp thêm ngữ cảnh. Bạn có thể truy xuất danh sách luồng bằng phương thức threads.list hoặc truy xuất một luồng cụ thể bằng threads.get. Bạn cũng có thể lọc luồng bằng cách sử dụng cùng tham số truy vấn như đối với tài nguyên Message. Nếu bất kỳ thông báo nào trong một luồng khớp với truy vấn, thì luồng đó sẽ được trả về trong kết quả.

Mã mẫu dưới đây minh hoạ cách sử dụng cả hai phương thức trong một mẫu hiển thị các chuỗi trò chuyện nhiều nhất trong hộp thư đến của bạn. Phương thức threads.list tìm nạp tất cả mã nhận dạng chuỗi, sau đó threads.get lấy tất cả tin nhắn trong mỗi chuỗi. Đối với những phản hồi có từ 3 phản hồi trở lên, chúng tôi trích xuất dòng Subject và hiển thị các dòng không trống cùng với số lượng tin nhắn trong chuỗi. Bạn cũng sẽ tìm thấy mã mẫu này trong video DevByte tương ứng.

Python

gmail/snippet/thread/threads.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def show_chatty_threads():
  """Display threads with long conversations(>= 3 messages)
  Return: None

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create gmail api client
    service = build("gmail", "v1", credentials=creds)

    # pylint: disable=maybe-no-member
    # pylint: disable:R1710
    threads = (
        service.users().threads().list(userId="me").execute().get("threads", [])
    )
    for thread in threads:
      tdata = (
          service.users().threads().get(userId="me", id=thread["id"]).execute()
      )
      nmsgs = len(tdata["messages"])

      # skip if <3 msgs in thread
      if nmsgs > 2:
        msg = tdata["messages"][0]["payload"]
        subject = ""
        for header in msg["headers"]:
          if header["name"] == "Subject":
            subject = header["value"]
            break
        if subject:  # skip if no Subject line
          print(f"- {subject}, {nmsgs}")
    return threads

  except HttpError as error:
    print(f"An error occurred: {error}")


if __name__ == "__main__":
  show_chatty_threads()

Thêm thư nháp và thư vào chuỗi thư

Nếu bạn đang gửi hoặc di chuyển thư là thư phản hồi cho một email khác hoặc một phần của cuộc trò chuyện, thì ứng dụng của bạn sẽ thêm thư đó vào chuỗi liên quan. Điều này giúp người dùng Gmail tham gia cuộc trò chuyện dễ dàng giữ được thư trong ngữ cảnh.

Bạn có thể thêm bản nháp vào luồng trong quá trình tạo, cập nhật hoặc gửi thông báo nháp. Bạn cũng có thể thêm tin nhắn vào chuỗi trong quá trình chèn hoặc gửi tin nhắn.

Để trở thành một phần của luồng, thông báo hoặc bản nháp phải đáp ứng các tiêu chí sau:

  1. threadId được yêu cầu phải được chỉ định trên Message hoặc Draft.Message mà bạn cung cấp cùng với yêu cầu của mình.
  2. Các tiêu đề ReferencesIn-Reply-To phải được đặt theo tiêu chuẩn RFC 2822.
  3. Các tiêu đề Subject phải khớp.

Hãy xem các ví dụ về cách tạo bản nháp hoặc gửi tin nhắn. Trong cả hai trường hợp, bạn chỉ cần thêm khoá threadId ghép nối với mã nhận dạng luồng vào siêu dữ liệu của thông báo, đối tượng message.