Bob Office 168/52 developer documentation

Référence API, webhooks et widget intégrable pour Bob — votre front office IA gouverné.

🔐 Authentification

POST /api/auth/login
Authentifier les administrateurs et obtenir un jeton d’accès
{
  "email": "admin@office16852.com",
  "password": "your_password"
}
POST /api/customers/auth/login
Authentifier les clients (multi-locataire)
{
  "email": "customer@business.com",
  "password": "customer_password"
}

Chat et conversations

Trois voies : (1) Même origine, public, anonyme.POST /api/chat (ex. widget du site marketing ; sans connexion). (2) Intégration cross-originPOST /api/widget/chat with X-Widget-Key and allowed Origin. (3) Application authentifiée / Mission ControlPOST /api/chat/session et POST /api/chat/message (nécessite chat.manage and session/CSRF for cookie auth) — pas for anonymous fetch depuis les pages publiques.

1) Public anonyme (same-origin)

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

2) Widget cross-origin

POST /api/widget/chat
Intégré aux sites clients. En-têtes : X-Widget-Key, Content-Type: application/json. Origin must be allowed for the key. See docs/REQUEST_FLOWS.md dans le dépôt pour les détails CORS.

3) Session authentifiée / interface admin uniquement

POST /api/chat/session
Créer une session lors de la connexion à Mission Control ou au tableau de bord (RBAC + CSRF pour les cookies).
POST /api/chat/message
Send a message from authentifié admin/chat UI (chat.manage). Retourne 401 if called anonymously from a public page — use POST /api/chat pour ce cas à la place.
{
  "session_id": "session_123",
  "message": "Hello, I need help with my order"
}
GET /api/chat/history/:session_id
Récupérer l’historique des conversations de chat (authentifié)

📊 Analytique et supervision

GET /api/analytics/overview
Obtenir une vue d’ensemble des analyses système
GET /api/health
Vérifier l’état de santé du système
GET /api/metrics/business
Obtenir les métriques spécifiques à l’entreprise

Gestion des clients multi-locataires

GET /api/customers/dashboard/:businessId
Obtenir les données du tableau de bord client pour une entreprise spécifique
GET /api/customers/analytics/:businessId
Obtenir les analyses métier pour un client spécifique
GET /api/customers/integration/:businessId/status
Vérifier l’état d’intégration de l’entreprise

🎯 Pilote UnityXpressions

GET /api/unityxpressions/dashboard
Données du tableau de bord pilote UnityXpressions
GET /api/pilot/metrics/realtime
Indicateurs de pilotage en direct
GET /api/pilot/feedback/recent
Retours clients récents, pilote

🎓 Formation et apprentissage

POST /api/training/unityxpressions/analyze
Analyser l'activité UnityXpressions pour l'entraînement
POST /api/training/unityxpressions/quick-setup
Formation de mise en route express pour UnityXpressions
GET /api/learning/health
État de santé du moteur d’apprentissage

🔌 Installation du widget

Ajoutez Bob à n'importe quel site avec une seule balise script. Après l'onboarding, votre code d'intégration du widget est disponible dans le Portail Client sous Configuration du widget.

<!-- 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
Renvoie un code intégrable prêt à coller. JWT client requis.

🎭 Personnalisation de la persona

Les personae définissent le ton, le nom et le système d’instructions. Un persona par défaut par tenant ; modifiable dans l’admin ou l’API.

GET /api/personas/:tenantId
Lister tous les personas d’un tenant.
POST /api/personas/:tenantId
Créer une nouvelle persona. Corps : { name, description, tone, systemPrompt }
PUT /api/personas/:tenantId/:personaId
Mettez à jour le ton, les instructions ou le nom d’une persona existante.

💰 Offres et tarifs

Published pricebook is the source of truth. Use the APIs below for live numbers; this table matches pricebook-seed V1 (s'ajuste lorsque vous publiez une nouvelle version).

Fonctionnalité Démarrage Pro (offre) Enterprise
Prix catalogue (USD/mois) $79 $249 $899
Crédits IA inclus / mois 15,000 75,000 250,000
Sièges d’équipe Jusqu’à 3 Jusqu’à 10 Illimité
Intégrations standard (incluses) 1 3 10
Assistance E-mail Priorité Dédié
GET /api/pricing/marketing-cards
Cartes « plan » marketing / panier (prix, crédits, devis) — issus du pricebook. Sans authentification.
GET /api/pricing/snapshot
Aperçu public sûr et complet de la grille tarifaire (sans champs de coût fournisseur). Aucune authentification requise.

🛠️ Exemples d’intégration

Utilisez le bloc qui correspond à votre scénario. Ne copiez pas l'exemple administrateur dans du HTML marketing anonyme.

Même origine, public (anonyme).

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

Administrateur authentifié uniquement (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 }
)