Document techniqueV1 · vérifié le 7 septembre 2026

Poser Cerfi sur votre site.
Une ligne, et rien d’autre.

Ce document décrit exactement ce que fait le code livré : ce que la ligne injecte dans votre page, ce que le serveur vérifie avant d’ouvrir quoi que ce soit, ce que votre navigateur doit permettre, et comment retirer l’ensemble. Rien de ce qui suit n’est une recommandation générale — chaque phrase correspond à un comportement du produit.

Destiné à la personne qui gère votre site — vous, votre agence ou votre prestataire.

01Chapitre 01 sur 08

La ligne

La seule chose à coller.

Une balise, trois attributs, aucune dépendance. Le fichier chargé est un script autonome : dans votre page, il ne pose aucun cookie, n’écrit rien dans le stockage du navigateur et ne contient aucun secret. La clé de signature de votre installation reste sur nos serveurs.

<body> … </body>

<script src="https://www.cerfland.fr/cerfi/widget.js" data-cerfi-site="wc_VOTRE-CLE" async></script>

wc_VOTRE-CLE

L’adresse doit rester celle-ci. Le chargeur déduit de son propre attribut src l’origine du panneau ET l’adresse du contrôle serveur : recopier le fichier sur votre propre domaine redirige toute la suite vers votre domaine, où rien ne répond.
Votre clé publique. Elle est propre à une installation, elle peut apparaître dans le code source de votre page, et elle ne donne accès à rien d’autre qu’à une nouvelle conversation. Forme attendue : wc_ suivi de 3 à 120 caractères parmi A-Z, a-z, 0-9, tiret et tiret bas. Toute autre forme et le chargeur s’arrête sans rien afficher.
Le chargeur retrouve sa propre balise, et à défaut la dernière balise portant data-cerfi-site. Le chargement asynchrone est donc sans effet sur son fonctionnement.

Coller la ligne deux fois n’affiche pas deux Cerfi : le chargeur pose un drapeau sur la fenêtre et la seconde exécution s’arrête immédiatement.

Collez-la dans le gabarit de votre site, juste avant la balise de fin de page. Le chargeur attend le document si nécessaire, mais la fin de page reste la position recommandée : elle garantit que rien de votre contenu n’est retardé.

Bouton56 px

Panneau380 × 640 px

Marge
20 px
Conteneur
380 px · max 100vw − 24 px
z-index
2147483647
Ce que la ligne ajoute à votre page, à l’échelle. Aucun autre élément n’est inséré : ni police, ni image, ni appel de mesure d’audience.

Sous 480 px de large, le conteneur occupe toute la largeur et se colle au bas de l’écran.

02Chapitre 02 sur 08

La clé et les domaines

Le domaine décide, pas la page.

Avant d’afficher quoi que ce soit, le chargeur adresse une requête à nos serveurs. Le navigateur y attache l’adresse réelle de votre page — une valeur que le code de la page ne peut pas falsifier. C’est la seule autorité : le serveur la compare à la liste des domaines de votre installation et ne délivre un jeton que si elle correspond. Sans jeton, rien n’est inséré dans votre page.

Correspond

Ce qui correspond

Correspondance exacteORIGIN-02
exemple.fr autorise exemple.fr.
Variante wwwORIGIN-03
exemple.fr et www.exemple.fr sont équivalents, dans les deux sens. La variante est ajoutée automatiquement à la création.
PortORIGIN-06
Ignoré. exemple.fr:8443 est comparé comme exemple.fr.
Ne correspond pas

Ce qui ne correspond jamais

Liste videORIGIN-01
Refusé. Une installation doit déclarer au moins un domaine.
Sous-domainesORIGIN-04
Non couverts. boutique.exemple.fr doit être inscrit séparément.
Suffixes trompeursORIGIN-05
exemple.fr.autre-site.com et faux-exemple.fr ne correspondent jamais.
Plafond

Le plafond

Nombre d’entréesORIGIN-07
Vingt au maximum ; les entrées suivantes sont écartées.

Le comparateur du serveur accepte une écriture générique de la forme *.exemple.fr, mais le champ « Domaines autorisés » du tableau de bord la refuse à l’enregistrement : une entrée qui ne commence pas par une lettre ou un chiffre est écartée en silence, et une liste qui n’en contenait que de celles-là est rejetée. En pratique : inscrivez chaque hôte en toutes lettres.

ORIGIN-04 · ORIGIN-07 · max 20

03Chapitre 03 sur 08

L’essai à blanc

Vérifier avant de poser.

Les deux champs ci-dessous exécutent, dans votre navigateur, les fonctions de comparaison utilisées par le serveur. Elles ne sont pas réécrites pour la démonstration : c’est le même module.

  • Au moins un domaine est enregistrablePRE-01
  • L’adresse se réduit à un hôte lisiblePRE-02
  • L’hôte correspond à un domaine autoriséPRE-03
  • La page est servie en HTTPSPRE-04

Ce contrôle ne consulte pas votre compte. Il ne peut donc pas savoir si votre installation est active, en pause ou révoquée — il vérifie uniquement que la forme de vos domaines et l’adresse de votre page se répondent.

04Chapitre 04 sur 08

Ce que votre site doit permettre

Rien, sauf si vous publiez une politique.

Aucune modification n’est nécessaire sur un site ordinaire. Si votre site publie un en-tête Content-Security-Policy, en revanche, il doit autoriser les quatre choses que le chargeur fait réellement — et seulement celles-là. Une politique trop stricte n’affiche aucune erreur visible : le navigateur bloque, et vous ne voyez rien.

script-srcCSP-01

Le fichier du chargeur, servi depuis notre domaine.

connect-srcCSP-02

La requête de contrôle qui valide votre domaine et délivre le jeton.

frame-srcCSP-03

Le panneau de conversation, ouvert dans un cadre isolé.

style-srcCSP-04

Le chargeur insère une feuille de style construite en mémoire. Sans autorisation, elle est écartée : le bouton existe, mais sans position ni dimension.

Rien d’autre n’est demandé : aucune police distante, aucune image externe, aucun appel de mesure d’audience.

De notre côté, déjà en place
frame-ancestorsHDR-01
Le cadre de conversation accepte d’être ouvert depuis n’importe quel site. Vous n’avez aucune liste à nous transmettre : le contrôle du domaine se fait sur le serveur, pas dans l’en-tête.
Referrer-PolicyHDR-02
Le cadre n’émet aucun référent, et le jeton voyage dans le fragment de l’adresse — jamais dans un paramètre, donc jamais dans un journal.
05Chapitre 05 sur 08

Le microphone

La voix demande une permission de plus.

Le panneau écrit fonctionne partout. La voix, elle, dépend d’une permission que seule votre page peut accorder, parce qu’elle appartient au document qui héberge le cadre.

Le chargeur délègue déjà le microphone au cadre de conversation, en nommant explicitement notre origine.

L’en-tête, tel qu’il s’écrit

Permissions-Policy: microphone=(self "https://www.cerfland.fr")

Si votre site publie un en-tête Permissions-Policy, il doit nommer notre origine, faute de quoi la délégation reste sans effet. S’il n’en publie aucun, les navigateurs appliquent leur liste par défaut — le document lui-même — et la délégation vers une autre origine n’aboutit pas non plus. La voix à l’intérieur d’un site tiers est donc un fonctionnement au mieux, et le produit ne prétend pas l’inverse.

Le panneau de Cerfi ouvert sur sa barre vocale, sur www.cerfland.fr.

La barre vocale du panneau. Capture réelle · www.cerfland.fr · 6 septembre 2026.

Contexte sécurisé

MIC-01

La capture audio n’existe que dans un contexte sécurisé. Sur une page servie en HTTP, le panneau signale une indisponibilité — il ne dit pas « bloqué », parce que ce serait faux.

Ce que dit le panneau

MIC-02

« Le microphone est bloqué » n’apparaît que sur un refus réel du visiteur. Toute autre cause affiche un message d’interruption, et la conversation se poursuit par écrit sans rien perdre.

Le diagnostic précis

MIC-03

Pour un diagnostic précis, la racine du panneau porte un attribut data-voice-fail-stage qui nomme l’étape exacte : microphone indisponible, refus, aucun périphérique, session refusée, socket interrompue.

Le bouton n’apparaît pas

MIC-04

Si le bouton « Parler » n’apparaît pas du tout, ce n’est pas l’installation : la voix est une décision de votre Maison — la surface publiée dans votre tableau de bord — croisée avec le droit à la voix de votre formule.

06Chapitre 06 sur 08

Vérifier

Une seule preuve de présence.

  1. Ouvrez une page de votre site sur un domaine autorisé. Le bouton apparaît dans le coin, du côté publié dans votre tableau de bord.

  2. Cliquez : le panneau s’ouvre. Sur un écran court, il se limite à la hauteur réellement visible.

  3. Dans votre tableau de bord, à la ligne de cette installation, « Dernière détection » se renseigne d’elle-même.

En serviceSTATE-01

Le script a été chargé depuis un domaine autorisé dans les 48 dernières heures.

VérifiéeSTATE-02

Le script a déjà été observé chez vous, mais pas dans les 48 dernières heures.

Script non détectéSTATE-03

Aucun chargement n’a jamais été observé sur un domaine autorisé.

La détection est estampillée au plus une fois toutes les cinq minutes : recharger la page une seconde fois dans ce délai ne change rien à l’affichage. C’est la seule preuve de présence dont dispose la plateforme — elle ne mesure ni votre fréquentation, ni le nombre de conversations, qui ne sont pas rattachées à une installation.

Estampille
5 min
Fenêtre « en service »
48 h
Contrôles par domaine
20 / min
Durée du jeton
10 min
07Chapitre 07 sur 08

Retirer

Quatre gestes, quatre conséquences.

Ils ne sont pas interchangeables. Deux se rattrapent, un se rattrape à condition de recoller la ligne, un est définitif.

ACT-01Réversible

Le geste

Retirer la ligne de votre gabarit

Ce qui se passe

Plus rien ne se charge. L’installation reste dans votre compte et sa dernière détection vieillit.

Retour possible

Oui — recollez la ligne.

ACT-02Réversible

Le geste

Mettre l’installation en pause

Ce qui se passe

La clé cesse de résoudre. Le chargeur ne reçoit rien et n’insère rien : ni bouton, ni bulle. La ligne peut rester dans votre page.

Retour possible

Oui — réactivez-la.

ACT-03Réversible

Le geste

Faire pivoter la clé

Ce qui se passe

Une nouvelle clé est émise et l’ancienne cesse de résoudre à la seconde même. La ligne déjà posée ne charge plus rien.

Retour possible

Oui — collez la nouvelle ligne.

ACT-04Définitif

Le geste

Révoquer l’installation

Ce qui se passe

La clé ne résout plus jamais et la ligne est conservée pour l’audit. La réactivation est refusée par le serveur.

Retour possible

Non — il faut créer une nouvelle installation.

08Chapitre 08 sur 08

Les premières pannes

Ce que vous rencontrerez d’abord.

Quatre causes couvrent la quasi-totalité des premières installations. Elles ont un point commun qui les rend déroutantes : le produit est conçu pour ne rien afficher plutôt que d’afficher un bouton mort, donc l’échec est silencieux.

  1. La cause

    Une installation est créée EN PAUSE. C’est le choix du produit : rien ne s’affiche chez vous avant que vous l’ayez décidé. Une installation révoquée, ou un compte restreint, produisent exactement le même silence — et si le cadre a eu le temps de s’ouvrir, il demande au chargeur de se retirer entièrement.

    Le geste

    Tableau de bord, Sites, votre installation : « Activer l’installation ».

    Dans le code · sites-store.ts · createInstallation → status: paused

La suite

Votre clé se trouve dans votre tableau de bord.

Chaque installation y porte sa ligne, ses domaines et son état réel. Si un point de ce document ne correspond pas à ce que vous observez, dites-le-nous : c’est le document qui a tort.

V1 · vérifié le 7 septembre 2026 · Révision E131-INSTALL-1

Installer Cerfi sur votre site — guide V1 — Maison & Manufacture CerfLand