Tutorial

KI-Chatbot auf Website einbinden

Komplette Anleitung zur Integration von KI-Chatbots auf Ihrer Website. OpenAI API, Claude, Open-Source-Alternativen und No-Code-Plattformen im Vergleich. Mit Code-Beispielen und DSGVO-Hinweisen.

René Lauenroth
18 Min. Lesezeit

Ein KI-Chatbot auf der eigenen Website ist 2026 keine Zukunftsmusik mehr – er ist für viele Unternehmen ein echter Wettbewerbsvorteil. In diesem umfassenden Guide zeige ich Ihnen alle Optionen: von der einfachen No-Code-Lösung bis zur vollständigen API-Integration mit eigenem Backend.

Warum ein KI-Chatbot auf Ihrer Website?

Die Zahlen sprechen für sich: 62% der Kunden bevorzugen Chatbots gegenüber Wartezeiten im Support. Der globale Chatbot-Markt erreicht 2026 ein Volumen von 11,8 Milliarden USD – und das hat gute Gründe.

Konkrete Vorteile:

  • 24/7 Verfügbarkeit – Ihr Chatbot schläft nie
  • Sofortige Antworten – Keine Wartezeit für Standardfragen
  • Skalierbarkeit – 100 gleichzeitige Anfragen? Kein Problem
  • Kosteneffizienz – Ein Bot kostet weniger als ein Support-Mitarbeiter
  • Konsistente Qualität – Keine schlechten Tage, keine Missverständnisse
  • Datensammlung – Verstehen Sie, was Ihre Kunden wirklich fragen

Die Optionen im Überblick

Bevor wir in die technischen Details einsteigen, hier ein Überblick über die verfügbaren Ansätze:

1. Kommerzielle APIs

OpenAI (GPT-4, GPT-4o)

  • Pro: Beste Sprachqualität, große Community, umfangreiche Dokumentation
  • Contra: US-Unternehmen (DSGVO-Bedenken), Token-basierte Kosten
  • Preise: ab $0.03/1K Input-Tokens (GPT-4o)

Anthropic Claude API

  • Pro: Exzellente Reasoning-Fähigkeiten, Constitutional AI
  • Contra: Kleinere Community als OpenAI
  • Preise: ab $0.015/1K Input-Tokens (Claude 3.5 Haiku)

Google Gemini

  • Pro: Multimodal, gute Integration mit Google-Diensten
  • Contra: Weniger für Chatbots optimiert
  • Preise: Kostenloses Kontingent verfügbar

2. Open-Source-Modelle

Meta Llama 3

  • Selbst hosten oder über Anbieter wie together.ai
  • Vollständige Datenkontrolle
  • Keine laufenden API-Kosten (nur Hosting)

Mistral / Mixtral

  • Europäisches Unternehmen
  • Hervorragendes Preis-Leistungs-Verhältnis
  • DSGVO-freundliche Option

DeepSeek

  • Kostengünstige Alternative
  • Gute Coding-Fähigkeiten
  • Chinesischer Anbieter (Datenschutz prüfen)

3. No-Code-Plattformen

PlattformBesonderheitPreis ab
TidioE-Commerce-fokussiert29€/Monat
BotpressOpen-Source-KernKostenlos
ChatbasePDF/Website-Training19$/Monat
eesel AISlack/Teams-Integration49$/Monat
VoiceflowConversation DesignKostenlos

Technische Integration: Drei Wege zum Ziel

Weg 1: JavaScript-Widget (Einfachster Einstieg)

Die schnellste Methode ist ein vorgefertigtes Widget. Viele Anbieter liefern einen einzeiligen Embed-Code:

<!-- Beispiel: Tidio Widget -->
<script src="//code.tidio.co/IHRE_ID.js" async></script>

<!-- Beispiel: Chatbase Widget -->
<script>
  window.embeddedChatbotConfig = {
    chatbotId: "IHRE_CHATBOT_ID",
    domain: "www.chatbase.co"
  }
</script>
<script
  src="https://www.chatbase.co/embed.min.js"
  chatbotId="IHRE_CHATBOT_ID"
  domain="www.chatbase.co"
  defer>
</script>

Vorteile:

  • Sofort einsatzbereit
  • Keine Backend-Entwicklung nötig
  • Automatische Updates

Nachteile:

  • Begrenzte Anpassungsmöglichkeiten
  • Abhängigkeit vom Anbieter
  • Laufende Kosten

Weg 2: IFrame-Einbindung

Für mehr Kontrolle über das Design können Sie einen Chatbot in einem IFrame einbetten:

<div class="chatbot-container">
  <iframe
    src="https://ihre-chatbot-url.com/embed"
    style="width: 400px; height: 600px; border: none; border-radius: 12px;"
    allow="microphone"
    title="KI-Assistent">
  </iframe>
</div>

<style>
.chatbot-container {
  position: fixed;
  bottom: 20px;
  right: 20px;
  z-index: 1000;
  box-shadow: 0 4px 20px rgba(0,0,0,0.15);
}
</style>

Weg 3: Vollständige API-Integration (Maximum Kontrolle)

Für volle Flexibilität implementieren Sie die API-Anbindung selbst. Hier ein vollständiges Beispiel mit Node.js und der OpenAI API:

Backend (Node.js/Express):

// server.js
import express from 'express';
import OpenAI from 'openai';
import rateLimit from 'express-rate-limit';

const app = express();
app.use(express.json());

// Rate Limiting zum Kostenschutz
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 Minuten
  max: 50 // max 50 Anfragen pro IP
});
app.use('/api/chat', limiter);

const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY
});

// System-Prompt für Ihren Chatbot
const SYSTEM_PROMPT = `Du bist der freundliche Support-Assistent
von [Firmenname]. Du beantwortest Fragen zu unseren Produkten
und Dienstleistungen. Halte dich kurz und präzise.
Wenn du etwas nicht weißt, sage das ehrlich.`;

app.post('/api/chat', async (req, res) => {
  try {
    const { message, conversationHistory = [] } = req.body;

    const messages = [
      { role: 'system', content: SYSTEM_PROMPT },
      ...conversationHistory,
      { role: 'user', content: message }
    ];

    const completion = await openai.chat.completions.create({
      model: 'gpt-4o',
      messages,
      max_tokens: 500,
      temperature: 0.7
    });

    res.json({
      reply: completion.choices[0].message.content,
      usage: completion.usage
    });
  } catch (error) {
    console.error('OpenAI API Fehler:', error);
    res.status(500).json({
      error: 'Ein Fehler ist aufgetreten. Bitte versuchen Sie es später.'
    });
  }
});

app.listen(3000);

Frontend (Vanilla JavaScript):

// chatbot.js
class ChatBot {
  constructor(containerId) {
    this.container = document.getElementById(containerId);
    this.history = [];
    this.init();
  }

  init() {
    this.container.innerHTML = `
      <div class="chat-messages" id="chat-messages"></div>
      <form class="chat-input" id="chat-form">
        <input type="text" id="chat-input"
               placeholder="Ihre Frage..." autocomplete="off">
        <button type="submit">Senden</button>
      </form>
    `;

    document.getElementById('chat-form')
      .addEventListener('submit', (e) => this.handleSubmit(e));
  }

  async handleSubmit(e) {
    e.preventDefault();
    const input = document.getElementById('chat-input');
    const message = input.value.trim();
    if (!message) return;

    this.addMessage(message, 'user');
    input.value = '';
    input.disabled = true;

    try {
      const response = await fetch('/api/chat', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify({
          message,
          conversationHistory: this.history
        })
      });

      const data = await response.json();

      if (data.error) {
        this.addMessage(data.error, 'error');
      } else {
        this.addMessage(data.reply, 'assistant');
        this.history.push(
          { role: 'user', content: message },
          { role: 'assistant', content: data.reply }
        );
      }
    } catch (error) {
      this.addMessage('Verbindungsfehler. Bitte versuchen Sie es erneut.', 'error');
    }

    input.disabled = false;
    input.focus();
  }

  addMessage(content, role) {
    const messagesDiv = document.getElementById('chat-messages');
    const messageEl = document.createElement('div');
    messageEl.className = `chat-message ${role}`;
    messageEl.textContent = content;
    messagesDiv.appendChild(messageEl);
    messagesDiv.scrollTop = messagesDiv.scrollHeight;
  }
}

// Initialisierung
new ChatBot('chatbot-container');

CSS:

#chatbot-container {
  position: fixed;
  bottom: 20px;
  right: 20px;
  width: 380px;
  height: 500px;
  background: #1a1a2e;
  border-radius: 16px;
  display: flex;
  flex-direction: column;
  box-shadow: 0 8px 32px rgba(0,0,0,0.3);
  font-family: system-ui, sans-serif;
}

.chat-messages {
  flex: 1;
  overflow-y: auto;
  padding: 16px;
}

.chat-message {
  padding: 12px 16px;
  border-radius: 12px;
  margin-bottom: 8px;
  max-width: 85%;
}

.chat-message.user {
  background: #4361ee;
  color: white;
  margin-left: auto;
}

.chat-message.assistant {
  background: #2d2d44;
  color: #e0e0e0;
}

.chat-message.error {
  background: #ff4444;
  color: white;
}

.chat-input {
  display: flex;
  padding: 12px;
  gap: 8px;
  border-top: 1px solid #2d2d44;
}

.chat-input input {
  flex: 1;
  padding: 12px;
  border: none;
  border-radius: 8px;
  background: #2d2d44;
  color: white;
}

.chat-input button {
  padding: 12px 24px;
  background: #4361ee;
  color: white;
  border: none;
  border-radius: 8px;
  cursor: pointer;
}

.chat-input button:hover {
  background: #3651de;
}

Training mit eigenen Daten: RAG erklärt

Ein Standard-Chatbot kennt nur sein Grundwissen. Um ihn mit Ihren spezifischen Inhalten zu trainieren, nutzen Sie RAG (Retrieval Augmented Generation).

Was ist RAG?

RAG kombiniert zwei Komponenten:

  1. Retrieval: Relevante Dokumente aus Ihrer Wissensbasis finden
  2. Generation: KI generiert Antwort basierend auf diesen Dokumenten
Nutzer-Frage

[Embedding erstellen]

[Ähnlichkeitssuche in Vektordatenbank]

[Top 3-5 relevante Dokumente]

[Kontext + Frage an LLM]

Antwort mit Quellenangabe

Implementierung mit OpenAI Assistants API

Die Assistants API vereinfacht RAG erheblich:

import OpenAI from 'openai';

const openai = new OpenAI();

// 1. Assistant erstellen
const assistant = await openai.beta.assistants.create({
  name: "Website Support Bot",
  instructions: `Du bist ein Support-Bot für unsere Website.
    Beantworte Fragen basierend auf den hochgeladenen Dokumenten.
    Wenn du keine Antwort findest, sage das ehrlich.`,
  model: "gpt-4o",
  tools: [{ type: "file_search" }]
});

// 2. Vector Store erstellen und Dateien hochladen
const vectorStore = await openai.beta.vectorStores.create({
  name: "FAQ und Dokumentation"
});

// Dateien hochladen (PDFs, Markdown, etc.)
await openai.beta.vectorStores.fileBatches.uploadAndPoll(
  vectorStore.id,
  { files: [faqFile, produktFile, preisFile] }
);

// 3. Assistant mit Vector Store verbinden
await openai.beta.assistants.update(assistant.id, {
  tool_resources: {
    file_search: { vector_store_ids: [vectorStore.id] }
  }
});

// 4. Konversation starten
const thread = await openai.beta.threads.create();

const message = await openai.beta.threads.messages.create(
  thread.id,
  { role: "user", content: "Wie sind eure Öffnungszeiten?" }
);

const run = await openai.beta.threads.runs.createAndPoll(
  thread.id,
  { assistant_id: assistant.id }
);

// Antwort abrufen
const messages = await openai.beta.threads.messages.list(thread.id);
console.log(messages.data[0].content[0].text.value);

Alternative: Eigene RAG-Pipeline

Für mehr Kontrolle können Sie eine eigene Pipeline bauen:

import { OpenAIEmbeddings } from 'langchain/embeddings/openai';
import { PineconeStore } from 'langchain/vectorstores/pinecone';

// Dokumente einlesen und chunken
const docs = await loadDocuments('./docs');
const chunks = splitIntoChunks(docs, { size: 500, overlap: 50 });

// Embeddings erstellen und speichern
const embeddings = new OpenAIEmbeddings();
const vectorStore = await PineconeStore.fromDocuments(
  chunks,
  embeddings,
  { pineconeIndex }
);

// Bei Anfrage: Ähnliche Dokumente suchen
async function answerQuestion(question) {
  const relevantDocs = await vectorStore.similaritySearch(question, 3);

  const context = relevantDocs
    .map(doc => doc.pageContent)
    .join('\n\n');

  const response = await openai.chat.completions.create({
    model: 'gpt-4o',
    messages: [
      {
        role: 'system',
        content: `Beantworte basierend auf diesem Kontext:\n${context}`
      },
      { role: 'user', content: question }
    ]
  });

  return response.choices[0].message.content;
}

DSGVO-Konformität: Was Sie beachten müssen

Die DSGVO stellt klare Anforderungen an KI-Chatbots. Hier die wichtigsten Punkte:

1. Serverstandort und Datenverarbeitung

AnbieterServerstandortAVV verfügbar
OpenAIUSAJa (DPA)
AnthropicUSAJa
MistralEU (Frankreich)Ja
Aleph AlphaEU (Deutschland)Ja

Empfehlung für DSGVO-sensible Anwendungen:

  • Mistral (EU-Anbieter)
  • Aleph Alpha (deutscher Anbieter)
  • Selbst-gehostete Open-Source-Modelle

2. Auftragsverarbeitungsvertrag (AVV)

Sie müssen einen AVV mit Ihrem KI-Anbieter abschließen. OpenAI und Anthropic bieten standardisierte DPAs:

3. Transparenz und Einwilligung

<!-- Cookie-Banner erweitern -->
<div class="chatbot-consent">
  <p>Unser KI-Assistent verwendet OpenAI.
     Ihre Nachrichten werden zur Verarbeitung
     an Server in den USA übertragen.</p>
  <button onclick="enableChatbot()">Chatbot aktivieren</button>
  <button onclick="declineChatbot()">Ablehnen</button>
</div>

4. Datensparsamkeit

// Vor dem Senden an die API: Persönliche Daten entfernen
function anonymizeMessage(message) {
  return message
    .replace(/\b[A-Z][a-z]+ [A-Z][a-z]+\b/g, '[NAME]')
    .replace(/\b[\w.-]+@[\w.-]+\.\w+\b/g, '[EMAIL]')
    .replace(/\b\d{5}\b/g, '[PLZ]')
    .replace(/\b0\d{3,4}[\s-]?\d{6,8}\b/g, '[TELEFON]');
}

5. Logging und Aufbewahrung

// Konversationen nur so lange speichern wie nötig
const RETENTION_DAYS = 30;

async function cleanOldConversations() {
  const cutoff = new Date();
  cutoff.setDate(cutoff.getDate() - RETENTION_DAYS);

  await db.conversations.deleteMany({
    createdAt: { $lt: cutoff }
  });
}

// Täglich ausführen
setInterval(cleanOldConversations, 24 * 60 * 60 * 1000);

Kosten-Nutzen-Analyse

API-Kosten (Stand Januar 2026)

OpenAI GPT-4o:

  • Input: $2.50 / 1M Tokens
  • Output: $10.00 / 1M Tokens
  • Durchschnittliche Konversation (500 Tokens): ~$0.005

Anthropic Claude 3.5 Sonnet:

  • Input: $3.00 / 1M Tokens
  • Output: $15.00 / 1M Tokens

Mistral Large:

  • Input: $2.00 / 1M Tokens
  • Output: $6.00 / 1M Tokens

Beispielrechnung: 1.000 Konversationen/Monat

KomponenteKosten
API (GPT-4o)~$5-15
Vector DB (Pinecone)$0 (Free Tier)
Server (Vercel)$0-20
Gesamt$5-35/Monat

ROI-Überlegungen

Ein KI-Chatbot rechnet sich, wenn:

  • Er 10+ Support-Anfragen pro Tag automatisiert
  • Die durchschnittliche Support-Interaktion 5+ Minuten dauert
  • Ein Support-Mitarbeiter 30+ €/Stunde kostet

Beispiel: 10 Anfragen × 5 Min × 30€/h = 25€ täglich gespart = 750€/Monat

Praxisbeispiel: FAQ-Bot für Ihre Website

Hier ein vollständiges, sofort einsatzbereites Beispiel:

1. Projektstruktur

faq-bot/
├── server/
│   ├── index.js
│   ├── routes/chat.js
│   └── knowledge/
│       └── faq.json
├── client/
│   ├── chatbot.js
│   └── chatbot.css
└── package.json

2. FAQ-Wissensbasis (faq.json)

{
  "faqs": [
    {
      "frage": "Wie sind die Öffnungszeiten?",
      "antwort": "Wir sind Mo-Fr von 9-18 Uhr erreichbar."
    },
    {
      "frage": "Wie kann ich bestellen?",
      "antwort": "Sie können direkt über unseren Online-Shop bestellen oder uns anrufen."
    },
    {
      "frage": "Wie lange dauert die Lieferung?",
      "antwort": "Die Lieferung erfolgt innerhalb von 2-3 Werktagen."
    }
  ]
}

3. Einfacher FAQ-Matcher

// Ohne externe API - rein regelbasiert als Fallback
function findBestMatch(question, faqs) {
  const questionLower = question.toLowerCase();

  for (const faq of faqs) {
    const keywords = faq.frage.toLowerCase().split(' ');
    const matches = keywords.filter(kw =>
      kw.length > 3 && questionLower.includes(kw)
    );

    if (matches.length >= 2) {
      return faq.antwort;
    }
  }

  return null;
}

// Hybrid-Ansatz: Erst FAQ prüfen, dann KI
async function getAnswer(question) {
  const faqAnswer = findBestMatch(question, faqs);

  if (faqAnswer) {
    return { answer: faqAnswer, source: 'faq' };
  }

  // Fallback auf KI
  const aiAnswer = await callOpenAI(question);
  return { answer: aiAnswer, source: 'ai' };
}

Häufige Fehler vermeiden

1. Halluzinationen begrenzen

const SYSTEM_PROMPT = `Du beantwortest NUR Fragen zu unseren Produkten.
Bei Fragen außerhalb deines Wissens antworte:
"Das kann ich leider nicht beantworten.
Bitte kontaktieren Sie unseren Support."

WICHTIG: Erfinde KEINE Informationen.
Wenn du unsicher bist, frage nach.`;

2. Context-Limits beachten

// Konversationshistorie begrenzen
function trimHistory(history, maxTokens = 2000) {
  let totalTokens = 0;
  const trimmed = [];

  // Von hinten nach vorne durchgehen (neueste zuerst)
  for (let i = history.length - 1; i >= 0; i--) {
    const tokens = estimateTokens(history[i].content);
    if (totalTokens + tokens > maxTokens) break;
    trimmed.unshift(history[i]);
    totalTokens += tokens;
  }

  return trimmed;
}

3. Fallback implementieren

async function chat(message) {
  try {
    return await callAI(message);
  } catch (error) {
    if (error.status === 429) {
      // Rate Limit erreicht
      return "Unser Assistent ist gerade ausgelastet. Bitte versuchen Sie es in einer Minute erneut.";
    }
    if (error.status >= 500) {
      // Server-Fehler
      return "Es gibt technische Probleme. Bitte kontaktieren Sie uns unter support@example.com";
    }
    throw error;
  }
}

4. Kosten-Monitoring

// Tägliches Budget setzen
const DAILY_BUDGET_USD = 10;
let dailySpent = 0;

async function trackCosts(usage) {
  const cost = (usage.prompt_tokens * 0.0025 +
                usage.completion_tokens * 0.01) / 1000;
  dailySpent += cost;

  if (dailySpent > DAILY_BUDGET_USD * 0.8) {
    console.warn('80% des Tagesbudgets erreicht');
    // Alert an Admin senden
  }

  if (dailySpent > DAILY_BUDGET_USD) {
    throw new Error('Tagesbudget erschöpft');
  }
}

WordPress-Integration

Für WordPress gibt es mehrere Optionen:

Option 1: Plugin verwenden

Empfohlene Plugins:

  • AI Engine (kostenlos, flexibel)
  • Jeenee AI (einfache Einrichtung)
  • Tidio (E-Commerce-fokussiert)

Option 2: Eigenes Shortcode

// functions.php
function chatbot_shortcode($atts) {
  wp_enqueue_script('chatbot',
    get_template_directory_uri() . '/js/chatbot.js',
    [], '1.0', true);
  wp_enqueue_style('chatbot',
    get_template_directory_uri() . '/css/chatbot.css');

  return '<div id="chatbot-container"></div>';
}
add_shortcode('chatbot', 'chatbot_shortcode');

// REST API Endpoint
add_action('rest_api_init', function() {
  register_rest_route('chatbot/v1', '/message', [
    'methods' => 'POST',
    'callback' => 'handle_chatbot_message',
    'permission_callback' => '__return_true'
  ]);
});

function handle_chatbot_message($request) {
  $message = sanitize_text_field($request['message']);

  $response = wp_remote_post('https://api.openai.com/v1/chat/completions', [
    'headers' => [
      'Authorization' => 'Bearer ' . OPENAI_API_KEY,
      'Content-Type' => 'application/json'
    ],
    'body' => json_encode([
      'model' => 'gpt-4o',
      'messages' => [
        ['role' => 'user', 'content' => $message]
      ]
    ])
  ]);

  $body = json_decode(wp_remote_retrieve_body($response), true);

  return ['reply' => $body['choices'][0]['message']['content']];
}

Fazit und Empfehlungen

Für Einsteiger: No-Code-Plattformen

Wenn Sie schnell starten möchten und keine Entwicklungsressourcen haben:

  • Chatbase für einfache FAQ-Bots
  • Tidio für E-Commerce
  • Botpress für komplexere Flows (Open Source)

Für Entwickler: OpenAI Assistants API

Die Assistants API bietet:

  • Eingebautes RAG mit File Search
  • Thread-Management für Konversationen
  • Code Interpreter für dynamische Berechnungen
  • Einfache Integration, wenig Boilerplate

Für DSGVO-sensible Anwendungen

Wenn Datenschutz oberste Priorität hat:

  • Mistral AI (EU-basiert)
  • Aleph Alpha (Deutschland)
  • Selbst-gehostete Modelle (Llama, Mixtral)

Meine Empfehlung

Starten Sie mit einer No-Code-Lösung oder der OpenAI Assistants API. Sobald Sie die Anforderungen besser verstehen, können Sie auf eine maßgeschneiderte Lösung migrieren.

Ein gut konfigurierter Chatbot mit Ihrer FAQ und Produktdokumentation kann 60-80% der Standardanfragen automatisch beantworten – und das rund um die Uhr.


Sie möchten einen KI-Chatbot auf Ihrer Website integrieren? Als Freelancer für Webentwicklung in Stuttgart unterstütze ich Sie bei der Konzeption und Umsetzung – von der einfachen Widget-Integration bis zur vollständigen Custom-Lösung. Kontaktieren Sie mich für ein unverbindliches Gespräch.

Verwandte Inhalte

Tags:

#KI #Chatbot #OpenAI #API-Integration #DSGVO #Tutorial #ChatGPT #Claude

René Lauenroth

Webentwickler mit über 30 Jahren Erfahrung. Spezialisiert auf TYPO3, WordPress und KI-Integration.

Mehr erfahren

Verwandte Artikel

Haben Sie Fragen zu diesem Thema?

Ich berate Sie gerne zu Ihrem Webprojekt.

Kontakt aufnehmen