Zarządzanie wątkami

Interfejs Gmail API używa zasobów Thread do grupowania odpowiedzi e-mail z pierwotną wiadomością w 1 wątek lub w jednym wątku. Dzięki temu możesz pobrać wszystkie wiadomości w wątku w określonej kolejności, co ułatwia znalezienie kontekstu wiadomości i zawężenie wyników wyszukiwania.

Wątki mogą mieć etykiety, podobnie jak wiadomości. Wątków nie można jednak tworzyć, a jedynie usuwać. Wiadomości można jednak wstawiać do wątku.

Spis treści

Pobieram wątki

Wątki zapewniają prosty sposób pobierania wiadomości w wątku w określonej kolejności. Wyświetlając listę wątków, możesz pogrupować wiadomości według wątku i podać dodatkowy kontekst. Listę wątków możesz pobrać przy użyciu metody threads.list lub określony wątek za pomocą threads.get. Możesz też filtrować wątki, korzystając z tych samych parametrów zapytania co w przypadku zasobu Message. Jeśli jakakolwiek wiadomość w wątku pasuje do zapytania, jest on zwracany w wyniku.

Przykładowy kod poniżej pokazuje, jak użyć obu metod w przykładzie, który wyświetla w skrzynce odbiorczej najwięcej rozmów z największą liczbą wątków. Metoda threads.list pobiera wszystkie identyfikatory wątków, a następnie threads.get pobiera wszystkie wiadomości w każdym wątku. W przypadku tych, które mają co najmniej 3 odpowiedzi, wyodrębniamy wiersz Subject i wyświetlamy wszystkie niepuste odpowiedzi oraz liczbę wiadomości w wątku. Przykładowy kod znajdziesz w odpowiednim filmie dotyczącym DevByte.

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

dodawanie wersji roboczych i wiadomości do wątków,

Jeśli wysyłasz lub przenosisz wiadomości będące odpowiedzią na inny e-mail lub część wątku, aplikacja powinna dodać tę wiadomość do powiązanego wątku. Dzięki temu użytkownicy Gmaila, którzy biorą udział w wątku, mogą łatwiej zachować kontekst wiadomości.

Wersja robocza można dodać do wątku podczas tworzenia, aktualizowania lub wysyłania wersji roboczej wiadomości. Możesz też dodać wiadomość do wątku podczas wstawiania lub wysyłania wiadomości.

Aby wiadomość lub wersja robocza została uwzględniona w wątku, musi spełniać te kryteria:

  1. threadId musi być określony w Message lub Draft.Message w przesłanym żądaniu.
  2. Nagłówki References i In-Reply-To muszą być ustawione zgodnie ze standardem RFC 2822.
  3. Nagłówki Subject muszą być takie same.

Zobacz przykłady tworzenia wersji roboczej i wysyłania wiadomości. W obu przypadkach wystarczy dodać klucz threadId z identyfikatorem wątku do metadanych wiadomości – obiektu message.