Vlastní komponenty
Sestavte zprávy, karty citací, výzvy, prázdné stavy a ovládací prvky ze svých vlastních komponent React.
Propojte komponenty React s ChattyBox pomocí @openstaticfish/chattybox. Váš tým řídí vykreslování a stav, zatímco spravovaná infrastruktura zajišťuje odpovědi založené na zdrojích, citace a seskupování konverzací.
ChattyBox prochází váš stávající web, dokumentaci, centrum nápovědy, CMS nebo znalostní bázi a poté vloží chatbota, který odpovídá na základě vašeho publikovaného obsahu, nikoli obecné paměti modelu.
Nainstalujte JavaScript SDK do své aplikace React.
Vytvořte jednoho klienta Chattybox mimo cestu vykreslování komponenty.
Odesílejte zprávy z obsluhy události a aktualizujte stav UI pomocí odpovědi.
Vykreslete odkazy na zdroje a ošetřete strukturovaná selhání ChattyboxError.
Spuštění ve třech krocích
Namísto přizpůsobování se pevnému obalu widgetu použijte vzory pro stav, přístupnost, stylování a design systém, které vaše aplikace už využívá.
Pomocí těchto kontrolních bodů se můžete rozhodnout, zda má ChattyBox sedět vedle vaší platformy dokumentů, nahradit samostatného asistenta nebo zůstat izolovaný pro testování.
Sestavte zprávy, karty citací, výzvy, prázdné stavy a ovládací prvky ze svých vlastních komponent React.
Použijte lokální stav nebo svou stávající stavovou vrstvu a současně udržujte konverzace jednotlivých návštěvníků oddělené.
Ovládejte ve své aplikaci fokus, živé oblasti, chování klávesnice a oznamování chyb.
Integrace v prohlížeči zůstává malá, zatímco ChattyBox zajišťuje indexování obsahu, vyhledávání a odpovědi s citacemi.
Vytvořte klienta jednou, volejte ho z obsluhy události a uchovávejte ID konverzace každého návštěvníka ve stavu komponenty nebo aplikace.
import { useState, type FormEvent } from 'react';
import { Chattybox, ChattyboxError, type ChatResponse } from '@openstaticfish/chattybox';
// Vite browser example. Other frameworks use different public environment APIs.
const chattybox = new Chattybox({
apiKey: import.meta.env.VITE_CHATTYBOX_API_KEY,
baseUrl: import.meta.env.VITE_CHATTYBOX_API_URL,
});
export function Chat() {
const [question, setQuestion] = useState('');
const [answer, setAnswer] = useState<ChatResponse | null>(null);
const [pending, setPending] = useState(false);
const [error, setError] = useState('');
async function ask(event: FormEvent<HTMLFormElement>) {
event.preventDefault();
const message = question.trim();
if (pending || !message || message.length > 2000) return;
setPending(true);
setError('');
try {
setAnswer(await chattybox.sendMessage({
message,
// Groups stored messages; previous turns are not sent to the model.
conversationId: answer?.conversationId,
}));
setQuestion('');
} catch (failure) {
setError(failure instanceof ChattyboxError
? failure.status + ': ' + failure.message
: 'Chat could not be completed.');
} finally {
setPending(false);
}
}
const sources = answer?.sources.filter((source) => {
try { return ['https:', 'http:'].includes(new URL(source).protocol); }
catch { return false; }
}) ?? [];
return (
<section aria-label="Chat">
<form onSubmit={ask}>
<label>Question
<input value={question} maxLength={2000} disabled={pending}
onChange={(event) => setQuestion(event.target.value)} />
</label>
<button type="submit" disabled={pending || !question.trim()}>
{pending ? 'Sending...' : 'Send'}
</button>
</form>
{error && <p role="alert">{error}</p>}
<div aria-live="polite" aria-busy={pending}>
<p style={{ whiteSpace: 'pre-wrap' }}>{answer?.message}</p>
{sources.length > 0 && <ul aria-label="Sources">
{sources.map((source, index) => <li key={index}>
<a href={source} target="_blank" rel="noopener noreferrer">{source}</a>
</li>)}
</ul>}
</div>
</section>
);
}
// Render <Chat /> in your app. This shows the latest answer, not a saved transcript.
// No automatic retries: see the SDK retry-safety guide before adding retries.Ano. JavaScript SDK vrací zprávy, ID konverzací a zdrojové URL, takže vaše aplikace React může vykreslit zcela vlastní rozhraní.
Balíček neexportuje komponentu React ani hooky. Použijte headless metody s vlastními komponentami nebo zavolejte mountWidget() z trvalého rozvržení v prohlížeči a načtěte udržovaný plovoucí widget.
Vytvořte ho jednou mimo cestu vykreslování komponenty nebo ve stabilním provideru aplikace, nikoli znovu při každém vykreslení.
Ano. Pokud chcete udržované rozhraní namísto vlastního vykreslování v Reactu, použijte průvodce instalací hostovaného widgetu.
Není vyžadována kreditní karta. Váš obsah se nepoužívá k trénování modelů.
Tarif Free. Bez karty.
Používáme volitelné nástroje pro analytiku a správu tagů, abychom porozuměli používání webu. Zvolte, zda povolíte Ahrefs Web Analytics, PostHog a Google Tag Manager. Vypnutí analytiky tuto stránku znovu načte, aby se změna správně projevila. Základní funkce webu a monitorování chyb nejsou touto volbou ovlivněny. Přečtěte si naše zásady ochrany soukromí.