whaticket-logo-white.png
Centro de Ayuda
Cómo automatizar alertas de correo en WhatsApp con Gmail, Gemini y Whaticket

🔷 En este artículo se explica cómo crear una automatización que permite recibir notificaciones de nuevos correos electrónicos directamente en WhatsApp. Utilizando Gmail, la inteligencia artificial Gemini, Zapier y la API de Whaticket, es posible generar un resumen automático del correo recibido y enviarlo como alerta al WhatsApp configurado.

Este flujo es especialmente útil para monitorear correos importantes, detectar oportunidades de negocio o recibir alertas sin necesidad de revisar constantemente la bandeja de entrada.

🟢 ¿Qué permite esta automatización?

Esta integración conecta diferentes herramientas para transformar un correo electrónico en una notificación automática de WhatsApp.

Cada vez que llegue un nuevo correo a Gmail, Zapier activará el flujo, Gemini analizará el contenido del correo utilizando inteligencia artificial y Whaticket enviará el resumen directamente al WhatsApp configurado.

▪️ Recibir alertas de correos importantes en WhatsApp.
▪️ Generar resúmenes automáticos utilizando inteligencia artificial.
▪️ Identificar si un correo requiere acción.
▪️ Automatizar el monitoreo de correos importantes.

🟢 Herramientas utilizadas en la automatización

⚙️ Gmail

Gmail es un servicio de correo electrónico basado en la nube desarrollado por Google. Ofrece una versión gratuita con funciones básicas y planes empresariales dentro de Google Workspace con almacenamiento ampliado, dominios personalizados y herramientas de administración.

⚙️ Gemini IA

Gemini es el modelo de inteligencia artificial desarrollado por Google. Permite analizar texto, generar resúmenes, clasificar contenido y extraer información relevante. Puede integrarse en Zapier mediante API.

⚙️ Zapier

Zapier es una plataforma de automatización sin código que conecta diferentes aplicaciones. Permite crear flujos automáticos llamados Zaps que ejecutan acciones cuando ocurre un evento específico.

⚙️ API Send de Whaticket

La API Send permite enviar mensajes de WhatsApp desde integraciones externas.

▪️ Cada mensaje enviado consume créditos.
▪️ Los créditos se adquieren dentro de los planes disponibles.
▪️ Los créditos no tienen fecha de vencimiento.

🟢 Requisitos antes de comenzar

Antes de iniciar la automatización es necesario contar con:

▪️ Una cuenta en Zapier.
▪️ Una cuenta de Gmail conectada a Zapier.
▪️ Acceso a Whaticket con API Send habilitada.
▪️ Token de API generado en Whaticket.
▪️ ID de conexión de WhatsApp disponible en
Whaticket → Conexiones → Editar → ícono de carpeta.

🟢 Paso a paso de la automatización

🔵 Integrar Gmail en Zapier

  1. Acceder a Zapier.
  2. Dirigirse a la sección Zaps.
  3. Hacer clic en Create para crear una nueva automatización.
  • Configurar el evento disparador

Seleccionar la aplicación Gmail.

Trigger Event → New Email

Conectar la cuenta de Gmail con las credenciales correspondientes.

Hacer clic en Continue.


  • Seleccionar la bandeja o etiqueta

Elegir el criterio que activará la automatización.

Puede ser por ejemplo:

▪️ Bandeja de entrada.
▪️ Una etiqueta específica.
▪️ Una búsqueda personalizada.


Esto permitirá que la automatización se active cuando llegue un correo que cumpla ese criterio.

Probar el disparador

  • Zapier mostrará ejemplos de correos recientes.

Verificar que aparezcan los campos:

▪️ From Email
▪️ Subject
▪️ Body Plain

🟢 Analizar el correo con inteligencia artificial

🔵 Configurar Gemini en Zapier

Agregar un nuevo paso en el flujo utilizando Gemini.

Action Event → Send Prompt

Conectar la cuenta utilizando la API Key de Google AI.


Configuración del paso de Gemini dentro de Zapier.

  • Crear la API Key

Ingresar al sitio de Google AI Studio.

Crear una nueva clave de API.

Copiar la clave y pegarla en Zapier.


  • Configurar el modelo

Model → gemini-1.5-flash

API Version → dejar valor por defecto.

  • Configurar las instrucciones del sistema

El objetivo es que la inteligencia artificial:

▪️ Analice el correo recibido.
▪️ Clasifique el contenido.
▪️ Genere un resumen.
▪️ Extraiga datos importantes.

Ejemplo de instrucción para Gemini:

Eres un asistente que procesa correos de Gmail.

Tu tarea:

Lee el correo recibido.
Clasifícalo en una de estas categorías:

SPAM
PROMOCIÓN
IMPORTANTE

Si el correo es IMPORTANTE, genera un resumen breve (máximo 280 caracteres) y una respuesta sugerida profesional.

Extrae además:

remitente_nombre
remitente_email
links
telefonos
idioma_detectado
prioridad
requiere_accion


  • Probar el paso de IA

Ejecutar la prueba.

Verificar que Gemini genere una respuesta en formato JSON.


🟢 Separar los campos generados por la IA

🔵 Añadir paso de código en Zapier

Agregar un nuevo paso utilizando:

App → Code

Action Event → Run Javascript

Este paso permite procesar el JSON generado por Gemini y separar los campos para utilizarlos posteriormente.


Configuración del paso Code by Zapier.

  • Configurar los datos de entrada

En Input Data

Agregar un campo llamado:

text

Asignar el campo de salida generado por Gemini.


  • Agregar el código JavaScript

Este código se utiliza para:

▪️ limpiar el JSON generado por la IA
▪️ separar los campos
▪️ extraer teléfonos y enlaces
▪️ preparar los datos para el envío a WhatsApp

'use strict';


/**
* Extrae el bloque JSON desde un texto del modelo (Gemini),
* eliminando cercas de código tipo ```json ... ``` o ``` ... ```.
*/
function extractJsonBlock(raw = '') {
let candidate = raw;
const fenceJson = raw.match(/```json\s*([\s\S]*?)```/i);
const fenceAny = raw.match(/```([\s\S]*?)```/);
if (fenceJson) candidate = fenceJson[1].trim();
else if (fenceAny) candidate = fenceAny[1].trim();
return candidate;
}

/** Quita comas finales antes de } o ] para evitar errores de parseo */
function fixTrailingCommas(s = '') {
return s.replace(/,\s*([}\]])/g, '$1');
}

/** Normaliza comillas “tipográficas” a comillas estándar */
function normalizeQuotes(s = '') {
return s.replace(/[“”]/g, '"').replace(/[‘’]/g, "'");
}

/** Deja solo dígitos (útil para teléfonos) */
const onlyDigits = (s) => (s || '').replace(/\D+/g, '');

/** Asegura un array */
const arr = (v) => Array.isArray(v) ? v : (v == null ? [] : [v]);

// ----- Entrada del paso anterior -----
const raw = inputData.text || '';
let candidate = extractJsonBlock(raw);
if (!candidate.trim()) candidate = raw.trim();

// Intentos de parseo (sin romper el contenido)
let data = null;
const attempts = [
(s) => JSON.parse(s),
(s) => JSON.parse(normalizeQuotes(s)),
(s) => JSON.parse(fixTrailingCommas(normalizeQuotes(s))),
];

for (const tryParse of attempts) {
try {
data = tryParse(candidate);
break;
} catch (e) { /* sigue probando */ }
}

// Si no se pudo parsear, devolvemos estructura vacía + crudo para depurar
if (!data || typeof data !== 'object') {
return {
parse_ok: false,
json_pretty: '',
json_raw: candidate,
classification: '',
resumen: '',
respuesta_sugerida: '',
remitente_nombre: '',
remitente_email: '',
asunto_original: '',
idioma_detectado: '',
prioridad: '',
requiere_accion: '',
links: '',
links_json: '[]',
phones_all: '',
phones_json: '[]',
phone_primary_digits: '',
phone_primary_plus: ''
};
}

// ----- Normalización de claves -----
const pick = (...keys) => {
for (const k of keys) {
if (data[k] != null && data[k] !== '') return data[k];
}
return '';
};

const classification = pick('clasificacion', 'clasificación') || '';
const resumen = pick('resumen', 'summary', 'resumo', 'texto');
const respuesta = pick('respuesta_sugerida', 'respuesta', 'reply_sugerida');
const remitenteNombre = pick('remitente_nombre', 'from_name', 'remitente');
const remitenteEmail = pick('remitente_email', 'from_email', 'email');
const asunto = pick('asunto_original', 'subject', 'asunto');
const idioma = pick('idioma_detectado', 'idioma', 'language');
const prioridad = pick('prioridad', 'priority');
let requiereAccion = pick('requiere_accion', 'requiere_acción', 'requires_action');

// Normaliza booleanos escritos como texto
if (typeof requiereAccion === 'string') {
requiereAccion = /true|sí|si|yes/iu.test(requiereAccion);
} else {
requiereAccion = !!requiereAccion;
}

// Links (CSV y JSON)
const linksArr = arr(data.links).filter(Boolean).map(String);
const linksCsv = linksArr.join(', ');

// Teléfonos: solo dígitos, longitud 10–15, sin "+"
let phonesArr = arr(data.telefonos).map(v => onlyDigits(String(v)));
phonesArr = phonesArr.filter(p => p.length >= 10 && p.length <= 15);

// Principal y variante con "+"
const phonePrimary = phonesArr[0] || '';
const phonePlus = phonePrimary ? `+${phonePrimary}` : '';

// ----- Salida lista para mapear en el siguiente paso -----
return {
parse_ok: true,
json_pretty: JSON.stringify(data, null, 2),
json_raw: candidate,

classification: String(classification || ''),
resumen: String(resumen || ''),
respuesta_sugerida: String(respuesta || ''),

remitente_nombre: String(remitenteNombre || ''),
remitente_email: String(remitenteEmail || ''),
asunto_original: String(asunto || ''),
idioma_detectado: String(idioma || ''),
prioridad: String(prioridad || ''),
requiere_accion: requiereAccion,

links: linksCsv,
links_json: JSON.stringify(linksArr),

phones_all: phonesArr.join(','),
phones_json: JSON.stringify(phonesArr),
phone_primary_digits: phonePrimary,
phone_primary_plus: phonePlus
};


  • Probar el paso de JavaScript

Ejecutar la prueba.

Verificar que los campos aparezcan correctamente separados en Data Out.

🟢 Implementación de Whaticket

🔵 Agregar acción Webhooks

Añadir un nuevo paso utilizando:

App → Webhooks by Zapier

Event → Custom Request


Configuración de Webhooks en Zapier.

  • Configuración principal

Method
POST

URL
https://api.whaticket.com/api/v1/messages

Data Pass-Through
false


  • Cuerpo de la solicitud

Insertar el siguiente JSON en el Body.

Los campos pueden mapearse utilizando los datos obtenidos en los pasos anteriores.

{
"whatsappId": "AQUI_VA_EL_ID_DE_TU_WHATSAPP",
"messages": [
{
"number": "telefono_limpio",
"body": "Mensaje de prueba a enviar por contacto"
}
]
}


🟢 Configuración adicional

Dentro de la acción configurar:

Unflatten → Yes

Headers

Content-Type: application/json

Authorization:

Bearer TU_TOKEN_DE_API_DE_WHATICKET

🟢 Probar la automatización

Hacer clic en Test.

Si la integración funciona correctamente, aparecerá una respuesta similar a:

Message messages scheduled.



Si ocurre un error, Zapier mostrará el motivo para poder corregirlo.

🟢 Publicar la automatización

Si la prueba funciona correctamente:

Activar el Zap haciendo clic en Turn on.

A partir de ese momento:

Cada vez que llegue un correo que cumpla las condiciones configuradas, se enviará automáticamente una notificación a WhatsApp.

🟢 ¿Dónde aparece el mensaje en Whaticket?

El mensaje enviado mediante la API aparecerá dentro de Whaticket como un ticket.

Si no se define asignación específica, el ticket aparecerá inicialmente en la sección de resueltos.

🟢 Recomendaciones importantes

▪️ Verificar que existan créditos disponibles en la API Send.
▪️ Confirmar que el JSON esté correctamente estructurado.
▪️ Revisar que el número de teléfono esté formateado correctamente.
▪️ Probar el flujo completo antes de activarlo en producción.

💡 Recomendación

Si es posible, se recomienda contar con apoyo de un desarrollador para validar el mapeo de campos y la estructura del JSON durante la integración.

🟢 Resumen

▪️ Objetivo: recibir una alerta en WhatsApp cuando llegue un correo importante.

▪️ Herramientas utilizadas:
Gmail → Gemini IA → JavaScript → Whaticket API Send.

▪️ Resultado:
Un resumen automático del correo será enviado a WhatsApp como notificación.

Importante: Whaticket no se responsabiliza por errores de configuración, falta de créditos o costos asociados a plataformas externas utilizadas en la integración.

¿Tienes dudas adicionales? No te preocupes, estamos aquí para ayudarte. Entra en contacto con nuestro equipo presionando el botón de "Soporte" ubicado en el menú izquierdo de nuestra plataforma.

¿Quedó resuelta tu pregunta?