# Cómo conectar tu CRM (GoHighLevel, n8n) con VitalDesk

> Monta el circuito completo: tu CRM agenda pacientes en VitalDesk automáticamente, y VitalDesk avisa a tu CRM cuando el paciente asiste, se trata o paga.

**Categoría**: Integraciones · **Lectura**: 8 min · **Actualizado**: 2026-08-25

---

Muchas clínicas captan pacientes con un CRM de marketing como **GoHighLevel** (GHL) y automatizan con **n8n** o Make. El problema clásico: lo comercial y lo clínico viven separados, y alguien termina copiando datos a mano. Con la API y los webhooks de VitalDesk ese puente se automatiza completo, en ambos sentidos.

## El circuito que vas a montar

- **Ida (CRM → VitalDesk):** un lead agenda en tu funnel de GHL → n8n crea el paciente y la cita en VitalDesk automáticamente, guardando el contact ID de GHL como identificador externo.

- **Vuelta (VitalDesk → CRM):** el paciente asiste, completa su tratamiento o paga → VitalDesk dispara un webhook → n8n actualiza la oportunidad en GHL (por ejemplo, la marca como venta realizada).

## Requisitos

- VitalDesk con plan Enterprise (la API está incluida sin costo adicional).

- Una **API key** con permisos de escritura de pacientes y citas — se crea en Configuración → API y Webhooks (ver la [guía de la API](/tutoriales/api-publica-webhooks-vitaldesk)).

- Una instancia de n8n (o Make/Zapier — cualquier herramienta que haga llamadas HTTP y reciba webhooks).

## Ida: GHL crea el paciente y la cita

- En GHL, configura un webhook de workflow que se dispare cuando un lead agenda (o usa el trigger nativo de GHL en n8n).

- En n8n, recibe ese evento y llama POST /api/v1/external/patients con nombre, teléfono, email y external_ref = contact ID de GHL. Si el contacto ya existía, VitalDesk te devuelve el paciente existente — **nunca se duplica**.

- Encadena POST /api/v1/external/appointments con patient_external_ref (el mismo contact ID), el profesional, la fecha/hora con zona horaria y un external_ref propio de la cita (por ejemplo, el ID del booking de GHL). Si el horario está tomado, la API responde 409 y puedes manejar el conflicto en el flujo.

## Vuelta: VitalDesk avisa al CRM

- En VitalDesk, ve a Configuración → API y Webhooks → pestaña Webhooks, y registra la URL de un webhook receptor de n8n.

- Suscríbete a los eventos **cita actualizada** (incluye asistió / no asistió), **tratamiento completado** y **pago recibido**.

- En n8n, cada evento llega con el external_ref que guardaste — es decir, con el ID de tu CRM — así que actualizar la oportunidad correcta en GHL es un paso directo, sin búsquedas frágiles por nombre o teléfono.

- Verifica la firma HMAC del header X-VitalDesk-Signature con el secret del endpoint para descartar mensajes falsificados.

## Buenas prácticas

- Usa siempre external_ref en ambos objetos: es lo que hace el circuito robusto ante reintentos y reprocesos.

- Envía las fechas con zona horaria explícita (ISO 8601, por ejemplo 2026-09-01T15:00:00-05:00) — la API la exige para evitar citas corridas.

- Maneja el 409 de solape: reintenta con otro horario o usa el flag de sobrecupo solo si tu operación lo permite.

- Da a la key solo los permisos que el flujo necesita (principio de mínimo privilegio) y rota el secret del webhook si cambia de manos.

¿Quieres probar el circuito antes de contratar? Regístrate gratis en [vitaldesk.cl](/) (14 días, sin tarjeta) y solicita la habilitación Enterprise de evaluación para tu clínica de prueba. También puedes revisar [todas las funciones](/funciones) y [los planes](/precios).

## Preguntas frecuentes

**¿VitalDesk tiene integración nativa con GoHighLevel?**

No hay un conector "one-click", pero la integración vía API + webhooks con n8n o Make es directa y queda montada en una tarde: creación de pacientes y citas desde GHL, y actualización de oportunidades en GHL cuando el paciente asiste o paga.

**¿Qué pasa si GHL reenvía el mismo lead dos veces?**

Nada malo: la creación de pacientes es idempotente. Si el external_ref, documento, email o teléfono ya existen, la API devuelve el paciente existente en lugar de duplicarlo.

**¿Cómo sabe mi CRM si el paciente asistió a su cita?**

Suscribiéndote al webhook de cita actualizada: cuando la clínica marca la cita como asistida (completed) o no asistió (no_show), VitalDesk envía el evento con el estado nuevo, el anterior y el identificador de tu CRM.

**¿Funciona con Make o Zapier en vez de n8n?**

Sí. Cualquier herramienta que pueda hacer llamadas HTTP con headers y exponer un webhook receptor sirve: la API usa REST estándar con autenticación por header X-API-Key.



---

**Tags**: gohighlevel, n8n, crm, api, webhooks, automatización

[← Volver a Tutoriales](https://vitaldesk.cl/tutoriales)
