Tutorial

Conecta el workflow de tu CRM a un agente (URL del webhook y secreto)

Última actualización: 8 de septiembre de 2026

Cada agente de IA de GodSetter tiene su propia URL de webhook. El workflow que apuntas a esa URL decide qué agente hace la llamada — así un mismo cliente puede usar agentes distintos para campañas distintas con solo cambiar de URL.

Esta guía conecta un workflow del CRM (por ejemplo, «nuevo lead creado») con un agente para que cada lead que procese el workflow reciba una llamada en cuestión de segundos: la primera llamada sale en el momento en que llega el lead.

Antes de empezar

  • Tu CRM está conectado en Conexiones (OAuth) y la subcuenta del cliente ya se ha importado (aparece en Clientes como activa). Necesita dónde agendar: un calendario propio, o un calendario predeterminado en el agente (Identidad y enrutamiento), buscado por nombre en la subcuenta del cliente.
  • El agente existe y tiene al menos un número de teléfono activo asignado (editor del agente → pestaña Números). Esto es fail-closed: un agente sin números nunca llama.
  • La dirección del agente es Saliente. Un agente entrante responde devoluciones de llamada y nunca puede iniciar un ciclo de llamadas, así que no puede ser el destino de un trigger — consulta Crea agentes salientes y entrantes.

Paso 1 — Copia la URL del webhook del agente y su secreto

Abre el agente en Agentes y ve a la pestaña Datos y GHL. Ahí encontrarás:

  • la URL del webhook propio del agente (…/api/webhooks/ghl-trigger/agent/<agent-id>),
  • el Secreto del webhook,
  • un Ejemplo de body (JSON),

cada uno con su botón de copiar. El secreto es único por agente — trátalo como una contraseña.

Paso 2 — Añade la acción webhook a tu workflow

En la subcuenta del cliente, edita el workflow que debe disparar las llamadas (por ejemplo, al crear un contacto o al cambiar de etapa del pipeline) y añade una acción Webhook:

  • Método: POST
  • URL: la URL del agente que has copiado
  • Header: Content-Type: application/json

Paso 3 — Construye el body JSON

Campos mínimos obligatorios:

{
  "webhookSecret": "<the copied per-agent secret>",
  "locationId": "{{location.id}}",
  "contactId": "{{contact.id}}",
  "phone": "{{contact.phone}}"
}

Añadidos recomendados:

CampoPara qué sirve
firstName, lastName, emailEl agente saluda al lead por su nombre.
customValuesMapa clave/valor, disponible en el prompt como variables {{cv_*}}.
consentProofPrueba de consentimiento (origen, fecha y hora, texto). Obligatoria en cada llamada cuando el modo estricto está activo.
timezoneEl huso horario IANA del propio contacto (por ejemplo America/New_York). Lo usan los agentes cuya franja horaria funciona en modo Zona horaria del contacto.

El campo timezone es opcional y se puede enviar siempre sin riesgo: un valor ausente o irreconocible se ignora, y la franja horaria cae en el huso de la subcuenta del cliente y después en el huso de reserva del agente. Se guarda en el lead, así que los reintentos y las devoluciones de llamada posteriores lo reutilizan. Detalles en Define una franja horaria por agente.

Paso 4 — Envía un lead de prueba

La comprobación más rápida está en la app. En la misma pestaña Datos & GHL, justo debajo de la tarjeta del webhook, la tarjeta Envía un lead de prueba simula un lead que llega desde el workflow: elige el cliente (solo se listan los clientes activos con dónde agendar — su propio calendario o el predeterminado del agente), introduce un teléfono que controles y pulsa Enviar lead de prueba. El lead pasa por la misma entrada que los webhooks — controles de dirección, cliente, número, consentimiento y Do-Not-Call — y después por el envío inmediato: si todo está conectado, el agente te llama en pocos segundos. Es una llamada real (coste real) sobre un lead real, que queda en Llamadas y Leads como cualquier otro. El calendario es el real del cliente; la reserva, las etiquetas y las notas se simulan: en el CRM no queda nada. La tarjeta muestra una traza de tres líneas (y, como el lead es real, una prueba sin respuesta la vuelve a marcar el plan de reintentos del agente: espera más llamadas reales a tu número salvo que bloquees el lead desde la página Leads):

  • Entrada — lead aceptado, u omitido con el motivo (los mismos de la tabla de abajo);
  • Envío — llamada iniciada, en cola en cabeza (todos los slots ocupados), aparcada a la apertura de la franja (fuera del horario de llamadas), o no iniciada con el motivo;
  • Abrir el lead — el lead que creó la prueba.

Después haz la comprobación real desde el CRM: dispara el workflow con un contacto de prueba (usa un teléfono que controles). Respuesta esperada:

{ "status": "enqueued", "leadId": "…" }

Dentro de tu franja horaria la llamada sale en pocos segundos; fuera de ella, el lead espera la apertura. Consulta Llamadas para ver la entrada en vivo.

Si la respuesta indica skipped

El campo reason te dice qué control de activación detuvo la llamada:

ReasonSignificadoSolución
client_inactive_or_not_foundLa subcuenta no está importada o está inactiva.Sincroniza las subcuentas, abre el cliente y actívalo.
not_configuredEl cliente no tiene calendario propio y el agente no tiene calendario predeterminado.Fija un calendario predeterminado en el agente (Identidad y enrutamiento) o selecciona uno en la página de detalle del cliente.
no_numberEl agente no tiene números activos asignados.Asígnale uno en la pestaña Números del agente.
no_consentEl modo estricto está activo y falta la prueba de consentimiento o no es válida.Incluye un consentProof válido, o revisa el modo estricto.
blockedEl lead pidió no ser contactado (Do-Not-Call).Desbloquéalo solo de forma deliberada, desde la página Leads.
inbound_agentLa URL apunta a un agente entrante, y esos nunca inician llamadas.Apunta el workflow al agente saliente, o cambia la dirección en la pestaña Identidad y enrutamiento del agente.

Un trigger duplicado — el mismo contacto disparado dos veces en menos de 10 minutos — recibe su propia respuesta, {"status":"duplicate"}, y simplemente se ignora: es la deduplicación integrada funcionando como debe.

Tres de estas omisiones se etiquetan además en tu CRM — no_number, no_consent y blocked (los nombres son configurables en Ajustes → Etiquetas CRM) — para que tus workflows puedan reaccionar. Las otras tres (client_inactive_or_not_found, not_configured e inbound_agent) son errores de configuración de tu lado: se informan en la respuesta y en el propio lead, pero no se escribe nada en el CRM.

Paso 5 — Detén el ciclo cuando el contacto reserve por su cuenta

Una reserva hecha durante una llamada ya detiene el ciclo automáticamente. Pero un contacto también puede reservar fuera de cualquier llamada: por el enlace del funnel o con un agente humano. Avisa a GodSetter para que las rellamadas programadas nunca marquen a alguien que ya reservó:

  1. En la subcuenta del cliente, crea un segundo workflow con el disparador nativo del CRM «Customer booked appointment».
  2. Añade una acción Webhook apuntando a la URL «Cita reservada (detener llamadas)» que aparece en la página Conexiones (la página también muestra el secreto del webhook de la agencia y un body de ejemplo listo para pegar).
  3. Campos del body: webhookSecret (el secreto de agencia de Conexiones), locationId, contactId y opcionalmente phone.

Si todo va bien la respuesta es {"status":"stopped"}: el lead queda marcado como reservado y todas sus rellamadas/callbacks programadas se eliminan. Una respuesta not_found es benigna: ese contacto simplemente no estaba en un ciclo de llamadas.

Las otras URL de la página Conexiones

La tarjeta Webhooks entrantes de la página Conexiones lista cinco URL, y solo dos son para pegar en GoHighLevel:

  • Disparador de llamada — el disparador a nivel de agencia (la URL heredada; la URL por agente del Paso 1 es la configuración recomendada).
  • Cita reservada (detener llamadas) — el Paso 5 de arriba.

Las otras tres — Inbound voice, Call lifecycle y Herramientas en llamada — son webhooks de Retell, y los configura GodSetter por ti: las URL de call lifecycle y herramientas en llamada se fijan en el agente al crearlo (y se vuelven a aplicar con «Sincronizar herramientas GHL»), y la URL de inbound voice se fija en el número cuando lo registras en Retell. No hay nada que pegar: se muestran como referencia, por ejemplo para comprobar a qué host apuntan tus agentes y tus números. El Secreto del webhook solo sirve para los dos webhooks de GoHighLevel.

Mejor aún: las acciones de workflow con marca

Si la app del marketplace de GodSetter está instalada en la subcuenta, ambos pasos están disponibles como acciones de workflow nativas, sin URL ni JSON que pegar. Requieren esa app instalada en la subcuenta y la facturación "Workflow LC Premium Triggers & Actions" habilitada en ella; sin las dos cosas, los nodos de marca no aparecen en el constructor de workflows y el webhook genérico sigue siendo el camino.

  • Iniciar ciclo de llamadas — elige la acción y pega el ID del agente (se copia desde la pestaña Datos y GHL del agente). El teléfono, el nombre y los custom fields del contacto se obtienen automáticamente — cada token {{cv_contact_*}} del prompt se resuelve sin ningún mapeo.
  • Cita reservada (detener llamadas) — elige la acción y pega tu ID de cuenta (se copia desde la página Conexiones).

El webhook genérico sigue totalmente soportado; las acciones hacen lo mismo con menos configuración. Una nota: la acción de inicio no transporta consentProof — con el modo estricto activo, usa el webhook para los clientes que requieren consentimiento. (Los custom fields del contacto y los valores ya guardados por triggers webhook anteriores se aplican automáticamente.)

Conviene saber

  • Una URL por agente. Para dirigir una campaña a otro agente, duplica el workflow y cambia la URL y el secreto — no hay que tocar nada en GodSetter.
  • Un trigger nuevo reinicia el ciclo. Volver a disparar el workflow para un contacto que GodSetter ya conoce pone el contador de intentos a cero y descarta los reintentos que siguieran aparcados para ese lead, así que el plan empieza por la llamada n.º 1 en lugar de retomarse a mitad. Una devolución de llamada que pidió el lead sí se conserva.
  • El webhook heredado a nivel de agencia (sin /agent/) sigue funcionando y usa el agente predeterminado del cliente, pero la URL por agente es la configuración recomendada — y responde {"status":"skipped","reason":"no_template"} cuando el cliente no tiene agente predeterminado. Ese predeterminado es el campo Agent Template de la ficha del cliente (Gestiona tus clientes).
  • Si el workflow se dispara con la franja horaria de llamadas cerrada, el lead espera en la cola y se llama cuando la franja se reabre.