Informations générales
Un chatbot pour la réservation en ligne est un ensemble de fonctions de construction d'entonnoir qui vous permettent d'automatiser le processus de planification des services pour votre entreprise.
Le fonctionnement du bot est basé sur l'exécution séquentielle de fonctions : réception des données à afficher au client, puis transmission de ces données pour déclencher de nouvelles fonctions et obtenir de nouveaux résultats.
Au fur et à mesure que le client progresse dans l'entonnoir, vous devez transmettre à chaque bloc suivant uniquement les données qui correspondent au choix du client—utilisez ces données pour configurer les appels de fonction suivants.
Grâce à la possibilité de récupérer des données intermédiaires (par exemple, les postes des employés et les catégories de services) et de les transmettre pour filtrer les employés et les services, vous pouvez configurer votre entonnoir de manière flexible et donner au client le contrôle sur les étapes de sa progression.
Toutes les méthodes décrites dans cet article renvoient un tableau de dictionnaires.
Pour travailler confortablement avec elles, nous vous recommandons de consulter les sections Tableaux et Dictionnaires.
De plus, pour utiliser la fonction de génération d'actions utilisateur (sélection de service, date, réservation), nous vous suggérons d'envisager la méthode tools_make_button_str_checker.
Ci-dessous un schéma du fonctionnement du bot, où chaque bloc du schéma représente un appel de fonction spécifique, et les flèches indiquent le flux de données transmises de bloc en bloc. Les informations transmises dans ces flux vous permettent de filtrer les données demandées, ainsi que de créer, annuler ou modifier un créneau de réservation.

Pour voir un schéma de configuration détaillé du chatbot de réservation en ligne avec les fonctions utilisées, reportez-vous à la section Exemple d'implémentation du bot de cet article.
Récupération des informations sur les succursales
Pour créer un entonnoir de réservation en ligne et récupérer des informations sur les succursales du projet, utilisez la fonction get_companies_for_booking.
La fonction renvoie une liste contenant les données pour chaque succursale (entonnoir) qui a activé la « Réservation en ligne » dans ses paramètres.
Les données sont fournies sous forme de paires clé-valeur et incluent l'identifiant de la succursale (id), le nom (name) et l'adresse (address).
La fonction ne prend aucun paramètre.
Exemple d'utilisation :
Appel de fonction dans un bloc :

Exemple de données renvoyées :

Récupération des informations sur les postes ou les catégories de services
La fonction get_categories_for_booking(company_id) vous permet de récupérer une liste de tous les types de spécialistes ou de catégories de services pour une succursale.
Chaque élément de la liste renvoyée contient un identifiant (id), un nom (name) et une description (description) du poste ou de la catégorie de service. Les données sont représentées sous forme de paires "clé-valeur" :
Paramètres :
Exemple d'utilisation :
Exemple d'appel de fonction dans un bloc de code :

Récupération des informations sur les employés
Si vous devez fournir des informations sur les employés de la succursale, utilisez la fonction get_employees_for_booking.
L'appel renverra une liste de données contenant l'identifiant de l'employé (id), le nom (name), les informations (information) et le titre du poste (job_title).
Vous pouvez également filtrer les employés par liste de services, titre de poste ou catégorie de service. Pour ce faire, transmettez un paramètre supplémentaire dans l'appel de fonction : service_ids, job_title_id ou service_category_id.
Ordre des paramètres :
company_id -> service_ids -> job_title_id -> service_category_id
Paramètres :
Remarque :
Si vous souhaitez récupérer tous les employés d'une succursale, laissez les valeurs pour service_ids, job_title_id et service_category_id vides.
- Exemple d'appel : get_employees_for_booking(14275391)
Pour filtrer les employés par une liste d'IDs de service, transmettez la liste comme deuxième paramètre et laissez job_title_id et service_category_id vides.
- Exemple d'appel : get_employees_for_booking(14275391, [844, 845])
Pour filtrer les employés par titre de poste, transmettez l'ID au paramètre job_title_id et laissez service_ids et service_category_id vides.
- Exemple d'appel : get_employees_for_booking(14275391, “”, 1021)
Pour obtenir les employés fournissant des services d'une catégorie spécifique, laissez service_ids et job_title_id comme chaînes vides, et transmettez l'ID de catégorie sélectionné à service_category_id.
- Exemple d'appel : get_employees_for_booking(14275391, “”, “”, 1019)
Exemple d'utilisation :
Appel de fonction dans un bloc de code :

Exemple de données renvoyées :

Obtention d'informations sur les services
Pour obtenir des informations sur les services fournis par la succursale, utilisez la fonction get_services_for_booking.
À la suite de l'appel, le bot renverra une liste contenant les données des services. Chaque entrée de service comprend un identifiant (id), un nom (title), une description (description), un prix (price) et la durée du service en minutes (duration).
Vous pouvez filtrer la liste résultante par catégorie de service, par employé, ou à la fois par catégorie de service et par employé simultanément. Pour ce faire, transmettez les paramètres supplémentaires service_category_id et/ou employee_id lors de l'appel de la fonction.
Ordre des paramètres :
company_id -> service_category_id -> employee_id
Paramètres :
Remarque pour la section « Paramètres » :
Si vous souhaitez récupérer tous les services d'une succursale, laissez les valeurs service_category_id et employee_id vides.
- Exemple d'appel : get_services_for_booking(14275391)
Si vous souhaitez filtrer les services par catégorie et/ou employé, transmettez les identifiants correspondants dans les paramètres service_category_id et employee_id. Pour filtrer par un seul paramètre, fournissez une chaîne vide pour l'autre.
Exemples d'appels :
- get_services_for_booking(14275391, 1018) - filtre par catégorie de service ;
- get_services_for_booking(14275391, “”, 512978) - filtre par employé ;
- get_services_for_booking(14275391, 1018, 463665) - filtrage par les deux paramètres ;
Exemple d'utilisation :
Appel de la fonction à l'intérieur d'un bloc :

Exemple de données renvoyées :

Obtention des dates de réservation disponibles
Une fois que le client a sélectionné les services à réserver, il doit récupérer une liste des dates de réservation disponibles.
Pour générer cette liste, utilisez la fonction get_dates_for_booking.
La fonction vérifiera les créneaux horaires disponibles et renverra une liste de dates appropriées au format « jour.mois.année ».
L'ordre des paramètres est le suivant :
company_id -> service_ids -> employee_id -> days_limit
Paramètres :
Exemple d'utilisation :
Appel de la fonction à l'intérieur d'un bloc :

Exemple de données renvoyées :

Obtention des créneaux de réservation disponibles
Pour obtenir une liste des créneaux de réservation disponibles, utilisez la fonction get_slots_for_booking.
La fonction vérifiera la disponibilité horaire à la date sélectionnée et renverra une liste des créneaux libres au format « heures:minutes », par exemple [« 09:00 », « 11:00 », « 14:30 », « 16:00 »].
L'ordre des paramètres est le suivant :
company_id -> service_ids -> employee_id -> slot_interval
Paramètres :
Exemple d'utilisation :
Appel de fonction dans le bloc :

Exemple de données renvoyées :

Création d'une réservation
Pour créer une réservation en ligne, utilisez la fonction create_booking.
Si la réservation réussit, la fonction renverra des informations sur le statut de l'opération (status) avec la valeur True et les détails de la réservation (booking) dans un format « clé : valeur ».
Les données de la nouvelle réservation incluent :
- identifiant (id),
- date (booking_date),
- heure (booking_time),
- noms des services (services),
- durée de la réservation (service_duration),
- coût total (total_cost),
- nom de l'employé assigné (employee_name) et son titre de poste (job_title),
- nom de la succursale (company_name) et adresse de la succursale (company_address)
dans un format « clé : valeur ».
Ordre des paramètres :
company_id -> service_ids -> booking_date -> booking_time -> employee_id
Paramètres :
Exemple d'utilisation :
Appel de fonction dans le bloc :

Exemple de réponse de réservation réussie :

Lors de la création de réservations et de la demande ultérieure de créneaux disponibles, vous remarquerez que les listes se sont raccourcies. Par exemple, le 05.02.2024, le créneau de 18:00 n'est plus disponible (il n'était libre que dans l'emploi du temps de Victoria), et pour Paul Thompson, les réservations pour une coupe homme et un coiffage de barbe peuvent désormais être effectuées de 9:00 à 14:00, car la durée totale des services est de 1 heure et 45 minutes, et Pavel a déjà une autre réservation à 16:00.

Obtention d'informations sur les réservations à venir d'un client
Vous pouvez consulter les réservations en cours d'un client en appelant la fonction get_bookings_info.
La réponse renverra une liste des réservations actives, ainsi que des informations détaillées pour chaque réservation.
Les informations de réservation sont fournies dans un format « clé : valeur » et incluent :
- identifiant de réservation (booking_id),
- date (booking_date),
- heure (booking_time),
- identifiants (service_ids) et noms (service_names) des services sélectionnés,
- durée de la réservation (booking_duration),
- coût total des services (total_cost),
- identifiant (employee_id) et nom (employee_name) de l'employé assigné, et son titre (job_title),
- identifiant de la succursale (company_id)
- nom de la succursale (company_name) et adresse (company_address).
Paramètres :
Exemple d'utilisation :
Appel de fonction dans le bloc :

Exemple de données renvoyées :

Modification de la date et de l'heure de réservation
Un client peut modifier indépendamment la date et l'heure de la réservation. Pour ce faire, il doit accéder au bloc de l'entonnoir où la fonction modify_booking_time est appelée.
Si l'opération réussit, la fonction renverra le statut de l'opération (status) avec la valeur True et un message (message) « Booking time modified » dans un format « clé : valeur ».
Ordre des paramètres :
order_id -> new_date -> new_time
Paramètres :
Exemple d'utilisation :
Appel de fonction dans le bloc :

Réponse du bot pour une opération réussie :

Le créneau de 16:00 précédemment occupé est désormais disponible pour la réservation, et la création d'une nouvelle réservation pour les mêmes services ne peut désormais se faire qu'à partir de 11:00

Dans les informations de réservation du client, vous verrez également l'heure de réservation mise à jour :

Annulation d'une réservation
Un client peut annuler indépendamment une réservation existante. Pour ce faire, il doit accéder au bloc où la fonction cancel_booking est appelée.
Une annulation réussie renverra le statut de l'opération (status) avec la valeur True et un message (message) « Booking deleted » dans un format « clé : valeur ».
Ordre des paramètres :
pipeline_id -> order_id
Paramètres :
Exemple d'utilisation :
Appel de fonction dans le bloc :

Réponse du bot pour une annulation réussie :

Après l'annulation, les créneaux « 09:00 » et « 10:00 » sont à nouveau disponibles pour la réservation :

Exemple d'implémentation du bot
Paramètres du chatbot
Bloc n°1. Début. Aucune action spéciale requise

Bloc n°2. Dans ce bloc, nous récupérons les données qui seront fournies au client.
Description du contenu du calculateur :
- comp_id - identifiant du bloc de service, que l'on trouve dans la section « Services » ;
- data - informations sur les services fournis
- res - dictionnaire avec les données nécessaires pour générer les boutons et définir les conditions
- numbered_list - peut être utile si la liste des services doit être dupliquée sous forme de texte
- buttons - tableau de boutons généré à partir des données de service
- checker - tableau des noms de services, utilisé pour définir les conditions de passage au bloc suivant

Bloc n°3. Récupérer et afficher les données sur le service sélectionné.
title - dans le tableau de dictionnaires data, trouver le dictionnaire où la clé title est égale à question. À partir de ce dictionnaire, obtenir la valeur pour la même clé title
description - de même, obtenir la valeur pour la clé description
price - de même, obtenir la valeur pour la clé price
serv_id - de même, obtenir la valeur pour la clé id
b - créer un tableau de chaînes qui seront affichées comme boutons sous le message
res - à partir du tableau b, créer un tableau de dictionnaires comme dans le bloc précédent
buttons - obtenir le tableau pour afficher les boutons
Nous avons maintenant des variables contenant le nom, la description et le prix du service sélectionné par le client

Bloc n°4. Afficher les dates de réservation disponibles
print_dates - utiliser la fonction pour obtenir les dates de réservation disponibles pour le service sélectionné
print_dates - ajouter la chaîne « Retour à la liste des services » au tableau des dates si vous souhaitez que ce bouton apparaisse avec les dates.

Pour la flèche de retour à l'étape précédente, définissez une priorité plus élevée que la flèche avec #{checker}, car #{checker} contient également la condition « Retour à la liste des services ».

Bloc n°5.
Dans le bloc n°5, nous sauvegardons la date sélectionnée par le client. Cela doit être fait dans un bloc séparé car, aux étapes suivantes, lors du retour au bloc 6, la variable question ne contiendra plus la date sélectionnée par le client.

Bloc n°6. Sélection et affichage des créneaux disponibles pour la réservation.
data - obtenir les créneaux disponibles.
La logique est la même que dans le bloc n°4 avec l'affichage des dates disponibles. Il est également important de ne pas oublier de configurer une priorité plus élevée pour la flèche « Retour au choix de la date »

Bloc n°7. Sauvegarde de l'heure sélectionnée dans une variable et tentative d'enregistrement du client.
choosed_time - sauvegarder l'heure
a - tentative d'enregistrement du client
booking_result - obtenir le résultat de l'exécution de la fonction.
Il est nécessaire d'obtenir le résultat car plusieurs personnes peuvent tenter de s'inscrire au même créneau au même moment.

Bloc n°7.1. L'enregistrement du client a échoué.
Ce bloc est uniquement destiné à signaler l'erreur. Après l'envoi du message, nous renvoyons le client à la sélection de l'heure de réservation

Bloc n°8. L'enregistrement a réussi.
Nous informons le client qu'il est inscrit au service et affichons un bouton pour le paiement.

Exemple de configuration des boutons.
Pour la configuration, nous utilisons les variables que nous avons obtenues dans le bloc n°3 :

Bloc n°8.1.
Dans ce bloc, nous confirmons le paiement réussi. La transition vers le bloc est configurée en fonction du système de paiement utilisé

Bloc n°8.2. Le client n'a pas payé le service. Annulation de la réservation
Si le client n'a pas payé le service à temps, nous pouvons annuler la réservation si nécessaire.
or_id - obtenir l'id de la commande
cancel_status - après l'exécution de la fonction, obtenir la réponse indiquant si l'annulation a réussi.

Dans cet exemple, le client arrive dans le bloc d'annulation 5 secondes après avoir reçu le lien de paiement. Dans une situation réelle, vous pouvez définir le temps nécessaire, mais n'oubliez pas d'activer l'interrupteur « Annuler si le bloc est quitté ».

Schéma complet :

Démonstration


Callback de réservation
Dans le dialogue avec le client après la réservation, un callback — notification de réservation — du type suivant sera envoyé :

new_order_in_calendar - partie immuable du callback
[489046159] - order_id identifiant de la demande
Ajout d'une réservation date_et_heure_de_la_réservation
pour 30 minutes - durée du service
À l'objet : Test 30 - à quel objet la réservation a été ajoutée
Aspect du callback lui-même :
new_order_in_calendar: [489046159] Ajout d'une réservation du 2025-06-01 14:00 au 2025-06-01 14:30 pour 30 minutes. À l'objet : Test 30
Vous pouvez configurer la réaction au callback en saisissant la valeur dans la condition du bloc :

Dans le bloc, vous pouvez saisir le message de réponse nécessaire au client.


