Integraciones

Conecta WaMundo con las herramientas que ya usas: recibe tus mensajes y eventos en Make, n8n, Zapier o Google Sheets y envía WhatsApp desde ellas con la API.

Make
Automatización

Crea escenarios visuales que reciben tus mensajes de WaMundo y responden por WhatsApp.

n8n
Automatización

Flujos de automatización de código abierto, en la nube o en tu propio servidor.

Zapier
Automatización

Conecta WaMundo con las aplicaciones que ya usas mediante Zaps.

Google Sheets
Hojas de cálculo

Guarda tus mensajes en una hoja de cálculo y envía WhatsApp desde sus filas.

WooCommerce
Tiendas y pagos

Avisos de pedidos de tu tienda WooCommerce por WhatsApp.

Mercado Pago
Tiendas y pagos

Avisos de cobros y pagos con Mercado Pago.

Shopify
Tiendas y pagos

Mensajes de pedidos de tu tienda Shopify.

Google Calendar
Calendario

Recordatorios de citas desde Google Calendar.

No hay integraciones que coincidan con tu búsqueda.

Guía: Make

Qué puedes hacer
  • Recibir: cada mensaje de WhatsApp que llega a tu número, y los demás eventos que marques en el webhook (por ejemplo, el estado de un mensaje enviado), llegan a la herramienta como un aviso HTTP.
  • Enviar: la herramienta llama a la API de WaMundo para mandar un WhatsApp (POST /send/whatsapp) o un envío masivo (POST /send/whatsapp.bulk).
Antes de empezar
  • Una cuenta de WaMundo con un número de WhatsApp conectado.
  • Una cuenta en make.com (tiene un plan gratuito con límites; compruébalos en tu cuenta de Make).
  • Una clave de API con permiso para enviar: en Desarrolladores → Claves API crea una con el permiso «Enviar WhatsApp» (wa_send; para envíos masivos, «Enviar WA Masivo», wa_send_bulk) y copia su secret.
  • El ID único de tu cuenta de WhatsApp (no es el número de teléfono). Lo obtienes con GET https://wamundo.com/api/get/wa.accounts?secret=TU_API_SECRET (campo unique; la clave necesita el permiso «Ver Cuentas WA», get_wa_accounts). Cambia cada vez que vuelves a vincular el número.
  • Recibir mensajes y eventos requiere que tu plan incluya el servicio Webhooks (Desarrolladores → Webhooks). Enviar solo requiere el servicio de API: algunos planes tienen la API pero no los Webhooks.
Recibir mensajes de WaMundo
  1. En Make crea un escenario nuevo y añade como primer módulo Webhooks → Custom webhook.
  2. Pulsa Add, ponle un nombre y copia la dirección (URL) que te muestra Make.
  3. En WaMundo ve a Desarrolladores → Webhooks y crea un webhook: marca el evento WhatsApp, elige el formato JSON y pega la URL de Make.
  4. En Make pulsa Run once (el módulo queda esperando) y escribe un mensaje al número conectado. Make mostrará «Successfully determined» y los campos recibidos (data.phone, data.message, data.reply_to...).
  5. Si cambias el formato o los eventos del webhook, abre el módulo, pulsa Redetermine data structure y envía otro mensaje para que Make aprenda la estructura nueva.
Enviar un WhatsApp desde la herramienta
  1. Añade el módulo HTTP → Make a request.
  2. URL: https://wamundo.com/api/send/whatsapp · Method: POST · Body type: Multipart/form-data (también sirve application/x-www-form-urlencoded).
  3. En Fields añade secret, account, recipient (arrastra data.reply_to del webhook), type = text y message.
  4. Activa Parse response para poder usar el resultado (status y data.messageId) en los módulos siguientes.
  5. Recomendado: añade un filtro entre el módulo HTTP y lo que venga después (clic en la línea que los une → Set up a filter) que deje pasar solo si status de la respuesta es igual a 200. Así un secret o una cuenta incorrectos no pasan como si todo hubiera ido bien.
Probar
  1. Con el escenario en Run once, escribe un mensaje al número conectado: el módulo HTTP termina con Status Code 200 aunque haya un error (la API siempre responde HTTP 200), así que no basta con eso: la respuesta JSON debe traer "status": 200. Si trae otro valor, mira message.
  2. Cuando funcione, enciende el escenario (ON) para que atienda los mensajes de forma continua.
Errores frecuentes
  • No llega nada a Make: revisa que la URL pegada en WaMundo sea la de este escenario (sin espacios) y que el escenario esté en Run once o encendido. Usa «Enviar prueba» en WaMundo para comprobar el código HTTP que devuelve Make.
  • Los campos llegan vacíos o con nombres raros: el webhook está en formato «Formulario clásico». Edítalo en WaMundo, elige «JSON (application/json)» y vuelve a enviar un mensaje de prueba.
  • El destinatario llega vacío: el botón «Enviar prueba» de WaMundo manda un evento webhook.test que no trae reply_to. Escribe un mensaje real al número conectado para tener todos los campos.
  • La herramienta dice que todo salió bien pero no llegó el WhatsApp: la API de WaMundo siempre responde con código HTTP 200, incluso cuando hay un error. El resultado real está en el campo status del JSON (200 = enviado; 401, 404... = error) y el motivo en message. Comprueba ese campo con un filtro o una condición.
  • «Invalid API secret supplied!» (status 401 en el JSON): el secret es incorrecto, tiene espacios sobrantes o la clave fue revocada. Copia el secret de nuevo desde Desarrolladores → Claves API.
  • «WhatsApp account doesn't exist!» (status 404 en el JSON): en account pusiste el número de teléfono, o el ID único ya cambió porque volviste a vincular el número. Consulta /get/wa.accounts y usa el valor actual de unique.
  • Make no valida la firma por sí solo. La URL del webhook es larga y difícil de adivinar; no la compartas. Si quieres una comprobación extra, añade un filtro que compare el campo secret del aviso con la clave de tu webhook.
Seguridad
  • Nunca compartas tu secret de la API ni lo pegues en capturas de pantalla, foros o plantillas públicas.
  • Crea una clave de API exclusiva para esta integración, solo con los permisos necesarios (por ejemplo «Enviar WhatsApp»): si algún día la revocas, no afecta a nada más.
  • Guarda las claves en las credenciales o variables de la herramienta, no escritas dentro de los mensajes, las celdas o los nombres de los módulos.
  • Responde rápido a WaMundo: espera como máximo 5 segundos un código 2xx (2 segundos en message.status). Cada aviso se envía una sola vez, sin reintentos, y tras 200 fallos seguidos o 3 días sin ningún 2xx el webhook se pausa y se vuelve a probar una vez por hora.

Guía: n8n

Qué puedes hacer
  • Recibir: cada mensaje de WhatsApp que llega a tu número, y los demás eventos que marques en el webhook (por ejemplo, el estado de un mensaje enviado), llegan a la herramienta como un aviso HTTP.
  • Enviar: la herramienta llama a la API de WaMundo para mandar un WhatsApp (POST /send/whatsapp) o un envío masivo (POST /send/whatsapp.bulk).
Antes de empezar
  • Una cuenta de WaMundo con un número de WhatsApp conectado.
  • n8n en la nube o autoalojado. La URL del webhook debe ser pública (WaMundo no acepta direcciones privadas ni locales como localhost).
  • Una clave de API con permiso para enviar: en Desarrolladores → Claves API crea una con el permiso «Enviar WhatsApp» (wa_send; para envíos masivos, «Enviar WA Masivo», wa_send_bulk) y copia su secret.
  • El ID único de tu cuenta de WhatsApp (no es el número de teléfono). Lo obtienes con GET https://wamundo.com/api/get/wa.accounts?secret=TU_API_SECRET (campo unique; la clave necesita el permiso «Ver Cuentas WA», get_wa_accounts). Cambia cada vez que vuelves a vincular el número.
  • Recibir mensajes y eventos requiere que tu plan incluya el servicio Webhooks (Desarrolladores → Webhooks). Enviar solo requiere el servicio de API: algunos planes tienen la API pero no los Webhooks.
Atajo: descarga la plantilla (abajo, en Descargas) e impórtala en n8n con el menú ⋯ → Import from File. Trae el Webhook, un filtro (solo mensajes de WhatsApp con texto y que no sean de grupo), el HTTP Request que responde «Recibimos tu mensaje» y un IF que comprueba que la respuesta de WaMundo traiga status 200. Reemplaza TU_API_SECRET y TU_ACCOUNT_UNIQUE_ID. Descargas
Recibir mensajes de WaMundo
  1. En n8n crea un workflow y añade el nodo Webhook: HTTP Method POST y un Path, por ejemplo wamundo.
  2. El nodo muestra dos URL. La Test URL solo escucha mientras tienes activo Listen for test event; la Production URL solo funciona cuando el workflow está activado. Copia la Test URL para probar.
  3. En WaMundo ve a Desarrolladores → Webhooks y crea un webhook: evento WhatsApp, formato JSON y la URL de n8n.
  4. En n8n pulsa Listen for test event y escribe un mensaje al número conectado. El JSON de WaMundo queda dentro de $json.body: por ejemplo {{ $json.body.data.message }}. Las cabeceras están en $json.headers.
  5. Antes de activar el workflow, cambia la URL del webhook en WaMundo por la Production URL.
Enviar un WhatsApp desde la herramienta
  1. Añade un nodo HTTP Request: Method POST, URL https://wamundo.com/api/send/whatsapp.
  2. Activa Send Body, Body Content Type Form Urlencoded, y añade los campos secret, account, recipient ({{ $json.body.data.reply_to }}), type = text y message.
  3. Para no escribir el secret dentro del nodo, guárdalo en las credenciales de n8n o, si lo autoalojas, en una variable de entorno.
  4. Añade un nodo IF después del HTTP Request con la condición {{ $json.status }} es igual a 200 (número). La API responde siempre con código HTTP 200, así que el nodo HTTP no marca el error por sí solo; por la salida «false» sale la respuesta con el motivo en message.
Verificar la firma (opcional, n8n autoalojado)

Para comprobar X-WaMundo-Signature necesitas los bytes exactos del cuerpo: en el nodo Webhook activa Options → Raw Body y añade un nodo Code. Es un punto de partida: la forma en que n8n entrega el cuerpo crudo depende de la versión, así que revísalo en la salida del nodo y pruébalo en tu instancia.

// Nodo Code (Run Once for All Items), después del Webhook con Options > Raw Body activado
const crypto = require('crypto');
const SECRETO = 'TU_SECRET_DEL_WEBHOOK';   // clave del webhook en WaMundo, no el secret de la API
const item = $input.first();
const ts = item.json.headers['x-wamundo-timestamp'];
const firma = item.json.headers['x-wamundo-signature'] || '';
const raw = await this.helpers.getBinaryDataBuffer(0, 'data');   // bytes exactos del cuerpo
const esperada = 'sha256=' + crypto.createHmac('sha256', SECRETO).update(ts + '.').update(raw).digest('hex');
const a = Buffer.from(esperada);
const b = Buffer.from(firma);
if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
  throw new Error('Firma inválida');
}
return $input.all();

Importar crypto en el nodo Code exige, en n8n autoalojado, definir la variable NODE_FUNCTION_ALLOW_BUILTIN=crypto. En n8n Cloud el nodo Code puede restringir los módulos integrados, así que allí no podemos asegurar que funcione.

Probar
  1. Con Listen for test event activo, escribe un mensaje al número conectado y pulsa Execute workflow: el nodo HTTP Request termina bien aunque haya un error (la API siempre responde HTTP 200): su salida debe traer "status": 200. La plantilla ya lo comprueba con un nodo IF.
  2. El botón «Enviar prueba» de WaMundo manda un evento webhook.test: llega al nodo Webhook, pero la plantilla lo descarta a propósito (solo responde a type = whatsapp).
  3. Cuando funcione, activa el workflow (interruptor Active) y usa la Production URL.
Errores frecuentes
  • «The requested webhook ... is not registered» (404): usaste la Test URL sin estar escuchando, o la Production URL con el workflow sin activar.
  • No encuentras los datos: en el nodo Webhook el JSON de WaMundo está en $json.body, no en $json.
  • Los campos llegan vacíos o con nombres raros: el webhook está en formato «Formulario clásico». Edítalo en WaMundo, elige «JSON (application/json)» y vuelve a enviar un mensaje de prueba.
  • El destinatario llega vacío: el botón «Enviar prueba» de WaMundo manda un evento webhook.test que no trae reply_to. Escribe un mensaje real al número conectado para tener todos los campos.
  • La herramienta dice que todo salió bien pero no llegó el WhatsApp: la API de WaMundo siempre responde con código HTTP 200, incluso cuando hay un error. El resultado real está en el campo status del JSON (200 = enviado; 401, 404... = error) y el motivo en message. Comprueba ese campo con un filtro o una condición.
  • «Invalid API secret supplied!» (status 401 en el JSON): el secret es incorrecto, tiene espacios sobrantes o la clave fue revocada. Copia el secret de nuevo desde Desarrolladores → Claves API.
  • «WhatsApp account doesn't exist!» (status 404 en el JSON): en account pusiste el número de teléfono, o el ID único ya cambió porque volviste a vincular el número. Consulta /get/wa.accounts y usa el valor actual de unique.
  • Dos respuestas por mensaje o respuestas en bucle: si tu número recibe también los mensajes que él mismo envía o hay otro bot al otro lado, filtra por type y evita responder a mensajes automáticos. Si el número también tiene la IA de WaMundo activa, contestarán las dos: apaga una de ellas.
Seguridad
  • Nunca compartas tu secret de la API ni lo pegues en capturas de pantalla, foros o plantillas públicas.
  • Crea una clave de API exclusiva para esta integración, solo con los permisos necesarios (por ejemplo «Enviar WhatsApp»): si algún día la revocas, no afecta a nada más.
  • Guarda las claves en las credenciales o variables de la herramienta, no escritas dentro de los mensajes, las celdas o los nombres de los módulos.
  • Responde rápido a WaMundo: espera como máximo 5 segundos un código 2xx (2 segundos en message.status). Cada aviso se envía una sola vez, sin reintentos, y tras 200 fallos seguidos o 3 días sin ningún 2xx el webhook se pausa y se vuelve a probar una vez por hora.

Guía: Zapier

Qué puedes hacer
  • Recibir: cada mensaje de WhatsApp que llega a tu número, y los demás eventos que marques en el webhook (por ejemplo, el estado de un mensaje enviado), llegan a la herramienta como un aviso HTTP.
  • Enviar: la herramienta llama a la API de WaMundo para mandar un WhatsApp (POST /send/whatsapp) o un envío masivo (POST /send/whatsapp.bulk).
Antes de empezar
  • Una cuenta de WaMundo con un número de WhatsApp conectado.
  • Una cuenta de Zapier. Webhooks by Zapier es una aplicación premium: suele requerir un plan de pago de Zapier; compruébalo en tu cuenta antes de empezar.
  • Una clave de API con permiso para enviar: en Desarrolladores → Claves API crea una con el permiso «Enviar WhatsApp» (wa_send; para envíos masivos, «Enviar WA Masivo», wa_send_bulk) y copia su secret.
  • El ID único de tu cuenta de WhatsApp (no es el número de teléfono). Lo obtienes con GET https://wamundo.com/api/get/wa.accounts?secret=TU_API_SECRET (campo unique; la clave necesita el permiso «Ver Cuentas WA», get_wa_accounts). Cambia cada vez que vuelves a vincular el número.
  • Recibir mensajes y eventos requiere que tu plan incluya el servicio Webhooks (Desarrolladores → Webhooks). Enviar solo requiere el servicio de API: algunos planes tienen la API pero no los Webhooks.
Recibir mensajes de WaMundo
  1. En Zapier crea un Zap. Como disparador (Trigger) elige Webhooks by Zapier → Catch Hook.
  2. En el paso Test copia la Custom Webhook URL.
  3. En WaMundo ve a Desarrolladores → Webhooks y crea un webhook: evento WhatsApp, formato JSON y la URL de Zapier.
  4. Escribe un mensaje al número conectado y vuelve a Zapier a pulsar Test trigger. Verás los campos recibidos; los datos anidados aparecen con doble guion bajo, como data__message o data__reply_to.
Enviar un WhatsApp desde la herramienta
  1. Añade una acción: Webhooks by Zapier → POST.
  2. URL: https://wamundo.com/api/send/whatsapp · Payload Type: Form.
  3. En Data añade las parejas secret, account, recipient (el campo data__reply_to del disparador), type = text y message.
  4. Recomendado: añade un paso Filter después del POST que continúe solo si el status de la respuesta de WaMundo es igual a 200. Zapier puede mostrar además un campo status propio del paso: comprueba en Test step cuál trae el 200 de WaMundo, o exige que exista data__messageId.
Probar
  1. Pulsa Test step en la acción: la respuesta del JSON debe traer "status": 200 (la API siempre responde HTTP 200, incluso con errores) y llegar un WhatsApp al destinatario.
  2. Publica el Zap (Publish) para que atienda los mensajes de forma continua.
Errores frecuentes
  • No encuentras Webhooks by Zapier o te pide mejorar el plan: es una aplicación premium. Sin un plan que la incluya, usa Make o n8n.
  • Los campos llegan vacíos o con nombres raros: el webhook está en formato «Formulario clásico». Edítalo en WaMundo, elige «JSON (application/json)» y vuelve a enviar un mensaje de prueba.
  • El destinatario llega vacío: el botón «Enviar prueba» de WaMundo manda un evento webhook.test que no trae reply_to. Escribe un mensaje real al número conectado para tener todos los campos.
  • La herramienta dice que todo salió bien pero no llegó el WhatsApp: la API de WaMundo siempre responde con código HTTP 200, incluso cuando hay un error. El resultado real está en el campo status del JSON (200 = enviado; 401, 404... = error) y el motivo en message. Comprueba ese campo con un filtro o una condición.
  • «Invalid API secret supplied!» (status 401 en el JSON): el secret es incorrecto, tiene espacios sobrantes o la clave fue revocada. Copia el secret de nuevo desde Desarrolladores → Claves API.
  • «WhatsApp account doesn't exist!» (status 404 en el JSON): en account pusiste el número de teléfono, o el ID único ya cambió porque volviste a vincular el número. Consulta /get/wa.accounts y usa el valor actual de unique.
  • Zapier no verifica la firma X-WaMundo-Signature por sí solo. Como alternativa, añade un paso Filter que continúe solo si el campo secret del aviso coincide con la clave de tu webhook.
Seguridad
  • Nunca compartas tu secret de la API ni lo pegues en capturas de pantalla, foros o plantillas públicas.
  • Crea una clave de API exclusiva para esta integración, solo con los permisos necesarios (por ejemplo «Enviar WhatsApp»): si algún día la revocas, no afecta a nada más.
  • Guarda las claves en las credenciales o variables de la herramienta, no escritas dentro de los mensajes, las celdas o los nombres de los módulos.
  • Responde rápido a WaMundo: espera como máximo 5 segundos un código 2xx (2 segundos en message.status). Cada aviso se envía una sola vez, sin reintentos, y tras 200 fallos seguidos o 3 días sin ningún 2xx el webhook se pausa y se vuelve a probar una vez por hora.

Guía: Google Sheets

Qué puedes hacer
  • Recibir: cada mensaje de WhatsApp que llega a tu número, y los demás eventos que marques en el webhook (por ejemplo, el estado de un mensaje enviado), llegan a la herramienta como un aviso HTTP.
  • Enviar: la herramienta llama a la API de WaMundo para mandar un WhatsApp (POST /send/whatsapp) o un envío masivo (POST /send/whatsapp.bulk).
Antes de empezar
  • Una cuenta de WaMundo con un número de WhatsApp conectado.
  • Una cuenta de Google. Para el método 2 también necesitas Make, n8n o Zapier.
  • Una clave de API con permiso para enviar: en Desarrolladores → Claves API crea una con el permiso «Enviar WhatsApp» (wa_send; para envíos masivos, «Enviar WA Masivo», wa_send_bulk) y copia su secret.
  • El ID único de tu cuenta de WhatsApp (no es el número de teléfono). Lo obtienes con GET https://wamundo.com/api/get/wa.accounts?secret=TU_API_SECRET (campo unique; la clave necesita el permiso «Ver Cuentas WA», get_wa_accounts). Cambia cada vez que vuelves a vincular el número.
  • Recibir mensajes y eventos requiere que tu plan incluya el servicio Webhooks (Desarrolladores → Webhooks). Enviar solo requiere el servicio de API: algunos planes tienen la API pero no los Webhooks.
Método 1: Google Apps Script (gratis)

Un script dentro de tu hoja recibe el webhook de WaMundo (doPost) y añade una fila por mensaje. Además trae una función para enviar WhatsApp desde la hoja.

  1. Abre tu hoja de cálculo y ve a Extensiones → Apps Script.
  2. Pega el código del script (descárgalo abajo, en Descargas) y reemplaza los valores TU_...: SECRET es el secreto del webhook de WaMundo (Desarrolladores → Webhooks, botón «Copiar secreto de webhook al portapapeles» en la fila del webhook) y no es el secret de la API.
  3. Pulsa Implementar → Nueva implementación, tipo Aplicación web, Ejecutar como: Yo y Quién tiene acceso: Cualquier persona. Autoriza los permisos que pide Google y copia la URL que termina en /exec.
  4. En WaMundo ve a Desarrolladores → Webhooks y crea un webhook: evento WhatsApp, formato JSON y la URL /exec.
  5. Escribe un mensaje al número conectado: aparece una fila nueva en la pestaña «Mensajes» (fecha, tipo, teléfono, mensaje e identificador del envío).
Limitaciones de este método
  • Los Apps Script publicados como aplicación web no pueden leer las cabeceras HTTP, así que no se puede verificar la firma HMAC. El script valida el campo secret del cuerpo JSON contra la constante SECRET.
  • Google suele contestar a los POST con una redirección (HTTP 302) hacia el resultado. WaMundo no sigue redirecciones y solo cuenta como éxito un código 2xx: la fila se guarda, pero WaMundo puede registrar cada envío como fallido, el botón «Enviar prueba» mostrará que no fue aceptada y, tras 200 fallos seguidos o 3 días sin ningún 2xx, el webhook se pausa (se vuelve a probar una vez por hora). Por eso este método sirve para pruebas o poco volumen; para recibir mensajes de forma continua usa el método 2.

Descargas

Enviar un WhatsApp desde la hoja

La función enviarWhatsApp(telefono, texto) usa UrlFetchApp para llamar a POST /send/whatsapp. Rellena API_SECRET y ACCOUNT_ID, elige la función en el editor de Apps Script, pulsa Ejecutar (la primera vez Google pide autorización) y mira el resultado en el Registro de ejecución. Puedes llamarla desde tus propias funciones, por ejemplo recorriendo las filas de una pestaña. Google limita las llamadas diarias de UrlFetchApp: consulta sus cuotas.

Método 2: con Make, n8n o Zapier (recomendado para recibir)

Sigue la guía de la herramienta que prefieras hasta recibir el webhook y añade un módulo de Google Sheets a continuación. Conecta tu cuenta de Google cuando la herramienta te lo pida.

  • Make: módulo Google Sheets → Add a Row.
  • n8n: nodo Google Sheets con la operación Append Row.
  • Zapier: acción Google Sheets → Create Spreadsheet Row.

Asigna a cada columna un campo del aviso: data.phone, data.message, created_at y delivery_id. Para el camino inverso (enviar desde una fila), usa el disparador «Watch rows» / «New row» de la hoja seguido del paso de envío de la guía de esa herramienta.

Probar
  • Escribe un mensaje al número conectado y comprueba que aparece una fila nueva en la hoja. Para el envío, ejecuta enviarWhatsApp("+584121234567", "Hola") con un número tuyo y mira el registro de ejecución: debe mostrar "status":200 en el JSON (el código HTTP es siempre 200, también con errores).
Errores frecuentes
  • No aparecen filas y WaMundo da la prueba por fallida: comprueba que el acceso sea «Cualquier persona» (si no, Google devuelve su página de inicio de sesión) y que el formato del webhook sea JSON. Recuerda que con Apps Script la prueba puede salir como no aceptada por la redirección 302 aunque la fila se guarde.
  • Cambié el código y sigue funcionando el anterior: en Apps Script hay que crear una versión nueva en Implementar → Administrar implementaciones → Editar → Nueva versión para que la URL /exec use el código actualizado.
  • No se guarda ninguna fila o el teléfono sale vacío: si el webhook no está en formato JSON, el script responde «formato no JSON» y no guarda nada; si el teléfono sale vacío, el aviso es de otro evento (por ejemplo message.status, que no trae el mismo contenido).
  • «TypeError ... postData» al ejecutar doPost a mano: es normal; doPost solo funciona cuando lo llama el webhook, porque no hay una petición real al ejecutarlo desde el editor.
  • La herramienta dice que todo salió bien pero no llegó el WhatsApp: la API de WaMundo siempre responde con código HTTP 200, incluso cuando hay un error. El resultado real está en el campo status del JSON (200 = enviado; 401, 404... = error) y el motivo en message. Comprueba ese campo con un filtro o una condición.
  • «Invalid API secret supplied!» (status 401 en el JSON): el secret es incorrecto, tiene espacios sobrantes o la clave fue revocada. Copia el secret de nuevo desde Desarrolladores → Claves API.
  • «WhatsApp account doesn't exist!» (status 404 en el JSON): en account pusiste el número de teléfono, o el ID único ya cambió porque volviste a vincular el número. Consulta /get/wa.accounts y usa el valor actual de unique.
Seguridad
  • Nunca compartas tu secret de la API ni lo pegues en capturas de pantalla, foros o plantillas públicas.
  • Crea una clave de API exclusiva para esta integración, solo con los permisos necesarios (por ejemplo «Enviar WhatsApp»): si algún día la revocas, no afecta a nada más.
  • Guarda las claves en las credenciales o variables de la herramienta, no escritas dentro de los mensajes, las celdas o los nombres de los módulos.
  • Responde rápido a WaMundo: espera como máximo 5 segundos un código 2xx (2 segundos en message.status). Cada aviso se envía una sola vez, sin reintentos, y tras 200 fallos seguidos o 3 días sin ningún 2xx el webhook se pausa y se vuelve a probar una vez por hora.

Referencia: qué envía WaMundo y qué acepta

El aviso que recibes

Al crear el webhook en Desarrolladores → Webhooks eliges los eventos y el formato. Con el formato JSON, WaMundo hace un POST como este (los datos exactos dependen del evento; mira la documentación de Webhooks):

{
  "secret": "tu_clave_del_webhook",
  "type": "whatsapp",
  "data": {
    "id": 789,
    "phone": "+584141234567",
    "message": "Hola, quiero información",
    "attachment": false,
    "timestamp": 1679900000,
    "reply_to": "+584141234567"
  },
  "event": "whatsapp",
  "delivery_id": "0b6f6c0e-6d3c-4a8e-9a53-7c1f1d1e2b44",
  "created_at": "2026-10-27T15:04:05Z"
}

Cada envío incluye las cabeceras X-WaMundo-Signature (sha256= y el HMAC-SHA256 de timestamp + "." + cuerpo exacto), X-WaMundo-Timestamp, X-WaMundo-Event y X-WaMundo-Delivery. Para responder al remitente usa data.reply_to como recipient.

Otros eventos que puedes marcar: message.status (enviado, entregado, leído o fallido), conversation.created y conversation.closed, además de sms y ussd. El botón «Enviar prueba» manda un evento webhook.test.

Si usas el Embudo de ventas puedes marcar también deal.created, deal.moved, deal.won, deal.lost, deal.reopened y deal.deleted, por ejemplo para avisar a tu equipo o registrar una venta cuando un trato pasa a Ganado. Un trato creado directamente en Ganado o Perdido envía deal.created y enseguida deal.won o deal.lost; al eliminar una etapa con tratos se envía un evento por cada trato reasignado (máximo 50). Requiere un plan con webhooks.

Enviar un mensaje

Haz un POST a https://wamundo.com/api/send/whatsapp como multipart/form-data o application/x-www-form-urlencoded con estos campos:

CampoQué poner
secretEl secret de tu clave de API (Desarrolladores → Claves API). La clave necesita el permiso «Enviar WhatsApp» (wa_send).
accountEl ID único de la cuenta de WhatsApp (unique de /get/wa.accounts), no el número.
recipientNúmero en formato E.164 (+584121234567), número local, grupo (1234567890@g.us) o el data.reply_to del mensaje recibido.
typetext (valor por defecto) para texto. También admite media, document, poll, location, contact_card y sticker.
messageEl texto del mensaje.
{
  "status": 200,
  "message": "WhatsApp chat has been queued for sending!",
  "data": { "messageId": 456 }
}

Responde siempre con código HTTP 200, también cuando hay un error: el resultado real está en el campo status del JSON (200 = enviado; 401, 404... = error, con el motivo en message). Si todo va bien trae status 200 y el messageId. Para enviar a muchos destinatarios existe POST /send/whatsapp.bulk (necesita el permiso wa_send_bulk). Todos los endpoints están en la documentación de la API.

Descargas

Dos archivos listos para usar. Reemplaza los valores TU_... por los tuyos antes de activarlos y no los compartas con tus claves puestas.

Plantilla de n8n wamundo-n8n-plantilla.json

Workflow importable (Import from File): Webhook → filtro → respuesta automática por WhatsApp.

Descargar
{
  "name": "WaMundo - Responder mensajes de WhatsApp",
  "nodes": [
    {
      "parameters": {
        "content": "## WaMundo: responder mensajes de WhatsApp\n1. Reemplaza TU_API_SECRET (Desarrolladores > Claves API) y TU_ACCOUNT_UNIQUE_ID (GET /get/wa.accounts) en el nodo HTTP, o mejor guárdalos en una credencial.\n2. En WaMundo crea un webhook con el evento WhatsApp, formato JSON, y la Production URL del nodo Webhook.\n3. Activa el workflow.\n4. El nodo IF final comprueba que la respuesta de WaMundo traiga status 200 (la API siempre responde HTTP 200, incluso con errores). Si no, mira message en su salida false.",
        "height": 260,
        "width": 380
      },
      "id": "6c1a0b52-3f0e-4d63-9a41-0b7a1f5d2e01",
      "name": "Instrucciones",
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [
        -200,
        -120
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "wamundo",
        "options": {}
      },
      "id": "b3d9f7a4-5c21-4e8b-8f0a-2a6d4c9e7b02",
      "name": "Webhook WaMundo",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [
        200,
        160
      ],
      "webhookId": "e5a8c3d1-7b94-4f26-a0c8-91d2b6f4a303"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "1f0e2d3c-4b5a-4968-8778-6a5b4c3d2e11",
              "leftValue": "={{ $json.body.type }}",
              "rightValue": "whatsapp",
              "operator": {
                "type": "string",
                "operation": "equals"
              }
            },
            {
              "id": "2a1b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c22",
              "leftValue": "={{ $json.body.data.message }}",
              "rightValue": "",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              }
            },
            {
              "id": "3b2c4d5e-6f7a-4b8c-9d0e-1f2a3b4c5d33",
              "leftValue": "={{ $json.body.data.reply_to }}",
              "rightValue": "@g.us",
              "operator": {
                "type": "string",
                "operation": "notContains"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "d7e4a1b8-2c93-4d05-b6f1-8a3e5c7d9f04",
      "name": "¿Es un mensaje de WhatsApp?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        440,
        160
      ]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://wamundo.com/api/send/whatsapp",
        "sendBody": true,
        "contentType": "form-urlencoded",
        "specifyBody": "keypair",
        "bodyParameters": {
          "parameters": [
            {
              "name": "secret",
              "value": "TU_API_SECRET"
            },
            {
              "name": "account",
              "value": "TU_ACCOUNT_UNIQUE_ID"
            },
            {
              "name": "recipient",
              "value": "={{ $json.body.data.reply_to }}"
            },
            {
              "name": "type",
              "value": "text"
            },
            {
              "name": "message",
              "value": "Recibimos tu mensaje. En breve te respondemos."
            }
          ]
        },
        "options": {}
      },
      "id": "a9c2e6f3-8d14-4b57-9e0a-3f7b1d5c8e05",
      "name": "Responder por WaMundo",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [
        700,
        60
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "loose"
          },
          "conditions": [
            {
              "id": "4c3d5e6f-7a8b-4c9d-8e0f-2a3b4c5d6e44",
              "leftValue": "={{ $json.status }}",
              "rightValue": 200,
              "operator": {
                "type": "number",
                "operation": "equals"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "e8f5b2c9-3d04-4e16-a7b2-9c4f6d8e0a06",
      "name": "¿WaMundo aceptó el envío?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        960,
        60
      ]
    },
    {
      "parameters": {},
      "id": "f9a6c3d0-4e15-4f27-b8c3-0d5a7e9f1b07",
      "name": "Revisa status y message",
      "type": "n8n-nodes-base.noOp",
      "typeVersion": 1,
      "position": [
        1220,
        160
      ]
    }
  ],
  "connections": {
    "Webhook WaMundo": {
      "main": [
        [
          {
            "node": "¿Es un mensaje de WhatsApp?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "¿Es un mensaje de WhatsApp?": {
      "main": [
        [
          {
            "node": "Responder por WaMundo",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Responder por WaMundo": {
      "main": [
        [
          {
            "node": "¿WaMundo aceptó el envío?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "¿WaMundo aceptó el envío?": {
      "main": [
        [],
        [
          {
            "node": "Revisa status y message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "tags": []
}
Script de Google Sheets wamundo-google-sheets.gs

Apps Script: guarda cada mensaje recibido en una hoja y envía WhatsApp con enviarWhatsApp().

Descargar
/**
 * WaMundo + Google Sheets
 *
 * 1) Recibe los avisos (webhooks) de WaMundo y guarda cada mensaje como una fila.
 * 2) Envía un WhatsApp desde la hoja con enviarWhatsApp().
 *
 * Instalación: en tu hoja, Extensiones > Apps Script, pega este código y reemplaza los valores TU_...
 * Luego Implementar > Nueva implementación > Aplicación web
 *   (Ejecutar como: Yo · Quién tiene acceso: Cualquier persona)
 * y pega la URL que termina en /exec en WaMundo (Desarrolladores > Webhooks) con formato JSON.
 */

// Secreto del webhook (en WaMundo: Desarrolladores > Webhooks, botón "Copiar secreto de webhook al portapapeles"). NO es el secret de la API.
var SECRET = "TU_SECRET_DEL_WEBHOOK";
var HOJA = "Mensajes";

// Solo para enviar mensajes (WaMundo: Desarrolladores > Claves API). Guárdalos aquí, no en las celdas.
var API_SECRET = "TU_API_SECRET";
var ACCOUNT_ID = "TU_ACCOUNT_UNIQUE_ID";

// Recibe el aviso de WaMundo y añade una fila: fecha, tipo, teléfono, mensaje, id del envío.
function doPost(e) {
  var cuerpo;
  try {
    cuerpo = JSON.parse(e.postData.contents);
  } catch (err) {
    return ContentService.createTextOutput("formato no JSON");
  }
  // Apps Script no permite leer cabeceras: no se puede verificar la firma HMAC,
  // así que se comprueba el campo "secret" que viaja dentro del cuerpo.
  if (cuerpo.secret !== SECRET) {
    return ContentService.createTextOutput("forbidden");
  }
  var data = cuerpo.data || {};
  var libro = SpreadsheetApp.getActiveSpreadsheet();
  var hoja = libro.getSheetByName(HOJA) || libro.insertSheet(HOJA);
  hoja.appendRow([new Date(), cuerpo.type, data.phone, data.message, cuerpo.delivery_id]);
  return ContentService.createTextOutput("ok");
}

// Envía un WhatsApp. Ejemplo: enviarWhatsApp("+584121234567", "Hola desde mi hoja")
function enviarWhatsApp(telefono, texto) {
  var respuesta = UrlFetchApp.fetch("https://wamundo.com/api/send/whatsapp", {
    method: "post",
    payload: {
      secret: API_SECRET,
      account: ACCOUNT_ID,
      recipient: telefono,
      type: "text",
      message: texto
    },
    muteHttpExceptions: true
  });
  Logger.log(respuesta.getContentText());
  return respuesta.getContentText();
}