Smart Answer : réponse IA dans la recherche de votre site
Intégrez Smart Answer : script suche.js, encadré dans le balisage, interface HTTP publique pour les pages de recherche rendues côté serveur, flux de réponse Server-Sent Events, variables CSS et transfert au chat.
Smart Answer affiche une courte réponse à la question du visiteur au-dessus ou au-dessous des résultats de recherche de votre site, transmise en continu, avec des sources issues de votre base de connaissances et un champ pour la question suivante. Smart Answer est un service distinct ; il utilise la même base de connaissances que votre assistant de chat. Vous l’activez et définissez son apparence dans votre compte sous Projet → Smart Answer pour la recherche sur le site.
Intégration avec suche.js
Si le chargeur du chat figure déjà sur la page, une ligne suffit :
<script src="https://cdn.reactive.chat/suche.js" async></script>
Sans le widget de chat, transmettez la clé de site :
<script src="https://cdn.reactive.chat/suche.js" data-site-key="SITE_KEY" async></script>
Le script se rattache aux champs de recherche de votre page (vous les définissez dans votre compte avec un sélecteur CSS), attend l’envoi ou une pause dans la saisie, puis affiche la réponse dans un encadré à l’emplacement configuré (avant, après ou à l’intérieur d’un élément cible). Par défaut, il répond uniquement aux saisies qui ressemblent à une question.
Attributs de la balise script :
- data-site-key (facultatif) – sinon repris du chargeur du chat (
data-rc-site-key). - data-ws-url (facultatif) – adresse du chat ; sinon déduite comme pour le chat.
- data-api (facultatif) – adresse de base de l’interface, par défaut
https://ws.reactive.chatou votre domaine personnalisé. - data-locale (facultatif) – langue ; sinon
<html lang>, puis celle du navigateur.
Le script ne définit aucun cookie et ne stocke des données que dans sessionStorage. Pour la CSP, il nécessite script-src https://cdn.reactive.chat et connect-src https://ws.reactive.chat (Sécurité et CSP).
Transfert au chat
Si le visiteur pose une question de suivi dans l’encadré, selon le réglage Question de suivi, la conversation se poursuit dans le widget de chat (ReactiveChat('continueConversation', id, text) ou ReactiveChat('startConversation', text)) ou reçoit une réponse dans le même encadré. Sans widget de chat sur la page, la question de suivi reste toujours dans l’encadré.
Mise en forme
L’encadré (.rc-ai) fournit son propre CSS et est protégé contre les réinitialisations de style de votre page. Vous pouvez l’adapter via des variables de spécificité minimale :
.rc-ai {
--rc-ai-akzent: #0a7cff;
--rc-ai-hg: var(--karte, #fff);
--rc-ai-text: #1d1d1f;
--rc-ai-rand: #e3e3e8;
--rc-ai-radius: 10px;
--rc-ai-schrift: inherit;
--rc-ai-abstand: 20px;
--rc-ai-schriftgroesse: 16px;
--rc-ai-zeilenhoehe: 1.6;
}
Vous modifiez les éléments individuels avec .rc-ai .rc-ai__teil { … } dans le champ CSS personnalisé de votre compte, par ex. .rc-ai .rc-ai__hinweis { display: none; }. La couche de protection ne protège pas contre les règles de votre page utilisant #id ou !important.
Interface HTTP
Pour les pages de recherche rendues côté serveur ou vos propres interfaces, une interface publique sans authentification ni cookies est disponible sous https://ws.reactive.chat/api/suche/SITE_KEY.
Points communs à tous les points de terminaison :
- CORS uniquement pour les origines des domaines de votre projet (sous-domaines inclus) ; les appels de votre serveur sans
Originfonctionnent toujours. - Limitation de fréquence : 60 requêtes par minute et par adresse de visiteur pour l’ensemble des points de terminaison → 429 avec
Retry-AfteretX-RateLimit-*. Si vous appelez depuis votre serveur, son adresse est comptée ; pour de nombreux visiteurs, utilisez doncsuche.jsdans le navigateur ou le domaine personnalisé avec une clé de proxy. - Les questions et les réponses ne sont pas écrites dans les journaux d’accès.
GET /api/suche/SITE_KEY?locale=de – configuration, CSS et modèle vide de l’encadré (Cache-Control: public, max-age=60) :
{"v":1,"aktiv":false}– désactivé, bloqué ou inconnu (404 pour une clé inconnue).{"v":1,"aktiv":true,"sprache":"de","konfig":{…},"css":"…","vorlage":"<div class=\"rc-ai\" …>","skript":"https://cdn.reactive.chat/suche.js"}
POST /api/suche/SITE_KEY – HTML complet de l’encadré pour une question, corps de 4 KB maximum :
curl -s -X POST "https://ws.reactive.chat/api/suche/SITE_KEY" \
-H "Content-Type: application/json" \
-d '{"q":"How long does shipping take?","locale":"en"}'
{"v":1,"aktiv":true,"frage":false,"html":""}– la saisie n’est pas une question.{"v":1,"aktiv":true,"frage":true,"html":"…","css":"<style id=\"rc-ai-css\">…</style>","skript":"…","einbettung":"…"}– placezeinbettungdans votre page de recherche ;suche.jsremplit ensuite l’encadré avec la réponse.- 400
{"v":1,"error":"bad_request","field":"q"}–qest absent, vide ou dépasse 300 caractères. - 413
payload_too_large, 405 pour toute autre méthode.
POST /api/suche/SITE_KEY/antwort – la réponse elle-même sous forme de flux Server-Sent Events, corps de 8 KB maximum :
{"q":"How long does shipping take?","locale":"en",
"visitor_id":"v_…",
"ctx":{"url":"https://shop.example/search","title":"Search"},
"folge":false,
"vorher":[{"q":"…","a":"…"}]}
- q (chaîne, obligatoire, 1–300 caractères)
- locale (chaîne, facultatif)
- visitor_id (chaîne, facultatif,
[A-Za-z0-9_-]{1,80}) – l’identifiant du visiteur du chat, pour que le transfert au chat corresponde. - ctx (objet, facultatif) –
url,path,referrer,title; les paramètres de requête et l’ancre sont supprimés. - folge (
true, facultatif) – question de suivi ; contourne le filtre de questions. - vorher (liste, facultatif) – au maximum 3 paires antérieures (
q≤ 300,a≤ 1500 caractères).
Réponse text/event-stream :
event: status
data: {"stufe":"denkt"}
event: text
data: {"text":"Shipping usually takes"}
event: fertig
data: {"text":"Shipping usually takes 2–3 working days.","quellen":[{"titel":"Shipping","url":"https://shop.example/shipping"}],"fortsetzung":{"art":"faden","id":"01J…"}}
- status –
{stufe}:denkt,sucht,schreibt,wartet. Le premier événement est toujoursdenkt. - text –
{text}: le texte entier visible jusqu’à présent (pas un delta), au plus toutes les 150 ms. - fertig –
{text, quellen, fortsetzung};fortsetzungvaut{art:"faden", id}(stocké comme conversation),{art:"neu"}ounull. - fehler –
{code, text?}aveccode:aus,gesperrt,drossel,motor,zeit,einwilligung,ungueltig. Sifehlerarrive aprèstext, conservez le texte affiché.
Après fertig ou fehler, le flux se termine. Les erreurs avant le démarrage arrivent aussi sous forme de flux avec exactement un fehler (HTTP 404, 429, 400, 413, 503 ou 200). Sans texte après 45 secondes ou sans fin après 90 secondes, fehler zeit est envoyé. Si vous fermez la connexion, la réponse est interrompue. Un proxy sur le trajet doit transmettre le flux sans mise en tampon.
// read the stream in the browser (EventSource cannot POST)
const r = await fetch('https://ws.reactive.chat/api/suche/SITE_KEY/antwort', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ q: frage, locale: 'en' }), credentials: 'omit'
});
const leser = r.body.getReader(); const dec = new TextDecoder(); let puffer = '';
for (;;) {
const { value, done } = await leser.read(); if (done) break;
puffer += dec.decode(value, { stream: true });
let i; while ((i = puffer.indexOf('\n\n')) >= 0) {
const block = puffer.slice(0, i); puffer = puffer.slice(i + 2);
const ev = /^event: (.*)$/m.exec(block), da = /^data: (.*)$/m.exec(block);
if (ev && da) zeige(ev[1], JSON.parse(da[1]));
}
}
Dernière mise à jour: