Aller au contenu principal

Ajouter Kaleidr Chat à une carte Mapbox

À la fin du guide, votre page contient une carte Mapbox GL JS avec un panneau de chat intégré. Le visiteur pose une question : la réponse s’affiche progressivement, les lieux apparaissent sous forme de marqueurs sur la carte et la caméra se déplace pour les montrer. Compatible avec toutes les offres, dont Free, à l’aide d’une clé publiable. Les questions consomment les crédits IA de votre organisation.

Avant de commencer​

  • Une clé publiable Kaleidr (kld_pk_live_…) disponible sur kaleidr.com/api-keys. Les nouvelles clés comportent la portée ai nécessaire à Chat. Voir Obtenir une clé API.
  • L’origine de votre page parmi les origines autorisées de la clé, si elles sont limitées. Pour un test local, ajoutez par exemple http://localhost:8080.
  • Un jeton d’accès Mapbox (pk.…) issu de votre compte Mapbox. Mapbox facture la carte et Kaleidr les questions : les deux sont indépendants.
  • Mapbox GL JS chargé par balise script, afin que window.mapboxgl existe. Si vous importez Mapbox via npm, lisez Rendre une bibliothèque npm accessible globalement.
  • Un serveur HTTP, par exemple npx serve ou python -m http.server 8080. L’ouverture depuis le disque ne fonctionne pas.
  • Si le site applique une Content Security Policy, autorisez les hôtes de la page Content Security Policy.

Étape 1 : disposer la carte et la couche de chat​

Placez la carte et la cible de montage du chat dans un même conteneur positionné. La couche du chat se superpose à la carte tout en laissant passer les événements de pointeur.

<div id="mapHost" style="position:relative; height:520px">
<div id="map" style="position:absolute; inset:0; z-index:0"></div>
<div id="chat" style="position:absolute; inset:0; z-index:1; pointer-events:none"></div>
</div>

Résultat attendu : rien encore, seulement un bloc vide de 520 px. Thèmes et disposition explique chaque déclaration.

Étape 2 : charger Mapbox GL JS et créer la carte​

Chargez la feuille de style dans l’en-tête et le script avant votre code. La feuille de style est indispensable : sans elle, la carte ne s’affiche pas correctement.

<link rel="stylesheet" href="https://api.mapbox.com/mapbox-gl-js/v3.9.4/mapbox-gl.css" />
<script src="https://api.mapbox.com/mapbox-gl-js/v3.9.4/mapbox-gl.js"></script>
<script>
mapboxgl.accessToken = 'pk.…';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
center: [-0.12, 51.5],
zoom: 11,
});
</script>

Résultat attendu : une carte Mapbox du centre de Londres, déplaçable et zoomable.

Étape 3 : charger kaleidr.js​

Ajoutez le chargeur après le script Mapbox et avant le code qui monte le panneau.

<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>

Résultat attendu : aucune modification visible. Dans la console, Kaleidr.version renvoie une chaîne de version.

Étape 4 : monter le panneau de chat​

Fournissez votre clé et l’objet de carte actif.

const handle = Kaleidr.mount('#chat', {
product: 'chat',
publishableKey: 'kld_pk_live_…',
map,
contained: true,
});

Il n’est pas nécessaire d’attendre l’événement load de la carte. Kaleidr.mount renvoie immédiatement ; le panneau apparaît une fois le module de chat chargé et la clé échangée contre une session.

Résultat attendu : une barre de saisie « Ask Kaleidr » en haut à gauche de la carte.

Page complète​

Enregistrez sous index.html, remplacez les deux clés et servez le dossier en HTTP.

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Kaleidr Chat on Mapbox</title>
<link rel="stylesheet" href="https://api.mapbox.com/mapbox-gl-js/v3.9.4/mapbox-gl.css" />
<style>
body { margin: 0; font-family: system-ui, sans-serif; }
#mapHost { position: relative; height: 100vh; }
#map { position: absolute; inset: 0; z-index: 0; }
#chat { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
</style>
</head>
<body>
<div id="mapHost">
<div id="map"></div>
<div id="chat"></div>
</div>

<script src="https://api.mapbox.com/mapbox-gl-js/v3.9.4/mapbox-gl.js"></script>
<script src="https://cdn.kaleidr.com/embed/v1/kaleidr.js"></script>
<script>
mapboxgl.accessToken = 'pk.…';

const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v12',
center: [-0.12, 51.5],
zoom: 11,
});

const handle = Kaleidr.mount('#chat', {
product: 'chat',
publishableKey: 'kld_pk_live_…',
map,
contained: true,
});
</script>
</body>
</html>

Fonctionnement​

VisiteurPanneauCarte Mapbox
Envoie une questionOuvre une fenêtre de chat ; le texte de réponse arrive progressivement.Rien pour le moment.
AttendAffiche une fiche pour chaque lieu cité.Un marqueur apparaît dès qu’un lieu est localisé. Pour un lieu, la caméra s’y déplace ; pour plusieurs, elle ajuste le cadrage en évitant le panneau.
Clique sur un marqueur ou résultatOuvre une fiche avec présentation, photos et outil d’itinéraire.Cliquer sur un résultat déplace la caméra vers ce lieu.
Demande un itinéraireAffiche la distance et la durée du trajet.Trace et cadre la ligne de l’itinéraire.
Pose une autre questionAjoute la question à la même conversation.Ajoute de nouveaux marqueurs ; les précédents restent.
Ferme le chatRevient à la barre de saisie ; la conversation se termine.Les marqueurs et l’itinéraire sont retirés.

Particularités de Mapbox GL JS :

  • Les épingles sont des objets Marker de Mapbox utilisant un élément HTML, distincts des marqueurs que vous avez ajoutés.
  • L’itinéraire est dessiné avec des sources et couches ajoutées au style par le panneau puis supprimées. Vos propres sources et couches ne sont pas modifiées.
  • La session est renouvelée automatiquement tant que le panneau reste monté. Vous ne gérez aucun jeton.

Vérifier le fonctionnement​

Sur la page

  • La barre Ask Kaleidr apparaît en haut à gauche de la carte.
  • Saisissez Show me three museums in London, puis appuyez sur Entrée. Le texte apparaît progressivement, trois marqueurs s’affichent et la carte les cadre tous.

Dans la console

  • Aucune erreur ni aucun avertissement ne contient [kaleidr.

Dans l’onglet Réseau

RequêteRésultat attendu
GET https://cdn.kaleidr.com/embed/v1/kaleidr.js200
GET https://cdn.kaleidr.com/embed/v1/chat.js200
POST https://api.kaleidr.com/inference-api/b2b/v1/sdk/sessions200, avec un corps JSON semblable à l’exemple ci-dessous
POST https://api.kaleidr.com/inference-api/b2b/v1/chat/control/stream (après une question)200, content-type: text/event-stream
{ "session_token": "kld_sess_live_…", "expires_in": 900, "product": "chat" }

En cas de problème​

Le SDK affiche un message bref sans recopier le motif renvoyé par le serveur. Si une requête échoue, ouvrez-la dans Réseau pour lire sa réponse JSON. Un 403 ou 404 place son code dans detail. Un 429 place son code dans error, accompagné d’une phrase dans detail.

SymptômeCauseCorrection
Panneau absent, erreur CORS sur …/sdk/sessions puis erreur [kaleidr:chat]Clé inconnue ou révoquée, ou origine non autorisée. L’API n’envoie les en-têtes CORS qu’aux origines admises.Vérifiez la clé et ajoutez l’origine exacte (schéma et port compris) sur kaleidr.com/api-keys.
[kaleidr:chat] kaleidr session exchange failed (403)Clé valide, mais non autorisée pour Chat. detail vaut insufficient_scope (portée ai absente), product_not_allowed (autres produits seulement) ou tier_capability_not_allowed.Utilisez une clé avec ai qui autorise chat.
[kaleidr:chat] Kaleidr: a server key (kld_sk_…) must never be used in the browser …Vous avez passé une clé serveur ; aucune requête n’a été envoyée.Utilisez une clé publiable (kld_pk_live_…). Révoquez la clé serveur si elle a été exposée publiquement.
[kaleidr:chat] mount target not found: #chatLe sélecteur ne trouve aucun élément.Appelez mount après la création de l’élément ou passez l’élément lui-même. mount
[kaleidr:chat] [kaleidr] failed to load https://cdn.kaleidr.com/embed/v1/chat.jsModule bloqué, généralement par la CSP ou un bloqueur de publicités.Autorisez https://cdn.kaleidr.com dans script-src.
Kaleidr is not definedVotre code a été exécuté avant kaleidr.js, par exemple à cause de async ou defer.Chargez kaleidr.js sans ces attributs avant votre code, ou déclenchez le code à l’événement load.
[kaleidr] embed is disabled — …Le contrôle d’activation bloque les montages.Le message indique quel contrôle a été activé. Voir kaleidr.js.
Le panneau apparaît en haut à gauche de la fenêtre, pas sur la cartecontained manque ou #chat n’est pas positionné.Ajoutez contained: true et les styles de l’étape 1.
Le panneau répond, mais aucun marqueur ni déplacementL’objet passé dans map n’est pas reconnu.Passez directement l’instance mapboxgl.Map. Voir Cartes prises en charge.
La caméra se déplace vers un lieu, mais pas de marqueurs ni de cadrage multiplewindow.mapboxgl n’existe pas. Un déplacement simple n’utilise que l’objet de carte ; les marqueurs et le cadrage nécessitent le global.Si Mapbox est importé avec npm, définissez window.mapboxgl avant le montage. Voir Imports npm.
Le panneau dit toujours « Sorry — that didn't go through. Please try again. »Session devenue invalide : clé révoquée ou origines autorisées modifiées.Vérifiez la clé et rechargez la page.
Le panneau dit « You've reached your usage limit for now. »Erreur 429 : crédits IA épuisés ou limite du débit atteinte. Tous les visiteurs utilisent la même limite de clé.Voir Quotas et limitations de débit.
La carte ne se laisse plus déplacerLa couche de chat intercepte les événements.Ajoutez pointer-events:none à #chat.

D’autres cas figurent sur la page Dépannage.

Limites​

  • Votre page ne reçoit ni callback ni événement du panneau et ne peut réagir par code à une question, une réponse ou un clic sur un marqueur.
  • L’assistant ne voit pas vos couches, vos marqueurs ni la zone affichée. Seul le niveau de zoom accompagne la question.
  • Vous ne pouvez pas transmettre vos instructions ou données propres à l’assistant par le panneau.
  • La langue des réponses, le titre et le texte indicatif sont définis au montage (lang, title, placeholder) : voir Référence Chat. Les autres libellés restent en anglais.
  • handle.setCamera() n’a aucun effet sur un montage Chat et affiche un avertissement. Déplacez la caméra avec l’API de Mapbox.
  • Dans une application monopage, appelez handle.destroy() lorsque la vue cartographique disparaît, puis remontez-la au retour.

La liste complète se trouve dans Capacités et limites.

Étapes suivantes​