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

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