Sistema de agendamiento para clínicas en GoHighLevel
Sistema de agendamiento para clínicas en GoHighLevel: tus pacientes reservan solos y confirman su cita con un botón de WhatsApp, sin que nadie les llame.
Capítulos del video · 22
- 00:00Sistema de agendamiento para clínicas: el caso real
- 02:20Subcuenta nueva y snapshot de tracking
- 06:09Pipeline de pacientes: de nuevo lead a cita confirmada
- 07:58Usuarios y permisos del equipo
- 10:10Activar los calendarios de servicios V2
- 11:45Horario de cada profesional y sus servicios
- 14:44Diseño de la página de reservas
- 17:58Que el paciente elija con quién agendar
- 21:16Intervalos, ventana de reserva y cancelaciones
- 23:49Por qué desactivo la confirmación automática
- 26:02Horario de la tarde y precio de cada servicio
- 31:06Primera reserva de prueba (y el error de pagos)
- 33:32Oportunidad automática según el canal de entrada
- 43:40Conectar WhatsApp a HighLevel con GoGHL
- 49:31Mensaje de cita agendada por WhatsApp
- 1:01:24Botones de WhatsApp: reagendar, cancelar y ubicación
- 1:07:06Recordatorio 24 horas antes con botón de confirmar
- 1:12:26Marcar la cita como confirmada con el botón
- 1:19:37Workflow de cita confirmada y recordatorio de 3 horas
- 1:25:19Pruebas: el error de Appointment vs Service Booking
- 1:32:20Mover la oportunidad: agendada, confirmada y no show
- 1:41:24Lo que falta para entregarlo al cliente
En este artículo 10
- Paso a paso
- El caso: una clínica que confirma sus citas a mano
- Prepara la subcuenta: pipeline y usuarios
- Calendarios de servicios V2: la base del sistema de agendamiento para clínicas
- Cada paciente nuevo entra al pipeline solo
- Confirmación de citas por WhatsApp con botones
- Mueve la oportunidad en cada estado de la cita
- Prueba todas las ramas antes de entregarlo
- Lo que falta para entregarlo al cliente
- Preguntas frecuentes
Paso a paso
- Crea la subcuenta desde cero y llena los datos con el buscador del perfil de Google del negocio (02:20).
- Arma el pipeline: Nuevo lead, Contactado, Cita agendada, Cita confirmada, No se presentó y Ganada (06:09).
- Agrega a los profesionales como usuarios, con solo los permisos que van a usar (07:58).
- Activa los calendarios de servicios V2 desde la agencia, con Setup Calendar en la subcuenta (10:15).
- En Global Settings, pon la URL de la página de servicios y el idioma en español (10:53).
- Define el horario de cada profesional y crea los servicios con su duración y su precio (11:45).
- Obliga al paciente a elegir con quién agenda, en lugar de dejarlo a un round robin (18:39).
- Ajusta el intervalo, la ventana de reserva, los límites para reagendar y cancelar, y apaga la confirmación automática (21:16).
- Conecta WhatsApp a la subcuenta con GoGHL escaneando el QR (43:40).
- Crea el workflow con el trigger Service Booking: mensaje de cita agendada, recordatorio de 24 horas con botones y la confirmación con el botón (50:37).
- Crea un segundo workflow para la cita confirmada, con el recordatorio de 3 horas (1:19:37).
- Mueve la oportunidad en cada estado: agendada, confirmada y no se presentó (1:32:20).
El caso: una clínica que confirma sus citas a mano
Si vas a vender sistemas de agendamiento, las clínicas y los profesionales de la salud con citas presenciales son de los clientes que más valoran esto. Tienen un dolor que se ve en la agenda: el paciente que no llega y el hueco que nadie llenó.
El caso del video es real. Diana es fisioterapeuta y hoy confirma sus citas de forma manual. Trabaja con Valeria: Diana atiende en la mañana y Valeria en la tarde (00:33). Lo que necesita es que, 24 horas antes de cada cita, al paciente le llegue un WhatsApp para confirmar si de verdad va a asistir.
Y como es para un cliente real, no vamos a mandar el mensaje horrible de «Por favor, responde SÍ para confirmar tu cita». Vamos a usar botones de WhatsApp, sin la API oficial: el paciente presiona «Confirmar cita» y la cita cambia sola a confirmada dentro de HighLevel. Ese cambio de estatus es el que dispara todo lo demás.
Prepara la subcuenta: pipeline y usuarios
Antes de tocar un solo calendario, deja lista la base. Fíjate que al crear la subcuenta, si buscas el negocio tal como aparece en su perfil de Google, HighLevel te llena el teléfono, la dirección, la ciudad y el sitio web (02:42). Son segundos, pero se suman en cada cliente.
En el video instalo mi snapshot de tracking, que trae los campos de atribución y unas automatizaciones base (03:46). Ten en cuenta que cuando instalas un snapshot, unas cosas te van a servir y otras no. Revisa que no se dupliquen campos entre contacto y oportunidad, y limpia lo que sobre antes de entregar la subcuenta.
Un pipeline de pacientes que se mueva solo
Yo no uso el pipeline demo: lo quiero sencillo. Nuevo lead, Contactado, Cita agendada, Cita confirmada, No se presentó y Ganada (06:09). Podrías agregar etapas negativas, como cita no confirmada, si quieres medir cuántos caen ahí. A mí me gusta manejar eso con etiquetas, pero depende de lo que quieras ver y de la capacidad técnica del equipo de tu cliente.
Usuarios con los permisos justos
Dale a tu cliente acceso solo a las secciones con las que va a trabajar (08:10). Facturación, ajustes de la cuenta, blog, WordPress y pagos los manejas tú. Mientras menos cosas vea, menos se pierde.
Para el segundo profesional, copia los roles del primero y cámbialo a rol user. Si activas Strict Data Visibility, ese usuario solo ve los contactos y oportunidades que tiene asignados (09:42). En una clínica con varios doctores, cada uno ve a sus pacientes y nada más.
Calendarios de servicios V2: la base del sistema de agendamiento para clínicas
Los calendarios de servicios V2 son la versión nueva de los calendarios de servicios de GoHighLevel, y para una clínica son los que te recomiendo. Una sola página muestra todos los servicios, el paciente elige el servicio, luego al profesional y luego el horario.
Actívalos desde la agencia
Si en Calendar Settings solo ves Service Calendar v1, se activan desde la agencia: ubica la subcuenta, abre la opción Setup Calendar y confirma (10:15). Refrescas la subcuenta y te aparece Services. Así de sencillo.
Ya adentro, ve primero a Global Settings. Ahí cambias la URL de la página de servicios (quítale el chorizo que trae y ponle el nombre del negocio) y pones los calendarios en español (10:53). Lo que configuras ahí aplica a todos los calendarios de servicios.
El horario va en cada profesional, no en cada servicio
En los V2, el horario se define en cada persona del staff y los servicios lo heredan (11:45). Diana, de 9 a 3; Valeria, de 4 a 8. Cuando le asignas un servicio a Diana, ese servicio ya muestra sus horarios de la mañana (14:10).
Después creas un servicio y lo duplicas para los demás: consulta inicial, paquetes, consulta de seguimiento. En cada uno pones la duración, el buffer antes y después de la cita (el tiempo de preparación) y el precio, que puede ser el mismo para todos o distinto por profesional (27:49).
Que el paciente elija con quién, sin round robin
El cliente quería que el paciente eligiera a Diana o a Valeria según el horario. La tentación es meterle automatizaciones o un calendario round robin en GoHighLevel. No tienes que complicarte la vida: cada profesional ya tiene su horario, así que al elegir a Diana solo salen las mañanas y al elegir a Valeria, solo las tardes (17:58).
Ojo con un detalle. La página trae la opción «cualquier miembro del personal disponible», y si el paciente la elige, la cita cae en un round robin. En Additional Settings puedes decidir qué pasa en ese caso (el menos ocupado, por precio…), o hacer lo que yo hice: quitar esa opción para que el paciente esté obligado a elegir a alguien (19:12).
En la misma sección hay otra opción que vale oro en clínicas: asignar el contacto al profesional con el que agenda. Si además activas la de no reasignar, un paciente que ya era de Diana sigue siendo de Diana aunque un día agende con Valeria (24:12).
Intervalos, ventana de reserva y políticas de cancelación
Si tus horarios salen en bloques de 15 minutos, es por el Service Interval. Para citas de una hora, ponlo en una hora (21:20). La ventana de reserva define cuántos días hacia adelante se puede agendar: con 7, nadie te agenda para dentro de dos semanas (21:53).
También puedes limitar los links de reagendar y cancelar. En el video, el de reagendar deja de funcionar una hora antes de la cita y el de cancelar, 24 horas antes (23:05). Eso le sirve a los profesionales de la salud que tienen su propia política de cancelación.
Y aquí viene una decisión importante: apaga la confirmación automática (23:49). La cita no se confirma cuando el paciente agenda. Se confirma cuando el paciente presiona el botón 24 horas antes. Las notificaciones del calendario también las apago: yo prefiero mandarlas desde las automatizaciones.
El error de pagos que no te deja agendar
En la primera reserva de prueba, la página no me dejaba agendar (31:51). La razón: los pagos en línea estaban activos y la subcuenta no tenía Stripe conectado. La solución fue cambiarlo a pago al llegar, con el precio visible para que el paciente sepa cuánto va a pagar. Si a ti te pasa, revisa eso primero.
Cada paciente nuevo entra al pipeline solo
Antes de los recordatorios, resuelve cómo entran los prospectos. La clínica recibe pacientes por Messenger, Instagram y WhatsApp, así que hay una automatización por canal (33:32). La lógica es la misma en las tres:
- Si el contacto ya tiene un profesional asignado, solo se le avisa: «esta persona te volvió a escribir».
- Si no tiene a nadie, se guarda el canal de origen, se asigna al azar, se guarda la atribución, se notifica y se crea la oportunidad en Nuevo lead.
Al azar porque es nuevo y todavía no sabemos de quién es. Cuando agende, se reasigna al profesional con el que agendó. Si tu cliente tiene varios doctores, lo que yo haría es importar la base de pacientes de cada uno ya asignada a él (34:35).
La parte de asignar es un componente reutilizable: una automatización aparte que se llama con la acción Add to Workflow (36:40). Cuando veo que una lógica me sirve en varias automatizaciones, la saco y la reutilizo. Yo los tengo en una carpeta que se llama «Componentes reutilizables».
WhatsApp con GoGHL: la etiqueta del número que recibió el mensaje
Con GoGHL, cada mensaje entrante de WhatsApp le pone al contacto la etiqueta «Inbound WhatsApp» y otra con el número que recibió el mensaje (39:36). Imagínate un equipo donde cada vendedor tiene su celular y las campañas mandan a un número pivote que reparte leads. Con esa segunda etiqueta sabes si el lead le escribió al pivote (y se asigna) o directo a Juan (y es de Juan).
Para conectar el número: en la agencia entras a Message Hub, añades la subcuenta como ubicación, la autorizas y vinculas el dispositivo con el QR desde WhatsApp Business (44:24). En el video me falló al principio porque el navegador tenía abierta la sesión de otra cuenta. Si te pasa, entra directo a GoGHL con la cuenta correcta. Ya conectado, escribes desde conversaciones por el canal WhatsApp QR (48:46). Si es tu primera vez, sigue la guía para conectar WhatsApp Business a GoHighLevel paso a paso; ahí mismo puedes probar GoGHL 7 días gratis.
Confirmación de citas por WhatsApp con botones
Esta es la parte que tu cliente va a ver todos los días. Los textos se los pedí a Claude con un audio (mensaje de cita agendada, recordatorio de 24 horas con botón y recordatorio de 3 horas) y luego los ajusté para que suenen humanos (49:50). Que la IA te dé el borrador está bien. Que el paciente reciba algo que suena a robot, no.
El trigger correcto: Service Booking
Aquí está el error que más tiempo te va a hacer perder. Con los calendarios de servicios, el trigger no es el típico Appointment Booked: es Service Booking, con el estatus new (50:37). Si vienes de los calendarios normales, seguro conoces la duda de customer booked appointment vs appointment status. Con los de servicios no aplica ninguno de los dos.
Las variables también son las de Service Booking: el nombre del servicio, la fecha, la hora y los links para reagendar y cancelar (54:10). Si usas las de Appointment, el mensaje sale con datos que no son. Y si tu workflow no entra, revisa los filtros del trigger: a mí no entraba porque le había puesto un filtro de payment status (58:36).
Dos ajustes más antes de los botones:
- Las variables salen en inglés («September 16»): en Settings → Business Profile, cambia Outbound Communication Language a español (1:00:12).
- La ubicación como link: en el calendario de servicios, en Locations, pon una custom URL con el link del mapa (1:00:45).
Los botones de WhatsApp de GoGHL
Para el mensaje de cita agendada se usa la acción Send WhatsApp Message de GoGHL, no la de SMS. Los botones se arman en su constructor: en GoGHL ve a Ayuda → WhatsApp buttons → Builder (1:01:24). Ahí maquetas el mensaje, copias el código y lo pegas en la acción.
En el primer mensaje puse tres botones de tipo «visitar sitio»: reagendar, cancelar y ver ubicación. El constructor te da variables de ejemplo; tú las cambias por las de Service Booking (el link de reagendar, el de cancelar y la ubicación) (1:03:26). Con los botones, el texto se queda corto y limpio.
Recordatorio 24 horas antes con «Confirmar cita»
Después del primer mensaje va un wait hasta un día antes de la fecha de la cita (1:07:06). Luego, el segundo mensaje: «Le escribimos para recordarle que mañana tiene su cita a las… ¿Podría confirmar su asistencia?», con dos botones. «Confirmar cita» es una respuesta rápida; «Deseo reagendar» lleva el link para reagendar.
Ten en cuenta a quien agenda con menos de 24 horas. Si no haces nada, el workflow se queda esperando una fecha que ya pasó. En el wait, usa la opción Go to specific step para mandarlo al paso que sigue (1:11:08). Esa cita, al final, la autoconfirmo, porque agendó con menos de 24 horas (1:24:56).
Cuando el paciente presiona el botón
Para esperar la respuesta no sirve el wait normal de «contact replies»: usa el wait de GoGHL, en el canal WhatsApp. El timeout va en segundos: 10,800 son 3 horas (1:13:21).
Fíjate en el constructor de botones: cada botón tiene un texto («Confirmar cita») y un ID (confirmar-cita). Ese ID llega en el payload del mensaje entrante. Así que el IF revisa si el mensaje contiene ese ID y, si lo contiene, la acción Update appointment status cambia la cita de Service Booking a confirmada (1:14:57).
- Rama None (contestó otra cosa): «Por favor, presiona alguno de los botones para confirmar o reagendar tu cita».
- Timeout (no contestó en 3 horas): ahí decides tú. Le puedes volver a mandar los botones con «no hemos recibido tu respuesta».
- Aviso interno: con la acción de notificación de WhatsApp de GoGHL le avisas al profesional asignado, o a un número fijo, que el paciente confirmó (1:18:40).
Separa lógicas: un workflow para la cita confirmada
Todo podría quedar en un solo workflow y seguramente funcionaría. Pero a mí me gusta separar lógicas. Hice un segundo workflow, «Confirmación de cita», con el trigger Service Booking en estatus confirmada (1:19:37). Manda «Tu cita ha sido confirmada con éxito», espera hasta 3 horas antes y manda el último recordatorio, con la dirección y la sugerencia de llegar unos minutos antes.
La ventaja: no importa cómo se confirmó la cita (con el botón, a mano desde el calendario o autoconfirmada por agendar con menos de 24 horas). En cuanto cambia a confirmada, entra a ese flujo. Si tu cliente usa calendarios normales en lugar de los de servicios, los recordatorios de citas en GoHighLevel se arman con los triggers de siempre.
Mueve la oportunidad en cada estado de la cita
Ya tenemos la oportunidad que se crea cuando llega un lead nuevo. Pero ¿qué pasa con un paciente que ya existía y agenda otra cita? También quieres contarla. En cada workflow va un Find Opportunity en el pipeline de ventas: si la encuentra, la actualiza a la etapa que toca; si no, la crea ahí mismo (1:32:43).
- Cita agendada: en el workflow de Service Booking new.
- Cita confirmada: en el workflow de confirmación.
- No se presentó: un workflow con Service Booking en estatus no show, que mueve la oportunidad y le manda al paciente un WhatsApp con el link para reagendar (1:34:55).
El no show lo marca la clínica: el paciente no llegó, abren la cita y la cambian a no show. Desde ahí todo es automático.
Prueba todas las ramas antes de entregarlo
En el video pruebo una rama. Antes de entregarlo, yo pruebo todas, siempre (1:24:56). Para no esperar un día entero, en el historial del workflow selecciona el contacto y usa Move selected contact to next step: lo saltas al siguiente paso y ves el mensaje en el momento (1:30:31).
Estos son los errores que me salieron en vivo, para que no te pase lo mismo:
| Lo que pasa | Por qué | Cómo se arregla |
|---|---|---|
| No deja agendar en la página de reservas | Pagos en línea activos sin Stripe conectado | Pago al llegar, con el precio visible |
| El workflow no entra al agendar | Un filtro de payment status en el trigger | Quita el filtro; deja Service Booking con estatus new |
| Le llega «mañana es su cita» a quien agendó para dentro de una semana | El wait usaba la fecha de Appointment | Cambia la referencia del wait a Service Booking (1:28:48) |
| La oportunidad no pasa a No se presentó | Faltaba el Update y el Find Opportunity tenía un filtro de más | Agrega el Update y quita el filtro (1:40:34) |
Prueba y error. Si estás empezando, muchas cosas no te van a salir a la primera, y no pasa nada: todos pasamos por eso (1:29:21). En el video, el botón de confirmar me costó varias vueltas. Mi terquedad ganó.
Lo que falta para entregarlo al cliente
Con esto ya está lo más difícil de la subcuenta: calendarios, WhatsApp, pipeline, automatizaciones y el movimiento de las oportunidades (1:41:24). Lo que queda es menor, pero no te lo saltes:
- que el cliente valide los textos finales de cada mensaje;
- las imágenes de los servicios en la página de reservas;
- los links con su marca: el siguiente paso de la serie es el branded domain en GoHighLevel, para que el link de reservas no salga con el dominio genérico.
Newsletter semanal
High Level Playbook
Cada semana, una implementación real de HighLevel con un cliente: el problema que tenía, cómo lo resolví y lo que necesitas para replicarlo.
Preguntas frecuentes
¿Necesito la API oficial de WhatsApp para mandar botones desde HighLevel?
No. En este sistema, WhatsApp se conecta con GoGHL escaneando un QR desde WhatsApp Business, y los botones salen de su constructor. La API oficial es otro camino, pero no es requisito para este flujo.
¿Qué pasa si el paciente no presiona ningún botón?
Si contesta otra cosa, el workflow le pide que presione uno de los botones. Si no contesta nada en 3 horas, cae en la rama del timeout, y ahí decides qué hacer: volver a mandarle los botones, avisarle a la clínica para que le llame o ambas cosas.
¿Puedo cobrar la cita en línea con los calendarios de servicios?
Sí, los calendarios de servicios tienen pagos en línea, pero necesitas un procesador de pagos conectado, como Stripe. Si lo activas sin conectarlo, la página de reservas no deja agendar. Para una clínica que cobra en el consultorio, usa el pago al llegar y muestra el precio.
¿Cómo manejo una clínica con varios doctores que ya tienen pacientes?
Importa la base de pacientes de cada doctor ya asignada a él, y activa la opción de asignar el contacto al profesional con el que agenda. Los pacientes nuevos entran asignados al azar y se reasignan en cuanto agendan con alguien.
¿Por qué los recordatorios mandan la fecha equivocada?
Casi siempre es porque el wait o las variables usan los datos de Appointment en lugar de los de Service Booking. Con los calendarios de servicios, revisa que el trigger, los waits y cada variable del mensaje digan Service Booking.
¿Te sirvió este tutorial?


