Quản lý luồng

Tài liệu này giải thích cách truy xuất tin nhắn trong chuỗi và thêm tin nhắn vào chuỗi bằng API Gmail.

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

Giống như tài nguyên messages, 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 mà chỉ có thể xoá chuỗi tin nhắn. Tuy nhiên, bạn có thể chèn tin nhắn vào một chuỗi.

Truy xuất các luồng

Luồng cung cấp một cách để truy xuất các tin nhắn trong một cuộc trò chuyện theo thứ tự. Bằng cách liệt kê một bộ luồng, bạn có thể chọn nhóm các thư 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 các luồng bằng phương thức threads.list hoặc truy xuất một luồng cụ thể bằng phương thức threads.get.

Mã mẫu sau đây cho thấy cách sử dụng các phương thức threads.getthreads.list trong một mẫu truy xuất các chuỗi trò chuyện sôi nổi 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 luồng, sau đó threads.get lấy tất cả tin nhắn trong mỗi luồng. Đối với những tin nhắn có từ 3 câu trả lời trở lên, chúng tôi sẽ trích xuất dòng Subject và hiển thị những dòng không trống cùng với số lượng tin nhắn trong chuỗi.

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

Bạn cũng có thể lọc các chuỗi bằng cách sử dụng các tham số truy vấn giống như những tham số được dùng cho tài nguyên messages. Nếu có bất kỳ thư nào trong một chuỗi khớp với truy vấn, thì chuỗi đó sẽ được trả về trong kết quả.

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

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

Bạn có thể thêm bản nháp vào một chuỗi trong quá trình tạo, cập nhật hoặc gửi tin nhắn bằng tài nguyên drafts.

Bạn cũng có thể thêm tin nhắn vào một chuỗi trong quá trình chèn hoặc gửi tin nhắn bằng tài nguyên messages.

Để thuộc một chuỗi, thư nháp hoặc thư phải đáp ứng các tiêu chí sau:

  1. Bạn phải chỉ định threadId được yêu cầu trong drafts.message hoặc tài nguyên messages mà bạn cung cấp cùng với yêu cầu.

  2. Bạn phải đặt tiêu đề ReferencesIn-Reply-To theo tiêu chuẩn RFC 2822.

  3. Tiêu đề Subject phải khớp.

Để xem các mẫu mã về cách sử dụng threadId, hãy xem phần Tạo bản nháp hoặc Gửi thư. Trong cả hai trường hợp, bạn cần đưa threadId mục tiêu vào tài nguyên messages trong yêu cầu của mình.