Webchatix-Dokumentation
Telegram-first Live-Chat: Besucher schreiben ins Website-Widget, Ihr Team antwortet aus Telegram und dem Web-Dashboard. Links die Abschnitte, rechts die Details.
In 5 Minuten
- Bot öffnen →
/start— es entstehen ein Konto im Tarif Free und die erste Website. - HTML-Snippet kopieren und auf der Website vor
</body>einfügen. /panel— Einmal-Link ins Web-Dashboard (oder der Menüpunkt „Web-Dashboard“).- Eine Person einladen:
/inviteoder Menü → „Team“ → ➕. - Telegram-Gruppe verbinden: Bot zur Gruppe hinzufügen (oder dort
/addgroupschreiben) und sie unter «Routen» einer Website zuweisen. - Fallback für eine ganze Website in einer Gruppe:
/bindsite site_keyin der Gruppe.
Tarife und Zahlung
Die Registrierung ist offen: /start im Bot legt ein Konto im Tarif Free an. Bezahlte Tarife kauft man per Karte im Dashboard, Bereich Rechnungen — die Zahlung läuft über Stripe.
| Tarif | Websites | Kunden / Monat | Personen | Pro Monat |
|---|---|---|---|---|
free | 1 | 30 | 1 | $0 |
basic | 20 | 1000 | 5 | $10 ($8 bei Jahreszahlung) |
unlimited | ∞ | ∞ | ∞ | $20 ($16 bei Jahreszahlung) |
Die Preise gelten pro Monat. Die Jahreszahlung ist 20% günstiger und wird einmalig abgebucht ($96 und $192 im Jahr); im Dashboard ist das Jahr vorausgewählt.
Premium (ab Basic): Vorlagen, Active Invite, Visibility Rules, Notizen, Bewertungen.
Ein Kunde ist ein eindeutiger Besucher, der im laufenden Kalendermonat einen Chat begonnen hat; der Zähler startet am 1. neu.
So funktioniert die Zahlung
- Dashboard → Rechnungen: aktueller Tarif, Verbrauch, Tarifwechsel, Liste der Zahlungen mit PDF-Links.
- Kartendaten erreichen unsere Server nie — Zahlungsseite und Kundenportal gehören Stripe.
- Einen Tarifwechsel mitten in der Periode rechnet Stripe anteilig ab; nach einer Kündigung bleibt der bezahlte Tarif bis zum Periodenende, danach fällt das Konto auf Free zurück.
- An die E-Mail-Adresse aus demselben Bereich gehen Zahlungsbeleg, Hinweis auf eine fehlgeschlagene Abbuchung und die Erinnerung an die Verlängerung.
- Platform kann weiterhin jeden Tarif manuell setzen:
/setplan <id|tg> <plan>.
Bot-Befehle
| Befehl | Wer | Bedeutung |
|---|---|---|
/start [CODE] | alle | Onboarding / Einladung einlösen. |
/menu | member | Hauptmenü des Kontos. |
/help | alle | Befehlsübersicht für deine Rolle. |
/panel | member | Magic-Link ins Web-Dashboard. |
/newsite [Name | Origin] | admin+ | Website anlegen (+ CORS-Origins). |
/addgroup | admin+ in Gruppe | Gruppe als Gruppen-Operator verbinden (ohne chat_id). |
/bindsite KEY | admin+ in Gruppe | Gruppe als Fallback-Chat verbinden. |
/invite | admin+ | Einladung ausstellen. |
/op_me CODE | alle | Einladung annehmen. |
/tpl | member | Liste / add / del / Senden per Reply + /tpl id. |
/note | member | Notiz zum Dialog (ab Basic). |
/release | member | Dialog freigeben (+ Bewertung anfragen). |
/lang | alle | Sprache der Bot-Oberfläche: en / pl / de / ru / uk / be / ar. |
/setrole id role | owner | owner|admin|operator. |
/crm on|off | owner | CRM-Brücke des Kontos ein-/ausschalten. |
/deleteaccount | owner | Konto löschen. |
/setplan | platform | Tarif des Kontos ändern. |
/platform | platform | Kontenübersicht + Link zu /admin/platform/. |
/id | im Chat | chat_id anzeigen. |
Web-Dashboard
Tenant-Login: der Link aus /panel oder ein Token auf /admin/login/. Für die Plattform-Eigentümerschaft separat: /admin/platform/ (Passwort admin_password).
| Bereich | Wozu |
|---|---|
| Übersicht | Zähler und letzte Dialoge; Firmenname; CRM-Brücke für owner — Schalter und Webhook-Link (leer — der gemeinsame aus config). |
| Websites | Anlegen, Snippet, vollständige Widget-Einstellungen. |
| Team | Mitglieder, Einladungen, Rollen, Gruppen. |
| Routen | Assignments: Website → Person/Gruppe. |
| Dialoge | Verlauf, Release, Notizen, Bewertung. |
| Vorlagen | CRUD für Vorlagen + Bewertungsübersicht (ab Basic). |
| Konten | Nur platform: Tarif, suspend, impersonate, delete. |
Website-Einstellungen
Verfügbar im Bot („Einstellungen“) und im Web unter Websites → Zahnrad.
| Feld | Bedeutung |
|---|---|
| Name / Titel / Untertitel | Kopfzeile des Chats. |
| Begrüßung / Logo | Erste Nachricht und Marke. |
| Online von–bis, TZ, Pause | Status Online/Offline. |
| Eskalation (Min.) | Alarm, wenn keine Antwort kommt. |
| Farbe / Position / Abstände | Der Widget-Button. |
| Sprache / Ton | en|pl|de|ru|uk|be|ar und eine mp3-URL. |
| Allowed origins | CORS: Domains per Komma oder *. |
| Invite * | Einladung als Sprechblase (ab Basic). |
| Visibility JSON | Wo Button/Invite erscheinen (ab Basic). |
| DSGVO | Einwilligungs-Checkbox vor dem ersten Senden. |
| KI-Antwort | Antwortet dem Besucher, wenn N Minuten niemand geantwortet hat (Standard: 3). |
KI-Antwort (Gemini)
Der Besucher schreibt, die Operatoren schweigen — nach der eingestellten Zahl von Minuten antwortet Google Gemini im Chat. Der Besucher sieht die Antwort im Widget, die Operatoren bekommen in Telegram eine Karte „KI hat geantwortet“ mit demselben Text, damit niemand dasselbe wiederholt.
- Pro Website aktivierbar: Websites → Zahnrad → KI-Antwort. Dort stehen auch die Verzögerung und das Feld „Was die KI über die Firma wissen soll“ — Öffnungszeiten, Versand, was nicht versprochen werden darf.
- Eine Antwort des Menschen setzt den Zähler zurück; einen vom Operator übernommenen (claim) Dialog rührt die KI nicht an.
- Die KI-Antwort hebt die Eskalation nicht auf: Der Admin wird weiterhin benachrichtigt, dass kein Mensch geantwortet hat.
- Das Modell antwortet kurz, erfindet keine Preise oder Termine und gibt auf direkte Nachfrage zu, ein automatischer Assistent zu sein.
- Der API-Schlüssel wird einmal pro Installation gesetzt:
gemini_api_keyinconfig/config.php(Schlüssel aus Google AI Studio, mit kostenlosem Kontingent). Ohne Schlüssel bewirkt die Checkbox nichts.
Visibility-Beispiel
{"include":["/pricing","/contacts"],"exclude":["/admin"],"desktop":true,"mobile":true} Widget auf der Website
<script async src="https://IHRE_DOMAIN/widget/webchatix.js"
data-site-key="IHR_KEY"></script>
Steuerung von der Seite aus:
webchatix("show"); // Button anzeigen
webchatix("hide"); // ausblenden
webchatix("open"); // Chat öffnen
webchatix("close"); // Panel schließen
Die Widget-Sprache kommt aus data-lang, dann aus dem <html lang> der Seite, dann aus dem Browser; unterstützt sind en / pl / de / ru / uk / be / ar, Rückfallsprache ist Englisch. Nach Änderungen an den Einstellungen die Kundenseite neu laden (die Widget-Version steht im Query ?v=).
Wenn die Website eine Content-Security-Policy setzt, erlauben Sie die Widget-Domain in drei Direktiven: script-src, style-src und connect-src. Das Widget lädt sein Aussehen aus der separaten Datei webchatix.css, ein 'unsafe-inline' in style-src ist dafür also nicht mehr nötig.
Rollen im Team
- owner — volle Kontrolle, Tarifanfragen, Kontolöschung, CRM, Eigentumsübergabe.
- admin — Websites, Einladungen, Routen, Einstellungen.
- operator — Antworten in Dialogen, Notizen/Vorlagen je nach Tarif.
Ein Telegram-Konto = ein eigenes Konto. In fremden Konten kann man per Einladung als operator mitarbeiten.
Gruppen
Nicht nur Personen, auch eine Telegram-Gruppe kann Operator sein: Die Anfrage kommt als Karte in den Chat, beantworten kann sie jedes Mitglied per Reply. Verbinden: Bot zur Gruppe hinzufügen (Menü → 💬 Gruppen → „Gruppe verbinden“) oder dort /addgroup schreiben — keine chat_id nötig, der Bot ermittelt sie selbst. Gruppen zählen nicht zum Operator-Limit des Tarifs.
Dialoge
- Die Kundennachricht geht an Telegram (Gruppe/Person gemäß Route).
- Übernehmen — Claim; eine Systemnachricht landet im Verlauf.
- Übergeben — nur an ein aktives Mitglied desselben Kontos.
- Freigeben / Release — Sie können den Besucher um eine Bewertung bitten.
- Notizen — für das Team sichtbar, nicht für Kundinnen und Kunden (ab Basic).
- Vorlagen — Reply auf den Dialog +
/tpl idoder Vorlagen-Button → Reply.
Plattform (Eigentümerschaft der Anwendung)
Telegram-IDs aus ADMIN_IDS / platform_tg_ids + Passwort admin_password.
- Web:
/admin/platform/→ Konten, setplan, suspend, impersonate, delete. - Bot:
/platform,/setplan id|tg plan.
Impersonate wird in platform_audit protokolliert (wer/IP/Konto).
Sicherheit und DSGVO
- Konten sind über
account_idisoliert. - Der Magic-Link gilt einmalig; die Ausgabe ist limitiert.
- Suspend schaltet Widget, Bot und Tenant-Dashboard ab.
- CORS: setzen Sie allowed_origins (kein
*in Produktion ohne Grund). - Die DSGVO-Checkbox erscheint vor der ersten Kundennachricht.
- Upload-Kontingent je nach Tarif (
max_upload_mb). - Höchstens 10 neue Websites pro Stunde und Konto.
Backup und Deployment
SQLite-Backup-Skript mit Rotation:
chmod +x scripts/backup-sqlite.sh
# täglich per cron:
15 3 * * * /path/to/chat-widget/scripts/backup-sqlite.sh
Kopien: data/backups/chat_*.sqlite.gz (standardmäßig 14 Stück).
Nach dem Aktualisieren der Rewrite-Regeln in aaPanel docs neben faq|contact|blog und die Sprachpräfixe pl|de|ru|uk|be|ar ergänzen, danach den Bot neu starten.