
Le widget RagWeb est un Custom Element (<ragweb-search>) qui s’intègre sur n’importe quel site avec une seule ligne de code. Il utilise un Shadow DOM fermé pour une isolation CSS complète.
Essayer le widget en conditions réelles
Le widget RagWeb est déployé en production sur yannick.services. Ouvrez le site, cliquez sur le bouton de recherche en bas à droite et posez une question — vous verrez l’indexation, le streaming des réponses et les sources citées, exactement comme vos visiteurs.
Installation
Collez ce snippet avant la balise </body> de votre site :
<script src="https://www.ragweb.fr/widget/v1.js"
data-ragweb-widget
data-api-key="rw_VOTRE_CLE_API"
data-color="#2563eb"
data-position="bottom-right"
data-shape="circle"
data-icon="search"
data-lang="fr">
</script>
Astuce
Seul data-api-key est obligatoire. Tous les autres attributs ont des valeurs par défaut. Récupérez votre clé API dans l’onglet « Clés API » du dashboard.
Le widget apparaît sous forme d’un bouton flottant. Au clic, un panneau de recherche s’ouvre. La forme et l’icône du bouton sont personnalisables.
Personnalisation (data-attributes)
| Attribut | Valeur par défaut | Description |
|---|---|---|
data-api-key |
(requis) | Clé API RagWeb (commence par rw_) |
data-color |
#2563eb |
Couleur principale (bouton, accents) |
data-position |
bottom-right |
Position : bottom-right, bottom-left, top-right, middle-right |
data-shape |
circle |
Forme du bouton : circle, rounded, square, pill |
data-icon |
search |
Icône du bouton : search, chat, sparkle, help, book |
data-lang |
fr |
Langue de l’interface : fr ou en |
data-title |
« Recherche IA » | Titre affiché en haut du panneau |
data-placeholder |
« Posez votre question… » | Placeholder du champ de saisie |
data-welcome |
(vide) | Message d’accueil affiché à l’ouverture |
data-branding |
true |
Affiche « Propulsé par RagWeb » (masqué sur plans payants) |
data-stream-url |
(auto) | URL de streaming SSE (activé automatiquement) |
data-escalation-url |
(vide) | URL d’escalade vers un humain (Chatwoot, Calendly, mailto:, etc.) |
data-escalation-label |
« Parler à un humain » | Libellé du bouton d’escalade |
data-include-paths |
(vide) | Pages où afficher le widget (glob, séparées par virgule) |
data-exclude-paths |
(vide) | Pages où masquer le widget (glob, séparées par virgule) |
Formes du bouton (data-shape)
| Valeur | Rendu |
|---|---|
circle |
Cercle 56×56px (défaut) |
rounded |
Carré aux coins arrondis (14px) |
square |
Carré à angles légers (8px) |
pill |
Pilule avec le titre affiché à côté de l’icône |
La forme pill affiche automatiquement le texte de data-title à côté de l’icône, créant un bouton plus explicite pour les utilisateurs.
Icônes du bouton (data-icon)
| Valeur | Icône | Cas d’usage |
|---|---|---|
search |
Loupe | Widget de recherche classique |
chat |
Bulle de conversation | Assistant conversationnel |
sparkle |
Étoile / étincelle | Mise en avant de l’IA |
help |
Point d’interrogation | FAQ / centre d’aide |
book |
Livre ouvert | Documentation / base de connaissances |
Exemples de personnalisation
Widget vert, en bas à gauche, en anglais
<script src="https://www.ragweb.fr/widget/v1.js"
data-ragweb-widget
data-api-key="rw_xxx"
data-color="#16a34a"
data-position="bottom-left"
data-lang="en"
data-title="AI Search"
data-placeholder="Ask anything...">
</script>
Widget carré avec icône chat
<script src="https://www.ragweb.fr/widget/v1.js"
data-ragweb-widget
data-api-key="rw_xxx"
data-shape="square"
data-icon="chat"
data-title="Assistant">
</script>
Widget pilule avec icône IA
La forme pilule affiche le titre à côté de l’icône — idéal pour un bouton bien visible et explicite.
<script src="https://www.ragweb.fr/widget/v1.js"
data-ragweb-widget
data-api-key="rw_xxx"
data-shape="pill"
data-icon="sparkle"
data-color="#7c3aed"
data-title="Demander à l'IA">
</script>
Widget arrondi, icône documentation
<script src="https://www.ragweb.fr/widget/v1.js"
data-ragweb-widget
data-api-key="rw_xxx"
data-shape="rounded"
data-icon="book"
data-color="#0891b2"
data-title="Explorer la doc">
</script>
Widget avec escalade vers Calendly
<script src="https://www.ragweb.fr/widget/v1.js"
data-ragweb-widget
data-api-key="rw_xxx"
data-escalation-url="https://calendly.com/votre-lien"
data-escalation-label="Prendre rendez-vous">
</script>
Widget avec escalade vers Chatwoot
<script src="https://www.ragweb.fr/widget/v1.js"
data-ragweb-widget
data-api-key="rw_xxx"
data-escalation-url="https://app.chatwoot.com/widget?website_token=VOTRE_TOKEN"
data-escalation-label="Chat en direct">
</script>
Widget avec escalade par email
<script src="https://www.ragweb.fr/widget/v1.js"
data-ragweb-widget
data-api-key="rw_xxx"
data-escalation-url="mailto:contact@monsite.fr?subject=Question%20site"
data-escalation-label="Nous écrire">
</script>
Filtrage par pages
Contrôlez les pages où le widget apparaît avec data-include-paths et data-exclude-paths.
Syntaxe glob
| Pattern | Correspond à |
|---|---|
/docs/* |
Toutes les pages directement sous /docs/ |
/docs/** |
Toutes les pages sous /docs/ (récursif) |
/pricing |
Uniquement /pricing ou /pricing/ |
* |
Toutes les pages |
Exemples
Afficher uniquement sur la documentation :
data-include-paths="/docs/**,/help/**"
Afficher partout sauf sur le blog :
data-exclude-paths="/blog/*,/blog/**"
Afficher uniquement sur la page d’accueil et les prix :
data-include-paths="/,/pricing"
À noter
Si data-include-paths est défini, le widget n’apparaît que sur les pages correspondantes. Si seul data-exclude-paths est défini, le widget apparaît partout sauf sur les pages exclues.
Fonctionnalités du widget
Streaming temps réel
Les réponses s’affichent progressivement (effet typewriter) grâce au streaming SSE. L’utilisateur voit la réponse se construire en direct.
Multi-turn (conversation)
Le widget maintient un historique de conversation (max 6 messages). L’utilisateur peut poser des questions de suivi sans répéter le contexte.
Exemple : « Quels sont vos tarifs ? » → « Et pour le plan Pro ? » — l’IA comprend le contexte.
Reformulation intelligente
Avant chaque recherche, la question est reformulée en interne pour améliorer la pertinence (ajout de synonymes et vocabulaire professionnel).
Rendu Markdown
Les réponses supportent le formatage basique :
- Gras et italique
- Listes à puces et numérotées
- Liens cliquables
- Code inline
- Titres (niveaux 1 à 4)
Sources
Chaque réponse inclut les pages sources utilisées, avec des liens cliquables vers votre site.
Escalade vers un humain
Si configurée (data-escalation-url), un lien « Parler à un humain » apparaît sous les réponses. Compatible avec n’importe quelle URL :
| Service | Format de l’URL |
|---|---|
| Chatwoot | https://app.chatwoot.com/widget?website_token=TOKEN |
| Cal.com | https://cal.com/votre-nom |
| Calendly | https://calendly.com/votre-lien |
| Crisp | https://go.crisp.chat/chat/embed/?website_id=ID |
| Intercom | https://intercom.help/votre-app |
https://wa.me/VOTRE_NUMERO?text=Bonjour |
|
mailto:contact@monsite.fr?subject=Question |
|
| Formulaire | https://monsite.fr/contact |
N’importe quel lien HTTP ou mailto: fonctionne — le widget ouvre l’URL dans un nouvel onglet.
Configurateur visuel (dashboard)

L’onglet Widget du tableau de bord propose un configurateur interactif :
- Choisissez la couleur avec un color picker
- Sélectionnez la position
- Choisissez la forme du bouton (rond, arrondi, carré, pilule)
- Choisissez l’icône du bouton (loupe, chat, IA, aide, documentation)
- Personnalisez les textes (titre, placeholder, message d’accueil)
- Configurez l’escalade
- Définissez les filtres de pages
- Testez en direct (preview live)
- Copiez le code d’intégration généré
- Cliquez Enregistrer la configuration pour persister les choix
Compatibilité
| Plateforme | Compatible | Notes |
|---|---|---|
| HTML statique | Oui | Collez le script avant </body> |
| WordPress | Oui | Via le plugin WPCode (ex « Insert Headers & Footers ») → Footer |
| Webflow | Oui | Site Settings → Custom Code → Footer code |
| Shopify | Oui | Online Store → Themes → Edit code → Layout → theme.liquid → avant </body> |
| Next.js / React | Oui | Utilisez useEffect pour charger le script dynamiquement |
| Hugo | Oui | Dans le partial footer ou extend-footer.html |
| Astro | Oui | Dans le layout global, avant </body> |
| Wix | Oui | Settings → Custom Code → + Add Custom Code → Body - end |
| Squarespace | Oui | Settings → Advanced → Code Injection → Footer |
Exemple React / Next.js
import { useEffect } from 'react';
export default function RagWebWidget() {
useEffect(() => {
const script = document.createElement('script');
script.src = 'https://www.ragweb.fr/widget/v1.js';
script.setAttribute('data-ragweb-widget', '');
script.setAttribute('data-api-key', 'rw_VOTRE_CLE');
script.setAttribute('data-color', '#2563eb');
document.body.appendChild(script);
return () => { document.body.removeChild(script); };
}, []);
return null;
}
Note SPA (React, Vue, Angular)
Le widget fonctionne dans les Single Page Applications. Cependant, le filtrage par pages (data-include-paths / data-exclude-paths) est évalué une seule fois au chargement du script — il ne réagit pas aux navigations côté client sans rechargement de page. Si vous avez besoin d’un filtrage dynamique, montez/démontez le composant selon la route.
Poids et performance
- < 5 KB gzipped (pas de dépendance externe)
- Shadow DOM fermé : aucun conflit CSS avec votre site
- Chargement asynchrone : pas de blocage du rendu
- Aucun cookie posé, aucun tracking des visiteurs