Configuración de GoHighLevel
Esta guía resume los pasos para habilitar la integración con GoHighLevel en producción.
1. Credenciales Necesarias
- Inicia sesión en GHL → Settings → API Keys
- Genera una API Key con permisos sobre Contacts, Opportunities y Tags
- Copia el
Location IDdesde Settings → Business Profile - Genera un secreto para webhooks (
python -c "import secrets; print(secrets.token_urlsafe(32))") - Añade al
.envdel backend:
GHL_API_KEY=...
GHL_API_URL=https://services.leadconnectorhq.com
GHL_LOCATION_ID=...
GHL_WEBHOOK_SECRET=...
# Retry Scheduler (opcional, tiene defaults)
GHL_RETRY_ENABLED=true
GHL_RETRY_INTERVAL_MINUTES=30
# Pipelines (opcional)
GHL_PIPELINE_EMPRESAS_ID=...
GHL_PIPELINE_EXPERTOS_ID=...
GHL_PIPELINE_PROYECTOS_ID=...
GHL_PIPELINE_PROYECTOS_STAGE_INITIAL=...
Nota importante:
- Para Private Integrations (recomendado), usa
https://services.leadconnectorhq.com - Para instancias personalizadas:
https://services.[tu-dominio](ej:https://services.suitesapiens.com) - El token se usa con formato
Bearer <TOKEN>en el header Authorization
2. Migraciones y Despliegue
- Asegúrate de ejecutar
docker compose exec backend alembic upgrade headpara aplicar las tablas relacionadas (ghl_sync_log) - Reinicia el backend para cargar variables
- Verifica que la migración
a1b2c3d4e5f7_add_ghl_id_to_usersse haya aplicado (agrega campoghl_ida la tablausers)
3. Configurar Webhooks de GHL
- En Settings → Integrations → Webhooks, crea un webhook con:
- URL:
https://api.tu-dominio.com/api/webhooks/ghl - Secret: el mismo
GHL_WEBHOOK_SECRET - Eventos recomendados:
Contact Create,Contact Update,Contact Tag Update,Opportunity Create,Opportunity Update
- URL:
- Guarda y prueba el webhook
4. Pruebas Funcionales
- Registrar un usuario y verificar que se crea un contacto mínimo en GHL inmediatamente (con tags
registro-incompleto,empresa-pendienteoexperto-pendiente) - Completar el perfil del usuario y verificar que el contacto GHL se enriquece con todos los datos (tags reemplazados, custom fields, lead score)
- Verificar que el tag
marketing-opt-inaparece si el usuario aceptó comunicaciones comerciales - Publicar un proyecto y confirmar que se genera la oportunidad
- Verificar un experto y confirmar que se actualizan las etiquetas en GHL (
exp-verificado) - Cambiar el nivel de un experto y verificar sincronización (
exp-nivel-*) - Probar el flujo multi-rol: registrar con ambos roles, crear un perfil, luego el segundo → verificar que solo hay un contacto GHL con ambos tags
- Revisar la tabla
ghl_sync_logy los logs del backend si hay fallos - Verificar que
ghl_sync_logtiene entradas conevent_type="registration_minimal"al registrar yevent_type="profile_enriched"al crear perfil - Verificar que el Health Check funciona:
GET /api/integrations/ghl/health-check?detail_level=quick - Verificar que el Retry Scheduler está activo en los logs de startup
- Verificar que actualizar username/email de un usuario sincroniza con GHL (check
ghl_sync_log)
Endpoints de Diagnóstico
Una vez configurado, puedes usar los endpoints de diagnóstico:
# Diagnóstico completo de un usuario
GET /api/admin/users/{user_id}/ghl-diagnosis
# Sincronización manual si hay discrepancias
POST /api/admin/users/{user_id}/ghl-sync-tags
5. Checklist Rápido
- Variables
GHL_*definidas en el backend - Migraciones aplicadas
- Webhook configurado y activo
- Sincronizaciones verificadas (contacto mínimo al registro + enriquecimiento al crear perfil + oportunidad al publicar)
- Tags
registro-incompletoy*-pendienteaparecen al registrar y desaparecen al crear perfil - Tag
marketing-opt-infunciona correctamente - Flujo multi-rol probado (un solo contacto GHL con ambos roles)
- Verificación de experto sincroniza correctamente
- Cambio de nivel de experto sincroniza correctamente
- Actualización de perfil sincroniza campos básicos y personalizados
- Logs (
ghl_sync_log) sin errores pendientes - Endpoints de diagnóstico funcionando correctamente
- Health Check endpoint responde correctamente (
GET /api/integrations/ghl/health-check) - Retry Scheduler activo en logs de startup
- Campo
ghl_idpoblado en usuarios que sincronizaron con GHL - Variables
GHL_RETRY_ENABLEDyGHL_RETRY_INTERVAL_MINUTESconfiguradas
6. Funcionalidades de Sincronización
La integración sincroniza automáticamente:
- Registro de usuarios → Crea contacto mínimo en GHL inmediatamente (background task) con tags
registro-incompleto,empresa-pendiente/experto-pendiente, ymarketing-opt-insi aplica - Creación de perfil → Enriquece contacto GHL existente con datos completos del perfil, custom fields, lead score y tags definitivos
- Verificación de expertos → Actualiza etiquetas (
exp-verificado,exp-solicitud) - Cambio de nivel de experto → Actualiza etiquetas de nivel (
exp-nivel-*) - Activación/desactivación → Actualiza etiquetas de estado (
emp-inactivo,exp-inactivo) - Pre-evaluación → Añade/remueve
exp-pre-evaluación - Recontacto → Añade
emp-recontacto - Baja → Añade
emp-bajayemp-baja-confirmada - Eliminación definitiva → Actualiza etiquetas antes de eliminar:
- Empresas: Remueve
emp-bajayemp-baja-confirmada, añadeemp-eliminado - Expertos: Añade
exp-eliminado - Registra evento
user_deletedenghl_sync_log
- Empresas: Remueve
- Publicación de proyecto → Crea oportunidad en GHL
- Asignación de experto → Actualiza oportunidad y etiquetas
- Completado de proyecto → Actualiza oportunidad y etiquetas
- Actualización de username/email → Sincroniza cambios de datos del usuario con GHL (fire-and-forget)
- Retry automático → Scheduler reintenta webhooks fallidos cada 30 minutos (configurable)
- Health Check → Diagnóstico en tiempo real de la integración GHL