Cómo elegir un formato de disponibilidad
Existen dos maneras de especificar los datos de disponibilidad: (1) Lugares disponibles o (2) Recuperación. Elige solo un método para usarlo en todos tus comercios y servicios. Una vez que selecciones un método, debes usarlo para toda la integración (feeds, servidor de reservas y actualizaciones en tiempo real).
Usa la siguiente guía para determinar qué formato de disponibilidad es más adecuado:
- En tu sistema, ¿almacenas la disponibilidad como intervalos explícitos, por ejemplo, de 8:00 a.m. a 8:30 a.m.?
- Usa Spots Open
- En tu sistema, ¿almacenas la disponibilidad en un formato recurrente, es decir, los comercios tienen servicios que se realizan con una frecuencia constante con pocas desviaciones? Por ejemplo, los horarios disponibles se repiten cada 15 minutos de 9:00 a.m. a 5:00 p.m., y solo hay un asiento disponible en cada incremento de 15 minutos.
- Usa Recurrence
- En el caso de los servicios de tus comercios, ¿puede haber más de un lugar disponible a la vez? Por ejemplo, 30 lugares disponibles para una clase
- Usa Spots Open
- ¿Ninguna de las anteriores opciones se aplica?
- Usa Spots Open
- Nota: Si bien usar la recurrencia es más eficiente y puede generar feeds más pequeños, si tu modelo de datos no admite la recurrencia de forma nativa, no se recomienda usarla, ya que deberás volver a calcular el valor de los intervalos recurrentes de todo el día para cada actualización en tiempo real.
Spots Open
Definiciones de los parámetros:
- spots_open: Es la cantidad de cupos disponibles actualmente para esta entrada de disponibilidad.
- spots_total: Es la cantidad total de anuncios que tiene el comercio para esta configuración, incluidos los que no están disponibles.
El método Spots Open indica de forma explícita la disponibilidad de cada espacio y admite el modelo de tener varios espacios para el mismo servicio. Estos dos parámetros funcionan juntos para crear una representación digital de la capacidad del servicio.
Cuando se realiza una reserva, la cantidad de spots_open debe disminuir en 1 a través de una actualización en tiempo real (la cantidad de spots_total debe permanecer igual). Una vez que spots_open = 0, el espacio ya no debería aparecer.
Ejemplos de servicios
Una clase de yoga o un salón de belleza tienen los siguientes planos de planta y no tienen reservas activas.
Figura 1: Plano del edificio sin reservas activas El feed de disponibilidad para 2 horarios en estos comercios se vería de la siguiente manera:
{ "availability": [ { "spots_total": 6, "spots_open": 6, "duration_sec": 3600, "service_id": "1001", "start_sec": 1535817600, # Sept 1, 2018 4:00:00 PM GMT "merchant_id": "1001" }, { "spots_total": 6, "spots_open": 6, "duration_sec": 3600, "service_id": "1001", "start_sec": 1535832000, # Sept 1, 2018 8:00:00 PM GMT "merchant_id": "1001", } ] }
Ejemplos de servicios con una reserva
Figura 2: Plano del edificio con una reserva activa Ahora, un usuario reserva uno de los lugares. Cuando se realiza una reserva, se emite una actualización en tiempo real para actualizar la disponibilidad. Esta reserva debería reflejarse en el próximo feed de disponibilidad diario. El feed de disponibilidad de estos comercios tendría una disminución de 1 en spots_open para el horario del 1 de septiembre de 2018 a las 4:00:00 p.m. (GMT). El horario del 1 de septiembre de 2018 a las 8:00:00 p.m. GMT no se modificará.
Fragmento de feed con una reserva
{ "availability": [ { "spots_total": 6, "spots_open": 5, "duration_sec": 3600, "service_id": "1001", "start_sec": 1535817600, # Sept 1, 2018 4:00:00 PM GMT "merchant_id": "1001" }, { "spots_total": 6, "spots_open": 6, "duration_sec": 3600, "service_id": "1001", "start_sec": 1535832000, # Sept 1, 2018 8:00:00 PM GMT "merchant_id": "1001", } ] }
Recurrencia
Definiciones de los parámetros
- recurrence: Es la representación de los espacios de disponibilidad que se repiten de forma sistemática.
- repeat_until_sec: Es la marca de tiempo (UTC) de la hora de finalización del último horario hasta el que se repite la disponibilidad.
- repeat_every_sec: Es la cantidad de segundos entre los espacios de disponibilidad sucesivos. Por ejemplo, si repeat_every_sec = 1800 (30 minutos) y start_sec comienza a las 9:00 a.m., los horarios se repetirán cada 30 minutos a las 9:00 a.m., 9:30 a.m., 10:00 a.m., etcétera.
- Nota: No es necesario especificar spots_open y spots_total, ya que se supone que ambos son 1, a menos que haya una schedule_exception.
El método de recurrencia indica la disponibilidad a diario para los servicios que se producen en intervalos regulares, por ejemplo, un servicio que se realiza cada 30 minutos de 9:00 a.m. a 5:00 p.m. todos los días. Con la recurrencia, especificas la duración del intervalo, la primera vez del día en que se produce, la frecuencia con la que se debe repetir y cuándo debe dejar de repetirse ese mismo día. Nota: Se debe especificar un nuevo conjunto de espacios recurrentes para cada día por separado. Si ya se reservó un horario dentro del período, deberás especificar una excepción de programación. Por ejemplo, repetir cada media hora de 9 a.m. a 9 p.m., excepto de 11:00 a.m. a 11:30 a.m. Cada servicio individual tendrá sus propias excepciones de recurrencia y programación.
Ejemplos de servicios
Un salón de belleza tiene el siguiente plano y no tiene reservas activas.
Figura 3: Plantas sin reservas activas. Se supone que solo hay 1 lugar disponible por servicio (p.ej., Sally brinda servicios de corte de cabello cada 30 minutos, pero solo puede atender a 1 cliente a la vez). El feed de disponibilidad para 1 horario en estos comercios se vería de la siguiente manera:
Fragmento de feed:
{ "availability": [ { "merchant_id": "1001", "service_id": "1001", # haircut "start_sec": 1493888400, # May 4, 2017 9:00:00 AM GMT "duration_sec": 1800, "recurrence": { "repeat_every_sec": 1800, "repeat_until_sec": 1493915400 # May 4, 2017 4:30:00 PM GMT } } ] }
Ejemplos de servicios con una reserva
Figura 4: Plantas con una reserva activa Se supone que solo hay 1 lugar disponible por servicio (p.ej., Sally brinda servicios de corte de cabello cada 30 minutos, pero solo puede atender a 1 cliente a la vez). Ahora imagina que un usuario reserva un corte de cabello con Sally a las 12:30 p.m. Cuando se realiza una reserva, se emite una actualización en tiempo real para actualizar la disponibilidad. Esta reserva debería reflejarse en el siguiente feed de disponibilidad diaria. El feed de disponibilidad de estos comercios tendría una excepción de programación de 12:30 p.m. a 1:00 p.m. para un servicio con una duración de 30 min.
Fragmento de feed con una reserva:
{ "availability": [ { "merchant_id": "1001", "service_id": "1001", "start_sec": 1493888400, # May 4, 2017 9:00:00 AM GMT "duration_sec": 1800, "recurrence": { "repeat_every_sec": 1800, "repeat_until_sec": 1493915400 # May 4, 2017 4:30:00 PM GMT }, "schedule_exception": [ { "time_range": { "begin_sec": 1493901000, # May 4, 2017 12:30:00 PM GMT "end_sec": 1493902800 # May 4, 2017 1:00:00 PM GMT } } ], } ] }