Administra los subprocesos

En este documento, se explica cómo recuperar mensajes de subprocesos y agregar mensajes a subprocesos con la API de Gmail.

La API de Gmail usa el recurso threads para agrupar las respuestas de correos electrónicos con su mensaje original en una sola conversación o hilo. Esto te permite recuperar todos los mensajes de una conversación, en orden, lo que facilita tener contexto para un mensaje o refinar los resultados de la búsqueda.

Al igual que el recurso messages, los subprocesos también pueden tener etiquetas aplicadas. Sin embargo, a diferencia de los mensajes, los subprocesos no se pueden crear, solo borrar. Sin embargo, los mensajes se pueden insertar en una conversación.

Recupera subprocesos

Los subprocesos proporcionan una forma de recuperar mensajes en una conversación, en orden. Al enumerar un conjunto de subprocesos, puedes optar por agrupar los mensajes por conversación y proporcionar contexto adicional. Puedes recuperar una lista de subprocesos con el método threads.list o recuperar un subproceso específico con el método threads.get.

En el siguiente ejemplo de código, se muestra cómo usar los métodos threads.get y threads.list en un ejemplo que recupera los subprocesos más activos de tu bandeja de entrada. El método threads.list recupera todos los IDs de subprocesos y, luego, threads.get recupera todos los mensajes de cada subproceso. En el caso de los mensajes con tres o más respuestas, extraemos la línea Subject y mostramos las que no están vacías, además de la cantidad de mensajes en el hilo.

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

También puedes filtrar subprocesos con los mismos parámetros de consulta que se usan para el recurso messages. Si algún mensaje de un subproceso coincide con la búsqueda, el subproceso se devuelve en el resultado.

Agregar borradores y mensajes a los subprocesos

Si envías o migras mensajes que son una respuesta a otro correo electrónico o forman parte de una conversación, tu aplicación debe agregar ese mensaje al hilo relacionado. Esto facilita que los usuarios de Gmail que participan en la conversación mantengan el mensaje en contexto.

Se puede agregar un borrador a un subproceso como parte de la creación, la actualización o el envío de un mensaje con el recurso drafts.

También puedes agregar un mensaje a un subproceso como parte de la inserción o el envío de un mensaje con el recurso messages.

Para formar parte de un hilo, un borrador o un mensaje deben cumplir con los siguientes criterios:

  1. El threadId solicitado se debe especificar como parte del recurso drafts.message o messages que proporcionas con tu solicitud.

  2. Los encabezados References y In-Reply-To deben establecerse de conformidad con el estándar RFC 2822.

  3. Los encabezados Subject deben coincidir.

Para ver muestras de código sobre cómo usar threadId, consulta Crea borradores o Envía mensajes. En ambos casos, debes incluir el threadId de destino en el recurso messages de tu solicitud.