Widget — Intégration

Intégrer et personnaliser le widget de recherche IA RagWeb sur votre site.

Widget RagWeb affichant une réponse IA avec ses sources

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
WhatsApp https://wa.me/VOTRE_NUMERO?text=Bonjour
Email 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)

Onglet Widget du dashboard — configurateur visuel du widget

L’onglet Widget du tableau de bord propose un configurateur interactif :

  1. Choisissez la couleur avec un color picker
  2. Sélectionnez la position
  3. Choisissez la forme du bouton (rond, arrondi, carré, pilule)
  4. Choisissez l’icône du bouton (loupe, chat, IA, aide, documentation)
  5. Personnalisez les textes (titre, placeholder, message d’accueil)
  6. Configurez l’escalade
  7. Définissez les filtres de pages
  8. Testez en direct (preview live)
  9. Copiez le code d’intégration généré
  10. 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