Para qué sirve y para quién
Reservas online es la puerta por la que una clienta pide cita sola, desde fuera, sin llamar: elige el servicio, el profesional (o «sin preferencia»), el día y una hora libre, deja su nombre y su teléfono, y la cita entra en la agenda de Citas, como cualquier otra, con el origen «Reserva online». Si el negocio confirma a mano, nace Pendiente y espera en la bandeja de Reservas; si confirma solo, nace Confirmada. La clienta recibe un número de cita y un enlace personal con el que ve su reserva y la cancela dentro de la política del negocio.
Quién la usa:
- La clienta, en la página de reservas del negocio (sin cuenta ni contraseña).
- El empleado ve en la bandeja las reservas online de su propia agenda.
- El responsable ve todas las reservas online y las confirma, completa, marca como no presentadas o cancela.
- El propietario y el administrador: además las borran y configuran la página de reservas.
- El asistente (por voz o por texto, con la sesión de quien habla) hace lo mismo: «confirma la reserva de Ana de mañana», «¿qué reservas online hay pendientes?», «cancela la reserva APT-20261016-0003».
Referencia adoptada
Fresha, Treatwell, Booksy, Square Appointments, Vagaro, Mindbody, Odoo Appointments y SimplyBook.me (tabla y enlaces en «Decisiones de mercado»): la reserva online es una cita de la agenda desde el primer momento (ocupa el hueco), con un ajuste de confirmación automática o manual; la página pide nombre y móvil; la clienta gestiona su reserva con el enlace de la confirmación, y cancelar desde ahí respeta la antelación del negocio.
Antes de empezar
- Reservas online enciende con ella Citas, Clientes, Servicios y Personal (y, por Citas, Horarios), y no se pueden apagar mientras esté encendida.
- En Servicios, deja marcada Reserva online en los servicios que la clienta puede reservar (también desde los Ajustes de esta app). Un servicio archivado o que no se puede reservar en la agenda no sale.
- En Personal y Horarios, lo mismo que pide la agenda: profesionales reservables, su horario y el del negocio. La página ofrece solo las horas que la agenda daría a la clienta.
- Abre Reservas online → Ajustes, enciende Página pública activada y pulsa Guardar. Mientras está apagada, la página dice que el negocio no acepta reservas online.
- Todas las horas son las del reloj del negocio (en la fase 1, Europe/Madrid).
Pantallas
Reservas online se abre desde el menú Reservas online y tiene dos pestañas: Reservas y Ajustes (esta, solo para quien puede cambiarlos). Lo que una persona no puede hacer sale en gris o no aparece, y la app lo rechaza aunque lo intente por la API o por el asistente.
Reservas (bandeja)
Tabla de 50 filas por página con buscador («Buscar nº, cliente, teléfono, servicio…») y filtros por columna:
Nº, Cliente, Servicio, Profesional, Fecha (un día) y Estado. Columnas: Nº (APT-…), Cliente (con su
teléfono), Servicio, Profesional, Fecha, Hora, Estado y Reservada (cuándo la pidió).
Las más recientes primero; se ordena por columna. Lista o tarjetas.
Por fila: Confirmar, Completar, No-show, Cancelar y Borrar (Borrar solo para quien puede borrar). La que no aplica al estado sale en gris, no se esconde. Cancelar pide confirmación con un motivo opcional; Borrar pide confirmación. Vacía: «Aún no hay reservas online.» (con filtros: «Ninguna reserva coincide con la búsqueda.»). Se refresca sola cuando cambia una cita online en la agenda.
Ajustes
Título «Configuración de la página de reservas». Tres bloques y un botón Guardar:
- Página pública: «Página pública activada», «Título de la página», «Mensaje de bienvenida», «Color
primario» (
#RRGGBB), «URL del logo», «Email obligatorio», «Reservas próximas por móvil» (1 a 50), «Permitir elegir profesional», «Permitir notas», «Mensaje de confirmación» y «Política de cancelación» (el texto que lee la clienta). - Reglas de reserva (son las de Citas, compartidas con WhatsApp): «Antelación mínima para reservar (minutos)», «Reservar como máximo con esta antelación (días)» (0 = sin límite), «Intervalo entre huecos (minutos)», «Confirmar automáticamente las reservas de la clienta», «Permitir que la clienta cancele su cita» y «Antelación mínima para cancelar (horas)».
- Servicios reservables online: los servicios en oferta con un interruptor «Reserva online» cada uno (se guarda al tocarlo, en Servicios); el que no se puede reservar en la agenda lo dice.
Al guardar: «Configuración guardada.»; un rechazo sale debajo de su campo («No se pudo guardar»).
Vista previa de la reserva (solo en desarrollo)
Página /online_booking/preview, solo en el servidor de desarrollo: hace el recorrido de la página pública
(servicio → profesional → día y hora → datos → reservar → ver y cancelar con el enlace) con las mismas
operaciones que llamará la página pública de base. No forma parte de la versión de producción.
Estados de cada pantalla
| Estado | Qué ve la persona |
|---|---|
| Cargando | «Cargando…» en la tabla; «Cargando la configuración…» en Ajustes. |
| Vacío | «Aún no hay reservas online.»; con filtros, «Ninguna reserva coincide con la búsqueda.»; en Ajustes sin servicios, «Todavía no hay servicios. Dalos de alta en Servicios.». |
| Error | El aviso de la tabla con «Reintentar»; el rechazo de una acción de fila, en su confirmación o encima de la tabla; un rechazo de Ajustes, debajo de su campo, sin perder lo tecleado. |
| Reconectando | Lo pintado se queda; una franja avisa «Reconectando…». |
| App inactiva | «Esta app no está activa en este negocio». |
| Sin permiso | No aparece lo que no puede hacer; si llega por otra puerta, «No tienes permiso». |
Fechas y horas salen en el reloj del negocio y con el formato del idioma de quien mira.
Flujos
| ID | Flujo | Estado |
|---|---|---|
| ONLINE_BOOKING-F01 | La clienta reserva desde la página de reservas | hecho (operaciones y vista previa; la página pública es de base) |
| ONLINE_BOOKING-F02 | Confirmar una reserva | hecho |
| ONLINE_BOOKING-F03 | Completar una reserva | hecho |
| ONLINE_BOOKING-F04 | Marcar que no se presentó | hecho |
| ONLINE_BOOKING-F05 | Cancelar una reserva | hecho |
| ONLINE_BOOKING-F06 | Borrar una reserva | hecho |
| ONLINE_BOOKING-F07 | Configurar la página de reservas | hecho |
| ONLINE_BOOKING-F08 | Ver y buscar las reservas | hecho |
| ONLINE_BOOKING-F09 | Seguir a la clienta cuando se fusionan dos fichas | hecho (lo hace Citas; la bandeja lo refleja) |
| ONLINE_BOOKING-F10 | La clienta ve su reserva con su enlace | hecho (operación; la página es de base) |
| ONLINE_BOOKING-F11 | La clienta cancela su reserva con su enlace | hecho (operación; la página es de base) |
| ONLINE_BOOKING-F12 | Borrar los datos de una clienta (RGPD) | hecho |
ONLINE_BOOKING-F01 La clienta reserva desde la página de reservas
Estado: hecho (operaciones y vista previa; la página pública es de base)
Actor: clienta (sin sesión)
Pantalla: página pública de reservas (base); en desarrollo, la vista previa
Pasos:
1. Abre la página del negocio: título, mensaje de bienvenida, logo y color de los Ajustes.
2. Elige uno o varios servicios (hasta 5) de los reservables online, con su precio y su duración si
Servicios los enseña («Mostrar precios», «Mostrar duración»).
3. Si el negocio lo permite, elige profesional entre los que hacen todos esos servicios, o «Sin
preferencia».
4. Elige el día: salen las horas libres que la agenda daría a la clienta (horario del negocio, turno y
ausencias del profesional, bloqueos y otras citas; nunca dentro de la antelación mínima, más allá de la
máxima, en el pasado ni encima de otra cita).
5. Escribe su nombre, su móvil (obligatorio), su email (si el negocio lo pide) y, si se permite, una nota.
6. Pulsa Reservar: la cita entra en la agenda con el origen «Reserva online», Confirmada o
Pendiente según «Confirmar automáticamente las reservas de la clienta» (y siempre Pendiente si un
servicio tiene «Requiere confirmación» en Servicios), y la clienta ve su número de cita (APT-…), el
mensaje de confirmación y su enlace personal.
Entra: los servicios reservables online (Servicios), los profesionales que los hacen (Servicios y Personal),
las horas libres y las reglas de reserva (Citas), las fichas de Clientes.
Sale: la cita (appointment.appointment.created y, si nace confirmada, appointment.appointment.confirmed),
la ficha de la clienta enlazada por su teléfono o creada si no existe (customer.customer.created, con
origen «web»), y el aviso online_booking.booking.created. Si la ficha no tiene email, el que escribió
queda como contacto de la cita (la ficha no se toca). Con «Sin preferencia», la cita es del primer
profesional (por orden de nombre) que tiene libre esa hora. Nada de lo que responde la página dice el nombre
de la ficha de ese móvil.
Si falla (no se escribe nada): la página apagada («Este negocio no acepta reservas online ahora mismo.»); un
servicio que no se reserva online; elegir profesional cuando el negocio no lo permite; la hora ya no está
libre o no cumple las reglas (el motivo de Citas); el móvil que no es un número válido; falta el email
obligatorio; una nota cuando el negocio no las admite; límites anti-abuso: más de 5 reservas en una hora
desde el mismo dispositivo o más de 100 en una hora en el negocio («Inténtalo dentro de un rato»), o más
reservas online próximas con el mismo móvil de las que permiten los Ajustes (3 de fábrica: «Este móvil ya
tiene reservas próximas…», sin decir cuántas). Dos clientas que reservan a la vez la misma hora del mismo
profesional: entra una y la otra recibe «Esa hora ya no está libre».
ONLINE_BOOKING-F02 Confirmar una reserva
Estado: hecho
Actor: responsable, propietario, administrador, asistente
Pantalla: Reservas
Pasos:
1. En una reserva Pendiente, pulsa Confirmar (o di «confirma la reserva de Ana de mañana»).
2. La cita pasa a Confirmada en la agenda y su historial dice «Confirmada».
Sale: appointment.appointment.confirmed.
Si falla: «Esta cita ya no se puede confirmar: ya no está pendiente.»; si el nombre vale para varias
reservas, se dicen cuáles y se pide el número.
ONLINE_BOOKING-F03 Completar una reserva
Estado: hecho
Actor: responsable, propietario, administrador, asistente
Pantalla: Reservas
Pasos:
1. En una reserva Confirmada o En curso, pulsa Completar.
2. La cita pasa a Completada. No cobra: el cobro es el de la agenda en el TPV.
Sale: appointment.appointment.completed.
Si falla: «Esta cita no se puede completar en su estado actual.»
ONLINE_BOOKING-F04 Marcar que no se presentó
Estado: hecho
Actor: responsable, propietario, administrador, asistente
Pantalla: Reservas
Pasos:
1. Pasada la hora de la reserva, en una Pendiente o Confirmada, pulsa No-show.
2. La cita pasa a No-show y el hueco queda libre.
Sale: appointment.appointment.marked_no_show.
Si falla: antes de su hora, «Todavía no es la hora de esta cita…»; en otro estado, «Esta cita no se puede
marcar como no presentada en su estado actual.»
ONLINE_BOOKING-F05 Cancelar una reserva
Estado: hecho
Actor: responsable, propietario, administrador, asistente
Pantalla: Reservas
Pasos:
1. Pulsa Cancelar en una reserva pendiente, confirmada o no presentada.
2. «¿Cancelar la reserva de Lucía (martes 14, 10:00)?» con el motivo opcional; pulsa Cancelar la reserva.
3. La cita pasa a Cancelada, el hueco queda libre y el historial guarda quién y el motivo.
Sale: appointment.appointment.cancelled. Rechazar una reserva pendiente es cancelarla (el mercado: el
«rechazar» de una solicitud libera el hueco igual).
Si falla: «Esta cita ya no se puede cancelar en su estado actual.»; dentro del diálogo.
ONLINE_BOOKING-F06 Borrar una reserva
Estado: hecho
Actor: propietario, administrador
Pantalla: Reservas
Pasos:
1. Pulsa Borrar y confirma «¿Borrar la reserva APT-…? Es mejor cancelarla, que conserva su historial.».
2. La reserva desaparece de la bandeja y de la agenda (borrado lógico: el dato no se pierde).
Sale: appointment.appointment.deleted.
Si falla: una cita en curso, completada o cobrada no se borra («Esta cita no se puede borrar…»).
ONLINE_BOOKING-F07 Configurar la página de reservas
Estado: hecho
Actor: propietario, administrador
Pantalla: Ajustes
Pasos:
1. Cambia los campos de Página pública y de Reglas de reserva y pulsa Guardar: «Configuración
guardada.». Se guarda solo lo que cambia, todo junto o nada.
2. En Servicios reservables online, toca el interruptor de un servicio: se guarda al momento en
Servicios.
Entra: los ajustes guardados (o los de fábrica: página apagada, email no obligatorio, 3 reservas próximas por
móvil, elegir profesional y notas permitidos) y las reglas de Citas.
Sale: online_booking.settings.updated (si cambia algo de la página) y appointment.settings.updated (si
cambia una regla); el interruptor de un servicio, service.service.updated.
Si falla: un color que no es #RRGGBB, una URL que no es http(s)://…, un número fuera de rango o un texto
demasiado largo, debajo de su campo; no se guarda nada.
ONLINE_BOOKING-F08 Ver y buscar las reservas
Estado: hecho Actor: empleado (las de su agenda), responsable, propietario, administrador, asistente Pantalla: Reservas Pasos: 1. Abre Reservas: las citas con origen «Reserva online», las más recientes primero. 2. Busca por número, nombre, teléfono, email, servicio o profesional; filtra por columna; ordena. 3. Una reserva concreta la da el asistente o la API por su número, o por la clienta y el día. Sale: nada se escribe. Si falla: «No se pudieron cargar las reservas» con Reintentar.
ONLINE_BOOKING-F09 Seguir a la clienta cuando se fusionan dos fichas
Estado: hecho (lo hace Citas; la bandeja lo refleja)
Actor: sistema
Pasos:
1. En Clientes se fusionan dos fichas (customer.customer.merged).
2. Citas pasa las citas de la absorbida a la que queda (APPOINTMENT-F23); la bandeja enseña la reserva con
la ficha que queda. Esta app no guarda la ficha de la clienta: nada más que hacer.
ONLINE_BOOKING-F10 La clienta ve su reserva con su enlace
Estado: hecho (operación; la página es de base)
Actor: clienta (sin sesión)
Pasos:
1. Abre el enlace de su confirmación.
2. Ve el número, el estado, el día y la hora, los servicios, el profesional, la política de cancelación y si
todavía puede cancelar y hasta cuándo. Nunca el nombre de la ficha: quien tenga el enlace no averigua
a quién pertenece un móvil.
Si falla: un enlace que no existe, revocado o de una reserva borrada: «Esa reserva no existe o su enlace ya
no es válido.».
ONLINE_BOOKING-F11 La clienta cancela su reserva con su enlace
Estado: hecho (operación; la página es de base)
Actor: clienta (sin sesión)
Pasos:
1. Desde su enlace pulsa Cancelar la reserva (motivo opcional).
2. Se aplica la política de Citas: «Permitir que la clienta cancele su cita» y «Antelación mínima para
cancelar». La cita queda Cancelada, con «Lo pidió la clienta» en su historial.
Sale: appointment.appointment.cancelled.
Si falla: «La cancelación online no está disponible. Contacta con el negocio.»; «Esta cita solo se puede
cancelar online con N horas de antelación…»; una ya cancelada o completada, el motivo de Citas.
ONLINE_BOOKING-F12 Borrar los datos de una clienta (RGPD)
Estado: hecho
Actor: sistema
Pasos:
1. En Clientes se borran los datos personales de una ficha (customer.customer.erased).
2. Citas vacía sus citas (APPOINTMENT-F24); esta app revoca sus enlaces (dejan de funcionar) y olvida el
rastro del dispositivo con el que reservó. Repetirlo no cambia nada más.
Servicios: lo que entra y lo que sale
Todo se puede pedir por las pantallas, el asistente (por voz o por texto, con la sesión de quien habla) y la
API, con las mismas reglas y permisos. Una reserva se nombra por su id, su número (APT-…) o como lo dice
una persona: la clienta (nombre, teléfono o email) y el día («la de Ana de mañana»); sin día, su próxima
reserva online. Si vale para varias, se dicen cuáles y se pide el número.
Lo que ofrece: consultas
| Qué da | Quién puede | Flujos | Servicio |
|---|---|---|---|
| Las reservas online, con búsqueda, filtros y orden, en páginas (hasta 100) | ver reservas | F08 | online_booking.booking.list |
| Una reserva | ver reservas | F08 | online_booking.booking.get |
| La configuración de la página y las reglas de reserva | ver reservas | F07 | online_booking.settings.get |
| Página, servicios, horas libres y reserva por enlace (públicas) | online_booking.public |
F01, F10 | online_booking.public.page, .services, .slots, .booking |
Lo que ofrece: acciones
| Qué hace | Quién puede | Flujos | Servicio |
|---|---|---|---|
| Confirma | confirmar reservas (+ cambiar citas) | F02 | online_booking.booking.confirm |
| Completa | cambiar reservas (+ cambiar citas) | F03 | online_booking.booking.complete |
| Marca no presentada | cambiar reservas (+ cambiar citas) | F04 | online_booking.booking.no_show |
| Cancela, con motivo | cambiar reservas (+ cambiar citas) | F05 | online_booking.booking.cancel |
| Borra | borrar reservas (+ borrar citas) | F06 | online_booking.booking.delete |
| Guarda la configuración (y las reglas de Citas) | ajustes (+ ajustes de Citas para las reglas) | F07 | online_booking.settings.update |
| Reserva y cancela desde la página (públicas) | online_booking.public |
F01, F11 | online_booking.public.book, .cancel |
No-show, cancelar y borrar son de riesgo alto para el asistente: pide confirmación antes. Las acciones de la bandeja las hace Citas con el permiso de quien actúa: hace falta el de esta app y el de Citas.
Lo que avisa
| Aviso | Cuándo | Qué lleva |
|---|---|---|
online_booking.booking.created |
Una clienta reserva desde la página | La cita (appointment_id), su número, la clienta y la hora; nunca notas |
online_booking.settings.updated |
Guardar la configuración con algún cambio de la página | Nada |
El resto de hechos (confirmada, cancelada, completada, no presentada, borrada) son los avisos de Citas.
A qué reacciona
| Aviso de otra app | Qué hace | Flujos |
|---|---|---|
customer.customer.erased (Clientes) |
Revoca los enlaces de las reservas de esa ficha y olvida la huella del dispositivo | F12 |
Quién puede qué
| Permiso | Propietario | Administrador | Responsable | Empleado | Servicio |
|---|---|---|---|---|---|
| Ver reservas (las de su agenda, si solo ve la suya en Citas) | sí | sí | sí | sí | online_booking.view_booking |
| Cambiar reservas (completar, no-show, cancelar) | sí | sí | sí | no | online_booking.change_booking |
| Confirmar reservas | sí | sí | sí | no | online_booking.confirm_booking |
| Borrar reservas | sí | sí | no | no | online_booking.delete_booking |
| Configurar la página | sí | sí | no | no | online_booking.manage_settings |
| Probar la página pública (vista previa) | sí | sí | no | no | online_booking.public |