De WhatsApp a la hoja
Una automatización de Omniia o un webhook le avisan a la hoja cada vez que llega un lead o se cierra un chat, con el nombre, el teléfono y los campos que capturaste.
Conectar WhatsApp con Google Sheets sirve para dos cosas: que cada lead, chat cerrado o respuesta quede como una fila en la hoja, y que una lista de la hoja dispare mensajes por WhatsApp. Omniia no tiene un conector nativo con Sheets; se hace con sus webhooks y su API, por una de dos rutas: n8n, Zapier o Make, o un script de Google Apps Script.
Nueva campaña
Audiencia
Mensaje (plantilla)
Programar envío
Estado de envío
Plantillas de WhatsApp
Promoción octubre
AprobadaUna automatización de Omniia o un webhook le avisan a la hoja cada vez que llega un lead o se cierra un chat, con el nombre, el teléfono y los campos que capturaste.
Un script recorre las filas pendientes, envía una plantilla aprobada por la API de Omniia y marca cada fila como enviada o con el error.
Si la hoja solo era un puente, quizás te sirven más las Tablas de datos, que el bot consulta directo, o la importación y exportación de contactos en Excel.
Actualizado el 15 de octubre de 2026
| Ruta | Cómo funciona | Conviene si… |
|---|---|---|
| n8n, Zapier o Make | Reciben el webhook de Omniia y agregan la fila con su módulo de Google Sheets | No quieres tocar código o ya usas una de ellas |
| Google Apps Script | Un script de la hoja recibe los datos (doPost) o llama a la API de Omniia | Quieres algo gratuito y alguien del equipo lee un poco de JavaScript |
| Sin hoja | Los datos viven en Omniia: Tablas de datos o contactos importados desde Excel | La hoja solo era un puente |
Los módulos de Sheets tienen estos nombres, según la documentación de cada herramienta consultada el 15 de octubre de 2026: en n8n, el nodo Google Sheets con Append Row y Append or Update Row, y el disparador Google Sheets Trigger (fila agregada o actualizada); en Zapier, Create Spreadsheet Row y el disparador New Spreadsheet Row; en Make, Add a Row y Watch New Rows. Cómo se conecta cada herramienta con Omniia está en WhatsApp con n8n, Zapier o Make.
Ejemplo: una academia de inglés en Cali quiere una hoja con cada interesado que escribe por WhatsApp, con su nombre, su teléfono y el programa que le interesa, para que la directora la revise sin entrar al CRM. El chatbot ya pregunta el programa, lo guarda en el campo “programa” del contacto y le pone la etiqueta “Interesado”. Con Apps Script y una automatización de Omniia no hace falta ninguna herramienta en medio:
// Extensiones → Apps Script, en la hoja que tiene una pestaña llamada Leads
const CLAVE = 'cambia-esto-por-una-clave-larga';
function doPost(e) {
if (e.parameter.clave !== CLAVE) return ContentService.createTextOutput('no');
const datos = JSON.parse(e.postData.contents); // lo que envía "Avisar a otro sistema"
const c = datos.contact || {};
const campos = c.fields || {};
SpreadsheetApp.getActive().getSheetByName('Leads').appendRow([
new Date(),
c.name || '',
"'" + (c.phone || ''), // el apóstrofo deja el número como texto
campos.programa || '',
datos.automation ? datos.automation.name : '',
]);
return ContentService.createTextOutput('ok');
}La clave va en la URL porque el evento de una aplicación web de Apps Script no trae los encabezados HTTP, según la guía de Google, y por eso no se puede verificar la firma X-Omniia-Signature dentro del script. Si necesitas la firma, o quieres guardar otros eventos, como cada chat cerrado con su calificación, usa n8n, Zapier o Make con los webhooks de Ajustes → API.
Caso: una distribuidora de Bucaramanga tiene en una hoja los pedidos que se entregan esta semana y quiere confirmarle a cada cliente el día de entrega con una plantilla de utilidad. El script recorre las filas sin estado, envía la plantilla por la API de Omniia y escribe el resultado en la última columna.
const API = 'https://crm.omniia.app/api/v1/messages';
const CLAVE_API = 'omn_live_TU_CLAVE'; // Ajustes → API (no compartas esta hoja)
const CANAL = '<id-del-canal-oficial>'; // GET /api/v1/channels
function enviarEntregas() {
const hoja = SpreadsheetApp.getActive().getSheetByName('Entregas');
const filas = hoja.getDataRange().getDisplayValues(); // fila 1 = títulos
for (let i = 1; i < filas.length; i++) {
const [telefono, nombre, pedido, fecha, estado] = filas[i];
if (estado) continue; // ya se envió o ya falló: no repetir
const res = UrlFetchApp.fetch(API, {
method: 'post',
contentType: 'application/json',
headers: {
Authorization: 'Bearer ' + CLAVE_API,
'Idempotency-Key': 'entrega-' + pedido,
},
payload: JSON.stringify({
channelId: CANAL,
to: telefono.replace(/\D/g, ''),
type: 'template',
template: { name: 'entrega_programada', language: 'es_CO', variables: [nombre, pedido, fecha] },
}),
muteHttpExceptions: true,
});
const ok = res.getResponseCode() === 200;
hoja.getRange(i + 1, 5).setValue(ok ? 'enviado' : 'error: ' + res.getContentText().slice(0, 80));
Utilities.sleep(1500); // un envío cada segundo y medio
}
}La columna de estado y el Idempotency-Key cuidan lo mismo desde dos lados: que nadie reciba dos veces el aviso aunque el script se corra de nuevo. Si en la columna aparece meta_window_expired o template_variables_mismatch, el significado de cada error está en la guía de la API y los webhooks.
Un detalle que confunde: si las filas las agrega Zapier, n8n u otro script, un activador de edición de Apps Script no se dispara. La documentación de activadores de Google lo dice así: las ejecuciones de scripts y las peticiones a la API no hacen correr los activadores. Para reaccionar a filas nuevas usa el activador de tiempo o el disparador de filas nuevas de n8n, Zapier o Make.
Muchas veces la hoja de cálculo es un puente que sobra. Antes de conectarla, revisa si lo que necesitas ya existe dentro de Omniia:
| Necesidad | Mejor opción | Por qué |
|---|---|---|
| El bot responde precios, sedes, horarios o tarifas | Tablas de datos de Omniia | El flujo las lee con el nodo Consultar tabla y el agente de IA también las consulta, sin depender de otro servicio |
| Los datos cambian solos desde otro sistema varias veces al día | Hoja de Google con n8n o Apps Script | Las Tablas de datos se llenan a mano en una grilla; hoy no se cargan por la API |
| Subir la base de clientes una sola vez | Importar Excel (.xlsx) en Contactos | Crea los contactos con etiquetas y campos, listos para segmentar |
| Sacar un listado de contactos filtrado | Exportar a Excel desde Contactos | Sale con los filtros que aplicaste; el permiso de exportar se da por usuario |
| Un registro vivo de leads o atenciones para gerencia | Hoja de Google conectada | Lo ve y lo filtra gente que no entra a Omniia |
Si vas por la importación, en importar contactos de Excel a un CRM explicamos cómo preparar el archivo para que no falle. Y si tu equipo todavía lleva los clientes en una hoja, vale la pena leer CRM vs. Excel antes de construir más fórmulas.
1
bandeja para todos tus canales
24/7
tu agente de IA responde
1 link
para que tus clientes agenden solos
0
cláusulas de permanencia
¿Tienes otra duda? Escríbenos por WhatsApp y te ayudamos.
No. La conexión se arma con los webhooks y la API de Omniia, usando n8n, Zapier, Make o un script de Google Apps Script. Lo que sí es nativo es la importación y exportación de contactos en Excel.
Para unos cuantos avisos de utilidad, sí, con el script de esta página. Para una campaña a toda tu base, importa los contactos y usa las campañas de Omniia, que controlan el ritmo, la ventana horaria y los reportes de entrega.
Para cargar o descargar contactos, sí: Omniia importa y exporta archivos .xlsx. Las recetas de conexión en vivo de esta página están hechas para Google Sheets.
Google Sheets trata los números largos como cifras y puede cambiarlos de formato. Guarda la columna como texto o escribe el número con un apóstrofo delante, como hace el script de ejemplo.
No. Según Google, las ejecuciones de scripts y las peticiones a la API no hacen correr los activadores. Usa un activador de tiempo o el disparador de filas nuevas de n8n, Zapier o Make.
Sí, con el evento message.received cada mensaje es una fila, pero una hoja con miles de mensajes se vuelve lenta. El historial completo ya queda en la ficha de cada contacto en Omniia.
WhatsApp en n8n, Zapier y Make
Conecta WhatsApp con n8n, Zapier o Make usando los webhooks y la API de Omniia: cuándo conviene cada herramienta y cinco recetas paso a paso.
Importar contactos de Excel a un CRM: cómo preparar el archivo
Cómo importar contactos de Excel a un CRM sin errores: columnas, teléfonos con el 57, duplicados, etiquetas y la autorización antes de escribirles.
CRM vs Excel: cuándo pasar tus clientes de WhatsApp a un CRM
CRM vs Excel para gestionar clientes de WhatsApp: comparación honesta, cuándo Excel alcanza, señales de que ya no y cómo importar tu Excel a un CRM.
API y webhooks de WhatsApp
API REST y webhooks de WhatsApp: envía plantillas, crea contactos y recibe eventos firmados con HMAC-SHA256. Ejemplos en curl y Node.js para copiar.
Chatbot para WhatsApp
Crea tu chatbot para WhatsApp sin código con Omniia: editor visual, menús, captura de datos, agente con IA y derivación a un humano. Empieza gratis 1 semana.
WhatsApp con HubSpot
Integra WhatsApp con HubSpot con los webhooks y la API de Omniia y n8n, Zapier o Make: leads nuevos, una nota por chat y avisos por etapa del negocio.
Creas tu cuenta en minutos, conectas tu WhatsApp y nuestro equipo te acompaña para dejarlo funcionando.