Jeg viser deg: chatvinduet
En chat er tre ting: en liste over meldinger, et inputfelt og en Send-knap.
<div class="chat">
<div id="zpravy" class="chat-zpravy"></div>
<form id="chat-form" class="chat-form">
<input id="chat-vstup" type="text" placeholder="Type your question…" autocomplete="off" />
<button type="submit">Send</button>
</form>
</div>
.chat { border: 1px solid #ddd; border-radius: 12px; max-width: 420px; }
.chat-zpravy { height: 300px; overflow-y: auto; padding: 12px; display: flex; flex-direction: column; gap: 8px; }
.zprava { padding: 8px 12px; border-radius: 12px; max-width: 80%; }
.zprava.ja { background: #4f46e5; color: white; align-self: flex-end; }
.zprava.bot { background: #f0f0f0; align-self: flex-start; }
.chat-form { display: flex; gap: 8px; padding: 12px; border-top: 1px solid #ddd; }
.chat-form input { flex: 1; }
Forbindelse til serveren
const zpravy = document.querySelector('#zpravy');
const form = document.querySelector('#chat-form');
const vstup = document.querySelector('#chat-vstup');
function pridejZpravu(text, kdo) {
const el = document.createElement('div');
el.className = `zprava ${kdo}`;
el.textContent = text;
zpravy.appendChild(el);
zpravy.scrollTop = zpravy.scrollHeight; // scroll down to the new message
}
form.addEventListener('submit', async (e) => {
e.preventDefault();
const otazka = vstup.value.trim();
if (!otazka) return;
pridejZpravu(otazka, 'ja');
vstup.value = '';
pridejZpravu('Thinking…', 'bot');
const r = await fetch('/zeptat-se', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ otazka }),
});
const data = await r.json();
zpravy.lastChild.textContent = data.text; // replace "Thinking…" with the answer
});
Alt i den kode kjenner du allerede: addEventListener, createElement, fetch med POST. Det eneste nye er idéen om at sette det hele sammen til en chat.
“Thinking…” er et lille, men vigtigt trick. AI tar et par sekunder at svare – uden den melding kan en besøkende tro, chatten er i stykker. Gode programmerere viser altid, at noe sker.
Nå er det din tur 💪
- Byg chatten etter eksemplet og match fargerne til din nettside.
- I systemprompten på serveren (leksjon 6), bruk prompten, du skrev til prosjektet ditt i leksjon 5 – det forvandler en generisk AI til din egen hjelper.
- Test den: stil 5 spørgsmål, en besøkende måske har. Svarer botten korrekt? Finpuds prompten.
- Bonus: legg til en hilsen fra botten, der vises lige etter siden indleses (“Hi! Ask me anything about our school.”).
Chatsikkerhed: legg til en setning til systemprompten som “Only answer questions about [your website]. Politely decline to answer anything else.” – ellers skriver botten gerne hva som helst til besøkende, også ting, der ikke har med din nettside at gjøre.
Sjekk: En chat kjører på din nettside: du skriver et spørgsmål, din boble vises, så “Thinking…”, så bottens svar. Botten taler som en hjelper til prosjektet ditt.
Dette tar du med deg fra leksjonen
- En chat = en liste over meldinger + en formular + et fetch til din server.
- Vis status (“Thinking…”) – besøkende skal vide, at noe sker.
- Du styrer bottens personlighed og grænser gjennom systemprompten på serveren.
© 2026 Ing. Martin Polak / AlgoRhino · Vilkår for innholdsbruk