Smart Answer: risposta IA nella ricerca del Suo sito web
Come incorporare Smart Answer: lo script suche.js, il box nel markup, l’interfaccia HTTP pubblica per le pagine di ricerca generate dal server, il flusso di risposta tramite Server-Sent Events, l’aspetto tramite variabili CSS e il passaggio alla chat.
Smart Answer mostra una breve risposta alla domanda del visitatore sopra o sotto i risultati della ricerca del Suo sito web: in streaming, con fonti dalla Sua knowledge base e un campo per la domanda successiva. Smart Answer è un servizio separato; utilizza la stessa knowledge base dell’assistente della Sua chat. Si attiva e se ne configura l’aspetto nell’account in Progetto → Smart Answer per la ricerca nel sito.
Incorporamento con suche.js
Se il caricatore della chat è già presente nella pagina, basta una riga:
<script src="https://cdn.reactive.chat/suche.js" async></script>
Senza il widget di chat, specifichi la chiave del sito:
<script src="https://cdn.reactive.chat/suche.js" data-site-key="SITE_KEY" async></script>
Lo script si collega ai campi di ricerca della Sua pagina (definiti nell’account tramite un selettore CSS), attende l’invio o una pausa nella digitazione e mostra la risposta in un box nella posizione configurata (prima, dopo o all’interno di un elemento di destinazione). Per impostazione predefinita risponde solo agli inserimenti che sembrano domande.
Attributi del tag script:
- data-site-key (facoltativo) – altrimenti viene ripreso dal caricatore della chat (
data-rc-site-key). - data-ws-url (facoltativo) – indirizzo della chat; altrimenti viene ricavato come per la chat.
- data-api (facoltativo) – indirizzo di base dell’interfaccia, valore predefinito
https://ws.reactive.chato il Suo dominio personalizzato. - data-locale (facoltativo) – lingua; altrimenti
<html lang>, poi il browser.
Lo script non imposta cookie e memorizza dati solo in sessionStorage. Per la CSP richiede script-src https://cdn.reactive.chat e connect-src https://ws.reactive.chat (Sicurezza e CSP).
Passaggio alla chat
Se il visitatore pone una domanda successiva nel box, a seconda dell’impostazione Domanda successiva, la conversazione prosegue nel widget di chat (ReactiveChat('continueConversation', id, text) o ReactiveChat('startConversation', text)) oppure riceve risposta nello stesso box. Senza il widget di chat sulla pagina, la domanda successiva rimane sempre nel box.
Aspetto
Il box (.rc-ai) dispone di un proprio CSS ed è protetto dai reset della Sua pagina. Può personalizzarlo tramite variabili con la specificità più bassa:
.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;
}
Può modificare singole parti con .rc-ai .rc-ai__teil { … } nel campo CSS personalizzato dell’account, ad esempio .rc-ai .rc-ai__hinweis { display: none; }. Lo strato protettivo non protegge dalle regole della Sua pagina con #id o !important.
Interfaccia HTTP
Per le pagine di ricerca generate dal server o le Sue interfacce è disponibile un’interfaccia pubblica senza autenticazione e senza cookie all’indirizzo https://ws.reactive.chat/api/suche/SITE_KEY.
Comune a tutti gli endpoint:
- CORS solo per le origini dei domini del Suo progetto (sottodomini inclusi); le chiamate dal Suo server senza
Originfunzionano sempre. - Limitazione: 60 richieste al minuto per indirizzo del visitatore, complessivamente per tutti gli endpoint → 429 con
Retry-AftereX-RateLimit-*. Se chiama dal Suo server, conta l’indirizzo del server: per molti visitatori usi quindisuche.jsnel browser o il dominio personalizzato con una chiave del proxy. - Domande e risposte non vengono scritte nei registri degli accessi.
GET /api/suche/SITE_KEY?locale=de – configurazione, CSS e modello vuoto del box (Cache-Control: public, max-age=60):
{"v":1,"aktiv":false}– disattivato, bloccato o sconosciuto (404 per una chiave sconosciuta).{"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 completo del box per una domanda, corpo massimo 4 KB:
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":""}– l’inserimento non è una domanda.{"v":1,"aktiv":true,"frage":true,"html":"…","css":"<style id=\"rc-ai-css\">…</style>","skript":"…","einbettung":"…"}– inseriscaeinbettungnella Sua pagina di ricerca;suche.jsriempie poi il box con la risposta.- 400
{"v":1,"error":"bad_request","field":"q"}–qmanca, è vuoto o supera i 300 caratteri. - 413
payload_too_large, 405 per qualsiasi altro metodo.
POST /api/suche/SITE_KEY/antwort – la risposta stessa come flusso Server-Sent Events, corpo massimo 8 KB:
{"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 (stringa, obbligatorio, 1–300 caratteri)
- locale (stringa, facoltativo)
- visitor_id (stringa, facoltativo,
[A-Za-z0-9_-]{1,80}) – l’ID del visitatore della chat, affinché il passaggio alla chat corrisponda. - ctx (oggetto, facoltativo) –
url,path,referrer,title; query e frammento vengono rimossi. - folge (
true, facoltativo) – domanda successiva; aggira il filtro delle domande. - vorher (lista, facoltativo) – massimo 3 coppie precedenti (
q≤ 300,a≤ 1500 caratteri).
Risposta 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. Il primo evento è sempredenkt. - text –
{text}: il testo intero visibile fino a quel momento (non una differenza), al massimo ogni 150 ms. - fertig –
{text, quellen, fortsetzung};fortsetzungè{art:"faden", id}(memorizzato come conversazione),{art:"neu"}onull. - fehler –
{code, text?}concode:aus,gesperrt,drossel,motor,zeit,einwilligung,ungueltig. Sefehlerarriva dopotext, mantenga il testo.
Dopo fertig o fehler il flusso termina. Anche gli errori prima dell’avvio arrivano come flusso con un solo fehler (HTTP 404, 429, 400, 413, 503 o 200). Se non arriva testo entro 45 secondi o il flusso non termina entro 90 secondi, segue fehler zeit. Se chiude la connessione, la risposta viene interrotta. Un proxy lungo il percorso deve inoltrare il flusso senza buffering.
// 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]));
}
}
Prosegua: Integrazione della protezione dei dati
Aġġornat l-aħħar: