Komponenttien hallinta
Koosta viestit, lähdekortit, kehotteet, tyhjät tilat ja ohjaimet omista React-komponenteistasi.
Yhdistä React-komponentit ChattyBoxiin paketilla @openstaticfish/chattybox. Tiimisi hallitsee renderöintiä ja tilaa, kun ylläpidetty infrastruktuuri hoitaa lähdepohjaiset vastaukset, viitteet ja keskustelujen ryhmittelyn.
ChattyBox indeksoi nykyisen verkkosivustosi, dokumentaatiosi, ohjekeskuksesi, CMS:si tai tietämyskantasi ja upottaa sitten chatbotin, joka vastaa omasta julkaistusta sisällöstäsi eikä mallin yleisen muistin perusteella.
Asenna JavaScript SDK React-sovellukseesi.
Luo yksi Chattybox-asiakas komponentin renderöintipolun ulkopuolella.
Lähetä viestit tapahtumankäsittelijästä ja päivitä käyttöliittymän tila vastauksella.
Esitä lähdelinkit ja käsittele rakenteiset ChattyboxError-virheet.
Kolmivaiheinen käynnistys
Käytä sovelluksesi nykyisiä tila-, saavutettavuus-, tyyli- ja design system -käytäntöjä kiinteään widget-kuoreen mukautumisen sijaan.
Käytä näitä tarkistuspisteitä päättääksesi, pitäisikö ChattyBox istua dokumenttialustan viereen, vaihtaa erillinen avustaja vai pysyä erillään testausta varten.
Koosta viestit, lähdekortit, kehotteet, tyhjät tilat ja ohjaimet omista React-komponenteistasi.
Käytä paikallista tilaa tai nykyistä tilakerrostasi ja pidä keskustelut erillään kävijöiden välillä.
Hallitse kohdistusta, live-alueita, näppäimistökäyttöä ja virheilmoituksia sovelluksessasi.
Pidä selainintegraatio pienenä, kun ChattyBox hoitaa sisällön indeksoinnin, tiedonhaun ja lähdeviitteelliset vastaukset.
Luo asiakas kerran, kutsu sitä tapahtumankäsittelijästä ja säilytä jokaisen kävijän keskustelutunnus komponentin tai sovelluksen tilassa.
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.Kyllä. JavaScript SDK palauttaa viestit, keskustelutunnukset ja lähde-URL-osoitteet, joten React-sovelluksesi voi esittää täysin mukautetun käyttöliittymän.
React-komponentteja tai hookeja ei viedä. Käytä käyttöliittymättömiä metodeja omien komponenttien kanssa tai kutsu mountWidget() pysyvästä selainasettelusta ladataksesi ylläpidetyn kelluvan widgetin.
Luo se kerran komponentin renderöintipolun ulkopuolella tai vakaassa sovellusproviderissa sen sijaan, että loisit uuden asiakkaan jokaisella renderöinnillä.
Kyllä. Käytä hostatun widgetin asennusopasta, kun haluat ylläpidetyn käyttöliittymän mukautetun React-esityksen sijaan.
Luottokorttia ei vaadita. Sisältöäsi ei käytetä mallien kouluttamiseen.
Ilmainen taso. Ei korttia.
Käytämme valinnaisia analytiikka- ja tagienhallintatyökaluja ymmärtääksemme sivuston käyttöä. Valitse, sallitko seuraavat työkalut: Ahrefs Web Analytics, PostHog ja Google Tag Manager. Analytiikan poistaminen käytöstä lataa tämän sivun uudelleen, jotta muutos tulee varmasti voimaan. Sivuston välttämättömät toiminnot ja virheiden seuranta eivät kuulu tämän valinnan piiriin. Lue tietosuojakäytäntömme.