Módulo 3: Google Calendar

Crear Eventos

Descripción de la cápsula

Crear eventos es la operación que define este módulo. Si automatizas una sola cosa con Calendar, será esto: un lead agenda una llamada → se crea el evento. Un pedido se confirma → se agenda la entrega. Un formulario se llena → se bloquea un horario.

En la cápsula 02 ya creaste un evento de prueba con título y horario. Esta cápsula te lleva a crear eventos de verdad: con invitados que reciben la invitación, descripción con los datos del caso, ubicación, y — sobre todo — con todos los campos compuestos dinámicamente a partir de lo que llega al workflow.

Hay un detalle que vamos a tratar con cuidado pero sin agotarlo aquí: el horario. Para que un evento quede a la hora correcta, las fechas tienen que estar bien formadas. En esta cápsula usamos un enfoque que funciona; la cápsula 06 explica a fondo el porqué de las zonas horarias.


Lo que vas a aprender

Al terminar esta cápsula serás capaz de:

  • Crear eventos con todos sus campos principales
  • Definir el horario de inicio y fin de forma que quede correcto
  • Agregar invitados que reciben la invitación por correo
  • Componer título, descripción y ubicación dinámicamente
  • Crear eventos de día completo vs eventos con hora
  • Decidir qué campos incluir según el caso de negocio

La operación Create

Configuración base del nodo Google Calendar:

  • Resource: Event
  • Operation: Create
  • Calendar: el calendario destino
  • Start: fecha y hora de inicio
  • End: fecha y hora de fin

Y luego, como opciones adicionales (Add Field / Options): título, descripción, invitados, ubicación, recordatorios.


Los campos principales de un evento

CampoQué es¿Obligatorio?
StartCuándo empieza
EndCuándo termina
SummaryEl título del eventoTécnicamente no, pero siempre ponlo
DescriptionEl cuerpo / detallesNo
AttendeesLos invitados (correos)No
LocationDónde es (texto o dirección)No
RemindersAvisos antes del eventoNo (cápsula 06)

Un evento sin título aparece como "(Sin título)" en la agenda de todos — se ve mal y no comunica nada. El Summary no es obligatorio para la API, pero trátalo como si lo fuera.


El horario: Start y End

Aquí es donde más se equivoca la gente, así que vamos con un enfoque claro.

El formato que funciona

Los campos Start y End esperan una fecha y hora completa. El formato más seguro y sin ambigüedad es el ISO 8601:

2026-05-20T10:00:00

Eso es: año-mes-día, una T, hora:minuto:segundo.

Componer el horario con expressions

En la práctica, las fechas vienen de datos. Algunos casos:

Horario fijo desde un dato ya en formato fecha:

{{ $json.appointment_date }}

(si appointment_date ya viene como 2026-05-20T10:00:00)

A partir de "ahora" + un desfase (ej. "una llamada mañana a esta hora"):

Start: {{ $now.plus({ days: 1 }).toISO() }}
End:   {{ $now.plus({ days: 1, hours: 1 }).toISO() }}

El End relativo al Start (la regla de oro: el fin se calcula desde el inicio):

End: {{ $json.appointment_date.plus({ minutes: 30 }) }}

Regla: calcula el End a partir del Start, no por separado. Si el Start es "mañana 10:00" y el End también lo defines "a mano", el día que cambies uno olvidarás el otro. End = Start + duración nunca se desincroniza.

Sobre la zona horaria

El nodo de Google Calendar tiene un campo de Timezone. Por ahora, la regla práctica: configúralo explícitamente con tu zona (ej. America/Mexico_City) y sé consistente. La cápsula 06 explica a fondo por qué esto importa tanto y los casos peligrosos. Si tu evento de prueba de la cápsula 02 salió a una hora rara, este campo es la causa.


Eventos de día completo vs con hora

Hay dos tipos de evento:

TipoCuándo usarloCómo se define
Con horaUna llamada, una reunión, una entrega a las 3pmStart y End con fecha y hora
Día completoUn cumpleaños, una fecha límite, "vacaciones de Ana"Start y End con solo fecha, sin hora

El nodo suele tener una opción de All Day (todo el día). Actívala para eventos de día completo — si no, un "cumpleaños" quedaría como un evento de 1 hora a medianoche.


Agregar invitados

El campo Attendees convierte un evento privado en una invitación. Pones los correos de los invitados y Google les manda la invitación, aparece en su calendario, y reciben los recordatorios.

Attendees: {{ $json.customer_email }}

o varios separados por coma:

ana@example.com, beto@example.com

Cuidado con invitar automáticamente

Invitar gente automáticamente es potente y arriesgado. Cada invitación es un correo y una entrada en la agenda de otra persona. Si tu workflow se equivoca — invita al cliente equivocado, pone mal la hora, se ejecuta dos veces — el error le llega a una persona real. Antes de poner Attendees en un workflow que corre solo, asegúrate de que los datos son confiables. Para desarrollo, prueba con tus propios correos, no con los de clientes reales.


Componer descripción, título y ubicación

Los campos de texto se componen dinámicamente, igual que el cuerpo de un correo en el Módulo 2:

Título (Summary):

Llamada con {{ $json.name }} — {{ $json.service_type }}

Descripción:

Cliente: {{ $json.name }}
Email: {{ $json.email }}
Teléfono: {{ $json.phone || 'No proporcionado' }}
Tema: {{ $json.topic }}

Agendado automáticamente desde el formulario web.

Ubicación:

{{ $json.mode === 'virtual' ? 'Google Meet' : $json.address }}

Con valores por defecto para campos opcionales — el mismo diseño defensivo del mapeo del Módulo 1.


Trampas comunes

Trampa 1: End antes que Start (o sin End)

Qué pasa: Defines un Start pero el End queda igual, antes, o vacío → el evento es inválido o de duración cero.

Cómo evitar: Calcula el End a partir del Start más una duración. Nunca los definas como dos valores independientes.


Trampa 2: Evento sin título

Qué pasa: Olvidas el Summary y el evento aparece como "(Sin título)" en la agenda de todos.

Cómo evitar: Siempre incluye Summary, y hazlo informativo: quién, qué, por qué.


Trampa 3: La hora sale desplazada

Qué pasa: Pones "10:00" y el evento aparece a las 4:00 o las 16:00.

Cómo evitar: Configura el campo Timezone del nodo explícitamente con tu zona. Es el tema de la cápsula 06 — por ahora, configúralo y sé consistente.


Trampa 4: Invitar clientes reales en pruebas

Qué pasa: Pruebas el workflow con Attendees apuntando a correos de clientes reales. Cada prueba les manda una invitación. Tres pruebas = tres invitaciones confusas.

Cómo evitar: En desarrollo, usa tus propios correos como invitados. Solo conecta correos reales cuando el workflow esté validado.


Trampa 5: Fecha en formato ambiguo

Qué pasa: Pasas la fecha como 20/05/2026 10:00 y la API la malinterpreta (¿20 de mayo o mes 20?).

Cómo evitar: Usa ISO 8601 (2026-05-20T10:00:00) o un objeto DateTime de n8n. Nunca pases fechas como texto en formato local ambiguo.


Ejercicio: tres tipos de evento

Objetivo: practicar la creación de eventos con horario, con invitados y de día completo.

Tu tarea

Construye un workflow Manual Trigger → Set → Google Calendar (Create) y crea estos tres eventos (uno a la vez, ajustando el Set):

  1. Llamada con hora: "Llamada con Ana López" mañana de 10:00 a 10:30, con descripción que incluya un email de contacto
  2. Reunión con invitado: "Reunión de proyecto" pasado mañana de 16:00 a 17:00, con tu propio segundo correo como invitado
  3. Fecha límite (día completo): "Entrega de propuesta" en una fecha, modo All Day
Ver pistas
  1. Start: {{ $now.plus({ days: 1 }).set({ hour: 10, minute: 0 }).toISO() }}, End: {{ $now.plus({ days: 1 }).set({ hour: 10, minute: 30 }).toISO() }}. Configura el Timezone del nodo.
  2. Igual que el 1 pero con days: 2, horas 16-17, y agrega el campo Attendees con tu correo.
  3. Activa la opción All Day; Start y End solo con fecha, sin hora.

Verifica los tres en calendar.google.com — y revisa que las horas estén correctas.


Resumen y siguiente paso

  • Create es la operación estrella de Calendar — el caso de uso dominante del módulo
  • Campos principales: Start, End (obligatorios), Summary (siempre ponlo), Description, Attendees, Location
  • Usa ISO 8601 para las fechas; calcula el End a partir del Start + duración, nunca por separado
  • Configura el campo Timezone del nodo explícitamente — la cápsula 06 explica por qué
  • Día completo (All Day) vs con hora: elige según el tipo de evento
  • Attendees convierte el evento en invitación — potente pero arriesgado: en desarrollo usa tus propios correos
  • Título, descripción y ubicación se componen dinámicamente con expressions y valores por defecto
  • 5 trampas: End mal, sin título, hora desplazada, invitar clientes en pruebas, fechas ambiguas

Antes de avanzar deberías poder:

  • Crear un evento con horario, invitado y descripción
  • Calcular el End a partir del Start
  • Distinguir un evento de día completo de uno con hora

Lo que sigue (cápsula 04):

Ya sabes crear. Ahora aprendes a leer la agenda: listar y buscar eventos con filtros de fecha. Es lo que te permite responder "¿hay algo agendado este día?" antes de crear — el patrón "buscar antes de actuar" aplicado al calendario, para no agendar encima de lo que ya existe.


Recursos adicionales

  1. n8n Google Calendar node Docs - Operación Create y sus campos.
  2. ISO 8601 (formato de fecha) - El formato de fecha sin ambigüedad.
  3. n8n: trabajar con fechas - Métodos de DateTime como .plus() y .toISO().

Creado: Mayo 14, 2026 Versión: 1.0