ניהול שרשורים

במאמר הזה מוסבר איך לאחזר הודעות בשרשור ולהוסיף הודעות לשרשורים באמצעות Gmail API.

‫Gmail API משתמש במשאב threads כדי לקבץ תשובות לאימייל עם ההודעה המקורית שלהן לשיחה או לשרשור אחד. כך תוכלו לאחזר את כל ההודעות בשיחה, לפי הסדר, כדי להבין את ההקשר של ההודעה או כדי לדייק את תוצאות החיפוש.

בדומה למשאב messages, אפשר גם להוסיף תוויות לשרשורים. עם זאת, בניגוד להודעות, אי אפשר ליצור שרשורים, אלא רק למחוק אותם. עם זאת, אפשר להוסיף הודעות לשרשור.

אחזור שרשורים

השרשורים מאפשרים לשלוף את ההודעות בשיחה לפי הסדר. אם תציינו קבוצה של שרשורים, תוכלו לקבץ את ההודעות לפי שיחה ולספק הקשר נוסף. אפשר לאחזר רשימה של שרשורים באמצעות method‏ threads.list, או לאחזר שרשור ספציפי באמצעות method‏ threads.get.

בדוגמת הקוד הבאה אפשר לראות איך להשתמש במתודות threads.get ו-threads.list בדוגמה שמחלצת את השרשורים הכי פעילים בתיבת הדואר הנכנס. ה-method‏ threads.list מאחזר את כל מזהי השרשורים, ואז threads.get מאחזר את כל ההודעות בכל שרשור. בהודעות עם שלוש תשובות או יותר, אנחנו מחלצים את השורה Subject ומציגים את השורות הלא ריקות ואת מספר ההודעות בשרשור.

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

אפשר גם לסנן שרשורים באמצעות אותם פרמטרים של שאילתות שמשמשים למשאב messages. אם הודעה כלשהי בשרשור תואמת לשאילתה, השרשור יוחזר בתוצאה.

הוספת טיוטות והודעות לשרשורים

אם אתם שולחים או מעבירים הודעות שהן תשובה לאימייל אחר או חלק משיחה, האפליקציה שלכם צריכה להוסיף את ההודעה לשרשור הרלוונטי. כך קל יותר למשתמשי Gmail שמשתתפים בשיחה להבין את ההודעה בהקשר.

אפשר להוסיף טיוטה לשרשור כחלק מיצירה, עדכון או שליחה של הודעה באמצעות מקור המידע drafts.

אפשר גם להוסיף הודעה לשרשור כחלק מהוספה או שליחה של הודעה באמצעות מקור המידע messages.

כדי שיהיה אפשר לכלול טיוטה או הודעה בשרשור, הן צריכות לעמוד בקריטריונים הבאים:

  1. הערך המבוקש threadId חייב להיות מצוין כחלק מהמשאב drafts.message או messages שאתם מספקים עם הבקשה.

  2. הכותרות References ו-In-Reply-To צריכות להיות מוגדרות בהתאם לתקן RFC 2822.

  3. הכותרות Subject צריכות להיות זהות.

דוגמאות קוד לשימוש ב-threadId זמינות במאמרים יצירת טיוטות ושליחת הודעות. בשני המקרים, צריך לכלול את יעד threadId במשאב messages של הבקשה.