Ir al contenido
KeuralDocs
Desarrolladores

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>
ValorDescripció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_MODEprd 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.
  • initialData solo 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étodoDescripció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) / updateDriveDialogVentana de selección de archivos de Drive (open obligatorio, onClose, onSelect(files), initialSelected)
mountPromptDialog(el, options) / updatePromptDialogVentana 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ónTipoDescripción
sessionIdstringID 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
initialDataobjectPrimer 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
initialWebSearchbooleanIniciar con la búsqueda web activada. Predeterminado true
initialDeepResearchbooleanIniciar con Deep Research activado
hideHomeButton / hideNewChatButtonbooleanOcultar los botones del encabezado
hideModePopupbooleanOcultar la ventana de selección de modo
messageActions{ id, label, onClick(messageId) }[]Añadir acciones propias al menú de respuesta
headerLeftActions / headerRightActionsHeaderLeftAction[]Añadir botones propios al encabezado
onHeaderLeftMount(el: HTMLElement) => voidRecibe el elemento cuando se dibuja el área izquierda del encabezado
mobileMenuItems / mobileBottomActionsarrayAñadir elementos al menú o botones inferiores en anchos móviles
onMobileHomeButton() => voidCuando se pulsa el botón de inicio en anchos móviles
chatInputFooterstringTexto de aviso debajo del cuadro de entrada
shareTooltipstringTexto emergente del botón de compartir
onSessionCreated(roomId) => voidCuando se crea una conversación nueva
onStreamDone(roomId) => voidCuando termina una respuesta
onSummaryDone(roomId) => voidCuando se crea el título o el resumen de la conversación
onRoomInfo(info) => voidCuando cambia la información de la conversación
onShare / onExport(roomId) => voidCuando se pulsa el botón de compartir o exportar
onError(error: Error) => voidCuando se produce un error

initialData

CampoTipoDescripción
messagestringObligatorio. Primer mensaje
filesFileType[]Archivos de Drive que se envían junto con el mensaje (el valor recibido en onSelect de mountDriveDialog)
promptsobject[]Prompts que se usan junto con el mensaje
webSearchbooleanBúsqueda web
deepResearchbooleanDeep Research
effort'fast' | 'balanced' | 'high' | 'xhigh' | 'max'Nivel
model{ label, value }Modelo que responde
room_namestringNombre de la conversación. También acepta roomName, title y name.
folder_idstring | nullCarpeta donde guardar
hideModePopupbooleanOcultar 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.

En esta página