Inicio Rápido
Conecta Bob a tu sitio web o flujo de trabajo de front-office en unos pocos pasos guiados.
Crear o seleccionar un inquilino
Elige el inquilino que posee el sitio web, el widget y las credenciales de API para esta integración.
Generar credenciales
Crea una clave de widget con alcance de inquilino desde el Portal del Cliente → Configuración del Widget, o utiliza un JWT de cliente para la automatización del lado del servidor.
Instala el widget o llama al API
Utiliza el widget del sitio web para chat en el front-end o el API para flujos de trabajo del lado del servidor.
Prueba con navegador a prueba.
Verifica la integración desde el navegador en vivo, no solo una solicitud simulada.
<!-- Tenant-scoped bundle — replace YOUR_TENANT_UUID after onboarding -->
<script src="https://office16852.com/widget/YOUR_TENANT_UUID/widget.js" async></script>
Configuración
Complete estos requisitos previos antes de llamar a APIs protegidos o publicar el widget en dominios de producción.
External integrations connect systems outside the platform to Bob. Day-to-day front-office work happens in the Portal del cliente.
- Tenant created
- Business profile completed
- Website or channel configured
- API credentials generated
- Allowed origins configured
- Test conversation completed
| Entorno | Propósito | Dónde configurar |
|---|---|---|
| Producción | Tráfico de clientes en vivo | Portal del Cliente → Configuración del Widget |
| Etapa / vista previa | Verificación previa al lanzamiento | Orígenes permitidos + dominio de prueba |
| Automatización | Webhooks del lado del servidor y APIs | JWT del cliente desde el inicio de sesión del portal |
Autenticación
Las solicitudes protegidas API deben incluir una credencial con alcance de inquilino. Mantenga las claves privadas del lado del servidor y nunca las exponga en el código del navegador.
Generar credenciales
requeridoSign in to the Customer Portal and create widget keys in Widget Setup, or obtain a customer JWT via POST /api/customer/auth/login para la automatización.
Enviar encabezado de autorización
Server-to-server automation uses Authorization: Bearer <token> con cuerpos JSON.
curl https://office16852.com/api/customer-portal/widget-code \
-H "Authorization: Bearer YOUR_CUSTOMER_JWT" \
-H "Content-Type: application/json"
Manejar errores de autenticación
Devuelve errores estructurados a tu capa de integración y vuelve a intentar solo cuando sea apropiado.
| Estado | Significado |
|---|---|
| 401 | Credencial faltante o inválida |
| 403 | La credencial es válida pero carece de permiso. |
| 429 | Límite de tasa excedido |
/api/customer/auth/login
Inicio de sesión del Portal del Cliente. Devuelve JWT para llamadas de integración autenticadas.
/api/auth/login
Inicio de sesión del operador de Mission Control (solo para administración de la plataforma).
Chat y Conversaciones
Bob expone tres rutas de chat dependiendo del contexto del llamador: anónimo de mismo origen, widget de origen cruzado y Control de Misión autenticado.
POST /api/chat. (2) Cross-origin embed → POST /api/widget/chat con X-Widget-Key. (3) Mission Control → POST /api/chat/message (requiere chat.manage; no para la búsqueda pública anónima)./api/chat
Chat anónimo público en tu propio dominio. Cuerpo: mensaje, session_id, business_id opcional.
/api/widget/chat
Chat de widget de origen cruzado. Encabezados: X-Widget-Key, Content-Type. El origen debe estar en la lista permitida.
/api/widget/chat/audio
Transcripción de voz a texto para entrada de voz de widget. Las mismas reglas de clave y origen que el chat.
/api/chat/session
Crea una sesión cuando estés conectado a Mission Control (RBAC + CSRF para cookies).
/api/chat/message
La interfaz de usuario de administrador autenticada envía (chat.manage). Devuelve 401 si se llama de forma anónima.
/api/chat/history/:session_id
Historial de conversación (autenticado).
const response = await fetch('/api/chat', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
session_id: sessionId,
message: userMessage,
business_id: 'your-tenant-slug'
})
});
const data = await response.json();
Instalación del Widget
Instala el widget en tu sitio cuando quieras que Bob esté disponible directamente para los visitantes. Utiliza la configuración específica del inquilino desde el Portal del Cliente → Configuración del Widget.
After onboarding, your embed code is in the Customer Portal under Configuración del widget. The publishable widget key (pk_live_…) está configurado allí—no incrustado en HTML estático.
<!-- Tenant-scoped bundle from Customer Portal → Widget Setup -->
<script src="https://office16852.com/widget/YOUR_TENANT_UUID/widget.js" async></script>
| Artículo | Propósito | Ejemplo |
|---|---|---|
| UUID de inquilino en la ruta del script | Identifica tu paquete de widgets | Desde la Configuración del Widget |
| Clave del widget publicable | Autentica el chat de origen cruzado | pk_live_… (configurado en el portal, no en HTML) |
| Orígenes permitidos | Dominios permitidos para llamar al chat del widget | https://your-site.com |
/api/customer-portal/widget-code
Devuelve el código de incrustación listo para pegar. Requiere JWT del cliente (config.read).
Webhooks del Panel de Control
Utiliza webhooks salientes para recibir actualizaciones cuando las conversaciones, transferencias, leads o eventos de flujo de trabajo cambien en tu inquilino.
| Evento | Descripción |
|---|---|
| conversation.escalated | Transferencia humana solicitada |
| conversation.takeover.started | El agente tomó control en vivo |
| conversation.takeover.released | Devuelto a Bob |
| lead.created | Nueva captura de intake |
| appointment.booked | Confirmación de programación |
| billing.payment_failed | Señal de riesgo de cuenta |
| billing.payment_recovered | Pago restaurado |
| webhook.test | Verificación de conectividad desde el portal |
| * | Todos los eventos anteriores |
Crear una suscripción
Utiliza un JWT de administrador del Portal del Cliente. Envía una solicitud POST a la URL, eventos y descripción a /api/webhooks/subscriptions.
{
"url": "https://your-app.com/webhooks/bob",
"events": ["lead.created", "conversation.escalated"],
"description": "CRM intake"
}
Verificar firmas
Verifica las firmas de webhook del lado del servidor antes de confiar en la carga útil.
{
"event": "lead.created",
"tenantId": "tenant_...",
"conversationId": "conv_...",
"createdAt": "2026-06-19T12:00:00Z",
"data": {}
}
/api/webhooks/subscriptions
Listar suscripciones (los secretos nunca se devuelven).
/api/webhooks/subscriptions
Crear suscripción. Se muestra el secreto de firma una vez en la respuesta.
/api/webhooks/subscriptions/:id
Eliminar una suscripción.
/api/webhooks/subscriptions/:id/test
Cola la entrega de webhook.test.
/api/webhooks/deliveries
Registro de entregas incluyendo filas de carta muerta.
Automatización de Personas
La automatización de personas controla cómo Bob representa tu negocio, cuándo escalar y cómo manejar los límites.
persona.manage.Voz empresarial
Tono, estilo de saludo y respuestas alineadas con la marca.
Comportamiento de escalada
Cuando Bob pasa a manos humanas o crea tareas.
Límites de tema
Temas aprobados y patrones de rechazo seguros.
Preferencias de flujo de trabajo
Enrutamiento de departamentos y ganchos de automatización.
/api/personas
Lista de personas para el inquilino autenticado.
/api/personas/:id
Obtener una persona por id.
/api/personas
Crea una persona con nombre, campos de tono, systemPrompt, etc.
/api/personas/:id
Actualizar una persona existente.
Planes y Precios APIs
Los endpoints del libro de precios publicados potencian las superficies de marketing y el proceso de pago. La gestión de facturación API no es pública.
| Función | Starter | Pro | Plan Enterprise |
|---|---|---|---|
| Precio de lista (USD/mes) | $79 | $249 | $899 |
| Créditos de IA incluidos / mes | 15,000 | 75,000 | 250,000 |
| Puestos de equipo | Hasta 3 | Hasta 10 | Ilimitado |
| Integraciones estándar | 1 | 3 | 10 |
| Soporte | Correo | Prioritario | Dedicado |
/api/pricing/marketing-cards
Tarjetas de plan para marketing y checkout (público, sin auth).
/api/pricing/snapshot
Instantánea pública segura del libro de precios (sin campos de coste de proveedor).
Health & Status
Utiliza información de salud y estado para verificar la disponibilidad, monitorear dependencias ascendentes y solucionar problemas de integración.
/api/health
Sonda de salud ligera para monitores y balanceadores de carga.
/api/health/public
Carga útil de estado público consumida por la página de Estado del Sistema.
Ejemplos de Integración
Puntos de partida prácticos para patrones de integración comunes.
Widget de chat para el sitio web
Agrega Bob a un sitio de marketing o portal de clientes.
Ver ejemplo →Conversación del lado del servidor API
Chat anónimo de mismo origen desde tu aplicación.
Ver ejemplo →Escuchador de Webhook
Verifica firmas y procesa lead.created.
Ver ejemplo →flujo de entrega CRM
Reacciona a eventos de conversación escalados.
Ver ejemplo →Flujo de captura de leads
Suscríbete a lead.created para la recepción.
Ver ejemplo →Escalación de soporte
Monitorea las escalaciones y eventos de toma de control.
Ver ejemplo →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 })
});
Descripción de la Arquitectura
Office 168/52 es una oficina frontal gobernada basada en navegador: Portal del Cliente para operadores, Mando de Misión para la administración de la plataforma y superficies de integración públicas para tu pila.
Customer Portal and Mission Control APIs are session-backed UI routes—not published here. For a concise platform diagram, see resumen de arquitectura y centro de pruebas.