Collez l'adresse de votre boutique sur la page d'accueil d'Emporiqa, et environ dix secondes plus tard vous voyez le widget de chat, à vos couleurs, posé sur une capture de votre propre vitrine, à côté de trois questions qu'un acheteur pourrait poser sur les produits que vous vendez. Cet article explique comment cet aperçu est construit, les cas d'abus que nous avons dû gérer avant de le lancer, et la règle de conception qui sous-tend tout le produit : le chatbot répond uniquement à partir des données synchronisées de la boutique, il ne peut donc inventer ni un prix, ni un niveau de stock, ni une politique de retour.
La crainte qui a façonné l'architecture
Quand je parle d'IA conversationnelle avec des commerçants, le prix n'est jamais la première objection. La première objection porte sur la sécurité de la marque : « et s'il promet à un client une réduction qui n'existe pas ? ». C'est une crainte légitime. Un modèle de langage interrogé sur un délai de retour produira une réponse assurée, qu'il en connaisse un ou non.
Le produit traite donc cela comme la contrainte de conception principale, pas comme une note de bas de page. Chaque réponse doit pouvoir se rattacher à quelque chose que la boutique nous a fourni.
Le pipeline de grounding
Chaque plateforme prise en charge (WooCommerce, Magento, PrestaShop, Drupal Commerce, Sylius) dispose d'un module officiel sur sa marketplace. Le module nous transmet les données de catalogue et de politiques via des webhooks signés : HMAC sur chaque payload, aucune clé API stockée dans la boutique. Tout le traitement s'exécute sur nos serveurs, jamais dans la vitrine du marchand.
Quand un acheteur pose une question, le retrieval s'exécute uniquement sur les données propres à cette boutique, en combinant recherche lexicale et sémantique. L'étape de génération est contrainte à ce que le retrieval a renvoyé. Trois conséquences découlent de cette seule règle :
- Aucun produit ni prix inventé. Le modèle ne peut recommander que des articles issus du propre catalogue de la boutique, au prix que porte ce catalogue.
- Aucune politique inventée. Les réponses sur la livraison et les retours viennent des pages synchronisées de la boutique. Un code promo que le système n'a jamais reçu est un code promo qu'il ne peut pas proposer.
- Un mode d'échec transparent. Quand le retrieval ne renvoie rien de fiable, le chatbot dit qu'il ne sait pas et propose de passer la main. Votre équipe reçoit la conversation complète, le panier de l'acheteur, et la question qui l'a bloqué.
Comment l'aperçu se construit en dix secondes
L'outil d'aperçu condense tout l'argument en une seule interaction : voyez-le sur votre boutique avant d'installer quoi que ce soit. Le pipeline derrière :
- Capture d'écran sur une infrastructure tierce. Nous ne récupérons jamais nous-mêmes l'URL que vous collez. Une API de capture d'écran (ScreenshotOne) affiche la page d'accueil publique sur son propre réseau et renvoie un JPEG. Cette seule décision élimine toute la classe des attaques SSRF : une URL collée ne peut jamais atteindre notre réseau interne, parce que rien de ce que nous exécutons ne s'y connecte.
- Un modèle de vision lit l'image. Il propose le nom court de la boutique, sa catégorie de produits, et trois questions que des acheteurs poseraient, dans la langue du visiteur, en faisant référence à des produits visibles sur la capture. Les résultats faibles sont écartés plutôt qu'affichés : si les trois questions ne passent pas un filtre strict (longueur, langue, unicité), la section reste masquée.
- Extraction de marque. La couleur de marque dominante est extraite de la capture, de sorte que l'aperçu du widget s'affiche dans la palette propre de la boutique plutôt que dans la nôtre.
- Un filtre « est-ce bien une boutique ». Le modèle de vision répond aussi à une dernière question : s'agit-il seulement d'une boutique en ligne ? Si la réponse est clairement non (un site d'actualités, une landing page SaaS, la blague de quelqu'un), aucune page n'est publiée. Nous le disons alors clairement au visiteur.
Juste sous la capture, la page d'aperçu précise qu'elle a été générée à partir de la page d'accueil publique et que les réponses en direct viennent d'un catalogue de démonstration tant que la boutique n'est pas connectée. En surpromettre ici détruirait exactement la confiance que cet outil doit construire.
Ce que les tests de charge nous ont appris
Un formulaire public qui coûte de l'argent à chaque envoi (un rendu de capture plus un appel au modèle de vision) attire trois types de problèmes : les bots, les farceurs, et nos propres bugs. Les défenses sont en couches : un champ honeypot, un piège temporel signé qui rejette les envois plus rapides qu'un humain ne pourrait taper, des limites de débit par IP qui ne comptent que les envois capables de consommer du quota, et une vérification sans CAPTCHA en plus.
Le meilleur bug était le nôtre. La page d'accueil transmet votre URL à la page d'aperçu, qui s'envoie automatiquement dès que la vérification anti-bot délivre un jeton. Sur des connexions rapides, ce jeton arrivait en moins de trois secondes, plus vite que ce que le piège temporel autorise pour un humain. Le système classait alors poliment nos visiteurs les plus motivés comme des robots et avalait leur demande. Le correctif tenait en une ligne : l'envoi automatique attend désormais la fin de la fenêtre du piège. Si vous construisez une détection de bots basée sur le temps, gardez en tête que votre propre automatisation est aussi plus rapide qu'un humain.
Ce qu'il ne fait délibérément pas
- Pas d'application Shopify. Priorité délibérée aux plateformes auto-hébergées. J'ai passé 15+ ans dans l'univers Drupal et Symfony d'où viennent ces plateformes, et elles représentent la moitié de l'e-commerce que la vague d'outils IA a largement ignorée. Une API webhook publique existe pour tout le reste.
- Aucun entraînement sur les données clients, zéro rétention sur les appels au modèle, et l'historique de chat est conservé pendant 90 jours fixes. Nous sommes une société européenne et nous publions nos sous-traitants ; nous ne revendiquons pas d'hébergement dans l'UE, parce que ce ne serait pas vrai.
- Aucune réponse tirée de la mémoire du modèle. C'est tout l'intérêt. Si ce n'est pas dans vos données synchronisées, le chatbot préfère passer la main plutôt que de deviner.
Essayer
Collez l'adresse de votre boutique sur la page d'accueil et voyez l'aperçu sur votre propre vitrine. Rien n'est installé ni modifié, et la page est supprimée sur demande.
Vous préférez tester le comportement en direct d'abord ? Essayez la boutique de démonstration et posez une question difficile, comme « des écouteurs sans fil à moins de 100 $ pour courir, et s'ils tombent en panne au bout d'un mois ? ». La démo est une boutique d'électronique bien fournie ; connectée à votre boutique, elle répond à partir de votre catalogue, avec 25 $ de crédit d'inscription et sans carte à l'inscription.