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

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

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

תוכן עניינים

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

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

בדוגמת הקוד הבאה מוסבר איך להשתמש בשתי השיטות בדוגמה שמציגה את השרשור עם הכי הרבה צ'אטים בתיבת הדואר הנכנס. השיטה threads.list מאחזרת את כל מזהי השרשור, ואז threads.get אוספת את כל ההודעות בכל שרשור. בשרשורים עם 3 תשובות או יותר, אנחנו מחלצים את השורה Subject ומציגים את התשובות שאינן ריקות, יחד עם מספר ההודעות בשרשור. דוגמת הקוד הזו מופיעה גם בסרטון 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()

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

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

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

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

  1. צריך לציין את threadId המבוקש ב-Message או ב-Draft.Message שצירפת לבקשה.
  2. צריך להגדיר את הכותרות References ו-In-Reply-To בהתאם לתקן RFC 2822.
  3. הכותרות של Subject חייבות להתאים.

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