Rezept: FAQ-Widget für die Website
Öffentlicher Chat auf der Firma-Website, der Support-Fragen aus einer KB beantwortet.
Ein typisches Einstiegs-Szenario: nicht-eingeloggter Chat auf deiner öffentlichen Website, der Besucher-Fragen aus einer gepflegten Wissensbasis beantwortet und bei Bedarf Leads erfasst.
Ziel
- Widget auf
firma.defür jede:n Besucher:in - Antwortet aus der FAQ-KB
- Bei unbeantwortbaren Fragen: Kontaktformular anbieten (Lead erfassen)
- Kein Login nötig
1. Knowledge Base befüllen
/manage/knowledge-bases → Neu → Name: „FAQ".
Dann /manage/knowledge-sources unter dieser KB → eine oder mehrere Sources hinzufügen:
https://firma.de/faq(deine bestehende FAQ-Seite)https://firma.de/versand(wenn separat gepflegt)https://firma.de/rueckgabe
Warte, bis der Status completed ist. Prüfe unter /manage/knowledge-entries, ob die Entries sinnvoll zerschnitten wurden.
2. Such-Tool definieren
tools/kb/searchFaq.php:
<?php
return [
'tools' => [
'searchFaq' => [
'extends' => 'getKnowledge',
'description' => 'Unsere FAQ durchsuchen. Nutze für Fragen zu Versand, Rückgabe, Zahlung, Öffnungszeiten, Kontakt.',
'options' => [
'knowledge_base' => 'faq',
'limit' => 3,
],
],
],
];
3. Lead-Erfassung
API für dein CRM / Supabase in apis.php — hier nehmen wir Supabase:
'supabase' => [
'base_url' => 'https://xxx.supabase.co/rest/v1/',
'headers' => [
'apikey' => 'eyJhbGciOi…',
'Authorization' => 'Bearer ' . 'eyJhbGciOi…',
'Content-Type' => 'application/json',
'Prefer' => 'return=representation',
],
],
tools/crm/createLead.php:
<?php
return [
'tools' => [
'createLead' => [
'description' => 'Interessenten-Lead erfassen, wenn die FAQ keine Antwort liefert und der Besucher Kontakt möchte.',
'parameters' => [
'type' => 'object',
'properties' => [
'name' => ['type' => 'string'],
'email' => ['type' => 'string'],
'question' => ['type' => 'string'],
],
'required' => ['email', 'question'],
],
'api' => 'supabase',
'method' => 'POST',
'path' => 'leads',
'body' => [
'name' => '{name}',
'email' => '{email}',
'question' => '{question}',
'source' => 'web_widget',
],
'mapping' => [
'id' => '[0].id',
],
],
],
];
4. Public-Chat erlauben
public.php im Workspace-Root:
<?php
return [
'public.tools' => ['searchFaq', 'createLead', 'setSuggestions'],
'public.greeting' => 'Hi! Worum geht es?',
'public.suggestions' => [
'Wie ist der Versand?',
'Kann ich zurückgeben?',
'Öffnungszeiten?',
],
];
Der System-Prompt für den Public-Chat liegt unter public.prompt — entweder
direkt in derselben public.php neben public.tools, oder in einer
separaten Patch-Datei. Beispiel:
<?php
// public.php (oder eigene Datei)
return [
'public.prompt' => <<<PROMPT
Du bist der Website-Assistent der Firma.
Ablauf:
1. Bei Besucher-Fragen: searchFaq nutzen.
2. Antworte aus dem Suchergebnis. Zitiere bei Bedarf den Entry-Titel.
3. Wenn searchFaq nichts Passendes liefert: freundlich sagen
"Das kann ich dir aus unserer FAQ nicht beantworten. Soll ich
dich kontaktieren lassen? Dann brauche ich deinen Namen
und deine E-Mail."
4. Bei Ja: createLead mit den Angaben + der ursprünglichen Frage.
Halte Antworten kurz (2-3 Sätze). Keine Emojis. Kein Verkaufssprech.
PROMPT,
];
Die public.tools-Liste ist die harte Grenze — das Widget kann nie andere Tools aufrufen, egal was der Besucher schreibt.
5. Widget auf der Website einbinden
Dein Betreiber liefert dir einen Embed-Snippet, typisch:
<script src="https://gpt.meco-media.com/widget.js" data-tenant="firma"></script>
Ins <body> deiner Website einbauen. Fertig — das Widget erscheint als Chat-Button.
6. Testen — lokal
tm chat --public # simuliert den Besucher-Chat ohne Auth
Probiere durch:
- Eine FAQ-Frage, die abgedeckt ist
- Eine Frage außerhalb der FAQ → sollte zum Lead-Formular führen
- Eine Provokation ("Erzähl mir einen Witz") → sollte höflich abgelehnt werden
7. Regression absichern
public.php ergänzen:
'conversation_tests' => [
[
'description' => 'FAQ-Treffer',
'user_message' => 'wie lange kann ich zurückgeben?',
'expect_tool_calls' => ['searchFaq'],
'expect_response_contains_any' => ['Tage', 'zurückgeben', 'Rücksendung'],
],
[
'description' => 'Out-of-scope führt zu Lead-Angebot',
'user_message' => 'kann ich mit einem Mitarbeiter telefonieren?',
'expect_response_contains_any' => ['kontaktieren', 'E-Mail', 'Name'],
],
],
tm test-conversations
8. Live beobachten
tm monitor
Pro Besucher-Interaktion siehst du, welche Tools gerufen wurden. Wenn createLead nie ausgelöst wird, stimmt der Prompt-Flow nicht — Prompt schärfen, wieder testen.
Anpassungen
- Mehr KBs: zweite KB für Produkte, zweites Such-Tool
searchProducts - Sprachen: Prompt-Baustein pro Sprache, per Browser-Sprache umschalten (mit Custom-Tool)
- Datenschutz: Lead-Erfassung mit Opt-In-Checkbox im Widget-UI (Konfiguration am Widget)
- Öffnungszeiten: Tool, das prüft, ob gerade geöffnet ist — entsprechende Antworten anpassen