Aller au contenu

Démarrage rapide

Vous allez approvisionner un tenant de chat, récupérer ses trois identifiants (tenant_id, tenant_secret, widget_public_key), embarquer le widget sur votre page, puis effectuer un appel backend signé vers le relais.

Seul tenant_name est requis ; tous les autres champs ont une valeur par défaut. La réponse contient tenant_id, tenant_secret et widget_public_key une seule fois.

Fenêtre de terminal
curl $BASE_URL/api/v1/provision/tenant \
-X POST \
-H "X-Admin-Key: YOUR_ADMIN_KEY" \
-H "Content-Type: application/json" \
-d '{
"tenant_name": "Demo Boutique",
"allowed_origins": ["https://shop.demo.com", "app://bloonio_chat_flutter"]
}'

Réponse (201) — l’enveloppe data contient :

{
"status_code": 201,
"data": {
"tenant_id": "019e4ae7-1a2b-7c3d-8e4f-5a6b7c8d9e0f",
"tenant_secret": "sk_...",
"widget_public_key": "pk_...",
"tenant_name": "Demo Boutique",
"rate_limit_per_min": 60,
"created_at": "2026-06-21T10:00:00Z"
},
"message": "Tenant provisioned. Save tenant_secret and widget_public_key now — the secret will not be shown again."
}

Rangez les valeurs là où elles servent — deux surfaces distinctes :

Fenêtre de terminal
# Backend du tenant (HMAC#1, ex. .env.* de votre service)
CHAT_RELAY_BASE_URL=$BASE_URL
CHAT_RELAY_TENANT_ID=019e4ae7-1a2b-7c3d-8e4f-5a6b7c8d9e0f
CHAT_RELAY_TENANT_SECRET=sk_... # SECRET — ne jamais committer
# Widget / SDK in-app (.env public — la clé widget n'est pas secrète)
CHAT_TENANT_ID=019e4ae7-1a2b-7c3d-8e4f-5a6b7c8d9e0f
CHAT_WIDGET_PUBLIC_KEY=pk_...

La widget_public_key n’est pas un secret : elle s’apparie au tenant_id pour router le trafic du widget et vérifier allowed_origins. Le tenant_secret, lui, signe vos appels backend — gardez-le côté serveur.

Avec @bloonio/chat-angular, déclarez le fournisseur puis déposez le lanceur n’importe où. Détails complets sur Widget & SDK.

app.config.ts
import { provideBloonioChat } from '@bloonio/chat-angular';
export const appConfig = {
providers: [
provideBloonioChat({
tenantId: '019e4ae7-1a2b-7c3d-8e4f-5a6b7c8d9e0f',
publicKey: 'pk_...',
baseUrl: '$BASE_URL',
locale: 'fr',
}),
],
};
// un composant standalone
import { BloonioChatLauncherComponent } from '@bloonio/chat-angular';
@Component({
standalone: true,
imports: [BloonioChatLauncherComponent],
template: `<router-outlet /> <bloonio-chat-launcher />`,
})
export class AppComponent {}

L’origine de votre page doit figurer dans allowed_origins, sinon le relais refuse la création de session visiteur (403).

Les appels backend → relais (/api/v1/relay/*) sont signés en HMAC#1. Le SDK Python signe pour vous ; voici l’exemple de l’échange d’un jeton opérateur, où votre backend délègue son identité au relais.

from bloonio_chat_relay_client import get_chat_client
chat = get_chat_client() # lit BLOONIO_CHAT_* depuis l'environnement
convo = chat.create_conversation(
visitor_user_id="user-123",
visitor_display_name="Marie",
locale="fr",
)
chat.send_message(convo.id, role="visitor", content="Où est ma commande ?")
  1. Vous avez approvisionné un tenant avec la clé admin et capturé ses trois identifiants (affichés une seule fois).
  2. Le widget s’authentifie auprès du relais avec la widget_public_key + le tenant_id, et crée une session visiteur si l’origine est autorisée.
  3. Votre backend signe ses appels en HMAC#1 avec le tenant_secret ; le relais vérifie la signature, la fenêtre temporelle et le statut du tenant avant de router vers bloonio_chat_api.
  • Brancher des opérateurs humains. Voir Opérateurs.
  • Recevoir les événements sur votre backend. Voir Webhooks.
  • Faire tourner ou suspendre un tenant. Voir Gestion des tenants.
  • Intégrer en libre-service, sans clé admin. Voir Console.