Keural Kit
Script d'intégration qui place les écrans de chat, Drive et prompts de Keural dans votre page web.
Keural Kit place des écrans Keural dans votre page à l'aide d'un script unique. Les écrans sont dessinés dans un Shadow DOM, ils ne se mélangent donc pas au CSS de votre page. Kit est mis à jour lors du déploiement de la version web de Keural. Si un ancien écran s'affiche encore après un déploiement, videz le cache du navigateur et du CDN, puis vérifiez la date de build avec window.KeuralKit.__build.
Kit fonctionne avec la session de connexion Keural (cookie du domaine de l'API Keural). userInfo sert uniquement à l'affichage, et l'utilisateur est identifié par la session cookie. Pour l'utiliser sur le domaine de votre service, convenez avec votre contact Keural de l'enregistrement du domaine et de l'intégration de la connexion (SSO, par exemple) avant la mise en place.
Chargement
Kit se charge depuis l'adresse web de l'environnement Keural que vous utilisez. Pour keural.ai, il s'agit de https://keural.ai ; pour un environnement sur site ou dédié, utilisez l'adresse web Keural de cet environnement. Avant d'ajouter le script, renseignez dans window.__KEURAL_ENV__ les adresses des serveurs que Kit appellera. Les trois adresses doivent appartenir au même environnement ; obtenez-les auprès de votre contact Keural lors de la mise en place.
<script>
window.__KEURAL_ENV__ = {
NEXT_PUBLIC_API_BASE_URL: '<KEURAL_API_URL>',
NEXT_PUBLIC_FAST_API_BASE_URL: '<KEURAL_AGENT_URL>',
NEXT_PUBLIC_MODE: 'prd',
};
</script>
<script src="<KEURAL_WEB_URL>/plugin/kit/keural.js" async></script>| Valeur | Description |
|---|---|
<KEURAL_WEB_URL> | Adresse web de Keural. Exemple : https://keural.ai |
<KEURAL_API_URL> | Adresse du serveur d'API Keural. Exemple : https://api.keural.ai |
<KEURAL_AGENT_URL> | Adresse du serveur d'agents Keural |
NEXT_PUBLIC_MODE | prd pour la production, dev pour le développement |
Si vous utilisez le même Kit sur un second domaine, renseignez les trois valeurs NEXT_PUBLIC_ADDITIONAL_FRONTEND_URL, NEXT_PUBLIC_ADDITIONAL_API_BASE_URL et NEXT_PUBLIC_ADDITIONAL_FAST_API_BASE_URL. Si l'une de ces trois valeurs manque, une erreur se produit. Les valeurs sont des adresses https:// sans chemin.
Une fois le script chargé, window.KeuralKit est créé. Dans les SPA comme React, utilisez un chargeur afin que le script ne soit ajouté qu'une seule fois.
export function loadKeuralKit(src = '<KEURAL_WEB_URL>/plugin/kit/keural.js') {
if (window.KeuralKit) return Promise.resolve(window.KeuralKit);
return new Promise((resolve, reject) => {
const s = document.createElement('script');
s.src = src;
s.async = true;
s.onload = () => resolve(window.KeuralKit);
s.onerror = () => {
s.remove();
reject(new Error('Keural Kit failed to load'));
};
document.head.appendChild(s);
});
}Intégrer le chat
const el = document.getElementById('keural-chat')!;
window.KeuralKit.mountChat(el, {
userInfo: { userId: user.id, name: user.name },
colorMode: 'light',
initialData: { message: 'Résume le chiffre d’affaires de ce trimestre', room_name: 'Rapport trimestriel' },
onSessionCreated: (roomId) => router.push(`/c/${roomId}`),
onError: () => router.push('/'),
});
// En quittant l'écran
window.KeuralKit.unmount(el);- Pour ouvrir une conversation existante, indiquez son ID dans
sessionId. - N'incluez
initialDataque lors de l'ouverture d'une nouvelle conversation. Si vous l'incluez lors de l'ouverture d'une conversation existante, le même message sera envoyé à nouveau. - Si
userInfo.userIdest absent, l'utilisateur est traité comme non connecté. Montez le composant une fois les informations de connexion prêtes.
Méthodes
| Méthode | Description |
|---|---|
mountChat(el, options) | Écran de chat |
mountDrivePage(el, options) | Écran Drive. Reçoit les fichiers sur lesquels poser une question via onAsk(files) |
mountPromptPage(el, options) | Écran des prompts. Reçoit les prompts choisis via onAsk(prompts) |
mountDriveDialog(el, options) / updateDriveDialog | Fenêtre de sélection de fichiers Drive (open obligatoire, onClose, onSelect(files), initialSelected) |
mountPromptDialog(el, options) / updatePromptDialog | Fenêtre de sélection de prompts (open obligatoire, onClose, onSelect, onDefaultSelect, selectDefaultPrompt, defaultPromptDismissed) |
unmount(el) | Supprime l'écran monté |
Les méthodes mount* et update* reçoivent colorMode et userInfo ensemble, et unmount(el) ne reçoit que l'élément. update* redessine les options sur le même élément. Pour ouvrir ou fermer la fenêtre, modifiez la valeur de open puis appelez update*. Si vous appelez de nouveau mount* sur le même élément, l'écran existant est réutilisé.
Options de mountChat
| Option | Type | Description |
|---|---|---|
sessionId | string | ID de la conversation à ouvrir. Si absent, une nouvelle conversation est créée |
userInfo | { userId, name?, orgId?, orgName? } | Informations sur l'utilisateur. userId est obligatoire |
initialData | object | Premier message d'une nouvelle conversation. Voir initialData ci-dessous |
colorMode | 'light' | 'dark' | Thème. Par défaut light |
initialEffort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | Niveau initial. Par défaut fast |
initialWebSearch | boolean | Démarrer avec la recherche web activée. Par défaut true |
initialDeepResearch | boolean | Démarrer avec Deep Research activé |
hideHomeButton / hideNewChatButton | boolean | Masquer les boutons de l'en-tête |
hideModePopup | boolean | Masquer la fenêtre de sélection du mode |
messageActions | { id, label, onClick(messageId) }[] | Ajouter vos propres actions au menu des réponses |
headerLeftActions / headerRightActions | HeaderLeftAction[] | Ajouter vos propres boutons dans l'en-tête |
onHeaderLeftMount | (el: HTMLElement) => void | Reçoit l'élément lorsque la zone gauche de l'en-tête est dessinée |
mobileMenuItems / mobileBottomActions | array | Ajouter des éléments de menu ou des boutons inférieurs sur mobile |
onMobileHomeButton | () => void | Lorsque le bouton d'accueil est pressé sur mobile |
chatInputFooter | string | Texte d'information sous la zone de saisie |
shareTooltip | string | Texte de l'info-bulle du bouton de partage |
onSessionCreated | (roomId) => void | Lorsqu'une nouvelle conversation est créée |
onStreamDone | (roomId) => void | Lorsqu'une réponse se termine |
onSummaryDone | (roomId) => void | Lorsque le titre ou le résumé de la conversation est créé |
onRoomInfo | (info) => void | Lorsque les informations de la conversation changent |
onShare / onExport | (roomId) => void | Lorsque le bouton de partage ou d'export est pressé |
onError | (error: Error) => void | Lorsqu'une erreur se produit |
initialData
| Champ | Type | Description |
|---|---|---|
message | string | Obligatoire. Premier message |
files | FileType[] | Fichiers Drive envoyés avec le message (valeur reçue dans onSelect de mountDriveDialog) |
prompts | object[] | Prompts utilisés avec le message |
webSearch | boolean | Recherche web |
deepResearch | boolean | Deep Research |
effort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | Niveau |
model | { label, value } | Modèle qui répond |
room_name | string | Nom de la conversation. Accepte aussi roomName, title et name. |
folder_id | string | null | Dossier d'enregistrement |
hideModePopup | boolean | Masquer la fenêtre de sélection du mode |
Langue de l'écran
L'écran de Kit s'affiche en coréen.
Paramètres et connexion
- Les réglages utilisateur se modifient dans l'application web ou l'application Keural. L'écran de Kit suit ces réglages.
- La connexion est gérée par votre service ; seules les informations de l'utilisateur connecté sont transmises à Kit.