WhatsApp en n8n por la API oficial, con ZapClaw

En resumen: ZapClaw entrega tus mensajes de WhatsApp a un nodo Webhook de n8n, y tu flujo responde con un HTTP Request. Los mensajes pasan por la Cloud API oficial de Meta, y el número sigue funcionando en la app de WhatsApp Business de tu celular. Sin nodo de la comunidad que instalar y sin app propia en Meta: basta con pegar en n8n el flujo de abajo.

Conecta tu número en minutos y úsalo con el n8n que ya tienes, en la nube o self-hosted.

Plan Business: US$ 29 al mes, con números ilimitados

Empieza gratis Ver el flujo

Lo que necesitas para conectar

No necesitas una empresa registrada ni un negocio verificado para conectar. La lista completa.

Por qué la API oficial en n8n

Configúralo en cuatro pasos

  1. En n8n, empieza un workflow con un nodo Webhook en POST y copia su URL de producción. ZapClaw solo entrega en una dirección HTTPS pública: n8n Cloud ya te la da, y un n8n self-hosted la tiene detrás de tu propio dominio.
  2. En ZapClaw, conecta tu número, pega esa URL en Webhook y crea una clave de API.
  3. En n8n, guarda la clave como una credencial Header Auth, con X-API-Key como nombre, y úsala en un nodo HTTP Request que llama a POST https://api.zapclaw.app/api/v1/send/text.
  4. Activa el workflow y haz clic en Enviar evento de prueba en ZapClaw. Luego envía un mensaje de WhatsApp a tu número desde otro celular: el flujo lo recibe y responde.

El flujo, listo para importar

Copia el JSON de abajo, abre un workflow vacío en n8n y pégalo con Ctrl+V (Cmd+V en Mac). Trae tres nodos: el Webhook, un Filter que solo deja pasar los mensajes de texto entrantes y el HTTP Request que responde. Elige tu credencial Header Auth en el último nodo y activa el workflow.

{
  "name": "ZapClaw: answer WhatsApp messages",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "zapclaw-whatsapp",
        "options": {}
      },
      "id": "5f0c7e2a-1b3d-4c8e-9a61-2d4b8f0e7a11",
      "name": "ZapClaw webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 2,
      "position": [0, 0],
      "webhookId": "9d3b6f1e-2c4a-4e7b-8a05-6f1c2d9e4b77"
    },
    {
      "parameters": {
        "conditions": {
          "options": { "caseSensitive": true, "leftValue": "", "typeValidation": "strict" },
          "conditions": [
            {
              "id": "8a2f4c61-7d1e-4b39-a5c2-0e6f9b3d1c22",
              "leftValue": "={{ $json.body.event }}",
              "rightValue": "message.received",
              "operator": { "type": "string", "operation": "equals" }
            },
            {
              "id": "3c9e1b74-6a2d-4f08-b7e5-9d1a4c2f6b33",
              "leftValue": "={{ $json.body.data.type }}",
              "rightValue": "text",
              "operator": { "type": "string", "operation": "equals" }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "id": "b7d2e9f1-4c6a-4e3b-8f05-1a7c3e9d2b44",
      "name": "Incoming text only",
      "type": "n8n-nodes-base.filter",
      "typeVersion": 2,
      "position": [240, 0]
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.zapclaw.app/api/v1/send/text",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            { "name": "from", "value": "={{ $json.body.account.display_phone_number || $json.body.account.phone_number_id }}" },
            { "name": "to", "value": "={{ $json.body.data.from || $json.body.data.user_id }}" },
            { "name": "text", "value": "={{ $json.body.data.text.body }}" }
          ]
        },
        "options": {}
      },
      "id": "e4a1c8d3-2f7b-4a9e-b6d0-5c3e8f1a7d55",
      "name": "Reply through ZapClaw",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [480, 0]
    }
  ],
  "connections": {
    "ZapClaw webhook": {
      "main": [[{ "node": "Incoming text only", "type": "main", "index": 0 }]]
    },
    "Incoming text only": {
      "main": [[{ "node": "Reply through ZapClaw", "type": "main", "index": 0 }]]
    }
  }
}

El ejemplo responde con el mismo texto que recibió, para probar la ida y la vuelta. Reemplaza el campo text por tu lógica: un nodo AI Agent, una consulta a tu CRM o una respuesta fija.

El texto libre funciona dentro de las 24 horas siguientes al último mensaje del cliente. Fuera de esa ventana, Meta solo acepta una plantilla aprobada: llama a POST /api/v1/send/template.

La llamada del HTTP Request

La misma llamada como comando curl. Pégala en Import cURL de un nodo HTTP Request y n8n completa los campos; después pasa la clave a tu credencial Header Auth.

curl -X POST https://api.zapclaw.app/api/v1/send/text \
  -H "X-API-Key: zc_live_..." \
  -H "Content-Type: application/json" \
  -d '{ "from": "15551617409", "to": "15555550100", "text": "Hello from n8n" }'

from es tu número conectado, que el webhook trae en account.display_phone_number. to es el cliente, en data.from, o data.user_id para un contacto que solo muestra su nombre de usuario. Un mensaje enviado responde 201.

Lo que llega al nodo Webhook

Cada mensaje llega como un evento message.received. En n8n, el payload está en body: el texto en body.data.text.body, el remitente en body.data.from, el nombre del contacto en body.data.contact_name y tu número en body.account.display_phone_number. Un mensaje multimedia trae una media_url que descargas con tu clave de API.

Para comprobar que una solicitud vino de ZapClaw, compara su encabezado X-ZapClaw-Signature con un HMAC-SHA256 del cuerpo sin procesar, hecho con tu clave de firma: cómo verificarla (en inglés).

Cuánto cuesta

Meta te cobra directamente las tarifas de mensajes de WhatsApp, sin margen de ZapClaw. Todos los planes y precios.

Para quién es

Quienes usan n8n para automatizar el WhatsApp de su propio negocio o de sus clientes: agentes de IA, captación de leads, avisos de pedidos, clasificación de consultas de soporte. Las agencias conectan los números de sus clientes en el plan Agency, cada cliente aislado de los demás. No sirve para envíos masivos.

Para ir más allá

Pon tus flujos de n8n en la API oficial hoy

Empieza en el plan gratuito: un número, sin tarjeta. Pasa al plan Business cuando necesites más números o más mensajes.

Empieza gratis Ver la documentación del webhook (en inglés)