Zarządzanie wątkami

Interfejs Gmail API używa Threadzasobów, aby grupować odpowiedzi na e-maile z oryginalną wiadomością w jednym wątku. Dzięki temu możesz pobrać wszystkie wiadomości w rozmowie w odpowiedniej kolejności, co ułatwia uzyskanie kontekstu wiadomości lub doprecyzowanie wyników wyszukiwania.

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

Spis treści

Pobieranie wątków

Wątki to prosty sposób na pobieranie wiadomości w rozmowie w odpowiedniej kolejności. Wymieniając listę wątków, możesz grupować wiadomości według rozmowy i dostarczać dodatkowy kontekst. Listę wątków możesz pobrać za pomocą metody threads.list lub pobrać konkretny wątek za pomocą metody threads.get. Możesz też filtrować wątki, używając tych samych parametrów zapytania co w przypadku Message. Jeśli jakakolwiek wiadomość w wątku pasuje do zapytania, wątek ten jest zwracany w wyniku.

Poniższy przykładowy kod pokazuje, jak używać obu metod w przykładzie, który wyświetla najaktywniejsze wątki w Twojej skrzynce odbiorczej. Metoda threads.list pobiera wszystkie identyfikatory wątków, a następnie metoda threads.get pobiera wszystkie wiadomości w każdym wątku. W przypadku wątków z co najmniej 3 odpowiedziami wyodrębniamy wiersz Subject i wyświetlamy niepuste wiersze oraz liczbę wiadomości w wątku. Ten przykładowy kod znajdziesz też w odpowiednim filmie 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 kopii roboczych i wiadomości do wątków

Jeśli wysyłasz lub przenosisz wiadomości, które są odpowiedzią na innego e-maila lub stanowią część rozmowy, aplikacja powinna dodać tę wiadomość do powiązanego wątku. Ułatwia to użytkownikom Gmaila, którzy biorą udział w rozmowie, zachowanie kontekstu wiadomości.

Wersję roboczą można dodać do wątku w ramach tworzenia, aktualizowania lub wysyłania wersji roboczej wiadomości. Możesz też dodać wiadomość do wątku w ramach wstawiania lub wysyłania wiadomości.

Aby wiadomość lub wersja robocza mogła należeć do wątku, musi spełniać te kryteria:

  1. Żądany threadId musi być określony w parametrze Message lub Draft.Message, który podajesz w żądaniu.
  2. Nagłówki ReferencesIn-Reply-To muszą być ustawione zgodnie ze standardem RFC 2822.
  3. Nagłówki Subject muszą być zgodne.

Zapoznaj się z przykładami tworzenia wersji roboczej i wysyłania wiadomości. W obu przypadkach wystarczy dodać klucz threadId powiązany z identyfikatorem wątku do metadanych wiadomości, czyli obiektu message.