Bob Office 168/52 developer documentation

API-Referenz, Webhooks und das einbettbare Widget für Bob — Ihr gesteuertes KI-Front-Office.

🔐 Authentifizierung

POST /api/auth/login
Admin-Benutzer authentifizieren und Zugriffstoken beziehen
{
  "email": "admin@office16852.com",
  "password": "your_password"
}
POST /api/customers/auth/login
Kundenbenutzer authentifizieren (Multi-Tenant)
{
  "email": "customer@business.com",
  "password": "customer_password"
}

Chat & Gespräche

Drei Wege: (1) Gleiche Herkunft, öffentlich, anonymPOST /api/chat (z. B. Widget auf Marketing-Website; kein Login). (2) Cross-Origin-EinbettungPOST /api/widget/chat with X-Widget-Key and allowed Origin. (3) Authentifizierte App / Mission ControlPOST /api/chat/session und POST /api/chat/message (erfordert chat.manage and session/CSRF for cookie auth) — nicht for anonymous fetch von öffentlichen Seiten.

1) Öffentlich anonym (same-origin)

POST /api/chat
Unified pipeline for visitors on your own domain without signing in. Body includes message, session_id, optional business_id.

2) Cross-origin-Widget

POST /api/widget/chat
Wird auf Kundenseiten eingebettet. Header: X-Widget-Key, Content-Type: application/json. Origin must be allowed for the key. See docs/REQUEST_FLOWS.md im Repository zu CORS-Details.

3) Nur authentifizierte Sitzung / Admin-UI

POST /api/chat/session
Sitzung erstellen, wenn in Mission Control oder das Dashboard eingeloggt (RBAC + CSRF für Cookies).
POST /api/chat/message
Send a message from authentifiziert admin/chat UI (chat.manage). Gibt zurück 401 if called anonymously from a public page — use POST /api/chat für diesen Fall stattdessen.
{
  "session_id": "session_123",
  "message": "Hello, I need help with my order"
}
GET /api/chat/history/:session_id
Chat-Verlauf abrufen (authentifiziert)

📊 Analytik & Überwachung

GET /api/analytics/overview
Systemanalyse-Überblick abrufen
GET /api/health
Systemzustand prüfen
GET /api/metrics/business
Geschäftsspezifische Kennzahlen abrufen

Multi-Mandanten-Kundenverwaltung

GET /api/customers/dashboard/:businessId
Kundendashboard-Daten für bestimmtes Unternehmen abrufen
GET /api/customers/analytics/:businessId
Geschäftsanalysen für bestimmten Kunden abrufen
GET /api/customers/integration/:businessId/status
Integrationsstatus für Unternehmen prüfen

🎯 UnityXpressions-Pilot

GET /api/unityxpressions/dashboard
UnityXpressions-Pilot-Dashboard-Daten
GET /api/pilot/metrics/realtime
Echtzeit-Kennzahlen zur Pilot-Performance
GET /api/pilot/feedback/recent
Aktuelles Kundenfeedback aus dem Pilot

🎓 Schulung & Lernen

POST /api/training/unityxpressions/analyze
UnityXpressions-Geschäft für Training analysieren
POST /api/training/unityxpressions/quick-setup
Kurz-Einarbeitung für UnityXpressions
GET /api/learning/health
Integritätsstatus der Lern-Engine

🔌 Widget-Installation

Fügen Sie Bob mit einem einzigen Script-Tag zu jeder Website hinzu. Nach dem Onboarding ist Ihr Widget-Einbettungscode im Customer Portal unter verfügbar Widget-Einrichtung.

<!-- Canonical tenant-scoped bundle from Customer Portal Widget Setup (no API key in HTML). -->
<script src="https://YOUR_OFFICE_HOST/widget/YOUR_TENANT_UUID/widget.js" async></script>
GET /api/customer-portal/widget-code
Liefert einbettbaren Code zum Einfügen. Kunden-JWT erforderlich.

🎭 Persona-Anpassung

Personas bestimmen Ton, Namen und Anweisungen. Jeder Mandant bekommt ein Default-Persona, anpassbar in Admin oder per API.

GET /api/personas/:tenantId
Alle Personas für einen Mandanten auflisten.
POST /api/personas/:tenantId
Neue Persona erstellen. Text: { name, description, tone, systemPrompt }
PUT /api/personas/:tenantId/:personaId
Aktualisieren Sie Ton, Anweisungen oder Namen einer bestehenden Persona.

💰 Tarife & Preise

Published pricebook is the source of truth. Use the APIs below for live numbers; this table matches pricebook-seed V1 (passt sich an, wenn Sie eine neue Version veröffentlichen).

Funktion Starter Pro (Stufe) Enterprise
Listenpreis (USD/Monat) $79 $249 $899
Enthaltene KI-Credits / Monat 15,000 75,000 250,000
Team-Plätze Bis zu 3 Bis zu 10 Unbegrenzt
Standardintegrationen (enthalten) 1 3 10
Support E-Mail Priorität Dediziert
GET /api/pricing/marketing-cards
Plan-Karten für Marketing/Checkout (Preise, Guthaben, Schätzungen) — aus dem veröffentlichten Preisblatt. Keine Anmeldung nötig.
GET /api/pricing/snapshot
Öffentlich sicherer, vollständiger Preislisten-Snapshot (ohne Anbieterkostenfelder). Keine Authentifizierung erforderlich.

🛠️ Integrationsbeispiele

Verwenden Sie den Block, der zu Ihrem Szenario passt. Kopieren Sie das Admin-Beispiel nicht in anonymes Marketing-HTML.

Gleiche Herkunft, öffentlich (anonym).

const response = await fetch('/api/chat', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    session_id: sessionId,
    message: userMessage,
    business_id: 'office16852-platform'
  })
});
const data = await response.json();

Cross-Origin-Widget

const response = await fetch('https://office16852.com/api/widget/chat', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Widget-Key': 'pk_live_...',
    'Origin': 'https://your-customer-site.com'
  },
  body: JSON.stringify({ session_id: sessionId, message: userMessage })
});

Nur authentifizierter Admin (Bearer)

// JavaScript — requires logged-in admin / Mission Control (Bearer)
const response = await fetch('/api/chat/message', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer ' + token
  },
  body: JSON.stringify({
    session_id: sessionId,
    message: userMessage
  })
});
const data = await response.json();
// Python — authenticated only
import requests
response = requests.post(
    'https://office16852.com/api/chat/message',
    headers={
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {token}'
    },
    json={ 'session_id': session_id, 'message': user_message }
)