Skip to main content
Logo oficial de Gmail Puedes enviar el mismo correo de dos formas: con el paso gmail.send o con await gmail.send() dentro de un paso JavaScript. Destinatarios, asunto, cuerpo y adjuntos se describen igual. Cambia la envoltura: dónde declaras la cuenta y cómo entran los valores que vienen del trigger o de un paso anterior. La cuenta es una credencial conectada en Configuración → Credenciales. Guardas su clave; los tokens de acceso no forman parte de la automatización.
Guardar o publicar una automatización que envía con Gmail requiere permisos de administrador y una cuenta conectada. Aplica al paso gmail.send y a gmailCredentialKey en JavaScript.

Paso gmail.send

Un correo por paso. Los campos aceptan plantillas del trigger y de pasos anteriores.

Desde JavaScript

El global gmail en un paso code.javascript. Sirve para decidir el envío, mandar varios correos o leer el hilo.

Elige la interfaz

En las pestañas de abajo, Paso y JavaScript muestran el mismo envío. La selección se mantiene al bajar de ejemplo.

Campos del mensaje

Estos campos describen el correo. En el paso viven dentro de input, junto a credentialKey. En JavaScript son las propiedades de gmail.send(), y la cuenta va aparte. Envía subject o replyToMessageId. Con los dos, o sin ninguno, el envío se rechaza. Envía text, html o ambos.
replyTo es una dirección para respuestas futuras. replyToMessageId coloca este correo dentro del hilo de un mensaje que ya existe. Son campos distintos.
storagePath reenvía un adjunto del trigger Gmail; fileId usa un archivo de un paso anterior; url descarga un recurso HTTPS público o firmado, como el archivo de un tablero. URLs privadas, locales, demasiado grandes o con redirects inseguros se rechazan. También se bloquean ejecutables y tipos que Gmail no permite.

Dónde va la cuenta

credentialKey va dentro de input, mezclada con el mensaje. Las plantillas se resuelven en cada string antes de enviar.

Envío básico

Responder dentro del mismo hilo

Usa el id del mensaje que llegó por el trigger. El asunto, el hilo y las cabeceras de respuesta salen de ese mensaje: el campo de este envío es replyToMessageId, y subject corresponde a un correo nuevo. message.from trae nombre y correo (María López <cliente@ejemplo.com>). Puedes pasarlo tal cual en to. Ese envío no vuelve a iniciar Nuevo correo en Gmail: el trigger ignora los mensajes de la cuenta conectada. Responder al remitente no reentra en el flujo.

Reenviar un adjunto recibido

El ejemplo usa el primer adjunto de Nuevo correo en Gmail.
Las plantillas van en cada campo del adjunto.

Adjuntos de otros orígenes

Desde una URL o un campo de tablero

Los campos files de un tablero entregan name, url y type. Pásalos como plantillas; el backend descarga el archivo con límite de tamaño y protección contra SSRF.

Desde un paso anterior

Los pasos que producen WorkflowFileRef exponen sus archivos en steps.<índice>.files. Usa el id; el backend valida que pertenezca al mismo tenant, run y a un paso anterior.

Enviar desde JavaScript

Además del envío, el global gmail puede mandar varios correos en el mismo paso y volver a leer un hilo. El contrato de cada gmail.send() es el de Campos del mensaje, más idempotencyKey. Guía del sandbox, de input / output y del resto de globales: Paso JavaScript.

Varios correos

Cada await gmail.send() es un envío distinto. La envoltura del paso es la de la pestaña JavaScript: actionKey, code.javascript, gmailCredentialKey e input. En este ejemplo input.cliente es {{trigger.body.message.from}}. Guarda messageId si un seguimiento posterior debe responder en ese hilo.
Si omites idempotencyKey, las llamadas de esa ejecución reciben call-1, call-2, … según el orden en que llegan a gmail.send(). Cuando un if puede saltarse una llamada, una clave propia mantiene el mismo correo atado a la misma clave en el reintento. Hasta 200 caracteres: letras, números, ., _, : o -. El paso gmail.send cubre un solo envío y el motor le asigna la clave. Cuando el script llama gmail.send() más de una vez, idempotencyKey distingue cada uno.

Leer el hilo

gmail.getThread(threadId) consulta la conversación en ese momento. El trigger ya trae una copia en trigger.body.thread; usa getThread cuando necesitas los mensajes que existan al correr el paso, por ejemplo después de haber enviado una respuesta. threadId es un string de hasta 200 caracteres: letras, números, _ o -. Suele venir de trigger.body.message.threadId o del threadId que devolvió un gmail.send() anterior.
Para reenviar un archivo usa el storagePath del trigger, como en Reenviar un adjunto recibido.

Salida

El paso y gmail.send() devuelven el mismo objeto:
En el paso, este objeto es la salida ({{steps.N.output.messageId}}). En JavaScript lo recibes como retorno; asígnalo a output (o devuélvelo con return) si un paso posterior lo necesita. En el paso, la clave idempotente sale del run y del índice del paso. En JavaScript, de idempotencyKey o de call-1, call-2, …. Si el resultado del envío queda ambiguo, no se reenvía solo: revisa Enviados antes de lanzar otra ejecución.

Errores frecuentes

Relacionado