HivebookDocs
17

Intégrer les widgets

Poser le loader, choisir un canal de version, l’insérer dans votre site.

À préparerUne page en HTTPS · votre clé API Hivebook

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.

HTML
<!-- 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>
C’est tout. Le loader repère les widgets présents dans la page et ne télécharge les ressources que si un widget existe réellement. Aucune clé à configurer côté site, aucun réglage supplémentaire.
  1. Collez les deux balises dans votre page, en remplaçant VOTRE_CLE_API.
  2. Publiez, puis ouvrez la page en navigation privée pour éviter tout cache.
  3. Vérifiez l’affichage du parcours, puis réalisez une réservation de test sur un créneau réel.
  4. Contrôlez dans le planning du Manager que la réservation est bien arrivée, puis annulez-la.

2. Comment le loader fonctionne

ComportementDétailConséquence pratique
Chargement conditionnelLe 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 doublonMê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 DOMUn 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 modulesLes bundles sont chargés comme ES Modules, avec préchargement.HTTPS obligatoire ; les anciens navigateurs ne sont pas servis.
Version exposéeLe loader publie window.HivebookWidget.version.Pratique pour confirmer la version réellement servie à un visiteur.
Vérifier la version en production. Ouvrez la console du navigateur sur votre page et saisissez 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é.

CanalURLComportement
Dernière v3 Recommandéhttps://cdn.hivebook.fr/widget/v3/loader.jsMises à jour automatiques dans la branche v3 : correctifs et nouveautés sans rupture d’API.
Version figéehttps://cdn.hivebook.fr/widget/v3.0.0/loader.jsVersion exacte, aucune mise à jour automatique.
Dernière absoluehttps://cdn.hivebook.fr/widget/latest/loader.jsToujours la version la plus récente, y compris les versions majeures.
Ancienne v2https://cdn.hivebook.fr/widget/v2/loader.jsMaintenue pour les intégrations existantes, sans les nouveautés de la v3.
Évitez /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.
Quand figer une version ? Si votre site surcharge le CSS des widgets ou si votre validation passe par un processus long, pointez une version exacte et planifiez les montées de version. Dans tous les autres cas, le canal /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 codePoint d’attention
Un bloc HTML ou code de votre pageUtilisez un bloc qui conserve le code tel quel, sans le réécrire.
Une page en cours d’éditionLe 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.
HTML — intégration dans une page
<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>
Injection dynamique. Aucune configuration supplémentaire n’est nécessaire pour afficher un widget après le chargement de la page — dans une modale, un onglet ou après un clic. Le loader surveille le DOM en continu et initialise automatiquement tout widget ajouté ensuite.

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.

HTML
<!-- 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

AttributRègle exacteConséquence
show_headerActif sauf si la valeur vaut exactement false.show_header="0" ou ="non" affiche l’en-tête.
show_empty_productsActif sauf si la valeur vaut exactement false.Même logique : seul false masque les activités sans créneau.
responsiveActif sauf si la valeur vaut false, sans distinction de casse.responsive="FALSE" fonctionne, contrairement aux deux précédents.
store_filterActif 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.
useOrderPopupActif seulement si la valeur vaut exactement true.L’inverse des deux premiers : ici, tout ce qui n’est pas true désactive.
Deux familles opposées. 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

AttributDéfaut de l’attributValeur appliquée si la saisie est invalide
max_days_ahead36560 si la valeur n’est pas un nombre, ou si elle est négative.
column22 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.
Le piège de 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

AttributValeurs reconnuesSi la valeur est inconnue
calendar_navigationmonth bascule en navigation mensuelle.Tout le reste, y compris Month avec une majuscule, se comporte comme full.
product_sortname, store, slot.Ordre du catalogue, comme si l’attribut était absent.
langfr, en.Repli sur fr.
data-themeLes neuf thèmes listés dans Thèmes.Aucun thème appliqué : le widget garde ses couleurs de base.

Orthographes acceptées

AttributVariante également reconnuePourquoi
useOrderPopupuse-order-popupHTML 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.
Le reste est sensible à la casse. Seul 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 ?

  1. La page est-elle servie en HTTPS ? C’est obligatoire.
  2. La balise <script src="…/loader.js"> est-elle bien présente dans le code source publié ?
  3. L’attribut api_key est-il renseigné et complet, sans espace ni retour à la ligne ?
  4. Le navigateur est-il compatible : Chrome/Edge 80+, Firefox 75+, Safari 14+ ?
  5. La maintenance du Widget est-elle activée dans la Boutique ?
  6. 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.

Guide utilisateur Hivebook v3.0.0