export OPENAI_API_KEY="BURAYA_KEY"
node server.js
// sunucu.js (Ekspres örneği)
"express"ten express'i içe aktar;
const app = express();
uygulama.use(express.json());
app.post("/api/ai", async (req, res) => {
denemek {
const prompt = String(req.body?.prompt || "").slice(0, 4000);
Eğer (!prompt) yoksa, res.status(400).json({ error: "prompt boş" }) döndürün.
const r = await fetch("https://api.openai.com/v1/responses", {
yöntem: "POST",
başlıklar: {
"Yetkilendirme": `Bearer ${process.env.OPENAI_API_KEY}`,
"Content-Type": "application/json"
},
gövde: JSON.stringify({
model: "gpt-4.1-mini",
girdi: [
{ role: "system", content: "Sen e-kurs.com için bir eğitim katılımının yardımcı olması. Kısa ve net cevap ver." },
{ rol: "kullanıcı", içerik: istem }
]
})
});
const data = await r.json();
eğer (!r.ok) {
return res.status(500).json({ error: data?.error?.message || "OpenAI hatası" });
}
// Responses API metin çekme (basit yöntemi)
sabit cevap =
veri.çıktı_metni ||
veri?.çıktı?.[0]?.içerik?.[0]?.metin ||
"Cevap alınamadı.";
res.json({ cevap });
} hata yakala {
res.status(500).json({ error: err.message });
}
});
app.listen(3000, () => console.log("Sunucu http://localhost:3000 adresinde çalışıyor"));
<div style="max-width:720px;margin:24px auto;font-family:Arial,sans-serif;border:1px solid #ddd;border-radius:12px;padding:16px">
<h2 style="margin:0 0 10px 0">e-kurs AI Deneme</h2>
<div id="ekursChat" style="height:320px;overflow:auto;border:1px solid #eee;border-radius:10px;padding:12px;background:#fafafa"></div>
<div style="display:flex;gap:8px;margin-top:10px">
<input id="ekursInput" type="text" placeholder="Sorunu yaz..." style="flex:1;padding:10px;border:1px solid #ddd;border-radius:10px" />
<button id="ekursSend" style="padding:10px 14px;border:0;border-radius:10px;cursor:pointer">Gönder</button>
</div>
<p style="margin:10px 0 0 0;color:#666;font-size:12px">
Not: Bu demo, /api/ai endpoint'ine istek atar.
</p>
</div>
<script>
const chat = document.getElementById("ekursChat");
const input = document.getElementById("ekursInput");
const sendBtn = document.getElementById("ekursSend");
fonksiyon addMsg(rol, metin) {
const box = document.createElement("div");
kutu.stil.kenar yaşayanlar = "8px 0";
box.innerHTML = `<b>${role === "user" ? "Sen" : "AI"}:</b> ${escapeHtml(text)}`;
chat.appendChild(box);
chat.scrollTop = chat.scrollHeight;
}
fonksiyon escapeHtml(str){
Dize(str)
.replaceAll("&","&")
.replaceAll("<","</")
.replaceAll(">",">")
.replaceAll('"',""")
.replaceAll("'","');
}
asenkron fonksiyon gönder() {
const prompt = input.value.trim();
Eğer (!prompt) geri dön;
giriş.değeri = "";
addMsg("user", prompt);
addMsg("asistan", "Yazıyor...");
{
const res = await fetch("/api/ai", {
yöntem: "POST",
başlıklar: {"Content-Type":"application/json"},
gövde: JSON.stringify({ prompt })
});
const data = await res.json();
// "Yazıyor..." mesajını sil
chat.removeChild(chat.lastChild);
eğer (!res.ok) {
addMsg("asistan", "Hata: " + (data.error || "Bilinmeyen hata"));
geri dön;
}
addMsg("asistan", data.answer || "Cevap boş geldi.");
} yakala (e) {
chat.removeChild(chat.lastChild);
addMsg("asistan", "Bağlantı hatası: " + e.message);
}
}
sendBtn.addEventListener("click", send);
input.addEventListener("keydown", (e) => {
if (e.key === "Enter") send();
});
</script>
Yo!Coach ile nasıl başlarsınız?