TaskMonkey Handbuch

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.de fü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-basesNeu → 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
Zuletzt aktualisiert: 2026-04-19