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

ממשק ה-API של Gmail משתמש במשאבי 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.