Proprietà dei componenti
Componi messaggi, schede di citazione, prompt, stati vuoti e controlli dai tuoi componenti React.
Collega i componenti React a ChattyBox con @openstaticfish/chattybox. Il team controlla rendering e stato, mentre l’infrastruttura gestita si occupa di risposte basate sulle fonti, citazioni e raggruppamento delle conversazioni.
ChattyBox esegue la scansione del tuo sito web esistente, della documentazione, del centro assistenza, del CMS o della knowledge base, quindi incorpora un chatbot che risponde dai tuoi contenuti pubblicati invece che dalla memoria generica del modello.
Installa JavaScript SDK nella tua applicazione React.
Crea un client Chattybox fuori dal percorso di rendering del componente.
Invia messaggi da un gestore eventi e aggiorna lo stato UI con la risposta.
Eseguire il rendering dei collegamenti di origine e gestire gli errori strutturati ChattyboxError.
Lancio in tre fasi
Utilizza i modelli di stato, accessibilità, stile e sistema di progettazione già seguiti dalla tua applicazione invece di adattarti a una shell di widget fissa.
Utilizza questi punti di controllo per decidere se ChattyBox deve essere affiancato alla tua piattaforma di documenti, sostituire un assistente separato o rimanere isolato per i test.
Componi messaggi, schede di citazione, prompt, stati vuoti e controlli dai tuoi componenti React.
Utilizza lo stato locale o il livello di stato esistente mantenendo isolate le conversazioni tra i visitatori.
Controlla il focus, le regioni live, il comportamento della tastiera e gli annunci di errore all'interno della tua applicazione.
Mantieni ridotta l'integrazione del browser mentre ChattyBox gestisce l'indicizzazione, il recupero e le risposte citate dei contenuti.
Crea il client una volta, chiamalo da un gestore eventi e mantieni l'ID di conversazione di ciascun visitatore nello stato del componente o dell'applicazione.
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.SÌ. JavaScript SDK restituisce messaggi, ID di conversazione e URL di origine in modo che la tua applicazione React possa eseguire il rendering di un'interfaccia completamente personalizzata.
Non vengono esportati componenti o hook React. Usa i metodi headless con i tuoi componenti oppure chiama mountWidget() da un layout persistente del browser per caricare il widget flottante mantenuto.
Crealo una volta fuori dal percorso di rendering del componente o in un fornitore di applicazioni stabile anziché costruire un nuovo client per ogni rendering.
SÌ. Utilizza la guida all'installazione del widget ospitato quando desideri un'interfaccia mantenuta anziché un rendering React personalizzato.
Nessuna carta di credito richiesta. I tuoi contenuti non vengono usati per addestrare modelli.
Piano Free. Nessuna carta.
Utilizziamo strumenti facoltativi di analisi e gestione dei tag per capire come viene utilizzato il sito. Scegli se consentire Ahrefs Web Analytics, PostHog e Google Tag Manager. Se disattivi l’analisi, questa pagina verrà ricaricata affinché la modifica venga applicata correttamente. Le funzionalità essenziali del sito e il monitoraggio degli errori non dipendono da questa scelta. Leggi la nostra informativa sulla privacy.