Keural Kit
Script de inserción que coloca las pantallas de chat, Drive y prompts de Keural dentro de su servicio web.
Keural Kit coloca pantallas de Keural en su página con un único script. Las pantallas se dibujan dentro de un Shadow DOM, por lo que no se mezclan con el CSS de su página. Kit se actualiza al desplegar la aplicación web de Keural. Si después de un despliegue sigue apareciendo una pantalla antigua, borre la caché del navegador y de la CDN, y compruebe la fecha de compilación con window.KeuralKit.__build.
Kit funciona con una sesión de inicio de sesión de Keural (cookie del dominio de la API de Keural). userInfo solo se usa para mostrar información en pantalla; la verificación del usuario se hace mediante la sesión de cookie. Para usarlo en el dominio de su servicio, coordine con su contacto de Keural el registro del dominio y la integración del inicio de sesión (como SSO) antes de la adopción.
Carga
Kit se carga desde la dirección web del entorno de Keural que utilice. Para keural.ai es https://keural.ai; para un entorno on-premises o dedicado, use la dirección web de Keural de ese entorno. Antes de cargar el script, establezca en window.__KEURAL_ENV__ las direcciones de servidor que llamará Kit. Las tres direcciones deben pertenecer al mismo entorno; obténgalas de su contacto de Keural durante la adopción.
<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>| Valor | Descripción |
|---|---|
<KEURAL_WEB_URL> | Dirección web de Keural. Ejemplo: https://keural.ai |
<KEURAL_API_URL> | Dirección del servidor de API de Keural. Ejemplo: https://api.keural.ai |
<KEURAL_AGENT_URL> | Dirección del servidor de agentes de Keural |
NEXT_PUBLIC_MODE | prd para producción, dev para desarrollo |
Si usa el mismo Kit en un segundo dominio, incluya también NEXT_PUBLIC_ADDITIONAL_FRONTEND_URL, NEXT_PUBLIC_ADDITIONAL_API_BASE_URL y NEXT_PUBLIC_ADDITIONAL_FAST_API_BASE_URL. Si falta cualquiera de los tres, se produce un error. Los valores son direcciones https:// sin ruta.
Cuando el script termina de cargarse, se crea window.KeuralKit. En SPA como React, use un cargador para que el script se cargue una sola vez.
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);
});
}Montar el chat
const el = document.getElementById('keural-chat')!;
window.KeuralKit.mountChat(el, {
userInfo: { userId: user.id, name: user.name },
colorMode: 'light',
initialData: { message: 'Resume las ventas de este trimestre', room_name: 'Informe trimestral' },
onSessionCreated: (roomId) => router.push(`/c/${roomId}`),
onError: () => router.push('/'),
});
// Al salir de la pantalla
window.KeuralKit.unmount(el);- Para abrir una conversación existente, coloque su ID en
sessionId. initialDatasolo se incluye al abrir una conversación nueva. Si lo incluye al abrir una conversación existente, el mismo mensaje se enviará de nuevo.- Si falta
userInfo.userId, se trata como un usuario sin sesión iniciada. Monte el componente cuando la información de inicio de sesión esté lista.
Métodos
| Método | Descripción |
|---|---|
mountChat(el, options) | Pantalla de chat |
mountDrivePage(el, options) | Pantalla de Drive. Recibe los archivos sobre los que preguntar mediante onAsk(files) |
mountPromptPage(el, options) | Pantalla de prompts. Recibe los prompts seleccionados mediante onAsk(prompts) |
mountDriveDialog(el, options) / updateDriveDialog | Ventana de selección de archivos de Drive (open obligatorio, onClose, onSelect(files), initialSelected) |
mountPromptDialog(el, options) / updatePromptDialog | Ventana de selección de prompts (open obligatorio, onClose, onSelect, onDefaultSelect, selectDefaultPrompt, defaultPromptDismissed) |
unmount(el) | Elimina la pantalla montada |
Los métodos mount* y update* reciben colorMode y userInfo, y unmount(el) solo recibe el elemento. update* vuelve a dibujar con las nuevas opciones el mismo elemento. Para abrir y cerrar la ventana, cambie el valor de open y llame a update*. Si vuelve a llamar a mount* sobre el mismo elemento, se reutiliza la pantalla existente.
Opciones de mountChat
| Opción | Tipo | Descripción |
|---|---|---|
sessionId | string | ID de la conversación que se va a abrir. Si no se indica, es una conversación nueva |
userInfo | { userId, name?, orgId?, orgName? } | Información del usuario. userId es obligatorio |
initialData | object | Primer mensaje de una conversación nueva. Consulte initialData más abajo |
colorMode | 'light' | 'dark' | Tema. Predeterminado light |
initialEffort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | Nivel inicial. Predeterminado fast |
initialWebSearch | boolean | Iniciar con la búsqueda web activada. Predeterminado true |
initialDeepResearch | boolean | Iniciar con Deep Research activado |
hideHomeButton / hideNewChatButton | boolean | Ocultar los botones del encabezado |
hideModePopup | boolean | Ocultar la ventana de selección de modo |
messageActions | { id, label, onClick(messageId) }[] | Añadir acciones propias al menú de respuesta |
headerLeftActions / headerRightActions | HeaderLeftAction[] | Añadir botones propios al encabezado |
onHeaderLeftMount | (el: HTMLElement) => void | Recibe el elemento cuando se dibuja el área izquierda del encabezado |
mobileMenuItems / mobileBottomActions | array | Añadir elementos al menú o botones inferiores en anchos móviles |
onMobileHomeButton | () => void | Cuando se pulsa el botón de inicio en anchos móviles |
chatInputFooter | string | Texto de aviso debajo del cuadro de entrada |
shareTooltip | string | Texto emergente del botón de compartir |
onSessionCreated | (roomId) => void | Cuando se crea una conversación nueva |
onStreamDone | (roomId) => void | Cuando termina una respuesta |
onSummaryDone | (roomId) => void | Cuando se crea el título o el resumen de la conversación |
onRoomInfo | (info) => void | Cuando cambia la información de la conversación |
onShare / onExport | (roomId) => void | Cuando se pulsa el botón de compartir o exportar |
onError | (error: Error) => void | Cuando se produce un error |
initialData
| Campo | Tipo | Descripción |
|---|---|---|
message | string | Obligatorio. Primer mensaje |
files | FileType[] | Archivos de Drive que se envían junto con el mensaje (el valor recibido en onSelect de mountDriveDialog) |
prompts | object[] | Prompts que se usan junto con el mensaje |
webSearch | boolean | Búsqueda web |
deepResearch | boolean | Deep Research |
effort | 'fast' | 'balanced' | 'high' | 'xhigh' | 'max' | Nivel |
model | { label, value } | Modelo que responde |
room_name | string | Nombre de la conversación. También acepta roomName, title y name. |
folder_id | string | null | Carpeta donde guardar |
hideModePopup | boolean | Ocultar la ventana de selección de modo |
Idioma de la pantalla
La pantalla de Kit se muestra en coreano.
Configuración e inicio de sesión
- Los ajustes de usuario se cambian en la aplicación web o en la app de Keural, y la pantalla de Kit sigue esos ajustes.
- El inicio de sesión lo gestiona su servicio, y a Kit solo se le pasa la información del usuario que ha iniciado sesión.