📚 Tutorial Completo
1
Ottenere la API Key
Vai su platform.openai.com e crea una nuova API key. Conservala in modo sicuro!
2
Struttura HTML di Base
Crea la struttura base del chatbot:
<div class="chatbot-container"> <div class="chat-header">ChatBot AI</div> <div class="chat-messages" id="messages"></div> <div class="chat-input"> <input type="text" id="userInput" placeholder="Scrivi un messaggio..."> <button onclick="sendMessage()">Invia</button> </div> </div>
3
Configurazione JavaScript
Imposta le variabili e la funzione principale:
// Configurazione const API_URL = 'https://api.openai.com/v1/chat/completions'; let API_KEY = ''; // Inserire la propria API key const MODEL = 'gpt-4.1-nano'; // Modello specificato // Funzione per inviare messaggio async function sendMessage() { const input = document.getElementById('userInput'); const message = input.value.trim(); if (!message || !API_KEY) return; // Aggiungi messaggio utente addMessage(message, 'user'); input.value = ''; // Mostra indicatore di caricamento showLoading(); try { const response = await callOpenAI(message); hideLoading(); addMessage(response, 'bot'); } catch (error) { hideLoading(); addMessage('Errore: ' + error.message, 'bot'); } }
4
Chiamata API OpenAI
Funzione per comunicare con l'API:
async function callOpenAI(message) { const response = await fetch(API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` }, body: JSON.stringify({ model: MODEL, messages: [ { role: 'system', content: 'Sei un assistente virtuale utile e amichevole.' }, { role: 'user', content: message } ], max_tokens: 150, temperature: 0.7 }) }); if (!response.ok) { throw new Error(`Errore API: ${response.status}`); } const data = await response.json(); return data.choices[0].message.content; }
5
Funzioni di Supporto
Aggiungi le funzioni per gestire l'interfaccia:
function addMessage(text, sender) { const messagesDiv = document.getElementById('messages'); const messageDiv = document.createElement('div'); messageDiv.className = `message ${sender}-message`; messageDiv.textContent = text; messagesDiv.appendChild(messageDiv); messagesDiv.scrollTop = messagesDiv.scrollHeight; } function showLoading() { const messagesDiv = document.getElementById('messages'); const loadingDiv = document.createElement('div'); loadingDiv.className = 'message bot-message'; loadingDiv.id = 'loading'; loadingDiv.innerHTML = '<div class="loading"></div>Sto pensando...'; messagesDiv.appendChild(loadingDiv); messagesDiv.scrollTop = messagesDiv.scrollHeight; } function hideLoading() { const loading = document.getElementById('loading'); if (loading) loading.remove(); }
Importante: Non esporre mai la tua API key nel codice client in produzione! Questo esempio è puramente dimostrativo; in un sistema reale utilizzerai una variabile di ambiente, un file di configurazione esterna (letto con ajax / PHP) o un sistema di localStorage.
🔧 Personalizzazioni Avanzate
Puoi personalizzare il comportamento del chatbot modificando:
- temperature: Controlla la creatività (0.0-1.0)
- max_tokens: Lunghezza massima risposta
- system message: Personalità del bot
- Cronologia: Mantieni conversazioni precedenti
🚀 Demo Funzionante
La chiave viene usata solo per questa demo e non viene salvata.
🤖 ChatBot AI - Demo
📝 Codice Completo
Ecco il codice JavaScript completo per il chatbot:
// Configurazione chatbot const API_URL = 'https://api.openai.com/v1/chat/completions'; let API_KEY = ''; const MODEL = 'gpt-4.1-nano'; function setApiKey(key) { API_KEY = key; document.getElementById('sendBtn').disabled = !key; } async function sendMessage() { const input = document.getElementById('userInput'); const message = input.value.trim(); if (!message || !API_KEY) return; addMessage(message, 'user'); input.value = ''; showLoading(); try { const response = await callOpenAI(message); hideLoading(); addMessage(response, 'bot'); } catch (error) { hideLoading(); addMessage('Errore: ' + error.message, 'bot'); } } async function callOpenAI(message) { const response = await fetch(API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${API_KEY}` }, body: JSON.stringify({ model: MODEL, messages: [ { role: 'system', content: 'Sei un assistente virtuale utile e amichevole.' }, { role: 'user', content: message } ], max_tokens: 150, temperature: 0.7 }) }); if (!response.ok) { throw new Error(`Errore API: ${response.status}`); } const data = await response.json(); return data.choices[0].message.content; } function addMessage(text, sender) { const messagesDiv = document.getElementById('messages'); const messageDiv = document.createElement('div'); messageDiv.className = `message ${sender}-message`; messageDiv.textContent = text; messagesDiv.appendChild(messageDiv); messagesDiv.scrollTop = messagesDiv.scrollHeight; } function showLoading() { const messagesDiv = document.getElementById('messages'); const loadingDiv = document.createElement('div'); loadingDiv.className = 'message bot-message'; loadingDiv.id = 'loading'; loadingDiv.innerHTML = '<div class="loading"></div>Sto pensando...'; messagesDiv.appendChild(loadingDiv); messagesDiv.scrollTop = messagesDiv.scrollHeight; } function hideLoading() { const loading = document.getElementById('loading'); if (loading) loading.remove(); } function copyCode(btn) { const code = btn.nextElementSibling.textContent; navigator.clipboard.writeText(code); btn.textContent = 'Copiato!'; setTimeout(() => btn.textContent = 'Copia', 2000); }