Chatbot para reservas online
Información general
Un chatbot para reservas en línea es un conjunto de funciones del generador de embudos que le permiten automatizar el proceso de programación de servicios para su empresa.
El flujo de trabajo del bot se basa en la ejecución secuencial de funciones: recibir datos para mostrarlos al cliente y luego pasar estos datos para activar nuevas funciones y obtener nuevos resultados.
A medida que el cliente avanza por el embudo, debe pasar a cada bloque siguiente solo los datos que correspondan a la elección del cliente; use estos datos para configurar las siguientes llamadas a funciones.
Gracias a la posibilidad de recuperar datos intermedios (por ejemplo, puestos de empleados y categorías de servicios) y pasarlos para filtrar empleados y servicios, puede configurar su embudo de forma flexible y darle al cliente control sobre los pasos de su avance.
Todos los métodos descritos en este artículo devuelven un array de diccionarios.
Para trabajar cómodamente con ellos, 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), 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 de función específica y las flechas indican el flujo de datos que se pasan de un bloque a otro. La información transmitida en estos flujos le permite filtrar los datos solicitados, así como crear, cancelar o modificar una hora de reserva.

Para ver un diagrama detallado de la configuración del chatbot de reservas en línea con las funciones en uso, consulte la sección Ejemplo de implementación del bot de este artículo.
Obtención de información de las sucursales
Para crear un embudo de reservas en línea y obtener información sobre las sucursales del proyecto, use la función get_companies_for_booking.
La función devuelve una lista que contiene datos de cada sucursal (embudo) que tiene habilitado “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) le permite obtener una lista de todos los tipos de especialistas o categorías de servicios de 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:
company_id (obligatorio)
Identificador de la sucursal, formato esperado — entero.
Ejemplo de uso:
Ejemplo de llamada de función en un bloque de código:

Obtención de información sobre empleados
Si necesita proporcionar información sobre los empleados de la sucursal, use la función get_employees_for_booking.
La llamada devolverá una lista de datos que contiene el identificador del empleado (id), el nombre (name), la información (information) y el puesto (job_title).
También puede filtrar los empleados por lista de servicios, puesto o categoría de servicio. Para ello, pase 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:
company_id (obligatorio)
Identificador de la sucursal, formato esperado — entero;
service_ids (opcional)
ID del servicio o una lista de IDs de servicios, formato esperado — un entero o una lista de enteros entre corchetes separados por comas, por ejemplo, [844, 845]
job_title_id (opcional)
ID del puesto, formato esperado — entero;
service_category_id (opcional)
Identificador de la categoría de servicio, formato esperado — entero;
Nota:
Si desea obtener todos los empleados de una sucursal, deje 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 servicios, pase la lista como segundo parámetro y deje vacíos job_title_id y service_category_id.
Ejemplo de llamada: get_employees_for_booking(14275391, [844, 845])
Para filtrar empleados por puesto, pase el ID al parámetro job_title_id y deje vacíos service_ids y service_category_id.
Ejemplo de llamada: get_employees_for_booking(14275391, “”, 1021)
Para obtener empleados que prestan servicios de una categoría específica, deje service_ids y job_title_id como cadenas vacías y pase el ID de la categoría seleccionada a service_category_id.
Ejemplo de llamada: get_employees_for_booking(14275391, “”, “”, 1019)
Ejemplo de uso:
Llamada de la función en un bloque de código:

Ejemplo de datos devueltos:

Obtención de información sobre los servicios
Para obtener información sobre los servicios prestados por la sucursal, use la get_services_for_booking función.
Como resultado de la llamada, el bot devolverá una lista que contiene datos de los servicios. Cada elemento del servicio incluye un identificador (id), un nombre (title), una descripción (description), un precio (price) y la duración del servicio en minutos (duration).
Puede filtrar la lista resultante por categoría de servicio, por empleado o por ambos, categoría de servicio y empleado, simultáneamente. Para ello, pase 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:
company_id (obligatorio)
Identificador de la sucursal, formato esperado – entero;
service_category_id (opcional)
Identificador de la categoría de servicio, formato esperado – entero;
employee_id (opcional)
Identificador del empleado, formato esperado – entero;
Nota para la sección “Parámetros”:
Si desea obtener todos los servicios de una sucursal, deje service_category_id y employee_id los valores vacíos.
Ejemplo de llamada: get_services_for_booking(14275391)
Si desea filtrar los servicios por categoría y/o empleado, introduzca los identificadores correspondientes en los service_category_id y employee_id parámetros. Para filtrar por un solo parámetro, proporcione 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) - filtrado por ambos parámetros;
Ejemplo de uso:
Llamada de 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 la reserva, necesita obtener una lista de fechas de reserva disponibles.
Para generar esta lista, use la get_dates_for_booking función.
La función comprobará los intervalos 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:
company_id (obligatorio)
identificador de la sucursal, formato esperado – entero;
service_ids (opcional)
lista de identificadores de servicios para la reserva, formato esperado – entero o una lista de enteros entre corchetes separados por comas (por ejemplo, 842 o [842, 843]);
employee_id (opcional)
identificador del empleado, formato esperado – entero. Si el valor del parámetro se deja vacío o se pasa como una cadena vacía “” – la función buscará fechas disponibles entre todos los empleados que presten el conjunto completo de servicios de la lista service_ids;
days_limit (opcional)
número de días a partir de la fecha actual dentro de los cuales se realiza la búsqueda de fechas disponibles, formato esperado – entero, valor predeterminado – 14 (días);
Ejemplo de uso:
Llamada de la función dentro de un bloque:

Ejemplo de datos devueltos:

Obtención de franjas horarias de reserva disponibles
Para obtener una lista de franjas horarias de reserva disponibles, use la get_slots_for_booking función.
La función comprobará el tiempo disponible en la fecha seleccionada y devolverá una lista de franjas 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:
company_id (obligatorio)
identificador de la sucursal, formato esperado – entero;
service_ids (opcional) -
lista de identificadores de servicios para la reserva, formato esperado – entero o una lista de enteros (por ejemplo, 842 o [842, 843]);
date (opcional) -
fecha para la comprobación de franjas, formato esperado – cadena en la forma “día.mes.año”, por ejemplo “01.01.2024”;
employee_id (opcional)
identificador del empleado, formato esperado – entero. Si el valor del parámetro se deja vacío o se pasa como una cadena vacía, la función buscará franjas libres en los horarios de todos los empleados que trabajen en la fecha seleccionada y que presten el conjunto completo de servicios de la lista service_ids;
slot_interval (opcional)
intervalo en minutos entre las franjas disponibles, formato esperado – entero, valor predeterminado – 30 (minutos);
Ejemplo de uso:
Llamada de la función en el bloque:
Ejemplo de datos devueltos:
Creación de una reserva
Para crear una reserva en línea, use la create_booking función.
Si la reserva se realiza correctamente, 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 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),
coste total (total_cost),
nombre del empleado asignado (employee_name) y su puesto (job_title),
nombre de la sucursal (company_name) y dirección de la sucursal (company_address)
en formato “clave: valor”.
Orden de los parámetros:
company_id -> service_ids -> booking_date -> booking_time -> employee_id
Parámetros:
company_id (obligatorio)
identificador de la sucursal, formato esperado – entero;
service_ids (obligatorio)
lista de identificadores de servicios para la reserva, formato esperado – entero o una lista de enteros (por ejemplo, 5 o [5, 10, 15]);
booking_date (obligatorio)
fecha de la reserva, formato esperado – cadena en la forma “día.mes.año”, por ejemplo “15.01.2024”;
booking_time (obligatorio)
hora de la reserva, formato esperado – cadena en la forma “horas:minutos”, por ejemplo “12:30”;
employee_id (opcional)
identificador del empleado, formato esperado – entero. Si el valor del parámetro se deja vacío o se pasa como una cadena vacía “”, la función reservará con un empleado aleatorio que preste el conjunto completo de servicios de la lista service_ids, si están disponibles en la fecha y hora especificadas;
Ejemplo de uso:
Llamada de la función en el bloque:
Ejemplo de una respuesta de reserva exitosa:
Al crear reservas y posteriormente solicitar nuevamente las franjas disponibles, notará que las listas se han acortado. Por ejemplo, el 05.02.2024 la franja 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 masculino y arreglo de barba ahora pueden hacerse 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
Puede ver las reservas actuales de un cliente llamando a la get_bookings_info función.
La respuesta devolverá una lista de reservas activas, junto con información detallada de cada reserva.
La información de la reserva se proporciona en 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),
coste total de los servicios (total_cost),
identificador (employee_id) y nombre (employee_name) del empleado asignado, y su puesto (job_title),
identificador de la sucursal (company_id)
nombre de la sucursal (company_name) y dirección (company_address).
Parámetros:
client_id (opcional)
ID del cliente, req – Este parámetro es obligatorio si desea obtener las reservas de un cliente específico; de forma predeterminada, se utiliza el ID del cliente del chat con el bot.
Ejemplo de uso:
Llamada de 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 se realiza correctamente, la función devolverá el estado de la operación (status) con el valor True y un mensaje (message) “Booking time modified” en formato “clave: valor”.
Orden de los parámetros:
order_id -> new_date -> new_time
Parámetros:
order_id (obligatorio)
identificador de la reserva, valor esperado – entero;
new_date (obligatorio)
nueva fecha de la reserva, formato esperado – cadena en la forma “día.mes.año”, por ejemplo “16.01.2024”;
new_time (obligatorio)
nueva hora de la reserva, formato esperado – cadena en la forma “horas:minutos”, por ejemplo “14:30”;
Ejemplo de uso:
Llamada de la función en el bloque:
Respuesta del bot para una operación exitosa:
La franja ocupada anteriormente de las 16:00 ahora está disponible para reservar, y crear una nueva reserva para los mismos servicios ahora solo puede hacerse desde las 11:00
En la información de reserva del cliente, también verá 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 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 formato “clave: valor”.
Orden de los parámetros:
pipeline_id -> order_id
Parámetros:
pipeline_id (obligatorio)
identificador de la sucursal, valor esperado – entero;
order_id (obligatorio)
identificador de la reserva, valor esperado – entero;
Ejemplo de uso:
Llamada de la función en el bloque:
Respuesta del bot para una cancelación exitosa:
Después de la cancelación, las franjas “09:00” y “10:00” vuelven a estar disponibles para reservar:
Ejemplo de implementación del bot
Configuración del chatbot
Bloque nº 1. Inicio. No se requieren acciones especiales
Bloque nº 2. En este bloque, obtenemos los datos que se proporcionarán al cliente.
Descripción del contenido de la calculadora:
comp_id - identificador del bloque de servicios, que se puede encontrar en la sección “Servicios”;
data - información sobre los servicios proporcionados
res - diccionario con los 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, usado para establecer condiciones para pasar al siguiente bloque
Bloque nº 3. Obtener y mostrar datos sobre el servicio seleccionado.
title - en el array de diccionarios data, encuentre el diccionario donde la clave title sea igual a question. De ese diccionario, obtenga el valor de la misma clave title
description - de manera similar, obtenga el valor de la clave description
price - de manera similar, obtenga el valor de la clave price
serv_id - de manera similar, obtenga el valor de la clave id
b - cree un array de cadenas que se mostrarán como botones debajo del mensaje
res - a partir del array b, cree un array de diccionarios como en el bloque anterior
buttons - obtenga 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 nº 4. Mostrar las fechas de reserva disponibles
print_dates - use la función para obtener las fechas de reserva disponibles para el servicio seleccionado
print_dates - añada la cadena “Volver a la lista de servicios” al array de fechas si desea que este botón aparezca junto con las fechas.
Para la flecha que vuelve al paso anterior, establezca 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 nº 5. En el bloque nº 5 guardamos la fecha seleccionada por el cliente. Esto debe hacerse en un bloque aparte porque en las siguientes etapas, al regresar al Bloque 6, la variable question ya no contendrá la fecha seleccionada por el cliente.
Bloque nº 6. Selección y visualización de las franjas disponibles para la reserva.
data - obtenemos las franjas disponibles.
La lógica es la misma que en el Bloque nº 4 con la salida de fechas disponibles. También es importante no olvidar configurar una prioridad mayor para la flecha “Volver a la selección de fecha”
Bloque nº 7. Guardado de la hora seleccionada en una variable e intento de reservar al cliente.
choosed_time - guardamos la hora
a - intento de reservar 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 reservar a la misma hora al mismo tiempo.
Bloque nº 7.1. No se pudo reservar al cliente.
Este bloque solo se necesita para mostrar el mensaje de error. Después de enviar el mensaje, devolvemos al cliente a la selección de hora para la reserva
Bloque nº 8. La reserva se ha realizado con éxito.
Informamos al cliente que está reservado para el servicio y mostramos el botón para el pago.
Ejemplo de configuración de botones.
Para la configuración usamos las variables que obtuvimos en el bloque nº 3:
Bloque nº 8.1.
En este bloque confirmamos el pago exitoso. Configuramos la transición al bloque de acuerdo con el sistema de pago utilizado
Bloque nº 8.2. El cliente no pagó el servicio. Cancelación de la reserva
Si el cliente no paga 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ó correctamente.
En este ejemplo, el cliente pasará al bloque de cancelación 5 segundos después de recibir el enlace de pago; en una situación real, puede establecer la cantidad de tiempo necesaria, solo no olvide activar el interruptor “Cancelar si salió del bloque”.
Esquema completo:
Demostración
Callback de reserva
En el diálogo con el cliente, después de la reserva, llegará un callback —notificación de reserva— del siguiente tipo:

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

En el bloque se puede escribir el mensaje de respuesta necesario para el cliente.
Última actualización