Información general
Un chatbot para reservas en línea es un conjunto de funciones de construcción de embudos que te permiten automatizar el proceso de programación de servicios para tu empresa.
El flujo de trabajo del bot se basa en la ejecución secuencial de funciones: recibir datos para mostrarlos al cliente, luego pasar estos datos para activar nuevas funciones y obtener nuevos resultados.
A medida que el cliente avanza por el embudo, debes pasar a cada bloque subsiguiente solo los datos que correspondan a la elección del cliente: utiliza estos datos para configurar las siguientes llamadas a funciones.
Gracias a la capacidad de recuperar datos intermedios (por ejemplo, puestos de empleados y categorías de servicios) y pasarlos para filtrar empleados y servicios, puedes configurar tu embudo de manera flexible y darle al cliente control sobre los pasos de su progresión.
Todos los métodos descritos en este artículo devuelven un array de diccionarios.
Para trabajar cómodamente con ellos, te recomendamos revisar las secciones Arrays y Diccionarios.
Además, para usar la función de generación de acciones del usuario (selección de servicio, fecha, reserva), te sugerimos considerar el método tools_make_button_str_checker.
A continuación se muestra un diagrama del flujo de trabajo del bot, donde cada bloque del diagrama representa una llamada a función específica, y las flechas indican el flujo de datos que se pasa de un bloque a otro. La información pasada en estos flujos te permite filtrar los datos solicitados, así como crear, cancelar o modificar una hora de reserva.

Para ver un diagrama de configuración detallado del chatbot de reservas en línea con las funciones en uso, consulta la sección Ejemplo de implementación del bot de este artículo.
Obtención de información de la sucursal
Para crear un embudo de reservas en línea y obtener información sobre las sucursales del proyecto, utiliza la función get_companies_for_booking.
La función devuelve una lista que contiene datos para cada sucursal (embudo) que tenga habilitada la opción "Reserva en línea" en su configuración.
Los datos se proporcionan como pares clave-valor e incluyen el identificador de la sucursal (id), el nombre (name) y la dirección (address).
La función no toma ningún parámetro.
Ejemplo de uso:
Llamada a la función dentro de un bloque:

Ejemplo de datos devueltos:

Obtención de información sobre puestos o categorías de servicios
La función get_categories_for_booking(company_id) te permite obtener una lista de todos los tipos de especialistas o categorías de servicios para una sucursal.
Cada elemento de la lista devuelta contiene un identificador (id), un nombre (name) y una descripción (description) del puesto o categoría de servicio. Los datos se representan como pares "clave-valor":
Parámetros:
Ejemplo de uso:
Ejemplo de llamada a la función en un bloque de código:

Obtención de información sobre empleados
Si necesitas proporcionar información sobre los empleados de la sucursal, utiliza la función get_employees_for_booking.
La llamada devolverá una lista de datos que contiene el identificador del empleado (id), nombre (name), información (information) y cargo (job_title).
También puedes filtrar empleados por lista de servicios, cargo o categoría de servicio. Para ello, pasa un parámetro adicional en la llamada a la función: service_ids, job_title_id o service_category_id.
Orden de los parámetros:
company_id -> service_ids -> job_title_id -> service_category_id
Parámetros:
Nota:
Si deseas obtener todos los empleados de una sucursal, deja vacíos los valores de service_ids, job_title_id y service_category_id.
- Ejemplo de llamada: get_employees_for_booking(14275391)
Para filtrar empleados por una lista de IDs de servicio, pasa la lista como segundo parámetro y deja vacíos job_title_id y service_category_id.
- Ejemplo de llamada: get_employees_for_booking(14275391, [844, 845])
Para filtrar empleados por cargo, pasa el ID al parámetro job_title_id y deja vacíos service_ids y service_category_id.
- Ejemplo de llamada: get_employees_for_booking(14275391, “”, 1021)
Para obtener empleados que brindan servicios de una categoría específica, deja service_ids y job_title_id como cadenas vacías y pasa el ID de categoría seleccionado a service_category_id.
- Ejemplo de llamada: get_employees_for_booking(14275391, “”, “”, 1019)
Ejemplo de uso:
Llamada a la función en un bloque de código:

Ejemplo de datos devueltos:

Obtención de información sobre servicios
Para obtener información sobre los servicios que ofrece la sucursal, utiliza la función get_services_for_booking.
Como resultado de la llamada, el bot devolverá una lista que contiene datos de los servicios. Cada entrada de servicio incluye un identificador (id), un nombre (title), una descripción (description), un precio (price) y la duración del servicio en minutos (duration).
Puedes filtrar la lista resultante por categoría de servicio, por empleado, o por categoría de servicio y empleado simultáneamente. Para ello, pasa los parámetros adicionales service_category_id y/o employee_id al llamar a la función.
Orden de los parámetros:
company_id -> service_category_id -> employee_id
Parámetros:
Nota a la sección "Parámetros":
Si deseas obtener todos los servicios de una sucursal, deja vacíos los valores de service_category_id y employee_id.
- Ejemplo de llamada: get_services_for_booking(14275391)
Si deseas filtrar servicios por categoría y/o empleado, pasa los identificadores correspondientes a los parámetros service_category_id y employee_id. Para filtrar por un solo parámetro, proporciona una cadena vacía para el otro.
Ejemplos de llamadas:
- get_services_for_booking(14275391, 1018) - filtro por categoría de servicio;
- get_services_for_booking(14275391, “”, 512978) - filtro por empleado;
- get_services_for_booking(14275391, 1018, 463665) - filtro por ambos parámetros;
Ejemplo de uso:
Llamada a la función dentro de un bloque:

Ejemplo de datos devueltos:

Obtención de fechas de reserva disponibles
Después de que el cliente haya seleccionado los servicios para reservar, necesita obtener una lista de fechas de reserva disponibles.
Para generar esta lista, utiliza la función get_dates_for_booking.
La función verificará los espacios de tiempo disponibles y devolverá una lista de fechas adecuadas en el formato "día.mes.año".
El orden de los parámetros es el siguiente:
company_id -> service_ids -> employee_id -> days_limit
Parámetros:
Ejemplo de uso:
Llamada a la función dentro de un bloque:

Ejemplo de datos devueltos:

Obtención de espacios de reserva disponibles
Para obtener una lista de espacios de reserva disponibles, utiliza la función get_slots_for_booking.
La función verificará el tiempo disponible en la fecha seleccionada y devolverá una lista de espacios libres en el formato "horas:minutos", por ejemplo [“09:00”, “11:00”, “14:30”, “16:00”].
El orden de los parámetros es el siguiente:
company_id -> service_ids -> employee_id -> slot_interval
Parámetros:
Ejemplo de uso:
Llamada a la función en el bloque:

Ejemplo de datos devueltos:

Creación de una reserva
Para crear una reserva en línea, utiliza la función create_booking.
Si la reserva es exitosa, la función devolverá información sobre el estado de la operación (status) con el valor True y los detalles de la reserva (booking) en un formato "clave: valor".
Los datos de la nueva reserva incluyen:
- identificador (id),
- fecha (booking_date),
- hora (booking_time),
- nombres de los servicios (services),
- duración de la reserva (service_duration),
- costo total (total_cost),
- nombre del empleado asignado (employee_name) y su cargo (job_title),
- nombre de la sucursal (company_name) y dirección de la sucursal (company_address)
en un formato "clave: valor".
Orden de los parámetros:
company_id -> service_ids -> booking_date -> booking_time -> employee_id
Parámetros:
Ejemplo de uso:
Llamada a la función en el bloque:

Ejemplo de una respuesta de reserva exitosa:

Al crear reservas y posteriormente solicitar espacios disponibles nuevamente, notarás que las listas se han acortado. Por ejemplo, el 05.02.2024, el espacio de las 18:00 ya no está disponible (solo estaba libre en el horario de Victoria), y para Paul Thompson, las reservas para un corte de pelo y arreglo de barba ahora se pueden hacer de 9:00 a 14:00, ya que la duración total de los servicios es de 1 hora y 45 minutos, y Pavel ya tiene otra reserva a las 16:00.

Obtención de información sobre las próximas reservas de un cliente
Puedes ver las reservas actuales de un cliente llamando a la función get_bookings_info.
La respuesta devolverá una lista de reservas activas, junto con información detallada para cada reserva.
La información de la reserva se proporciona en un formato "clave: valor" e incluye:
- identificador de la reserva (booking_id),
- fecha (booking_date),
- hora (booking_time),
- identificadores (service_ids) y nombres (service_names) de los servicios seleccionados,
- duración de la reserva (booking_duration),
- costo total de los servicios (total_cost),
- identificador (employee_id) y nombre (employee_name) del empleado asignado, y su cargo (job_title),
- identificador de la sucursal (company_id)
- nombre de la sucursal (company_name) y dirección (company_address).
Parámetros:
Ejemplo de uso:
Llamada a la función en el bloque:

Ejemplo de datos devueltos:

Cambio de fecha y hora de la reserva
Un cliente puede cambiar de forma independiente la fecha y hora de la reserva. Para ello, debe acceder al bloque del embudo donde se llama a la función modify_booking_time.
Si la operación es exitosa, la función devolverá el estado de la operación (status) con el valor True y un mensaje (message) "Booking time modified" en un formato "clave: valor".
Orden de los parámetros:
order_id -> new_date -> new_time
Parámetros:
Ejemplo de uso:
Llamada a la función en el bloque:

Respuesta del bot para una operación exitosa:

El espacio previamente ocupado de las 16:00 ahora está disponible para reservar, y crear una nueva reserva para los mismos servicios ahora solo se puede hacer a partir de las 11:00

En la información de la reserva del cliente, también verás la hora de reserva actualizada:

Cancelación de una reserva
Un cliente puede cancelar de forma independiente una reserva existente. Para ello, debe acceder al bloque donde se llama a la función cancel_booking.
Una cancelación exitosa devolverá el estado de la operación (status) con el valor True y un mensaje (message) "Booking deleted" en un formato "clave: valor".
Orden de los parámetros:
pipeline_id -> order_id
Parámetros:
Ejemplo de uso:
Llamada a la función en el bloque:

Respuesta del bot para una cancelación exitosa:

Después de la cancelación, los espacios "09:00" y "10:00" están disponibles nuevamente para reservar:

Ejemplo de implementación del bot
Configuración del chatbot
Bloque №1. Inicio. No se requieren acciones especiales

Bloque №2. En este bloque, recuperamos los datos que se proporcionarán al cliente.
Descripción del contenido de la calculadora:
- comp_id - identificador del bloque de servicio, que se puede encontrar en la sección "Servicios";
- data - información sobre los servicios proporcionados
- res - diccionario con datos necesarios para generar botones y establecer condiciones
- numbered_list - puede ser útil si la lista de servicios necesita duplicarse en forma de texto
- buttons - array de botones generados a partir de los datos del servicio
- checker - array de nombres de servicios, utilizado para establecer condiciones para pasar al siguiente bloque

Bloque №3. Recuperar y mostrar datos sobre el servicio seleccionado.
title - en el array de diccionarios data, encuentra el diccionario donde la clave title es igual a question. De ese diccionario, obtén el valor para la misma clave title
description - de manera similar, obtén el valor para la clave description
price - de manera similar, obtén el valor para la clave price
serv_id - de manera similar, obtén el valor para la clave id
b - crea un array de cadenas que se mostrarán como botones debajo del mensaje
res - a partir del array b, crea un array de diccionarios como en el bloque anterior
buttons - obtén el array para mostrar los botones
Ahora tenemos variables que contienen el nombre, la descripción y el precio del servicio seleccionado por el cliente

Bloque №4. Mostrar fechas de reserva disponibles
print_dates - usa la función para obtener fechas de reserva disponibles para el servicio seleccionado
print_dates - agrega la cadena "Volver a la lista de servicios" al array de fechas si deseas que este botón aparezca junto con las fechas.

Para la flecha que regresa al paso anterior, establece una prioridad más alta que la flecha con #{checker}, porque #{checker} también contiene la condición "Volver a la lista de servicios".

Bloque №5.
En el bloque №5 guardamos la fecha seleccionada por el cliente. Esto debe hacerse en un bloque separado porque, en las siguientes etapas, al regresar al Bloque 6, la variable question ya no contendrá la fecha seleccionada por el cliente.

Bloque №6. Selección y visualización de los espacios disponibles para la reserva.
data - obtenemos los espacios disponibles.
La lógica es la misma que en el Bloque №4 con la visualización de las fechas disponibles. También es importante no olvidar configurar una prioridad más alta para la flecha "Volver a la selección de fecha"

Bloque №7. Guardar la hora seleccionada en una variable e intentar registrar al cliente.
choosed_time - guardamos la hora
a - intento de registrar al cliente
booking_result - obtenemos el resultado de la ejecución de la función.
Es necesario obtener el resultado, ya que varias personas pueden intentar registrarse para la misma hora al mismo tiempo.

Bloque №7.1. No se pudo registrar al cliente.
Este bloque solo es necesario para informar del error. Después de enviar el mensaje, devolvemos al cliente a la selección de hora para la reserva

Bloque №8. La reserva fue exitosa.
Informamos al cliente que está registrado para el servicio y mostramos un botón para pagar.

Ejemplo de configuración de botones.
Para la configuración, usamos las variables que obtuvimos en el bloque №3:

Bloque №8.1.
En este bloque confirmamos el pago exitoso. La transición al bloque se configura de acuerdo con el sistema de pago utilizado

Bloque №8.2. El cliente no pagó el servicio. Cancelación de la reserva
Si el cliente no pagó el servicio a tiempo, podemos cancelar la reserva si es necesario.
or_id - obtenemos el id del pedido
cancel_status - después de ejecutar la función, obtenemos la respuesta de si la cancelación se realizó con éxito.

En este ejemplo, el cliente llegará al bloque de cancelación 5 segundos después de recibir el enlace de pago; en una situación real, puedes establecer la cantidad de tiempo necesaria, solo recuerda activar el interruptor "Cancelar si abandonó el bloque".

Diagrama completo:

Demostración


Callback de la reserva
En el diálogo con el cliente, después de la reserva, llegará un callback (notificación de la reserva) con el siguiente aspecto:

new_order_in_calendar - parte inmutable del callback
[489046159] - order_id, identificador de la solicitud
Añadida reserva fecha_y_hora_de_la_reserva
durante 30 minutos - duración del servicio
Al objeto: Test 30 - a qué objeto se añadió la reserva
Aspecto del callback:
new_order_in_calendar: [489046159] Añadida reserva desde 2025-06-01 14:00 hasta 2025-06-01 14:30 durante 30 minutos. Al objeto: Test 30
Puedes configurar la reacción al callback escribiendo el valor en la condición del bloque:

En el bloque puedes escribir el mensaje de respuesta necesario para el cliente.


