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

‫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.