Smart Answer: web sitenizin aramasında YZ yanıtı
Smart Answer yerleştirme: suche.js betiği, sayfadaki kutu, sunucuda oluşturulan arama sayfaları için herkese açık HTTP arayüzü, Server-Sent Events yanıt akışı, CSS değişkenleriyle stil ve sohbete aktarma.
Smart Answer, web sitenizin arama sonuçlarının üstünde veya altında ziyaretçinin sorusuna kısa yanıt gösterir; akış hâlinde, bilgi tabanınızdan kaynaklarla ve sonraki soru için alanla. Smart Answer ayrı bir hizmettir; sohbet asistanınızla aynı bilgi tabanını kullanır. Hesabınızda Proje → Site içi arama için Smart Answer altında açılır ve biçimlendirilir.
suche.js ile yerleştirme
Sohbet yükleyicisi sayfada zaten varsa tek satır yeterlidir:
<script src="https://cdn.reactive.chat/suche.js" async></script>
Sohbet widget’ı olmadan site anahtarını iletin:
<script src="https://cdn.reactive.chat/suche.js" data-site-key="SITE_KEY" async></script>
Betik sayfanızın arama alanlarına bağlanır (hangileri olduğunu hesabınızda CSS seçicisiyle belirlersiniz), gönderimi veya yazmaya ara verilmesini bekler ve yanıtı yapılandırılan yerde bir kutuda gösterir (hedef öğenin öncesinde, sonrasında veya içinde). Varsayılan olarak yalnızca soru gibi görünen girişleri yanıtlar.
Script etiketindeki öznitelikler:
- data-site-key (isteğe bağlı) – aksi durumda sohbet yükleyicisinden alınır (
data-rc-site-key). - data-ws-url (isteğe bağlı) – sohbet adresi; aksi durumda sohbetteki gibi türetilir.
- data-api (isteğe bağlı) – arayüzün temel adresi; varsayılan
https://ws.reactive.chatveya özel alan adınız. - data-locale (isteğe bağlı) – dil; aksi durumda
<html lang>, ardından tarayıcı.
Betik çerez yerleştirmez, verileri yalnızca sessionStorage içinde saklar. CSP için script-src https://cdn.reactive.chat ve connect-src https://ws.reactive.chat gerekir (Güvenlik ve CSP).
Sohbete aktarma
Ziyaretçi kutuda takip sorusu sorarsa Takip sorusu ayarına bağlı olarak sohbet widget’ında devam eder (ReactiveChat('continueConversation', id, text) veya ReactiveChat('startConversation', text)) ya da aynı kutuda yanıtlanır. Sayfada sohbet widget’ı yoksa takip sorusu her zaman kutuda kalır.
Stil
Kutu (.rc-ai) kendi CSS koduyla gelir ve sayfanızın stil sıfırlamalarına karşı korunur. En düşük seçicilikte değişkenlerle düzenleyebilirsiniz:
.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;
}
Tek tek parçaları hesabınızdaki Özel CSS alanında .rc-ai .rc-ai__teil { … } ile değiştirirsiniz; örneğin .rc-ai .rc-ai__hinweis { display: none; }. Koruyucu katman, sayfanızdaki #id veya !important içeren kurallara karşı korumaz.
HTTP arayüzü
Sunucuda oluşturulan arama sayfaları veya kendi arayüzleriniz için kimlik doğrulamasız ve çerezsiz, herkese açık arayüzün adresi: https://ws.reactive.chat/api/suche/SITE_KEY.
Tüm uç noktalar için ortak:
- CORS yalnızca projenizin alan adlarındaki kaynaklar için (alt alan adları dâhil); sunucunuzdan
Originolmadan yapılan çağrılar her zaman çalışır. - Hız sınırlama: Tüm uç noktalarda dakika ve ziyaretçi adresi başına 60 istek →
Retry-AfterveX-RateLimit-*ile 429. Sunucunuzdan çağırırsanız sunucunuzun adresi sayılır; çok sayıda ziyaretçi için tarayıcıdasuche.jsveya proxy anahtarıyla özel alan adını kullanın. - Sorular ve yanıtlar erişim günlüklerine yazılmaz.
GET /api/suche/SITE_KEY?locale=de – kutunun yapılandırması, CSS kodu ve boş şablonu (Cache-Control: public, max-age=60):
{"v":1,"aktiv":false}– kapalı, engellenmiş veya bilinmiyor (bilinmeyen anahtar için 404).{"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 – soru için kutunun hazır HTML kodu; gövde en fazla 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":""}– giriş soru değil.{"v":1,"aktiv":true,"frage":true,"html":"…","css":"<style id=\"rc-ai-css\">…</style>","skript":"…","einbettung":"…"}–einbettungdeğerini arama sayfanıza yerleştirin;suche.jskutuyu yanıtla doldurur.- 400
{"v":1,"error":"bad_request","field":"q"}–qeksik, boş veya 300 karakterden uzun. - 413
payload_too_large; diğer tüm yöntemlerde 405.
POST /api/suche/SITE_KEY/antwort – yanıtın kendisi Server-Sent Events akışı olarak; gövde en fazla 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 (dize, zorunlu, 1–300 karakter)
- locale (dize, isteğe bağlı)
- visitor_id (dize, isteğe bağlı,
[A-Za-z0-9_-]{1,80}) – sohbete aktarmanın eşleşmesi için sohbet ziyaretçisinin kimliği. - ctx (nesne, isteğe bağlı) –
url,path,referrer,title; sorgu ve çapa kaldırılır. - folge (
true, isteğe bağlı) – takip sorusu; soru filtresini atlar. - vorher (liste, isteğe bağlı) – en fazla 3 önceki çift (
q≤ 300,a≤ 1.500 karakter).
Yanıt 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. İlk olay her zamandenkt. - text –
{text}: o ana kadar görünen metnin tamamı (fark değil), en fazla her 150 ms’de bir. - fertig –
{text, quellen, fortsetzung};fortsetzungdeğeri{art:"faden", id}(sohbet olarak saklanır),{art:"neu"}veyanullolur. - fehler –
codeile{code, text?}:aus,gesperrt,drossel,motor,zeit,einwilligung,ungueltig.fehler,textsonrasında gelirse metni yerinde bırakın.
fertig veya fehler sonrasında akış biter. Başlamadan önceki hatalar da tam olarak bir fehler içeren akış olarak gelir (HTTP 404, 429, 400, 413, 503 veya 200). 45 saniye sonra metin yoksa veya 90 saniye sonra bitiş yoksa fehler zeit gelir. Bağlantıyı kapatırsanız yanıt iptal edilir. Yol üzerindeki proxy akışı arabelleğe almadan iletmelidir.
// 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]));
}
}
Sonraki: Gizlilik entegrasyonu
Utolsó frissítés: