Bob Office 168/52 developer documentation

Referência de API, webhooks e widget incorporável do Bob — seu front office de IA governado.

🔐 Autenticação

POST /api/auth/login
Autenticar usuários admin e obter token de acesso
{
  "email": "admin@office16852.com",
  "password": "your_password"
}
POST /api/customers/auth/login
Autenticar usuários de clientes (multi-tenant)
{
  "email": "customer@business.com",
  "password": "customer_password"
}

Chat e conversas

Três caminhos: (1) Público, mesma origem, anônimoPOST /api/chat (ex.: widget no site de marketing; sem login). (2) Embed cross-originPOST /api/widget/chat with X-Widget-Key and allowed Origin. (3) App autenticado / Mission ControlPOST /api/chat/session e POST /api/chat/message (requer chat.manage and session/CSRF for cookie auth) — não for anonymous fetch de páginas públicas.

1) Público anônimo (same-origin)

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

2) Widget cross-origin

POST /api/widget/chat
Incorporado em sites de clientes. Cabeçalhos: X-Widget-Key, Content-Type: application/json. Origin must be allowed for the key. See docs/REQUEST_FLOWS.md no repositório para detalhes de CORS.

3) Apenas sessão autenticada / UI de admin

POST /api/chat/session
Criar sessão ao entrar no Mission Control ou no dashboard (RBAC + CSRF para cookies).
POST /api/chat/message
Send a message from autenticado admin/chat UI (chat.manage). Retorna 401 if called anonymously from a public page — use POST /api/chat para esse caso em vez disso.
{
  "session_id": "session_123",
  "message": "Hello, I need help with my order"
}
GET /api/chat/history/:session_id
Recuperar o histórico do chat (autenticado)

📊 Analytics e monitoramento

GET /api/analytics/overview
Obter visão geral das análises do sistema
GET /api/health
Verificar o status de saúde do sistema
GET /api/metrics/business
Obter métricas específicas do negócio

Gestão de clientes multi-inquilino

GET /api/customers/dashboard/:businessId
Obter dados do painel do cliente para um negócio específico
GET /api/customers/analytics/:businessId
Obter análises de negócio para um cliente específico
GET /api/customers/integration/:businessId/status
Verificar o status da integração da empresa

🎯 Piloto UnityXpressions

GET /api/unityxpressions/dashboard
Dados do painel piloto UnityXpressions
GET /api/pilot/metrics/realtime
Métricas de desempenho do piloto em tempo real
GET /api/pilot/feedback/recent
Comentários recentes de clientes (piloto)

🎓 Treinamento e aprendizado

POST /api/training/unityxpressions/analyze
Analisar o negócio da UnityXpressions para treinamento
POST /api/training/unityxpressions/quick-setup
Treinamento rápido de implantação do UnityXpressions
GET /api/learning/health
Status de saúde do mecanismo de aprendizado

🔌 Instalação do widget

Adicione o Bob a qualquer site com uma única tag de script. Após o onboarding, o código de incorporação do widget fica disponível no Portal do Cliente em Configuração do 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
Retorna código embed pronto para colar no site. Exige JWT do cliente.

🎭 Personalização de persona

Personas definem a comunicação do Bob — tom, nome, instruções. Cada tenant recebe default no cadastro; personalize no Admin ou na API.

GET /api/personas/:tenantId
Listar todas as personas de um tenant.
POST /api/personas/:tenantId
Criar uma nova persona. Corpo: { name, description, tone, systemPrompt }
PUT /api/personas/:tenantId/:personaId
Atualize o tom, as instruções ou o nome de uma persona existente.

💰 Planos e preços

Published pricebook is the source of truth. Use the APIs below for live numbers; this table matches pricebook-seed V1 (ajusta quando você publica uma nova versão).

Recurso Inicial Pro Enterprise
Preço de tabela (USD/mês) $79 $249 $899
Créditos de IA incluídos / mês 15,000 75,000 250,000
Lugares da equipe Até 3 Até 10 Ilimitado
Integrações padrão (incluídas) 1 3 10
Suporte E-mail Prioridade Dedicado
GET /api/pricing/marketing-cards
Cards de plano para marketing e checkout (preços, créditos, estimativas) — a partir do pricebook. Sem autenticação.
GET /api/pricing/snapshot
Retrato público e seguro do pricebook completo (sem campos de custo do fornecedor). Não exige autenticação.

🛠️ Exemplos de integração

Use o bloco que corresponde ao seu cenário. Não copie o exemplo de administrador para HTML de marketing anônimo.

Público, mesma origem (anônimo)

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

Somente admin autenticado (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 }
)