Ffin cleient fach
Marciwch y modiwl sgwrsio rhyngweithiol yn unig gyda use client yn lle symud tudalen neu gynllun cyfan i'r porwr.
Defnyddiwch @openstaticfish/chattybox o fewn ffin cleient benodol tra bo gweddill eich cymhwysiad App Router yn aros wedi'i rendro ar y gweinydd. Mae ChattyBox yn ymdrin ag adalw, dyfyniadau, sgyrsiau a graddio.
Sgwrs enghreifftiol — nid sgwrs fyw.
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 @openstaticfish/chattybox yn y cymhwysiad Next.js.
Ychwanegwch allwedd API gyhoeddus y teclyn ac URL yr API fel newidynnau amgylchedd NEXT_PUBLIC.
Crëwch gydran cleient ar gyfer cyflwr y sgwrs a rhyngweithio'r porwr.
Mewnforiwch y gydran cleient honno o dudalen neu gynllun Cydran Gweinydd.
Lansiad tri cham
Cadwch yr SDK ar ymyl y cleient lle mae'r sgwrs yn digwydd a chadwch Gydrannau Gweinydd ar gyfer gweddill y cymhwysiad.
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.
Marciwch y modiwl sgwrsio rhyngweithiol yn unig gyda use client yn lle symud tudalen neu gynllun cyfan i'r porwr.
Defnyddiwch allwedd prosiect sy'n ddiogel i'r porwr gyda tharddleoedd a ganiateir; peidiwch byth â datgelu manylion rheoli drwy newidynnau NEXT_PUBLIC.
Cyflwynwch negeseuon a dyfyniadau yn eich llywio, ardal cyfrif, cragen ddogfennau neu lif gwaith cymorth eich hun.
Peidiwch ag ychwanegu route handlers dim ond i ddirprwyo API porwr a reolir oni bai bod gan eich cynnyrch angen penodol ar ochr y gweinydd.
Mae'r SDK yn defnyddio fetch a manylion prosiect sy'n weladwy i'r porwr, felly cychwynnwch ef mewn modiwl cleient. Peidiwch â rhoi cyfrinachau nac APIs rheoli mewn newidynnau NEXT_PUBLIC.
'use client';
import { useState, type FormEvent } from 'react';
import { Chattybox, ChattyboxError, type ChatResponse } from '@openstaticfish/chattybox';
const chattybox = new Chattybox({
apiKey: process.env.NEXT_PUBLIC_CHATTYBOX_API_KEY!,
baseUrl: process.env.NEXT_PUBLIC_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,
// Same ID includes up to 12 recent saved messages, not the full transcript.
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>
);
}
// Import and render <Chat /> from your page or layout. This shows the latest answer, not a saved transcript.
// No automatic retries: see the SDK retry-safety guide before adding retries.Ydy. Defnyddiwch ef mewn cydran cleient ar gyfer cyflwr sgwrsio rhyngweithiol a chyflwynwch y gydran honno o dudalen neu gynllun App Router.
Nac oes ar gyfer yr integreiddiad porwr arferol. Mae allweddi teclyn cyhoeddus wedi'u cynllunio ar gyfer defnydd cleient a gellir eu cyfyngu i darddleoedd cymeradwy.
Mae allwedd gyhoeddus y teclyn yn adnabod prosiect ond nid yw'n fanylyn rheoli. Cyfyngwch hi i'ch tarddleoedd cynhyrchu a rhagolwg, a pheidiwch byth â datgelu cyfrinachau gweinyddol.
Gallwch. Mae'r canllaw gosod lletyol yn dangos y llwybr next/script pan fyddwch yn dewis rhyngwyneb a gynhelir yn lle rhyngwyneb SDK personol.
Nid oes angen cerdyn credyd
Haen am ddim. Dim angen cerdyn.