Skip to main content

Availability configuration

En el tutorial básico hemos visto como crear un servicio sencillo sin demasiadas opciones de disponibilidad. En la vida real los casos de uso son bastante más complejos.

En esta página se describen en detalle los campos que permiten configurar la disponibilidad de un event-type.

{
"duration": "string",
"step": "string",
"repeatingAvailability": {
"timeZone": "string",
"weekly": {
"additionalProp": [
{
"start": "string",
"end": "string"
}
]
}
},
"maxConcurrentBookings": 0,

"unitsLabel": "string",
"minBookingNotice": "string",
"maxBookingNotice": "string",
"beforeBuffer": "string",
"afterBuffer": "string",

// Otros campos de UI
"imageUrl": "string",
"name": "string",
"slug": "string",
"description": "string",
"userId": "string:uuid",
// Permite conectar calendarios externos y crear o comprobar la disponibilidad en ellos...
"thirdPartyCalendars": {},
// Permite añadir preguntas a la página de reservas y recopilar información...
"questions": [],
// Permite configurar manualmente intervalos donde no se ofrecerá disponibilidad...
"busyIntervals": [],
// Permite asociar cuentas de TimeTime al servicio...
"hosts": [],
// Reglas todavía avanzadas...
"resourceRules": {},
// Permite configurar notificaciones, emails...
"notifications": {},
// Permite desactivar temporalmente el servicio...
"enabled": true,
// Pemite configurar la localización del servicio. Física o virtual...
"location": {}
}

Duración (duration)

El campo duración permite configurar la duración del evento en horas y minutos. La duración esta especificada en fomato estandar ISO9601

Ejemplos:

  • Un intervalo de una hora: PT1H
  • Un intervalo de una hora y 30 minutos: PT1H30M
  • Un intervalo de 20 minutos: PT20M

Frecuencia de inicio (step)

Independientemente de la duración de los servicios, podemos querer que estos empiecen a una hora determinada.

El campo Step permite configurar cada cuanto tiempo se generan huecos en los que se puede reservar el evento.

Ejemplo: Duración 1h Frecuencia 30m

{
duration: 'PT1H',
step: 'PT30M',
}

Si creamos un evento de 1h con una step de 30m se generarán los siguientes huecos:

  • 09:00 - 10:00
  • 09:30 - 10:30
  • 10:00 - 11:00
  • 10:30 - 11:30

Ejemplo: Duración 1h Frecuencia 20m

{
duration: 'PT1H',
step: 'PT20M',
}

Si creamos un evento de 1h con una step de 20m se generarán los siguientes huecos:

  • 09:00 - 10:00
  • 09:20 - 10:20
  • 09:40 - 10:40
  • 10:00 - 11:00
  • 10:20 - 11:20
  • 10:40 - 11:40

Horarios (repeatingAvailability)

Permite configurar las horas en las que se generarán los huecos de forma habitual.

El objeto horarios consta de dos propeidades principales, la zona horaria y la periodicidad semanal.

Por ejemplo, un horario de un servicio que está disponible entre semana de 09:00 a 18:00 tendría la siguiente forma:

{
timeZone: 'Europe/Madrid',
weekly: {
SUNDAY: [],
MONDAY: [{ start: '09:00', end: '18:00' }],
TUESDAY: [{ start: '09:00', end: '18:00' }],
WEDNESDAY: [{ start: '09:00', end: '18:00' }],
THURSDAY: [{ start: '09:00', end: '18:00' }],
FRIDAY: [{ start: '09:00', end: '18:00' }],
SATURDAY: [],
}
}

Para especificar parones, por ejemplo el correspondiente a la hora de la comída es suficiente con añadir otro intervalo al dia correspondiente.

Ejemplo: Días de la semana de 09:00 a 14:00 y de 16:00 a 18:00

{
timeZone: 'Europe/Madrid',
weekly: {
SUNDAY: [],
MONDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
TUESDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
WEDNESDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
THURSDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
FRIDAY: [{ start: '09:00', end: '14:00' }, { start: '16:00', end: '18:00' }],
SATURDAY: [],
}
}

Límites

Además de las reglas citadas anteriormente se pueden configurar ciertos límites en las reservas que permitiran trabajar de forma más eficiente:

Bloquear tiempo antes y después de los eventos. (buffers)

En ocasiones queremos bloquear un espacio de tiempo antes y después de los eventos. Un ejemplo es un médico que quiere tener 10 minutos antes de cada cita para leer con calma los datos del paciente o una clínica de estética que tiene que desinfectar las cabinas después de cada sesión.

  • beforeBuffer: Permite especificar un margen de tiempo antes de los eventos en formato duration.
  • afterBuffer Permiten especificar este margen de tiempo después de los eventos en formato duration.
{
// 10 minutos antes
beforeBuffer: "PT10M",
// 20 minutos después.
afterBuffer: "PT20M",
}

Antelación mínima y máxima (bookingNotice)

Esta opción permite restringir con cuanta antelación se puede reservar un servicio.

Ejemplo:

{
// El servicio se tiene que reservar con 24h de antelación
minBookingNotice: "PT24H",
// El servicio se tiene que reservar máximo en los próximos 7 dias
maxBookingNotice: "PT7D",
}

Cuando esta opción esté habilitada no se permitirán reservas fuera del rango de tiempo especificado. Esto es útil para evitar reservas de última hora o con demasiado adelanto.

Número máximo de reservas por hueco maxConcurrentBookings

Permite configurar el número máximo de reservas que se pueden hacer en cada hueco disponible.

Por ejemplo un psicólogo sólamente podrá atender a un paciente de forma concurrente maxConcurrentBookings: 0, pero una clase de spinning, suponiendo que dispongamos de 10 bicicletas configurará maxConcurrentBookings: 10.

{
// Se permiten 10 reservas concurrentes por hueco.
"maxConcurrentBookings": 10,
}

Unidades

caution

Este campo está obsoleto. Se reconienda utilizar recursos.

Las unidades permiten configurar recursos disponibles en el servicio de forma relativamente sencilla. Las unidades se entienden mejor con algunos ejemplos:

Ejemplo: Imaginemos un espectáculo que tiene 100 plazas y por cada reserva se pueden reservar mínimo 1 plaza y máximo 5:

{
// Número total de unidades reservables por hueco
"availableUnits": 100,
// Numero mínimo de unidades que hay que bloquear en cada reserva
"minUnitsPerBooking": 1,
// Número máximo de unidades que se pueden bloquear por cada reserva
"maxUnitsPerBooking": 5,
}

Ejemplo: Una clase de surf, donde por ley los grupos son máximo de 20 personas por monitor y hay que reservar mínimo en grupos de 5

{
// Número total de unidades reservables por hueco
"availableUnits": 20,
// Numero mínimo de unidades que hay que bloquear en cada reserva
"minUnitsPerBooking": 5,
// Número máximo de unidades que se pueden bloquear por cada reserva
"maxUnitsPerBooking": 20,
}

Recursos

Para determinados tipos de servicios más complejos es necesario en ocasiones contar con elementos o "recursos". Podems definir un recurso como cualquier entidad necesaria para la correcta realización de un servicio.

Ejemplo

Un fisioterapeuta ofrece un servicio llamado "sesión de rehabilitación con ultrasonidos." Para que este servicio se pueda realizar es necesario que el propio fisioterapeuta tenga disponibilidad, pero es posible que necesite una sala, una camilla y una máquina de ultrasonidos.

Los recursos permite representar de forma sencilla cualquier entidad necesaria para llevar a cabo una reserva. Entidades como las mesas de un restaurante, raquetas de tenis, salas o piraguas necesarias para realizar diferentes actividades. Para saber más consulta la sección de recursos de esta guía