Intégrer les widgets
Poser le loader, choisir un canal de version, l’insérer dans votre site.
1. Démarrage rapide
Deux balises suffisent : le loader, à placer une seule fois dans la page, et la balise du widget, à placer là où le parcours doit apparaître.
<!-- 1. Le loader, une seule fois dans la page -->
<script src="https://cdn.hivebook.fr/widget/v3/loader.js" defer></script>
<!-- 2. Le widget, là où il doit s'afficher -->
<hivebook-appointment
lang="fr"
api_key="VOTRE_CLE_API"
data-theme="light-cyan"
widget_title="Réservez votre activité">
</hivebook-appointment>
- Collez les deux balises dans votre page, en remplaçant
VOTRE_CLE_API. - Publiez, puis ouvrez la page en navigation privée pour éviter tout cache.
- Vérifiez l’affichage du parcours, puis réalisez une réservation de test sur un créneau réel.
- Contrôlez dans le planning du Manager que la réservation est bien arrivée, puis annulez-la.
2. Comment le loader fonctionne
| Comportement | Détail | Conséquence pratique |
|---|---|---|
| Chargement conditionnel | Le loader ne charge les bundles que si la page contient <hivebook-appointment>, <hivebook-gift> ou <hivebook-catalog>. | Vous pouvez placer le loader dans l’en-tête global du site sans alourdir les pages sans widget. |
| Protection contre le doublon | Même si la balise <script> apparaît plusieurs fois, le chargement n’a lieu qu’une fois. | Aucun risque si votre thème et votre page injectent tous les deux le loader. |
| Surveillance du DOM | Un MutationObserver détecte les widgets ajoutés après le chargement de la page. | Un widget inséré dans une modale, un onglet ou après un clic s’initialise tout seul. |
| Chargement en modules | Les bundles sont chargés comme ES Modules, avec préchargement. | HTTPS obligatoire ; les anciens navigateurs ne sont pas servis. |
| Version exposée | Le loader publie window.HivebookWidget.version. | Pratique pour confirmer la version réellement servie à un visiteur. |
HivebookWidget.version. La valeur retournée est la version exacte du widget servie à cet instant.3. Versions et canaux
L’URL du loader détermine la version que reçoivent vos visiteurs. Trois canaux sont disponibles selon le niveau de stabilité souhaité.
| Canal | URL | Comportement |
|---|---|---|
| Dernière v3 Recommandé | https://cdn.hivebook.fr/widget/v3/loader.js | Mises à jour automatiques dans la branche v3 : correctifs et nouveautés sans rupture d’API. |
| Version figée | https://cdn.hivebook.fr/widget/v3.0.0/loader.js | Version exacte, aucune mise à jour automatique. |
| Dernière absolue | https://cdn.hivebook.fr/widget/latest/loader.js | Toujours la version la plus récente, y compris les versions majeures. |
| Ancienne v2 | https://cdn.hivebook.fr/widget/v2/loader.js | Maintenue pour les intégrations existantes, sans les nouveautés de la v3. |
/latest/ en production. Ce canal peut basculer sur une version majeure et introduire des changements d’API incompatibles sans préavis. Réservez-le à un environnement de test./v3/ est le bon choix : vous recevez les correctifs automatiquement.4. Intégration dans votre site
Les widgets étant des balises HTML standards, ils s’intègrent partout. Il suffit de coller le code à l’endroit où le widget doit apparaître.
| Où coller le code | Point d’attention |
|---|---|
| Un bloc HTML ou code de votre page | Utilisez un bloc qui conserve le code tel quel, sans le réécrire. |
| Une page en cours d’édition | Le rendu peut n’apparaître qu’après publication, pas dans l’éditeur. |
| Un bloc intégré dans un cadre (iframe) | Prévoyez une hauteur suffisante pour afficher le widget. |
<script src="https://cdn.hivebook.fr/widget/v3/loader.js" defer></script>
<hivebook-appointment
lang="fr"
api_key="VOTRE_CLE_API"
data-theme="light-cyan"
widget_title="Réservez en ligne">
</hivebook-appointment>
5. Plusieurs widgets sur la même page
Placez autant de widgets que nécessaire, de types différents et même avec des clés API différentes. Le loader reste chargé une seule fois.
<!-- Un seul loader, quel que soit le nombre de widgets -->
<script src="https://cdn.hivebook.fr/widget/v3/loader.js" defer></script>
<!-- Réservation du site A -->
<hivebook-appointment
api_key="CLE_SITE_A"
data-theme="light-cyan"
widget_title="Réservez">
</hivebook-appointment>
<!-- Carte cadeau du site A -->
<hivebook-gift
api_key="CLE_SITE_A"
data-theme="light-cyan"
widget_title="Offrez">
</hivebook-gift>
- Chaque widget gère sa propre clé API, son propre thème et son propre état.
- Deux widgets de réservation peuvent viser deux produits différents via
product_id. - Les paniers ne sont pas partagés : un client qui réserve puis achète un bon cadeau passe par deux commandes.
6. Comment les attributs sont interprétés
Les attributs HTML sont toujours des chaînes de caractères. La v3 ne les interprète pas tous de la même façon, et une valeur inattendue ne provoque jamais d’erreur : elle est silencieusement remplacée. Ces règles expliquent la plupart des « le widget ignore mon attribut ».
Attributs à deux états
| Attribut | Règle exacte | Conséquence |
|---|---|---|
show_header | Actif sauf si la valeur vaut exactement false. | show_header="0" ou ="non" affiche l’en-tête. |
show_empty_products | Actif sauf si la valeur vaut exactement false. | Même logique : seul false masque les activités sans créneau. |
responsive | Actif sauf si la valeur vaut false, sans distinction de casse. | responsive="FALSE" fonctionne, contrairement aux deux précédents. |
store_filter | Actif seulement si la valeur vaut exactement true, et s’il y a au moins deux Boutiques. | Avec une seule clé, le sélecteur n’apparaît jamais, même à true. |
useOrderPopup | Actif seulement si la valeur vaut exactement true. | L’inverse des deux premiers : ici, tout ce qui n’est pas true désactive. |
show_header et show_empty_products sont actifs par défaut et ne se coupent qu’avec false ; store_filter et useOrderPopup sont inactifs par défaut et ne s’allument qu’avec true. Écrivez systématiquement true ou false en minuscules, vous n’aurez pas à retenir laquelle est laquelle.Valeurs numériques et de repli
| Attribut | Défaut de l’attribut | Valeur appliquée si la saisie est invalide |
|---|---|---|
max_days_ahead | 365 | 60 si la valeur n’est pas un nombre, ou si elle est négative. |
column | 2 | 2 si la valeur n’est pas un nombre, ou si elle est inférieure à 1. |
product_id | -1 | -1 conserve l’étape de sélection du produit. |
max_days_ahead. Son repli n’est pas son défaut. Oublier l’attribut donne un horizon de 365 jours ; écrire max_days_ahead="un an" le ramène à 60 jours sans aucun message. Vérifiez toujours la dernière date proposée par le calendrier après modification.Valeurs énumérées
| Attribut | Valeurs reconnues | Si la valeur est inconnue |
|---|---|---|
calendar_navigation | month bascule en navigation mensuelle. | Tout le reste, y compris Month avec une majuscule, se comporte comme full. |
product_sort | name, store, slot. | Ordre du catalogue, comme si l’attribut était absent. |
lang | fr, en. | Repli sur fr. |
data-theme | Les neuf thèmes listés dans Thèmes. | Aucun thème appliqué : le widget garde ses couleurs de base. |
Orthographes acceptées
| Attribut | Variante également reconnue | Pourquoi |
|---|---|---|
useOrderPopup | use-order-popup | HTML met les noms d’attributs en minuscules. La forme en tirets est plus sûre dans les gabarits qui normalisent la casse, et dans les environnements qui refusent les majuscules. |
useOrderPopup dispose d’un alias. Les autres attributs s’écrivent exactement comme dans les tableaux de ce guide, en minuscules avec des tirets bas.7. FAQ intégration
Mon widget ne s’affiche pas — que vérifier ?
- La page est-elle servie en HTTPS ? C’est obligatoire.
- La balise
<script src="…/loader.js">est-elle bien présente dans le code source publié ? - L’attribut
api_keyest-il renseigné et complet, sans espace ni retour à la ligne ? - Le navigateur est-il compatible : Chrome/Edge 80+, Firefox 75+, Safari 14+ ?
- La maintenance du Widget est-elle activée dans la Boutique ?
- La console du navigateur (F12 → Console) signale-t-elle une erreur réseau ou de script ?
Puis-je utiliser plusieurs clés API différentes sur la même page ?
Oui, sans restriction. Chaque widget est indépendant. Vous pouvez afficher une réservation du site A et une carte cadeau du site B côte à côte.
Comment personnaliser les couleurs au-delà des thèmes fournis ?
Les widgets utilisent des variables CSS qui traversent la frontière du Shadow DOM. Vous pouvez donc les surcharger depuis votre propre feuille de style, sans modifier les fichiers Hivebook. Voir Personnalisation CSS.
Comment afficher une seule activité ?
Renseignez product_id avec l’identifiant numérique du produit dans votre catalogue Hivebook. Le widget supprime alors l’étape de sélection et ouvre directement le calendrier. La valeur par défaut -1 affiche toutes les activités.
Le widget est-il traduit ?
L’attribut lang accepte fr et en ; la valeur par défaut est fr. Les textes propres à votre offre — titres d’étapes, libellés de tarifs, messages de quota — se personnalisent dans la Boutique, produit par produit. Voir Libellés et textes.
Que se passe-t-il si un client abandonne son paiement ?
La commande reste en Attente paiement puis expire après le délai configuré dans Réglages → Hivebook → Autres. Les places et ressources sont alors libérées. Un délai trop court coupe le client en pleine saisie bancaire ; un délai trop long immobilise les places.