Pour les curieux et les équipes techniques : le chemin d’une question, de vos pages WordPress à la réponse affichée dans le chat, et les choix qui la rendent fiable, rapide et respectueuse des données.
Trois pièces et une IA
- L’extension WordPress, en PHP. Elle affiche le chat avec un shortcode, signale chaque publication à DigiSeer et lui transmet, avec une clé, le contenu de vos pages : texte, catégories, champs ACF et données SEO.
- L’API, en TypeScript avec Bun et Elysia, sur une base PostgreSQL. Elle indexe vos pages, cherche les passages utiles, fait rédiger la réponse et compte les tokens.
- L’app, en Angular. C’est le chat que voient vos visiteurs, et l’espace où vous réglez tout : textes, styles, statistiques, utilisateurs.
- Mistral AI, l’IA française, appelée sur son point d’accès européen : un modèle pour représenter le sens des textes, un autre pour rédiger les réponses.
Un service à part,
pour un WordPress léger
L’index sur notre API, pas dans votre base WordPress
- Votre hébergement n’a pas les bons outils. La recherche par le sens demande une base capable de comparer des vecteurs (PostgreSQL et pgvector), et une recherche plein texte qui ramène les mots à leur racine dans plusieurs langues. Un hébergement WordPress, avec MySQL ou MariaDB, n’en dispose pas : il faudrait l’installer, le régler et le surveiller sur chaque site.
- Votre site ne travaille pas. Indexer une page, c’est la découper, calculer ses vecteurs et la résumer avec l’IA ; répondre, c’est chercher puis rédiger. Tout ce calcul se fait sur nos serveurs, pas sur votre hébergement : votre site garde sa vitesse.
- Aucune clé d’IA chez vous. Les appels à Mistral AI partent de notre API. Aucune clé secrète n’est stockée dans votre WordPress : rien à protéger ni à renouveler.
- Rien n’est perdu. Vos contenus restent dans WordPress, qui reste la source. L’index n’en est qu’une copie de travail : il se reconstruit à tout moment avec « Tout indexer ». DigiSeer ne lit que vos contenus publiés et publics, jamais les brouillons ni les contenus privés.
- Vos données sont protégées. Hébergées en France (Scaleway), réponses rédigées par Mistral AI dans l’Union européenne, adresses IP des visiteurs jamais enregistrées en clair : le détail est dans Protéger les données. Si vous désinstallez l’extension, les données de votre site sont effacées 60 jours plus tard.
- La contrepartie. Le chat a besoin de notre service. S’il est momentanément indisponible, le chat affiche un message de secours ; votre site, lui, n’est pas touché.
Une application, pas une extension lourde
- Une extension légère. L’extension DigiSeer fait environ 70 Ko. Elle relie votre site à DigiSeer, prévient quand un contenu change, crée la page de recherche, et c’est tout.
- Les nouveautés sans mise à jour. Le chat et l’interface d’administration sont une application (Angular) servie par app.digiseer.app et affichée dans votre WordPress. Chaque nouvelle version vous arrive le jour même, sans mise à jour d’extension à faire ni risque de casser votre site.
- Une application légère. Toute l’application, chat et administration compris, tient en un fichier d’environ 1 Mo, le poids d’une photo.
- Téléchargée une fois, puis gardée en cache. À la première visite, le navigateur télécharge l’application : l’affichage prend quelques instants. Ses fichiers portent une empreinte de version dans leur nom et le navigateur les garde un an ; aux visites suivantes, il ne revérifie qu’une petite page d’entrée, et l’application s’affiche presque instantanément. À chaque nouvelle version, seuls les fichiers modifiés sont téléchargés, une seule fois.
- Pas de conflit avec votre thème. L’application est isolée dans un cadre (voir Afficher le chat). Dans les pages de votre site, l’extension n’ajoute que quelques règles CSS, toutes sur des classes préfixées
dsi-(bouton, fenêtre plein écran) : elles ne touchent votre thème que pendant l’ouverture du chat en plein écran, pour passer au-dessus de son en-tête. Dans l’application, chaque composant a ses propres styles, isolés par Angular, sur des classes préfixéesds_. - Moins de code chez vous, moins de failles. La plus grande partie du code tourne sur nos serveurs, que nous mettons à jour et surveillons nous-mêmes.
1. Indexer vos pages
Quand vous publiez, modifiez ou supprimez un contenu, l’extension prévient l’API en fin de requête, sans ralentir votre site. L’API lit alors la page par l’extension elle-même, avec ses catégories, ses champs ACF et ses données SEO, même si l’API REST de WordPress est coupée.
- Un texte par page. L’API assemble pour chaque page un nouveau texte, qui réunit tout ce qui la décrit, dans cet ordre : ses données SEO (titre, méta-description et expression clé de Yoast SEO, Rank Math, All in One SEO, SEOPress ou The SEO Framework, libellés dans la langue de la page), son contenu, ses catégories et taxonomies (« Catégories : Aides > Logement »), puis ses champs ACF. C’est ce texte qui est découpé, traduit en vecteurs et indexé ; l’œil de la page Indexation le montre tel quel.
- Nettoyage. Le HTML devient du texte : scripts, styles et shortcodes non interprétés sont retirés. Les tableaux gardent la correspondance entre chaque valeur, sa ligne et sa colonne.
- Découpage. Le texte est coupé en passages, phrase par phrase, avec un léger chevauchement pour ne pas couper une idée en deux.
- Sens. Chaque passage, précédé du titre de la page, est traduit en vecteur, une suite de nombres qui représente son sens. Deux textes qui disent la même chose ont des vecteurs proches, même avec des mots différents.
- Mots. PostgreSQL indexe aussi le texte mot à mot, dans la langue de la page, avec plus de poids pour le titre et les mots-clés. En sept langues, les mots sont ramenés à leur racine (« tarifs » trouve « tarif », « indexer » trouve « indexé ») ; dans les autres, ce sont les mots exacts, et la recherche par le sens prend le relais.
- Résumé. Un modèle de Mistral AI écrit un court résumé et cinq mots-clés par page : ce sont les mots-clés proposés sous les réponses pour rebondir.
Une page inchangée n’est pas recalculée : aucun token consommé. Et l’ancien index reste en place tant que le nouveau n’est pas complet.
2. Trouver les bons passages
À chaque question, deux recherches partent en parallèle : par le sens (distance entre vecteurs, avec pgvector) et par les mots (recherche plein texte de PostgreSQL). Leurs résultats sont fusionnés : un passage proche par le sens qui contient aussi les mots de la question passe devant.
- Seuil de pertinence. Les passages trop éloignés de la question sont écartés. Le seuil a été calibré sur de vraies questions, utiles et hors sujet, et vous pouvez le rendre plus souple ou plus strict.
- Plusieurs pages plutôt qu’une. Les résultats montrent une ligne par page, et la réponse s’appuie sur plusieurs pages plutôt que sur cinq morceaux de la même ; seule la page la plus proche de la question peut apporter un 2e passage.
- Questions de suivi. « Et pour les tarifs ? » est réécrite en question complète à partir des derniers échanges, gardés dans le navigateur du visiteur et non sur nos serveurs.
- Fautes de frappe. Si rien n’est trouvé pour une question courte, ses mots sont rapprochés du vocabulaire de votre site, et le chat affiche « Résultats pour… ».
- Plusieurs langues. Une question posée dans une autre langue que vos pages est traduite par l’IA en deux formulations, avec des mots différents (prix, tarif, coût…) ; les deux sont cherchées et chaque page garde son meilleur score. Les pages dans la langue du chat passent en premier, puis les autres ; la traduction d’une page est préférée à l’original quand elle existe.
- Questions de prix. « Combien ça coûte ? » est aussi cherchée avec les mots des pages de tarifs (prix, tarifs, formules), sans appel à l’IA : les mots « coûte » ou « combien » sont rarement ceux de la page.
3. Rédiger la réponse
Les quatre passages les plus proches de la question, pris dans trois pages au plus, et un 2e passage de la page la plus proche sont confiés à un modèle de Mistral AI avec des consignes strictes : répondre uniquement à partir de ces passages, dans la langue du visiteur, sans rien inventer. Si les passages ne suffisent pas, le chat le dit, et la question rejoint la liste des questions sans réponse de votre tableau de bord.
- Des liens sûrs. L’IA ne peut pas inventer d’adresse : chaque lien de la réponse pointe vers une page de votre site.
- Au fil de l’eau. La réponse s’affiche pendant sa rédaction, sans attendre la fin.
- Vos réglages. Longueur (cinq niveaux), ton (six), tutoiement ou vouvoiement et vos consignes s’ajoutent aux règles de DigiSeer, qui restent prioritaires.
- Pas d’IA pour rien. Une saisie sans sens, ou une question sans passage assez proche, ne déclenche aucun appel au modèle.
Les tokens facturés sont ceux que compte Mistral pour chaque réponse. Le coût de la réécriture d’une question de suivi voyage dans un ticket signé par l’API : le navigateur ne peut pas le modifier.
4. Afficher le chat
Le shortcode [DigiSeer] insère le chat dans une iframe : il ne dépend ni de votre thème ni de vos autres extensions, et votre page reste légère. L’iframe et la page échangent de courts messages (postMessage) pour la hauteur du chat, le défilement pendant la réponse, le retour en haut de page et le plein écran. Chaque message est vérifié : il doit venir de la bonne fenêtre et de la bonne origine.
Aucun cookie n’est déposé chez vos visiteurs ; l’historique de la conversation reste dans leur navigateur.
5. Protéger les données
- Adresses IP. Jamais enregistrées en clair : seule une empreinte (HMAC-SHA256) propre à chaque site et à chaque mois est gardée, ce qui empêche de suivre un visiteur d’un site à l’autre ou d’un mois à l’autre. Elle est effacée après 13 mois.
- Questions. E-mails, numéros de téléphone et longues suites de chiffres (IBAN, carte, sécurité sociale) sont masqués avant l’enregistrement.
- Clés. La clé qui relie votre site à DigiSeer est tirée au hasard (256 bits) et comparée en temps constant.
- Lecture de votre site. L’API ne lit que des adresses publiques en http(s), vérifie chaque redirection et refuse les adresses internes (protection contre les attaques SSRF).
- Abus. Le nombre de requêtes est limité par adresse et par minute, et le nombre de questions par visiteur et par jour se règle dans l’app.
- Cloisonnement. Le chat d’un site ne peut lire que les documents de ce site.
Où sont les données et combien de temps elles sont gardées : voir Sécurité et confidentialité.
6. Fiabilité : notre façon de travailler
Un assistant qui répond à vos visiteurs doit rester juste et disponible. Voici les règles que nous appliquons à chaque modification.
DigiSeer en chiffres
- Plus de 300 tests automatiques, lancés avant chaque mise en ligne.
- 27 langues comprises par le chat.
- Une documentation complète : plus de 30 sous-rubriques, en français et en anglais.
- Des sauvegardes chaque nuit, chiffrées, avec un test de restauration chaque mois.
- Une surveillance du serveur toutes les 5 minutes.
Écrire le code
- Contrôle de version. Tout le code (API, app, extension, site) vit dans un dépôt Git privé : chaque changement est décrit, relu et réversible.
- Typage strict. API et app en TypeScript strict : une erreur de type est arrêtée à la compilation, avant d’arriver chez vous.
- Base versionnée. Chaque évolution du schéma est une migration numérotée, écrite pour ajouter sans casser l’existant.
- Revue de code. Relectures complètes, sécurité en tête : droits d’accès, limites de requêtes, données personnelles.
Tester
- Près de 300 tests automatiques. Recherche, liens des réponses, langues, droits d’accès, confidentialité, facturation, pannes des services extérieurs.
- Base de test. Chaque évolution est essayée en local, sur une copie de la production, avec les paiements Stripe en mode test.
- Données fictives. Captures, démonstrations et tests utilisent un compte fictif, jamais les données de nos clients.
Mettre à jour
- Sans coupure. L’API est mise à jour sans interrompre le chat de vos visiteurs.
- Retour arrière. Chaque mise à jour est relue avant d’être appliquée et peut être annulée ; une copie restaurable du code précède chaque modification.
- Version visible. Un numéro de version, en bas de l’espace d’administration et joint à vos demandes d’assistance.
Faire tourner
- Conteneurs. L’API tourne dans un conteneur Docker (image officielle de Bun, dépendances de production seulement) : le même environnement à chaque mise à jour.
- Redémarrage automatique. PM2 relance l’API si elle s’arrête ; Docker relance le conteneur, même après un redémarrage du serveur.
- Contrôle de santé. Docker vérifie toutes les 30 secondes que l’API répond.
- Journaux, secrets, réseau. Journaux hors du conteneur (30 jours), clés et mots de passe hors du code, services reliés par un réseau privé.
Surveiller
- Toutes les 5 minutes. Mémoire, disque, processeur, réponses de l’API et du site ; un rapport de santé complet nous arrive chaque matin.
- Surveillance extérieure. Une alerte part même si le serveur entier s’arrête.
- Service dégradé, jamais muet. Si l’IA, les e-mails, les paiements ou la connexion ne répondent plus, l’app l’explique, et le chat propose les pages qui correspondent à la question.
Protéger et améliorer
- Sauvegardes. Chiffrées chaque nuit, conservées hors du serveur, en France ; des restaurations d’essai vérifient qu’elles sont utilisables.
- Amélioration continue. Les questions sans réponse et les avis 👍 / 👎 de vos visiteurs nous montrent quoi améliorer ; les nouveautés sont publiées dans l’app.
La pile technique
| Rôle | Choix |
|---|---|
| Extension WordPress | PHP, sans dépendance |
| API | TypeScript, Bun, Elysia |
| Base de données | PostgreSQL, pgvector, recherche plein texte, Drizzle ORM |
| Application et chat | Angular |
| IA | Modèles de Mistral AI, point d’accès européen |
| Langue des pages | franc, détection locale, sans appel à une IA |
| Hébergement | Scaleway, France |
| Paiement | Stripe |
Les outils open source qu’on aime bien
DigiSeer repose sur des logiciels libres. Ceux-là, on les recommande sans hésiter :
- PostgreSQL et pgvector. Une seule base pour les données, la recherche plein texte et la recherche par le sens : pas de moteur de recherche à part à maintenir.
- Bun. Démarrage instantané, TypeScript sans étape de compilation, et un lanceur de tests intégré.
- Elysia. Un serveur web rapide, typé de bout en bout : chaque donnée qui entre dans l’API est validée.
- Drizzle ORM. Des requêtes SQL typées, lisibles, sans magie.
- Angular. Ses signals rendent le chat réactif sans complexité inutile.
- WordPress. Évidemment : ses hooks rendent l’indexation automatique possible.
- franc. Il reconnaît la langue d’un texte en local, sans appel à une IA.
- marked et pdf-lib. L’un met en forme la documentation, l’autre produit les relevés de consommation en PDF.
- Puppeteer. Les captures d’écran de la documentation sont refaites automatiquement, avec le compte de démonstration.
Merci à leurs auteurs et à leurs contributeurs.
Une question technique ? Écrivez-nous.