Volver al blog
Desarrolladores

Cómo conectar WhatsApp con n8n, Make y Zapier (API oficial)

n8n, Make y Zapier no traen un nodo de Waspy. El envío es un HTTP a api.waspytech.com/api/v2 con una clave wspy_. El nodo nativo de n8n habla con Meta, no con tu bandeja.

· 12 min
Cómo conectar WhatsApp con n8n, Make y Zapier (API oficial)

Respuesta corta: n8n, Make y Zapier no tienen un nodo de Waspy. Conectás WhatsApp con un pedido HTTP a https://api.waspytech.com/api/v2, header Authorization: Bearer wspy_.... Para mandar un aviso, el nodo es un POST a /api/v2/messages. El nodo WhatsApp Business Cloud de n8n no habla con Waspy: habla directo con la Cloud API de Meta, y ese mensaje no entra solo a la bandeja de tu equipo.

El 18 de octubre de 2026 pedimos GET https://api.waspytech.com/api/v2/channels sin clave. La API respondió 401 con código UNAUTHORIZED y el mensaje Missing authorization header. Es el mismo contrato que usa el nodo HTTP. La referencia está en docs.waspytech.com. La API está en los planes Scale y Enterprise: Planes y la página de la API.

Qué herramienta encaja

QuerésHerramientaCómo habla con Waspy
Un flujo propio (pedido de la tienda → aviso)n8n, self-hosted o cloudNodo HTTP Request
Un escenario visual, sin servidorMakeMódulo HTTP, Make a request
Un zap entre dos apps que ya usásZapierWebhooks by Zapier, POST
Que Claude o Cursor lean la bandejaNo es n8nEl conector MCP
Las tres mandan el mismo JSON. Ninguna reemplaza el inbox: el equipo sigue contestando en Waspy. El flujo manda el aviso de un hecho que ya tenés (pedido pago, despacho). No contesta "¿tienen el talle M?".

La clave y el número

La clave se crea en Configuración → Claves de API. Empieza con wspy_. Si no marcás permisos, puede hacer todo lo que la API permite. Si marcás alguno, el envío exige messages:write. Sin ese scope la respuesta es 403 FORBIDDEN, no un código de "scope insuficiente" con otro nombre.

Antes del primer envío necesitás el UUID del canal:

curl -sS https://api.waspytech.com/api/v2/channels \
  -H "Authorization: Bearer $WASPY_API_KEY"

La respuesta 200 trae data: un array. El UUID que vas a usar es data[0].id. El campo data[0].phoneNumberId es el id de teléfono de Meta, un número largo, y no entra en el cuerpo del envío: ese campo del POST se llama igual pero exige un UUID. Si mandás el id de Meta, la validación responde 400.

Mandar el aviso de pedido

Fuera de la ventana de 24 horas el texto libre responde 403 SERVICE_WINDOW_EXPIRED. El aviso de "tu pedido salió" va como plantilla de utilidad ya aprobada. Crear la plantilla por REST no está expuesto: se arma en el panel o con create_template del MCP. Cómo redactarla está en la guía de plantillas.

curl -sS https://api.waspytech.com/api/v2/messages \
  -H "Authorization: Bearer $WASPY_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-1847-aviso" \
  -d '{
    "phoneNumberId": "UUID-DEL-CANAL",
    "to": "+5491155554444",
    "type": "template",
    "template": {
      "name": "aviso_despacho",
      "language": { "code": "es_AR" },
      "components": [{
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Laura" },
          { "type": "text", "text": "1847" },
          { "type": "text", "text": "360000012345678" }
        ]
      }]
    },
    "clientRef": "pedido-1847"
  }'

Un 201 devuelve el mensaje en data (id, status, conversationId). El clientRef (hasta 256 caracteres) vuelve en cada webhook de estado. El teléfono va en E.164: para un celular argentino, +549 más el código de área sin 0 y el número sin el 15.

Idempotency-Key (hasta 256 caracteres) guarda la respuesta 24 horas. Si n8n reintenta el mismo pedido, Waspy devuelve la misma respuesta con el header Idempotency-Replayed: true y no manda otro WhatsApp. Si dos iguales llegan juntos, el segundo recibe 409 IDEMPOTENCY_CONFLICT. Usá el id del pedido, no la hora.

Si el cliente te escribió hace menos de 24 horas, el mismo nodo puede mandar texto:

{
  "phoneNumberId": "UUID-DEL-CANAL",
  "to": "+5491155554444",
  "type": "text",
  "text": { "body": "Laura, el pedido 1847 ya está pago. Te paso el seguimiento cuando salga." },
  "clientRef": "pedido-1847"
}

Eso es un mensaje de servicio. El detalle de la ventana está en la regla de las 24 horas.

Dónde va cada campo

n8nMakeZapier
MóduloHTTP RequestHTTP → Make a requestWebhooks by Zapier → POST
URLhttps://api.waspytech.com/api/v2/messagesla mismala misma
MétodoPOSTPOSTPOST
HeaderAuthorization: Bearer wspy_...el mismoel mismo
Otro headerIdempotency-Key con el id del pedidoel mismoel mismo
CuerpoJSONJSONPayload type: json
En n8n, el cuerpo se arma con expresiones del nodo anterior (el pedido que ya tenías). No hace falta un nodo de WhatsApp de Meta en el medio. La clave no va en el JSON: va en el header. Si la pegás en un workflow compartido, cualquiera con acceso al flujo la ve. En n8n y en Make va como credencial; en Zapier, como header del paso.

El tope de la API es 120 pedidos por minuto por cuenta. Si te pasás, la respuesta es 429 RATE_LIMITED, con Retry-After.

Crear el contacto antes, si hace falta

Mandar un mensaje crea el contacto si no existe, pero no abre la ventana de 24 horas. Si querés guardarlo con nombre, mail y etiquetas antes de que haya un chat, el alta es POST /api/v2/contacts con scope contacts:write.

curl -sS https://api.waspytech.com/api/v2/contacts \
  -H "Authorization: Bearer $WASPY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "phoneNumber": "+5491155554444",
    "name": "Laura Gómez",
    "email": "laura@ejemplo.com",
    "tags": ["tiendanube", "pedido-1847"]
  }'

El cuerpo acepta phoneNumber (obligatorio), y opcionales name, email, tags y customFields. No acepta optedIn: ese campo vuelve en la respuesta (por defecto en true al crear) y no se escribe por este POST ni por el PATCH. Si el teléfono ya existe, la respuesta es 409 CONTACT_ALREADY_EXISTS. En el flujo, un 409 no es un fallo de negocio: seguí con el envío.

GET /api/v2/contacts?search=laura&tags=tiendanube (scope contacts:read) lista con page y pageSize (máximo 100). PATCH /api/v2/contacts/:id actualiza nombre, mail, teléfono, tags o customFields. No hay DELETE de contactos en la API pública.

Recibir la respuesta del cliente

Para que el flujo arranque cuando Laura contesta, das de alta un webhook en POST /api/v2/webhooks (scope webhooks:write) con la URL que te da el nodo Webhook de n8n, el módulo Webhooks de Make o un Catch Hook de Zapier. Los eventos son message.received, message.status_changed, conversation.created y contact.created.

Esas tres herramientas suelen parsear el JSON antes de que puedas ver el cuerpo crudo, así que no verifican la firma X-Waspy-Signature. Para un aviso interno puede alcanzar. Para marcar un pago, poné un servidor que verifique la firma y recién ahí llame al flujo. El contrato, los reintentos y el código en Node y Python están en webhooks de WhatsApp API.

Cuánto sale el aviso

Un mensaje de utilidad entregado en Argentina, desde el 1 de octubre de 2026, sale alrededor de ARS 37,68 (~US$0,026). 400 despachos entregados son 400 × 37,68 = ARS 15.072 (~US$104). Si el cliente estaba en la ventana y todavía no gastaste las 1.000 respuestas de servicio del mes, el texto libre de esas primeras 1.000 no se suma. Lo que no se entrega, no se cobra.

Waspy no agrega markup. La API está en Scale (US$150 por mes) y Enterprise. La suscripción va aparte, en Planes. La tarifa está en la rate card de Meta.

Waspy, el nodo de Meta, Twilio y 360dialog

CaminoQué configurásEl equipo lo ve en la bandeja
HTTP a la API de WaspyClave wspy_ y el UUID del canalSí: el mensaje queda con origen external_api
Nodo WhatsApp Business Cloud de n8nToken y Business Account ID de Meta, según la doc de n8nNo, salvo que además operes ese número en Waspy por otro lado
Twilio o 360dialogLa API de ese proveedorSolo si mantenés un inbox aparte
Z-APIUna sesión tipo WhatsApp WebNo es la API oficial
Si el número de la tienda ya está en Waspy, el HTTP a /api/v2 es el que deja el aviso en el mismo hilo que atiende el equipo. El nodo nativo de n8n sirve cuando vos sos el proveedor y no querés bandeja.

Qué no hacer

  • No uses el id de teléfono de Meta en phoneNumberId. Es el UUID de data[].id.
  • No mandes texto libre si la ventana está cerrada. Va a volver 403 y el pedido no se encola.
  • No reintentes sin Idempotency-Key. n8n, Make y Zapier reintentan cuando hay un timeout, y cada reintento sin esa clave es otro WhatsApp.
  • No le pidas al flujo que "conteste solo" las consultas de talle. Un aviso de pedido es un dato de la tienda. Una charla la sigue una persona. Un asistente externo, para que el equipo busque y resuma, es el MCP, con confirmación antes de enviar.

Si el número todavía no está en la API, abrí la cuenta: 10 días gratis, sin tarjeta. La clave se crea después, en Scale, desde Configuración → Claves de API. La referencia está en docs.waspytech.com y en la página de la API.

Tu equipo atendiendo por WhatsApp en minutos

CRM facil pero potente. En 10 minutos tenes a tu equipo trabajando — no necesitas hablar con nadie.