Skip to main content
El cliente elige una hora, da su nombre y el agente registra la cita. La hoja marca automáticamente ese horario como ocupado. Este ejemplo usa un barbero, Diego, con una cita de 30 minutos por horario, en hora de Ciudad de México. Solo necesitas dos pestañas: No necesitas inventar IDs de horarios. Selecciona Date y Time juntas en la protección contra duplicados de la acción. Visito comprueba ambos valores antes de agregar una fila.

1. Crea las dos pestañas

Crea un archivo llamado Hairdresser Demo — Availability and Bookings. Renombra la primera pestaña Availability y agrega otra llamada Bookings. En Availability, escribe estos encabezados en A1:C1:
En Bookings, escribe estos encabezados en A1:C1:
Deja Bookings vacía debajo de los encabezados. El agente agregará una fila cuando el cliente confirme una cita. Bookings empieza con Date, Time y Customer, sin registros.

Agrega los horarios disponibles

En ambas pestañas, selecciona A2:B1000 → Formato → Número → Texto sin formato antes de introducir fechas y horas. Usa YYYY-MM-DD para Date y HH:mm para Time; por ejemplo, 2026-10-05 y 10:00. Así ambas pestañas pueden comparar los mismos valores. Agrega estas filas a Availability. La última columna se calculará con una fórmula: Elige fechas futuras cuando hagas tu prueba. Cada combinación Date + Time debe aparecer una sola vez en Availability. También puedes pegar la plantilla de disponibilidad y los encabezados de reservas en A1 de sus respectivas pestañas. Crea ambas pestañas antes de pegar las fórmulas. Usa la fila 1 para los encabezados, sin celdas combinadas ni títulos encima.

2. Calcula la disponibilidad automáticamente

En Availability!C2, escribe:
Copia la fórmula hasta C9. Cuenta las reservas que tienen la misma Date y la misma Time:
  • Sin reserva: Available = 1.
  • Con reserva: Available = 0.
Tres columnas de disponibilidad y la fórmula que compara Date y Time. Los rangos $2:$1000 permanecen fijos al copiar la fórmula. A2 y B2 cambian según la fila. Si tu configuración regional exige punto y coma, sustituye las comas por punto y coma. No sobrescribas las fórmulas de Available. La fórmula reduce la disponibilidad; la protección de la acción impide que Visito agregue dos reservas con la misma Date + Time. No hace falta una acción adicional para descontar disponibilidad.

3. Crea una copia para pruebas

En Google Sheets, usa Archivo → Hacer una copia y llámala Hairdresser Demo — TEST. Copia ambas pestañas y sus fórmulas. Deja Bookings vacía en la copia. Debe ser otro archivo, con los mismos encabezados y formatos. Las escrituras del área de pruebas usan esta copia. Mantén nombres claros para distinguir los dos archivos en Google Picker.

4. Crea “Check haircut availability”

Abre Configuración → Acciones → Google Sheets. Si aún no tienes una conexión, conecta tu cuenta en Integraciones; la selección de la hoja ocurre dentro de la acción.
  1. Elige tu conexión de Google.
  2. Pulsa Elegir hoja de cálculo y selecciona el archivo principal en Google Picker.
  3. Selecciona Availability.
  4. Marca Date, Time y Available, y continúa.
Google Picker permite distinguir el archivo principal de su copia de pruebas. Archivo principal, pestaña Availability y tres columnas seleccionadas. Configura estos permisos y tipos: Available aparece como Generada por la hoja. Sus controles de escritura están deshabilitados. Permisos de solo lectura para las tres columnas de disponibilidad. En el último paso, usa el nombre Check haircut availability, selecciona el alcance de negocios y describe su propósito:
Consulta cortes de cabello de 30 minutos con Diego en hora de Ciudad de México. Revisa la disponibilidad antes de ofrecer o reservar un horario. Ofrece solo filas donde Available sea 1. Copia Date (YYYY-MM-DD) y Time (HH:mm) exactamente de la fila elegida a Book a haircut. No inventes horarios ni precios. Después de una escritura verificada, vuelve a consultar y comprueba que ese horario tenga Available = 0.
El propósito explica cuándo debe consultar la hoja el agente. Guarda. Esta acción no puede consultar nombres de clientes porque están en otra pestaña.

5. Crea “Book a haircut”

Crea otra acción de Google Sheets. Elige el mismo archivo principal, la pestaña Bookings y sus tres columnas. Selección de Date, Time y Customer en Bookings. Una pestaña vacía puede sugerir Texto para todas las columnas. Cambia Date a Fecha manualmente. Deja Leer apagado para que el agente no consulte nombres de otros clientes. Creación de las tres columnas, sin lectura ni actualización. En el último paso:
  1. Nombra la acción Book a haircut.
  2. En Evitar filas duplicadas, elige Usar columnas existentes juntas.
  3. Marca Date y Time. No marques Customer: otro nombre no debe permitir una segunda reserva del mismo horario.
  4. Date y Time pasan a ser obligatorias automáticamente. Marca también Customer como obligatorio.
  5. Selecciona Hairdresser Demo — TEST → Bookings como destino de pruebas.
  6. Usa el mismo alcance de negocios que la acción de disponibilidad.
Date y Time juntas evitan duplicados; los tres valores son obligatorios. La acción de reservas usa el archivo TEST separado en el área de pruebas. Un propósito de ejemplo:
Registra una cita solo después de que el cliente elija un horario y dé su nombre. Primero usa Check haircut availability y exige Available = 1. Copia Date y Time exactamente de esa fila disponible. Customer es el nombre proporcionado. Pregunta solo los datos que falten. Después de una escritura verificada, informa que la cita quedó registrada y consulta la disponibilidad otra vez. Si esa Date y Time ya existen, ofrece otro horario. Nunca cambies valores para evitar un conflicto. No reintentes una escritura sin verificar ni afirmes que funcionó.
Guarda y revisa el modo. Para la prueba controlada en Webchat, activa deliberadamente ambas acciones y usa un archivo principal desechable. Las dos acciones de Google Sheets con operaciones distintas.

6. Prueba la conversación

¿Por qué Webchat? La acción de solo lectura usa el archivo principal en el área de pruebas, mientras que la acción de reservas escribe en la copia. Juntas allí no mostrarían una reducción de disponibilidad en el archivo principal. Webchat con acciones Activas usa el principal en ambos casos. El área de pruebas sí ejecuta acciones de Sheets. Para una prueba completa aislada, configura también una acción de lectura separada contra los datos de prueba. No hagas pruebas sobre reservas reales. Inicia una conversación nueva en Webchat. Las capturas usan estos mensajes en inglés:
  1. “I’d like a men’s haircut with Diego on October 5, 2026. What morning times are available?”
  2. “10:00 AM works for me. Can you book it?”
  3. El agente debe pedir el nombre antes de escribir.
  4. “My name is Alex Demo. Please book the 10:00 AM haircut with Diego on October 5.”
El agente consulta horarios y pide solo el nombre que falta. La cita queda registrada después de completar la acción. Comprueba las dos pestañas, no solo la respuesta. Debe haber exactamente una fila en Bookings y 0 en ese horario de Availability: Una reserva con Date, Time y Customer, sin ID. El horario elegido deja de estar disponible. Pregunta después: “Could my friend Sam Demo also book that same 10:00 AM slot?” El agente debe ofrecer otras horas sin agregar otra reserva para las 10:00. El agente ofrece alternativas al horario ocupado. Las capturas corresponden a una prueba local controlada. Se deshabilitó su planificador para aislar la ejecución de herramientas; no es un paso de configuración para clientes ni una validación del enrutamiento en producción. Una escalación puede ocurrir antes de que el agente de respuesta reciba sus herramientas.

7. Revisa qué ocurrió

Abre Acciones → Historial, filtra por Book a haircut y abre la ejecución de prueba. Comprueba Live, Completed y Spreadsheet changes verified. Ejecución de la reserva en el historial de Acciones. En sus detalles, revisa los valores enviados y la respuesta. La solicitud contiene Date, Time y Customer mediante sus claves internas de columna; no hace falta que el cliente proporcione un ID de horario. Un resultado verificado significa que las celdas cambiadas se leyeron correctamente después de escribir. No confirma pagos ni reservas en otro sistema. Valores enviados y resultado verificado. Pulsa Open conversation para ver la solicitud del cliente, la respuesta y la actividad de las acciones juntas. Abre allí los detalles de la acción de reserva para relacionar su ejecución con el mensaje que la inició. Detalle de conversación con la solicitud y la acción completada. La misma ejecución de reserva abierta desde la conversación. La barra lateral local muestra un error de tiempo de espera de un panel de información independiente. La reserva en la hoja sí está verificada en el detalle del mensaje y en el historial de Acciones. Una cita en Google Sheets no crea una reserva en Visito Commerce.

Mantén una hoja sencilla y fiable

  • Otro día: agrega filas Date y Time a Availability y copia la fórmula. No necesitas crear IDs ni actualizar una lista de IDs permitidos.
  • Formato consistente: 10:00 y 10 AM son textos distintos. El agente debe copiar los valores exactos de la hoja.
  • Reiniciar una demostración: borra los valores de la fila de prueba en Bookings, conservando los encabezados. Available vuelve a 1. No borres reservas reales para reiniciar una prueba.
  • Más barberos: agrega Barber a ambas pestañas, inclúyela en la fórmula y selecciona Date + Time + Barber como combinación única. Date + Time sola representa una cita para toda la pestaña.
  • No habilites Actualizar en las columnas únicas. Este ejemplo no implementa cambios de horario, cancelaciones, pagos ni varias plazas por horario.
La regla de unicidad bloquea combinaciones duplicadas en escrituras de Visito. No comprueba que Date + Time exista en otra pestaña, no impide ediciones manuales en Google Sheets y no convierte la hoja en un sistema completo de agenda. Conserva las instrucciones de consulta de disponibilidad, revisa las reglas del negocio y nunca reintentes automáticamente una escritura sin verificar.