Bob Office 168/52 developer documentation

Dokumentacja API, webhooki i osadzalny widget Boba — wasz zarządzany front office AI.

🔐 Uwierzytelnianie

POST /api/auth/login
Uwierzytelnij użytkowników admin i uzyskaj token dostępu
{
  "email": "admin@office16852.com",
  "password": "your_password"
}
POST /api/customers/auth/login
Uwierzytelnij użytkowników klientów (wielodostawca)
{
  "email": "customer@business.com",
  "password": "customer_password"
}

Czat i rozmowy

Trzy ścieżki: (1) Publik, ta sama domena, anonim.POST /api/chat (np. widget na stronie marketingowej; bez logowania). (2) Osadzenie cross-originPOST /api/widget/chat with X-Widget-Key and allowed Origin. (3) Uwierzytelniona aplikacja / Mission ControlPOST /api/chat/session i POST /api/chat/message (wymaga chat.manage and session/CSRF for cookie auth) — nie for anonymous fetch ze stron publicznych.

1) Publiczne anonimowe (same-origin)

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

2) Widget cross-origin

POST /api/widget/chat
Osadzane w witrynach klientów. Nagłówki: X-Widget-Key, Content-Type: application/json. Origin must be allowed for the key. See docs/REQUEST_FLOWS.md w repozytorium znajdziesz szczegóły CORS.

3) Tylko uwierzytelniona sesja / interfejs administratora

POST /api/chat/session
Utwórz sesję po zalogowaniu do Mission Control lub panelu (RBAC + CSRF dla cookies).
POST /api/chat/message
Send a message from uwierzytelniony admin/chat UI (chat.manage). Zwraca 401 if called anonymously from a public page — use POST /api/chat dla tego przypadku zamiast tego.
{
  "session_id": "session_123",
  "message": "Hello, I need help with my order"
}
GET /api/chat/history/:session_id
Pobieranie historii rozmów w czacie (uwierzytelnione)

📊 Analityka i monitorowanie

GET /api/analytics/overview
Pobierz przegląd analityki systemowej
GET /api/health
Sprawdź stan systemu
GET /api/metrics/business
Pobierz metryki specyficzne dla firmy

Zarządzanie klientami wielu najemców

GET /api/customers/dashboard/:businessId
Pobierz dane panelu klienta dla konkretnej firmy
GET /api/customers/analytics/:businessId
Pobierz analitykę biznesową dla konkretnego klienta
GET /api/customers/integration/:businessId/status
Sprawdź status integracji dla firmy

🎯 Pilotaż UnityXpressions

GET /api/unityxpressions/dashboard
Dane pulpitu pilotażowego UnityXpressions
GET /api/pilot/metrics/realtime
Metryki pilota w czasie rzeczywistym
GET /api/pilot/feedback/recent
Najnowsze opinie klientów (pilotaż)

🎓 Szkolenie i nauka

POST /api/training/unityxpressions/analyze
Analizuj biznes UnityXpressions pod kątem treningu
POST /api/training/unityxpressions/quick-setup
Szybki trening startowy UnityXpressions
GET /api/learning/health
Stan kondycji silnika uczenia

🔌 Instalacja widżetu

Dodaj Boba do dowolnej strony jednym tagiem skryptu. Po onboardingu kod osadzenia widgetu jest dostępny w Portalu Klienta w sekcji Konfiguracja widżetu.

<!-- 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
Zwraca gotowy kod osadzenia. Wymagany JWT klienta.

🎭 Personalizacja persony

Persona definiują sposób wypowiedzi Boba — ton, imię, polecenia. Default przy rejestracji; edycja w admin/API.

GET /api/personas/:tenantId
Wyświetl wszystkie persony dla tenant’a.
POST /api/personas/:tenantId
Utwórz nową personę. Treść: { name, description, tone, systemPrompt }
PUT /api/personas/:tenantId/:personaId
Zaktualizuj ton, instrukcje lub nazwę istniejącej persony.

💰 Plany i cennik

Published pricebook is the source of truth. Use the APIs below for live numbers; this table matches pricebook-seed V1 (dostosowuje się po opublikowaniu nowej wersji).

Funkcja Startowy Pro (wersja) Enterprise
Cena katalogowa (USD/mies.) $79 $249 $899
Dołączone kredyty AI / mies. 15,000 75,000 250,000
Miejsca w zespole Do 3 Do 10 Bez limitu
Standardowe integracje (w cenie) 1 3 10
Wsparcie E-mail Priorytet Dedykowany
GET /api/pricing/marketing-cards
Karty planów: marketing, checkout (ceny, kredyty, estymacje) z opublikowanego cennika. Bez logowania.
GET /api/pricing/snapshot
Bezpieczna publiczna migawka cennika (bez pól kosztu dostawcy). Logowanie nie jest wymagane.

🛠️ Przykłady integracji

Użyj bloku dopasowanego do Twojego scenariusza. Nie kopiuj przykładu administratora do anonimowego HTML marketingowego.

Public, ta sama domena (anonim).

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();

Widget cross-origin

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 })
});

Tylko uwierzytelniony 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 }
)