Blog · · 6 min de lectura

Cómo avisar a tus clientes antes de que caduque su vale o tarjeta regalo con n8n e IA

Guía paso a paso para que n8n revise cada mañana tus vales y tarjetas regalo en Google Sheets, detecte los que caducan pronto y prepare con IA un aviso claro en Gmail antes de que se pierda el saldo.

En una tienda, un restaurante, un spa o cualquier negocio con vales y tarjetas regalo, anotas la fecha de caducidad… y se te pasa. El cliente (o quien recibió el regalo) se queda con saldo sin usar, tú pierdes una visita y una posible venta adicional, y toca gestionar reclamaciones a deshora.

En esta guía vas a montar en n8n un flujo que cada mañana revisa un registro de vales y tarjetas regalo en Google Sheets, detecta los que caducan en ~14 o ~3 días y redacta con IA un aviso claro en Gmail. Tú revisas el borrador y lo envías.

Esto no es lo mismo que un aviso de caducidad de bonos de sesiones: ahí el cliente tiene un pack de clases o tratamientos con sesiones pendientes; aquí tiene un importe o un vale canjeable (tarjeta regalo, cheque regalo, cupón prepago). Tampoco sustituye a un aviso de renovación de suscripción: ese es un plan recurrente; este es un saldo prepago con fecha límite. Y no es un seguimiento de presupuestos: ahí persigues una oferta comercial; aquí avisas de que un vale ya comprado está a punto de caducar.

Qué vas a construir

Un flujo de cinco pasos que funciona solo todos los días:

  1. Disparador diario: un nodo Schedule Trigger se ejecuta a las 9:25.
  2. Lectura de vales: el nodo Google Sheets lee tu hoja «Vales y tarjetas regalo».
  3. Filtro por caducidad y saldo: un nodo Code se queda con las filas que caducan en ~14 o ~3 días, con saldo restante > 0 y que aún no han recibido el aviso de esa fase.
  4. Aviso con IA: un nodo Basic LLM Chain escribe un correo cercano que recuerda el vale, el saldo y la fecha de caducidad.
  5. Borrador y registro: Gmail crea el borrador y Google Sheets anota la fase avisada en aviso_enviado.

Lo que necesitas

  • Una instancia de n8n (en la nube o instalada gratis en tu ordenador).
  • Google Sheets y Gmail conectados en n8n.
  • Una clave de API de OpenAI u otro proveedor de IA, con un límite mensual de gasto configurado en su panel.
  • Una hoja «Vales y tarjetas regalo» con estas columnas: cliente, email, codigo (o referencia del vale), producto (tipo: «Tarjeta regalo 50 €», «Vale cena 2 personas»…), saldo_restante, moneda (EUR), fecha_caducidad (AAAA-MM-DD), notas y aviso_enviado (vacía o 1 / 2).

Puedes rellenar la hoja a mano al emitir un vale, o con otro flujo de n8n que escriba ahí cada venta y vaya descontando saldo_restante al canjear. Esta guía asume que las filas ya están en Sheets.

Paso 1: prepara la hoja de vales

Mantén fecha_caducidad con formato de fecha coherente (AAAA-MM-DD). Deja solo vales activos con saldo; archiva los canjeados al completo o ya caducados. En producto usa nombres claros. Actualiza saldo_restante cada vez que se canjea (a mano o con otro flujo). En notas apunta preferencias útiles («prefiere WhatsApp», «es un regalo de Ana», «quiere usarlo en menú degustación»).

Paso 2: disparador y lectura

Añade un Schedule Trigger diario a las 9:25 (revisa que la zona horaria del flujo, en Settings, sea Europe/Madrid). Conéctalo a Google Sheets → Get Row(s) apuntando a tu hoja «Vales y tarjetas regalo».

Paso 3: filtra los vales próximos a caducar

Añade un nodo Code (modo Run Once for All Items) con este código:

const hoy = new Date(); hoy.setHours(0, 0, 0, 0);
const salida = [];
for (const i of $input.all()) {
  const c = i.json;
  if (!c.email || !c.fecha_caducidad) continue;
  const saldo = Number(c.saldo_restante);
  if (!Number.isFinite(saldo) || saldo <= 0) continue; // sin saldo
  const cad = new Date(c.fecha_caducidad); cad.setHours(0, 0, 0, 0);
  const dias = Math.round((cad - hoy) / 86400000);
  if (dias < 0 || dias > 16) continue; // ya caducado o demasiado lejos
  const ya = Number(c.aviso_enviado || 0);
  let fase = null;
  if (ya < 1 && dias >= 12 && dias <= 15) fase = 1;   // ~14 días
  else if (ya <= 1 && dias >= 0 && dias <= 4) fase = 2; // ~3 días
  if (!fase) continue;
  salida.push({ json: { ...c, dias, fase, saldo_restante: saldo } });
}
return salida;

Así cada vale recibe como máximo dos avisos: uno ~dos semanas antes y otro los últimos días. Si saldo_restante es 0, se omite. Si no hay nada pendiente, el flujo termina sin gastar IA. Puedes ajustar las ventanas (12–15 y 0–4) a tu sector.

Paso 4: redacta el aviso con IA

Añade un Basic LLM Chain con un modelo pequeño y barato (por ejemplo, gpt-4o-mini) y este prompt:

Eres quien gestiona vales y tarjetas regalo de [NOMBRE DEL NEGOCIO]. Escribe un correo breve para
{{ $json.cliente }} avisando de que su «{{ $json.producto }}» (ref. {{ $json.codigo }}) caduca el
{{ $json.fecha_caducidad }} (quedan {{ $json.dias }} días).
Saldo restante: {{ $json.saldo_restante }} {{ $json.moneda }}.
Notas: {{ $json.notas }}
- Tono cercano y profesional, en español, máximo 7 frases.
- Recuerda el saldo y la fecha de caducidad; no alarmes ni culpes.
- Invita a canjearlo o a reservar si aplica; no inventes precios, menús ni descuentos.
- Si en notas hay preferencias (canal, tipo de uso), tenlas en cuenta sin inventar datos.
- No inventes enlaces de reserva, importes ni fechas que no estén en los datos.
Devuelve solo el cuerpo del correo.

Los datos salen de tu hoja; la IA solo pone el tono. Si tu TPV o software de fidelización ya manda un email propio de caducidad, usa este flujo como segundo aviso más humano o para vales que gestionas a mano.

Paso 5: crea el borrador y marca el aviso

Conecta un nodo Gmail → Create Draft con el destinatario {{ $('Code').item.json.email }}, el asunto Tu vale caduca pronto · {{ $('Code').item.json.producto }} y el texto de la IA en el cuerpo. Usar borradores te deja revisar antes de enviar, igual que en avisos de caducidad de bonos de sesiones o avisos de renovación de suscripciones.

Después, un nodo Google Sheets → Update Row que busque por email + codigo (o fecha_caducidad si no usas código) y escriba la fase en aviso_enviado.

Cuando tengas confianza en los textos, puedes cambiar Create Draft por Send.

Cómo probarlo

  1. Crea una fila de prueba con tu propio correo, un fecha_caducidad dentro de ~14 días, saldo_restante > 0 y aviso_enviado vacío.
  2. Ejecuta el flujo a mano y comprueba que aparece el borrador y que aviso_enviado pasa a 1.
  3. Ejecútalo otra vez: no debe crearse ningún borrador nuevo (fuera de la ventana de fase 1).
  4. Cambia fecha_caducidad para que queden ~3 días (dejando aviso_enviado en 1) y confirma que se prepara el segundo aviso.
  5. Pon saldo_restante a 0 y comprueba que el flujo no genera aviso.

Coste y buenas prácticas

  • Coste: cada aviso cuesta menos de una décima de céntimo en la API de IA. Pon un límite mensual de gasto en el panel del proveedor.
  • No seas pesado: como máximo ~2 avisos por vale; si no canjea, anótalo y, si aplica, pasa a un flujo de reactivación de clientes inactivos.
  • Mantén saldo_restante al día: si no descuentas al canjear, avisarás de vales ya usados o te saltarás vales con saldo.
  • Respeta la normativa de vales: en muchos países hay plazos mínimos o reglas sobre caducidad; este flujo avisa, no inventa la política legal de tu negocio.
  • No inventes precios ni enlaces: el prompt no debe inventar ofertas que no estén en tus datos.
  • Avisa de errores: activa un flujo de errores para enterarte si Gmail o la hoja fallan, como en gestión de errores en n8n.
  • Combínalo con recordatorios de citas cuando el cliente reserve para canjear el vale, y con avisos de caducidad de bonos de sesiones si también vendes packs de clases.

Empieza con plantillas listas para importar

Si quieres tener ya montada la base de atención al cliente en n8n, descarga gratis el agente de WhatsApp o echa un vistazo al pack completo AgentKiosk: 8 agentes probados en español e inglés, con su workflow, su prompt y su guía, listos para importar y combinar con estos avisos de caducidad de vales y tarjetas regalo.