Démarrage rapide
Connectez Bob à votre site web ou à votre flux de travail en front-office en quelques étapes guidées.
Créer ou sélectionner un locataire
Choisissez le locataire qui possède le site web, le widget et les API identifiants pour cette intégration.
Générez des identifiants
Créez une clé de widget spécifique au locataire depuis le Portail Client → Configuration du Widget, ou utilisez un JWT client pour l'automatisation côté serveur.
Installez le widget ou appelez le API
Utilisez le widget du site web pour le chat frontal ou le API pour les workflows côté serveur.
Test avec preuve de navigateur
Vérifiez l'intégration depuis le navigateur en direct, pas seulement une demande fictive.
<!-- Tenant-scoped bundle — replace YOUR_TENANT_UUID after onboarding -->
<script src="https://office16852.com/widget/YOUR_TENANT_UUID/widget.js" async></script>
Configuration
Complétez ces prérequis avant d'appeler les API protégés ou de publier le widget sur des domaines de production.
External integrations connect systems outside the platform to Bob. Day-to-day front-office work happens in the Portail client.
- Tenant created
- Business profile completed
- Website or channel configured
- API credentials generated
- Allowed origins configured
- Test conversation completed
| Environnement | Objectif | Où configurer |
|---|---|---|
| Production | Trafic client en direct | Portail Client → Configuration du Widget |
| Mise en scène / aperçu | Vérification pré-lancement | Origines autorisées + domaine de test |
| Automatisation | Webhooks côté serveur & APIs | JWT client depuis la connexion au portail |
Authentification
Les demandes API protégées doivent inclure un identifiant d'utilisateur spécifique au locataire. Gardez les clés privées côté serveur et ne les exposez jamais dans le code du navigateur.
Générez des identifiants
requisSign in to the Customer Portal and create widget keys in Widget Setup, or obtain a customer JWT via POST /api/customer/auth/login pour l'automatisation.
Envoyer l'en-tête d'autorisation
Server-to-server automation uses Authorization: Bearer <token> avec des corps JSON.
curl https://office16852.com/api/customer-portal/widget-code \
-H "Authorization: Bearer YOUR_CUSTOMER_JWT" \
-H "Content-Type: application/json"
Gérer les erreurs d'authentification
Retournez des erreurs structurées à votre couche d'intégration et réessayez uniquement lorsque cela est approprié.
| Statut | Sens |
|---|---|
| 401 | Identifiant manquant ou invalide |
| 403 | Le certificat est valide mais manque de permissions. |
| 429 | Limite de taux dépassée |
/api/customer/auth/login
Connexion au portail client. Renvoie un JWT pour les appels d'intégration authentifiés.
/api/auth/login
Connexion opérateur Mission Control (administration de la plateforme uniquement).
Chat et Conversations
Bob expose trois chemins de chat en fonction du contexte de l'appelant : anonyme de même origine, widget cross-origin et Mission Control authentifié.
POST /api/chat. (2) Cross-origin embed → POST /api/widget/chat con X-Widget-Key. (3) Mission Control → POST /api/chat/message (nécessite chat.manage; pas pour une récupération publique anonyme)./api/chat
Chat public anonyme sur votre propre domaine. Corps : message, session_id, business_id optionnel.
/api/widget/chat
Widget de chat cross-origin. En-têtes : X-Widget-Key, Content-Type. L'origine doit être sur la liste blanche.
/api/widget/chat/audio
Transcription vocale pour l'entrée vocale des widgets. Même règles de clé et d'origine que pour le chat.
/api/chat/session
Créer une session lors de la connexion à Mission Control (RBAC + CSRF pour les cookies).
/api/chat/message
L'interface utilisateur admin authentifiée envoie (chat.manage). Renvoie 401 si appelée anonymement.
/api/chat/history/:session_id
Historique des conversations (authentifié).
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();
Installation de Widget
Installez le widget sur votre site lorsque vous souhaitez que Bob soit disponible directement pour les visiteurs. Utilisez la configuration spécifique au locataire depuis le Portail Client → Configuration du Widget.
After onboarding, your embed code is in the Customer Portal under Configuration du widget. The publishable widget key (pk_live_…) est configuré là-bas—pas intégré dans du HTML statique.
<!-- Tenant-scoped bundle from Customer Portal → Widget Setup -->
<script src="https://office16852.com/widget/YOUR_TENANT_UUID/widget.js" async></script>
| Article | Objectif | Exemple |
|---|---|---|
| UUID de locataire dans le chemin du script | Identifie votre ensemble de widgets | Depuis la configuration du Widget |
| Clé de widget publiable | Authentifie le chat inter-domaines | pk_live_… (configuré dans le portail, pas dans le HTML) |
| Origines autorisées | Domaines autorisés à appeler le chat widget | https://your-site.com |
/api/customer-portal/widget-code
Renvoie le code d'intégration prêt à être collé. Nécessite le JWT du client (config.read).
Webhooks de tableau de bord
Utilisez des webhooks sortants pour recevoir des mises à jour lorsque des conversations, des transferts, des prospects ou des événements de flux de travail changent dans votre locataire.
| Événement | Description |
|---|---|
| conversation.escalated | Transfert humain demandé |
| conversation.takeover.started | L'agent a pris le contrôle en direct |
| conversation.takeover.released | Rendu à Bob |
| lead.created | Nouvelle capture d'intake |
| appointment.booked | Confirmation de planification |
| billing.payment_failed | Signal de risque de compte |
| billing.payment_recovered | Paiement rétabli |
| webhook.test | Vérification de la connectivité depuis le portail |
| * | Tous les événements ci-dessus |
Créer un abonnement
Utilisez un JWT d'administrateur du portail client. POST l'URL, les événements et la description à /api/webhooks/subscriptions.
{
"url": "https://your-app.com/webhooks/bob",
"events": ["lead.created", "conversation.escalated"],
"description": "CRM intake"
}
Vérifiez les signatures
Vérifiez les signatures des webhooks côté serveur avant de faire confiance à la charge utile.
{
"event": "lead.created",
"tenantId": "tenant_...",
"conversationId": "conv_...",
"createdAt": "2026-06-19T12:00:00Z",
"data": {}
}
/api/webhooks/subscriptions
Lister les abonnements (les secrets ne sont jamais renvoyés).
/api/webhooks/subscriptions
Créer un abonnement. Le secret de signature est affiché une seule fois dans la réponse.
/api/webhooks/subscriptions/:id
Supprimer un abonnement.
/api/webhooks/subscriptions/:id/test
Mettre en file d'attente la livraison du webhook.test.
/api/webhooks/deliveries
Journal des livraisons incluant les dead-letter.
Automatisation des Personas
L'automatisation des personas contrôle comment Bob représente votre entreprise, quand escalader et comment gérer les limites.
persona.manage.Voix d'entreprise
Ton, style de salutation et réponses alignées sur la marque.
Comportement d'escalade
Lorsque Bob passe la main aux humains ou crée des tâches.
Limites des sujets
Sujets approuvés et modèles de refus sécurisés.
Préférences de flux de travail
Routage des départements et automatisation des déclencheurs.
/api/personas
Liste des personas pour le locataire authentifié.
/api/personas/:id
Obtenir une persona par id.
/api/personas
Créer un persona avec nom, tonalité, champs, systemPrompt, etc.
/api/personas/:id
Mettre à jour une persona existante.
Plans et Tarifs APIs
Les points de terminaison du pricebook publié alimentent les surfaces marketing et le processus de paiement. Les APIs de gestion de la facturation ne sont pas publics.
| Fonctionnalité | Starter | Pro | Plan 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 | 1 | 3 | 10 |
| Support | Prioritaire | Dédié |
/api/pricing/marketing-cards
Cartes d'offre pour marketing et checkout (public, sans auth).
/api/pricing/snapshot
Instantané publique sécurisée du tarif (sans champs de coût fournisseur).
Health & Status
Utilisez les informations de santé et de statut pour vérifier la disponibilité, surveiller les dépendances en amont et résoudre les problèmes d'intégration.
/api/health
Sonde de santé légère pour moniteurs et load balancers.
/api/health/public
Charge utile de statut public consommée par la page de statut du système.
Exemples d'intégration
Points de départ pratiques pour des modèles d'intégration courants.
Widget de chat sur le site web
Ajoutez Bob à un site marketing ou à un portail client.
Voir l'exemple →Conversation côté serveur API
Chat anonyme de même origine depuis votre application.
Voir l'exemple →Écouteur de webhook
Vérifiez les signatures et traitez lead.created.
Voir l'exemple →flux de transfert CRM
Réagissez aux événements d'escalade de conversation.
Voir l'exemple →Flux de capture de leads
Abonnez-vous à lead.created pour l'intégration.
Voir l'exemple →Escalade de support
Surveillez les escalades et les événements de prise de contrôle.
Voir l'exemple →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 })
});
Aperçu de l'architecture
Office 168/52 est un front office gouverné basé sur un navigateur : Portail Client pour les opérateurs, Mission Control pour l'administration de la plateforme, et surfaces d'intégration publiques pour votre stack.
Customer Portal and Mission Control APIs are session-backed UI routes—not published here. For a concise platform diagram, see aperçu de l'architecture et centre de preuves.