Lección 08 · Integraciones Externas (n8n y Webhooks)
Qué aprendes
El puente universal entre GHL y cualquier plataforma: el webhook entrante (que algo de fuera dispare tu automatización), el saliente (que tu automatización avise fuera, p. ej. a n8n) y la API privada como tercera vía.
Webhook entrante: que el mundo llame a GHL
- En un workflow nuevo, el trigger Webhook entrante te da una URL de POST — única por automatización. Esa URL se pega en la plataforma externa: un flujo de n8n, una pasarela sin integración nativa (su ejemplo, Whop), Stripe, Google Sheets… Cuando allí pasa algo (una compra), la plataforma hace POST a esa URL y tu automatización arranca. La información viaja como JSON.
- ⚠️ GHL no te deja guardar el flujo hasta que el webhook recibe una solicitud de muestra. ¿Y si no puedes hacer una compra real de prueba? Su herramienta: hopscotch.io — pegas la URL, compones un POST con el JSON que esperas (nombre del producto, precio…) y lo envías: GHL captura la muestra, la ves en el historial del webhook y ya puedes mapear y guardar.
- El mapeo ⭐: GHL añade solo el nodo «crear contacto» tras el trigger (puedes borrarlo). Para usar lo que llega, el selector de variables → Inbound Webhook Trigger → eliges el dato y GHL inserta su expresión exacta (
inbound_webhook_trigger.email). No la escribas a mano ni la «limpies»: si tocas la expresión, deja de funcionar. Trucos del mapeo: si lleganfirst_nameylast_nameseparados, puedes concatenarlos en el Full Name o guardarlos cada uno en su campo. Y recuerda la regla de la Lección 03: el contacto se identifica por email o teléfono — sin uno de los dos en el JSON, no hay contacto que crear.
Webhook saliente: que GHL llame al mundo
El espejo: cualquier trigger dentro de GHL (formulario completado, cita reservada, etiqueta añadida…) → acción Webhook con la URL de destino.
Su ejemplo completo con n8n: en n8n, un nodo Webhook como trigger genera la URL; la pegas en la acción de GHL; al completarse el formulario, la data vuela a n8n — donde ya puedes meter código, escribir en Google Sheets, tocar Drive, lo que quieras — y ver el JSON recibido en las Ejecuciones de n8n.
- ⚠️ Test ≠ producción: la URL de test de n8n solo escucha mientras pruebas; al activar el flujo, usa la de producción o tu automatización «funciona» solo en los ensayos.
- Al envío puedes añadir datos personalizados (p. ej., el campo «capacidad de pago» de ese contacto: su expresión se saca de Configuración → Campos personalizados) y cabeceras.
- Un paso más allá: el nodo de código personalizado (JavaScript o Python) dentro del workflow de GHL, para transformar o condicionar la data antes de enviarla — el código se lo pides a Claude.
La tercera vía: la API privada de GHL
Configuración → Integraciones → Integraciones privadas → Crear: nombre y descripción, y los ámbitos (los permisos de esa API). Al crearla te da el token de acceso; la otra pieza es el Location ID (Configuración → Perfil de empresa → ID de ubicación). Con token + location ID, cualquier herramienta (un nodo HTTP Request de n8n, por ejemplo) puede operar sobre tu subcuenta.
Sus cautelas y contexto: - ⚠️ Cuidado con los ámbitos marcados en amarillo: son los arriesgados. En la demo selecciona todos por rapidez; en producción, da los que necesites. - n8n trae un nodo nativo de GHL, pero limitado (crear/eliminar contactos, oportunidades, etiquetas, tareas, reservar citas). - La API oficial (vía el Marketplace de desarrolladores de GHL: cuenta, aprobación por correo, credenciales OAuth) existe, pero «requiere un poco más de tiempo y tampoco tiene unos beneficios muy grandes».
Su veredicto: webhooks, casi siempre
«La forma en la que yo suelo utilizar son los webhooks. ¿Por qué? Porque es totalmente inmediato, podemos crear lo que queramos, la API puede caducar… y el webhook perdura el tiempo que sea necesario. Y te llega toda la data: simplemente coges la que quieras.»
El JSON asusta la primera vez; a la segunda, es rutina — y Claude te guía con el código.
Práctica
- [ ] Un webhook entrante probado con hopscotch: JSON de una «compra» falsa que crea el contacto y le pone una etiqueta.
- [ ] Un webhook saliente GHL → n8n con URL de producción y un campo personalizado en el envío.
- [ ] Tu integración privada creada con ámbitos mínimos para un caso real, y token + location ID guardados en tu gestor (nunca en un documento suelto).
Preguntas de repaso
- ¿Por qué GHL exige una solicitud de muestra antes de dejarte guardar un webhook entrante? → Porque necesita ver la forma real de tu JSON para ofrecerte los campos en el mapeo: sin muestra, no sabe qué datos van a llegar.
- ¿Qué ventaja tienen los webhooks frente a la API, según Miguel? → Inmediatez y permanencia: no caducan, no piden aprobaciones, y traen toda la data de golpe para que cojas solo la que necesitas.
Vigencia
Webhooks y API privada de GHL al grabar; Hopscotch y el nodo Webhook de n8n son herramientas vigentes. Los tokens de integraciones privadas deben tratarse como contraseñas.