Rheolaeth dros gydrannau
Cyfansoddwch negeseuon, cardiau dyfyniadau, anogwyr, cyflyrau gwag a rheolyddion o'ch cydrannau React eich hun.
Cysylltwch gydrannau React â ChattyBox drwy @openstaticfish/chattybox. Eich tîm sy’n rheoli rendro a chyflwr, tra bo seilwaith a reolir yn trin atebion sy’n seiliedig ar ffynonellau, dyfyniadau a grwpio sgyrsiau.
Mae ChattyBox yn cropian eich gwefan bresennol, dogfennaeth, canolfan gymorth, CMS neu sylfaen wybodaeth, ac yna'n mewnosod chatbot sy'n ateb o'ch cynnwys cyhoeddedig eich hun yn hytrach na chof generig model.
Gosodwch yr SDK JavaScript yn eich cymhwysiad React.
Crëwch un cleient Chattybox y tu allan i lwybr rendro'r gydran.
Anfonwch negeseuon o drinnydd digwyddiad a diweddarwch gyflwr y rhyngwyneb gyda'r ymateb.
Cyflwynwch ddolenni ffynhonnell a thriniwch fethiannau strwythuredig ChattyboxError.
Lansiad tri cham
Defnyddiwch batrymau cyflwr, hygyrchedd, steilio a system ddylunio eich cymhwysiad yn lle addasu i gragen teclyn sefydlog.
Defnyddiwch y pwyntiau gwirio hyn i benderfynu a ddylai ChattyBox eistedd wrth ymyl eich platfform docs, amnewid cynorthwyydd ar wahân, neu aros yn ynysig ar gyfer profi.
Cyfansoddwch negeseuon, cardiau dyfyniadau, anogwyr, cyflyrau gwag a rheolyddion o'ch cydrannau React eich hun.
Defnyddiwch gyflwr lleol neu'ch haen gyflwr bresennol gan gadw sgyrsiau ar wahân rhwng ymwelwyr.
Rheolwch ffocws, rhanbarthau byw, ymddygiad bysellfwrdd a chyhoeddi gwallau yn eich cymhwysiad.
Cadwch integreiddiad y porwr yn fach tra bo ChattyBox yn trin mynegeio cynnwys, adalw ac atebion â dyfyniadau.
Crëwch y cleient unwaith, galwch ef o drinnydd digwyddiad a chadwch ID sgwrs pob ymwelydd yng nghyflwr y gydran neu'r cymhwysiad.
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.Gallwch. Mae'r SDK JavaScript yn dychwelyd negeseuon, IDau sgyrsiau ac URLau ffynhonnell fel y gall eich cymhwysiad React gyflwyno rhyngwyneb cwbl bersonol.
Ni allforir cydran React na bachau. Defnyddiwch y dulliau heb ryngwyneb gyda’ch cydrannau eich hun, neu galwch mountWidget() o gynllun porwr parhaol i lwytho’r teclyn arnofiol a gynhelir.
Crëwch ef unwaith y tu allan i lwybr rendro'r gydran neu mewn darparwr cymhwysiad sefydlog, yn hytrach na chreu cleient newydd ar bob rendrad.
Gallwch. Defnyddiwch y canllaw gosod teclyn lletyol pan fyddwch eisiau rhyngwyneb a gynhelir yn hytrach na chyflwyniad React personol.
Nid oes angen cerdyn credyd. Ni ddefnyddir eich cynnwys i hyfforddi modelau.
Haen am ddim. Dim angen cerdyn.
Rydym yn defnyddio offer dadansoddeg a rheoli tagiau dewisol i ddeall sut mae'r wefan yn cael ei defnyddio. Dewiswch a ydych am ganiatáu Ahrefs Web Analytics, PostHog a Google Tag Manager. Mae diffodd dadansoddeg yn ail-lwytho'r dudalen hon fel bod y newid yn cael ei weithredu'n briodol. Nid yw swyddogaethau hanfodol y wefan na monitro gwallau yn cael eu rheoli gan y dewis hwn. Darllenwch ein polisi preifatrwydd.