Saltar al contenido
Menú de la documentación

Conecta tu cuenta de GoHighLevel

Conecta tu CRM una vez y olvídate: cada contacto que etiquetes en GoHighLevel recibirá la llamada de tu agente de Calligence, y el resultado volverá solo al contacto — sin exportar hojas de cálculo ni copiar datos a mano.

Qué hace esta integración

#

El circuito completo, en tres movimientos:

1 · GoHighLevel

Tu workflow se dispara (por ejemplo, al añadir una etiqueta a un contacto) y envía el contacto a Calligence.

2 · Calligence

El contacto entra como lead en tu campaña y el agente de IA le llama dentro de su ventana horaria.

3 · De vuelta en GHL

Tras cada llamada, el contacto recibe una nota con el resumen; al cerrar el lead, también una etiqueta con el resultado.

En concreto, después de cada llamada verás en el propio contacto de GoHighLevel:

  • Una nota en su timeline que empieza por Calligence — resumen de la llamada:, con el resumen de la conversación y el resultado.
  • Cuando el lead llega a un estado final, una etiqueta en su lista de tags: Calligence: Éxito, Calligence: No interesado, Calligence: Inválido o Calligence: Pendiente. Las etiquetas se añaden — nunca se borran las tuyas.
  • Opcionalmente, el resultado también puede escribirse en un campo personalizado de tu elección: dinos su id y lo configuramos nosotros (ver el paso 1).
  • Opcionalmente, si en la llamada se acordó una cita con un comercial, una cita real en tu calendario de GoHighLevel — con asignación automática al comercial si usas un calendario round-robin (ver la sección Citas en tu calendario).

Calligence nunca crea contactos nuevos en tu CRM ni duplica los existentes — solo escribe notas y etiquetas sobre el contacto que tú enviaste.

Antes de empezar

#
1

Acceso de administrador a la sub-cuenta (location) de GoHighLevel donde están tus contactos — no a la cuenta Agency. El token del paso 2 se crea dentro de la sub-cuenta; es el error más común.

2

Un usuario administrador en Calligence — la página Integraciones solo es visible para administradores de tu organización.

3

Una campaña creada en Calligence (o créala sobre la marcha en el paso 3).

4

¿Tu CRM se llama LeadConnector u otra marca? Es GoHighLevel con marca blanca — los menús son los mismos. Esta guía navega por nombres de menú, no por URLs, así que te sirve igual.

Paso 1 — Crea la conexión en Calligence

#

Inicia sesión en Calligence y abre Integraciones en el menú lateral. Pulsa + Nueva conexión y rellena el formulario:

  • Nombre — un nombre para identificarla en la lista, por ejemplo GHL — cuenta principal.
  • Proveedor — GoHighLevel.
  • Token — el token de integración privada que crearás en el paso 2. Puedes dejar la ventana abierta y volver aquí con el token copiado. Se cifra en el servidor y no se vuelve a mostrar.
  • Location ID — el identificador de tu sub-cuenta en GoHighLevel. Lo encuentras en la URL del navegador dentro de tu sub-cuenta: es el código que aparece justo después de /location/. Tiene que ser la misma sub-cuenta en la que crearás el token del paso 2: Calligence lo comprueba al guardar.
  • Calendario de citas (opcional) — el ID del calendario de GoHighLevel donde quieres que Calligence cree las citas que tu agente acuerde por teléfono. Déjalo vacío si no quieres citas; puedes configurarlo más adelante desde la lista de Integraciones, en el menú ⋯ (Más acciones) de la conexión → Calendario. Detalles y requisitos en la sección Citas en tu calendario.

Deberías ver la conexión en la lista, con estado activo y el token enmascarado (solo los últimos 4 caracteres).

Qué lee el agente de cada contacto se configura después, sobre la conexión ya creada: en la lista de Integraciones, abre el menú ⋯ de la conexión y pulsa Mapeo. Ahí indicas de qué campo sale el producto por el que se interesó el contacto (su nombre y, si lo tenéis, su código) y qué otros campos debe conocer el agente, con el nombre con el que los recibirá. En GoHighLevel los campos personalizados viajan identificados por su id, nunca por su nombre, así que es el id lo que hay que escribir. Solo llegan al agente los campos que nombres; el resto del contacto no sale de GHL. Déjalo vacío si no lo necesitas: el contacto se llama igual.

El campo personalizado donde escribimos el resultado de la llamada es otra cosa y no se configura desde ahí: dinos el id del campo (status en nuestra configuración) y lo dejamos puesto nosotros. Si no lo pides, las etiquetas de resultado se sincronizan igual.

Paso 2 — Crea el token en GoHighLevel

#

Dentro de tu sub-cuenta de GoHighLevel:

  1. Ve a Settings → Private Integrations. Si no ves esa opción, actívala primero en Settings → Labs.
  2. Pulsa Create new Integration y ponle un nombre, por ejemplo Calligence.
  3. En los permisos (scopes), marca estos dos: View Contacts y Edit Contacts. Si además vas a usar las citas en tu calendario, marca también los permisos de eventos de calendario (View Calendar Events y Edit Calendar Events). No necesita ningún otro permiso.
  4. Crea la integración y copia el token ahora — GoHighLevel solo lo muestra una vez.

Importante: el token correcto empieza por pit-. Las claves de API antiguas de GoHighLevel (las de la versión 1, cadenas largas que empiezan por eyJ) no funcionan — Calligence las rechaza al crear la conexión.

Vuelve a Calligence y pega el token (y el Location ID) en el formulario del paso 1. Al guardar, Calligence comprueba las credenciales contra GoHighLevel antes de crear nada: si el token no es válido, ha caducado o pertenece a otra sub-cuenta distinta de la del Location ID, verás un error en el formulario y la conexión no se creará. Si todo encaja, la verás creada y activa en la lista de Integraciones.

Paso 3 — Asocia la conexión a una campaña y copia tu URL

#

En Calligence, abre Campañas y crea una campaña nueva (o edita una existente). En el campo Conexión (CRM), selecciona la conexión que acabas de crear y guarda.

Al guardar, Calligence te muestra la URL de webhook de esa campaña — "Conexión asociada. Pega esta URL en tu workflow de GoHighLevel" — con un botón Copiar. Si editas la campaña más adelante, la misma URL aparece como URL actual.

  • Cada campaña tiene su propia URL: los contactos que lleguen por ella entran en esa campaña. Si usas varias campañas, repite este paso en cada una.
  • La URL es permanente — no cambia aunque edites la campaña. Solo cambia si la rotas a propósito o si desvinculas la conexión (Editar → Desvincular): eso la anula y, si vuelves a vincularla, la campaña recibe una URL nueva.

Trata esta URL como una contraseña. Cualquiera que la tenga puede crear leads en tu campaña y provocar llamadas. No la publiques ni la compartas fuera de tu workflow de GoHighLevel. Si crees que se ha filtrado, puedes rotarla tú mismo desde la campaña (Editar → botón Rotar junto a la URL): la anterior deja de funcionar al instante y solo tendrás que pegar la nueva en tu workflow.

Paso 4 — Configura el workflow en GoHighLevel

#

De vuelta en tu sub-cuenta de GoHighLevel:

  1. Ve a Automation → Workflows y crea un workflow nuevo.
  2. Como disparador (trigger), añade Contact Tag con la condición Tag added y una etiqueta dedicada, por ejemplo calligence. Así controlas exactamente qué contactos entran en la campaña: etiquetas un contacto, y Calligence le llama.
  3. Añade una acción de tipo Webhook, método POST, y pega en el campo URL la URL de tu campaña (paso 3). No necesitas configurar cabeceras ni cuerpo: el envío estándar del webhook ya incluye la información del contacto que Calligence necesita.
  4. Guarda y — esto es lo que más se olvida — publica el workflow (Publish). En borrador, el botón de prueba funciona, pero los contactos reales no disparan nada.

Deberías ver el workflow como Published en la lista de workflows.

Paso 5 — Prueba el circuito completo

#

La mejor prueba es una de verdad, contigo al otro lado del teléfono:

  1. Crea en GoHighLevel un contacto de prueba con tu propio móvil en formato internacional, por ejemplo +34600111222.
  2. Añádele la etiqueta del workflow (calligence). El workflow se dispara y envía el contacto a Calligence.
  3. En Calligence, abre la campaña: deberías ver el contacto como lead en unos segundos.
  4. Espera la llamada. Se realiza dentro de la ventana horaria configurada en tu organización y en la disponibilidad del lead — si estás fuera de ventana, quedará programada.
  5. Al terminar la llamada, abre el contacto en GoHighLevel: deberías ver la nota Calligence — resumen de la llamada: en su timeline y, si el lead quedó cerrado, la etiqueta Calligence: … con el resultado.

Si algo no cuadra, GoHighLevel te dice mucho: abre el workflow y mira sus Execution Logs — ahí verás si el webhook se disparó y qué respondió.

Detener llamadas desde tu CRM

#

Si un lead se resuelve por otra vía — el comercial lo cerró por teléfono, la oportunidad se ganó o se cerró en GoHighLevel — puedes avisar a Calligence desde ese mismo workflow para que no siga llamando. Al recibir el aviso, Calligence:

  • Deja de llamar a ese lead — cancela cualquier intento de llamada pendiente.
  • Lo marca como "Trabajado fuera" — un estado neutro: no cuenta como éxito ni como fracaso. Los minutos ya consumidos en llamadas previas sí se facturan.
  • Escribe una nota de confirmación en la ficha del contacto: "Calligence dejó de llamar a este lead." (si añades un motivo, también aparece ahí).

No confundas las dos URLs de tu campaña

La URL del paso 3 inicia llamadas; añadirle /stop-lead al final la convierte en la URL que las detiene. Pegar la URL equivocada en el workflow de "parar" haría que Calligence llamase al contacto en vez de dejar de hacerlo.

URL para RECIBIR leads (inicia llamadas)
…/api/connectors/webhook/<token>

La del paso 3 — la que ya tienes en tu workflow de inscripción.

URL para DETENER llamadas
…/api/connectors/webhook/<token>/stop-lead

La misma URL, con /stop-lead al final.

De vuelta en tu sub-cuenta de GoHighLevel:

  1. Ve a Automation → Workflows y crea un workflow nuevo (o edita uno existente).
  2. Como disparador (trigger), usa el que marque para ti el cierre del lead — por ejemplo Opportunity Status Changed a Ganado o Cerrado.
  3. Añade una acción de tipo Webhook, método POST, y pega en el campo URL la URL para DETENER llamadas — tu URL de campaña (paso 3) con /stop-lead al final. Nunca la URL de inscripción.
  4. Opcional: añade un campo de Custom Data llamado reason con el motivo del cierre, por ejemplo Cerrado por el comercial. Se muestra como Motivo en Calligence y en la nota del CRM — máximo 64 caracteres, si escribes más se recorta.
  5. Guarda y publica el workflow (Publish). En borrador no se dispara con contactos reales.

El aviso es idempotente: repetirlo no hace nada nuevo. Si el lead ya había llegado a un estado final por su cuenta — éxito, no interesado o inválido — su estado no cambia; "Trabajado fuera" solo se aplica a leads que seguían activos.

Esto no es una lista de exclusión permanente: detiene la llamada dentro de la campaña actual. Si más adelante vuelves a subir el mismo contacto a una campaña nueva, Calligence le llamará de nuevo.

Citas en tu calendario (opcional)

#

Cuando tu agente de Calligence acuerda una cita con el cliente — día y hora concretos, o «lo antes posible» — por teléfono o por WhatsApp, Calligence puede crearla como cita real en un calendario de GoHighLevel, igual que si la añadieras a mano con "Add appointment". Y aquí está la gracia: quién atiende esa cita lo decide tu CRM, no Calligence. Si el calendario es de tipo round-robin, GoHighLevel reparte cada cita automáticamente entre los comerciales del calendario; para cambiar el reparto (altas, bajas, vacaciones) editas el calendario en GoHighLevel y ya está. Si es un calendario personal (o de cualquier otro tipo), la cita se asigna a la persona que tiene ese calendario. Los dos casos funcionan: elige el que encaje con cómo trabajáis.

  1. En GoHighLevel, crea (o elige) el calendario donde quieres las citas y copia su ID de calendario (en los ajustes del propio calendario, dentro de Calendars → Calendar Settings). Vale cualquier tipo: uno Round Robin con tus comerciales como miembros si quieres reparto automático, o uno personal si las citas son siempre para la misma persona. Copia el ID del calendario, no el de un grupo de calendarios — en esa pantalla aparecen juntos y es la confusión más habitual.
  2. Asegúrate de que tu token de integración privada tiene los permisos de eventos de calendario (View/Edit Calendar Events, paso 2). Si tu token es anterior a esta función, edita sus permisos en Settings → Private Integrations — o crea uno nuevo y actualízalo en Calligence con Rotar token, en el menú ⋯ de la conexión. Añade también View Calendars: Calligence lo usa para comprobar el ID cuando lo guardas y para saber a quién asignar la cita: en un calendario que no es Round Robin, o en uno con un solo miembro, la cita va a esa persona. Sin ese permiso GoHighLevel puede rechazar las citas en esos calendarios.
  3. En Calligence, abre Integraciones y, en el menú ⋯ de tu conexión, pulsa Calendario (o rellena el campo al crearla). Pega el ID y guarda. Al guardar, Calligence le pregunta a GoHighLevel si ese calendario existe y pertenece a esta sub-cuenta: si no lo reconoce, verás el error en el formulario y el calendario no se guardará. Para desactivar las citas, deja el campo vacío y guarda.

A partir de ahí, cada vez que una llamada termine con una cita acordada verás en GoHighLevel una cita titulada Cita Calligence — {nombre del cliente} (o Cita Calligence a secas si no conocemos su nombre) sobre ese contacto, a la hora acordada, con el resumen de la llamada en la descripción (empieza por "Cita agendada por Calligence en una llamada.").

Dos detalles de comportamiento: la cita se crea con el momento que se acordó en la llamada; si el cliente dio una franja en vez de una hora ("los lunes por la tarde"), Calligence reserva al inicio de la primera franja que toque (el lunes siguiente a las 14:00) y el comercial la ajusta si hace falta — las palabras literales del cliente quedan en la nota y en el email. Si acepta que le llame un asesor sin decir hora («lo antes posible», «hoy mismo»), la cita se pone en el momento en que terminó la llamada, sea la hora que sea. Y la cita se crea aunque el hueco no esté "libre" según la configuración del calendario: la hora ya se pactó de viva voz con el cliente, así que Calligence no la descarta por agenda.

Importante — automatizaciones sobre citas: al crear la cita, GoHighLevel dispara sus avisos y automatizaciones con normalidad (es lo que queremos: así se entera tu comercial y, si lo tienes configurado, el cliente recibe su confirmación). Por eso mismo, nunca apuntes un workflow que se dispare al crearse una cita hacia una URL de Calligence (la URL de inscripción del paso 3 ni ninguna otra): ese workflow volvería a inscribir al contacto y Calligence lo llamaría otra vez — un bucle de llamadas que nadie quiere.

Solución de problemas

#

El webhook no se dispara

#

Casi siempre es una de dos: el workflow está en borrador (publícalo — el botón de prueba funciona en borrador, los contactos reales no), o el disparador no coincide (revisa que la etiqueta del trigger es exactamente la que añades al contacto).

El contacto no aparece como lead en Calligence

#

Comprueba que el contacto tiene teléfono — un contacto sin teléfono no puede recibir llamadas y se descarta. Añádele el teléfono y vuelve a disparar el workflow (quita la etiqueta y vuelve a ponerla). Si tampoco así entra, mira los Execution Logs del workflow en GoHighLevel.

El lead entra pero nunca recibe la llamada

#

Usa formato internacional (+34…) en el teléfono, y revisa la ventana horaria de llamadas de tu organización y el estado de la campaña — una campaña pausada acumula los leads y llama al reanudarla.

Errores 401 o 403 en los Execution Logs

#

El token no tiene los permisos necesarios o ha sido rotado. Crea un token nuevo en GoHighLevel (con View Contacts y Edit Contacts) y actualízalo en Calligence con Rotar token, en el menú ⋯ de la conexión en Integraciones. Mientras el token esté mal, ninguna llamada de esa conexión sincroniza.

Reenvié el mismo contacto y no pasó nada

#

Depende de cómo acabó el primer envío. Si el contacto ya había llegado a Calligence, reenviarlo no cambia nada, y es a propósito: así, un workflow que se dispare dos veces no duplica ni el lead ni la llamada. Calligence tampoco vuelve a leerlo de GoHighLevel, de modo que lo que cambies después en el contacto no llega a Calligence. Si el primer envío falló (por ejemplo, porque el contacto no tenía teléfono), corrige el dato y vuelve a disparar el workflow: ese reenvío sí se procesa.

"El proveedor ha rechazado estas credenciales" al crear la conexión

#

Calligence ha preguntado a GoHighLevel y ha recibido un no. Hay dos causas posibles y desde fuera no se distinguen, así que revisa las dos: el token (¿está bien copiado, sigue existiendo, tiene View Contacts y Edit Contacts?) y el Location ID (¿es el de la misma sub-cuenta donde creaste el token?). Un token de la sub-cuenta A con el Location ID de la sub-cuenta B es el fallo más habitual.

Creé el token en la cuenta equivocada

#

El token debe crearse en la sub-cuenta (location) donde viven tus contactos, no a nivel Agency. Si lo creaste en la agencia, créalo de nuevo dentro de la sub-cuenta y actualízalo en Calligence.

Creo que se ha filtrado la URL de mi campaña

#

Rótala: abre la campaña, pulsa Editar y usa el botón Rotar que hay junto a la URL. La URL anterior deja de funcionar de inmediato, así que pega la nueva en tu workflow de GoHighLevel en cuanto la tengas — mientras tanto, los contactos que envíe el CRM se descartan. Rotar la URL no toca tu conexión ni tu token de GoHighLevel: las demás campañas siguen funcionando igual.

La llamada acordó una cita pero no aparece en mi calendario

#

Revisa, en este orden: que la conexión tiene un calendario configurado (Integraciones → menú ⋯ de la conexión → Calendario — si está vacío, las citas están desactivadas); que el ID pegado es el del calendario correcto; que el token tiene los permisos de eventos de calendario (View/Edit Calendar Events — un token creado antes de usar citas normalmente no los tiene: edítalos en Private Integrations o crea un token nuevo y rótalo en Calligence); y que en la llamada se acordó algún momento (una hora o al menos una franja) — si el cliente no dio ninguna referencia de cuándo, no hay nada que reservar. Tampoco se reserva si la hora acordada ya pasó o queda a más de 6 meses vista (una fecha así suele ser un error de interpretación, y preferimos no ensuciar tu calendario: el resumen y el email al comercial siguen llegando igualmente). La nota y la etiqueta se sincronizan aparte: que lleguen no significa que la cita también.

Si la cita se intentó y GoHighLevel la rechazó, no tienes que adivinar cuál de esas causas fue: abre la ficha del lead en Calligence y mira el panel de sincronización con el CRM. La fila de la cita muestra el motivo que devolvió GoHighLevel — por ejemplo que no reconoce el calendario — junto al código de error.

¿Se crean contactos duplicados en GoHighLevel?

#

No. Calligence escribe notas y etiquetas sobre el contacto existente — nunca crea contactos en tu CRM, y reintentar un envío no duplica notas ni etiquetas.

Envié el aviso de parada y Calligence sigue llamando

#

Revisa, en este orden: que la URL del webhook termina en /stop-lead (no la URL de inscripción del paso 3); que el contacto ya existe como lead en Calligence — un aviso sobre un contacto que nunca entró no tiene nada que detener; y que la campaña tiene una conexión activa. Si las tres están bien, mira los Execution Logs del workflow en GoHighLevel para ver qué respondió Calligence.

¿Sigues atascado? Escríbenos y lo miramos contigo.