Cómo administrar subprocesos

La API de Gmail usa recursos de Thread para agrupar las respuestas de correo electrónico con su mensaje original en una sola conversación o conversación. Esto te permite recuperar todos los mensajes de una conversación en orden, lo que facilita tener contexto para un mensaje o definir mejor los resultados de la búsqueda.

Al igual que los mensajes, es posible que los subprocesos también tengan etiquetas aplicadas. Sin embargo, a diferencia de los mensajes, las conversaciones no se pueden crear, solo se pueden borrar. Sin embargo, los mensajes se pueden insertar en una conversación.

Contenido

Cómo recuperar subprocesos

Las conversaciones proporcionan una forma sencilla de recuperar los mensajes de una conversación en orden. Si enumeras un conjunto de conversaciones, puedes agrupar los mensajes por conversación y proporcionar contexto adicional. Puedes obtener una lista de subprocesos con el método threads.list o un subproceso específico con threads.get. También puedes filtrar subprocesos con los mismos parámetros de consulta que para el recurso Message. Si algún mensaje de un subproceso coincide con la consulta, ese subproceso se muestra en el resultado.

En la muestra de código que aparece a continuación, se explica cómo usar ambos métodos en una muestra que muestra las conversaciones con más tráfico en tu bandeja de entrada. El método threads.list recupera todos los IDs de subproceso y, luego, threads.get captura todos los mensajes de cada subproceso. Para aquellos con 3 o más respuestas, extraemos la línea Subject y mostramos las que no están vacías más la cantidad de mensajes en el subproceso. También encontrarás esta muestra de código en el video de DevByte correspondiente.

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

Agregar borradores y mensajes a las conversaciones

Si envías o migras mensajes que son una respuesta a otro correo electrónico o parte de una conversación, tu aplicación debe agregar ese mensaje a la conversación relacionada. Esto permite que los usuarios de Gmail que participan en la conversación mantengan el mensaje en contexto con mayor facilidad.

Se puede agregar un borrador a un subproceso como parte de la creación, la actualización o el envío de un mensaje de borrador. También puedes agregar un mensaje a una conversación como parte de la inserción o el envío de un mensaje.

Para formar parte de una conversación, un mensaje o borrador debe cumplir con los siguientes criterios:

  1. El threadId solicitado se debe especificar en el Message o el Draft.Message que proporciones en la solicitud.
  2. Los encabezados References y In-Reply-To deben configurarse de acuerdo con el estándar RFC 2822.
  3. Los encabezados Subject deben coincidir.

Consulta los ejemplos de cómo crear un borrador o enviar un mensaje. En ambos casos, simplemente agregarías una clave threadId vinculada con un ID de subproceso a los metadatos de un mensaje, el objeto message.