Lewati ke konten
KeuralDocs
Pengembang

Keural Kit

Skrip embed yang menempatkan layar chat, Drive, dan prompt Keural di dalam layanan web Anda.

Keural Kit menempatkan layar Keural di halaman Anda hanya dengan satu skrip. Layar digambar di dalam Shadow DOM sehingga tidak bercampur dengan CSS halaman Anda. Kit diperbarui saat web Keural dideploy. Jika layar lama masih tampil setelah deployment, hapus cache browser dan CDN, lalu periksa waktu build dengan window.KeuralKit.__build.

Kit bekerja dengan sesi login Keural (cookie di domain API Keural). userInfo hanya untuk tampilan, dan pengguna diverifikasi dengan sesi cookie. Untuk memakai Kit di domain layanan Anda, koordinasikan pendaftaran domain dan integrasi login (seperti SSO) dengan penanggung jawab Keural sebelum penerapan.

Memuat

Kit dimuat dari alamat web lingkungan Keural yang Anda gunakan. Jika memakai keural.ai, alamatnya https://keural.ai; untuk lingkungan on-premise atau khusus, gunakan alamat web Keural milik lingkungan tersebut. Sebelum skrip dimuat, atur alamat server yang akan dipanggil Kit di window.__KEURAL_ENV__. Ketiga alamat harus berasal dari lingkungan yang sama, dan diperoleh dari penanggung jawab saat penerapan.

<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>
NilaiKeterangan
<KEURAL_WEB_URL>Alamat web Keural. Contoh: https://keural.ai
<KEURAL_API_URL>Alamat server API Keural. Contoh: https://api.keural.ai
<KEURAL_AGENT_URL>Alamat server agen Keural
NEXT_PUBLIC_MODEprd untuk produksi, dev untuk pengembangan

Jika Kit yang sama juga digunakan di domain kedua, atur ketiga nilai NEXT_PUBLIC_ADDITIONAL_FRONTEND_URL, NEXT_PUBLIC_ADDITIONAL_API_BASE_URL, dan NEXT_PUBLIC_ADDITIONAL_FAST_API_BASE_URL sekaligus. Jika ada yang kurang, akan terjadi error. Nilainya berupa alamat https:// tanpa path.

Setelah skrip dimuat, window.KeuralKit dibuat. Pada SPA seperti React, gunakan loader agar skrip hanya dimuat sekali.

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);
  });
}

Memasang chat

const el = document.getElementById('keural-chat')!;

window.KeuralKit.mountChat(el, {
  userInfo: { userId: user.id, name: user.name },
  colorMode: 'light',
  initialData: { message: 'Ringkas pendapatan kuartal ini', room_name: 'Laporan kuartal' },
  onSessionCreated: (roomId) => router.push(`/c/${roomId}`),
  onError: () => router.push('/'),
});

// Saat meninggalkan layar
window.KeuralKit.unmount(el);
  • Untuk membuka percakapan yang sudah ada, isi ID percakapan di sessionId.
  • initialData hanya diisi saat membuka percakapan baru. Jika diisi saat membuka percakapan yang sudah ada, pesan yang sama akan terkirim ulang.
  • Jika userInfo.userId tidak ada, pengguna diperlakukan sebagai belum login. Pasang (mount) setelah informasi login siap.

Metode

MetodeKeterangan
mountChat(el, options)Layar chat
mountDrivePage(el, options)Layar Drive. Menerima file yang akan ditanyakan melalui onAsk(files)
mountPromptPage(el, options)Layar prompt. Menerima prompt yang dipilih melalui onAsk(prompts)
mountDriveDialog(el, options) / updateDriveDialogJendela pilih file Drive (open wajib, onClose, onSelect(files), initialSelected)
mountPromptDialog(el, options) / updatePromptDialogJendela pilih prompt (open wajib, onClose, onSelect, onDefaultSelect, selectDefaultPrompt, defaultPromptDismissed)
unmount(el)Menghapus layar yang sudah dipasang

Metode mount* dan update* menerima colorMode dan userInfo bersamaan, sedangkan unmount(el) hanya menerima elemen. update* menggambar ulang opsi pada elemen yang sama. Saat membuka dan menutup jendela, ubah nilai open lalu panggil update*. Jika mount* dipanggil lagi pada elemen yang sama, layar yang sudah ada akan dipakai ulang.

Opsi mountChat

OpsiTipeKeterangan
sessionIdstringID percakapan yang akan dibuka. Jika tidak ada, percakapan baru
userInfo{ userId, name?, orgId?, orgName? }Informasi pengguna. userId wajib
initialDataobjectPesan pertama percakapan baru. Lihat initialData di bawah
colorMode'light' | 'dark'Tema. Default light
initialEffort'fast' | 'balanced' | 'high' | 'xhigh' | 'max'Tingkat awal. Default fast
initialWebSearchbooleanMulai dengan pencarian web aktif. Default true
initialDeepResearchbooleanMulai dengan Deep Research aktif
hideHomeButton / hideNewChatButtonbooleanMenyembunyikan tombol di header
hideModePopupbooleanMenyembunyikan popup pemilihan mode
messageActions{ id, label, onClick(messageId) }[]Menambahkan aksi sendiri ke menu jawaban
headerLeftActions / headerRightActionsHeaderLeftAction[]Menambahkan tombol sendiri ke header
onHeaderLeftMount(el: HTMLElement) => voidMenerima elemen area kiri header saat area tersebut digambar
mobileMenuItems / mobileBottomActionsarrayMenambahkan menu dan tombol bawah pada lebar layar mobile
onMobileHomeButton() => voidSaat tombol beranda ditekan pada lebar layar mobile
chatInputFooterstringTeks keterangan di bawah kolom input
shareTooltipstringTeks tooltip tombol bagikan
onSessionCreated(roomId) => voidSaat percakapan baru dibuat
onStreamDone(roomId) => voidSaat jawaban selesai
onSummaryDone(roomId) => voidSaat judul dan ringkasan percakapan dibuat
onRoomInfo(info) => voidSaat informasi percakapan berubah
onShare / onExport(roomId) => voidSaat tombol bagikan atau ekspor ditekan
onError(error: Error) => voidSaat terjadi error

initialData

FieldTipeKeterangan
messagestringWajib. Pesan pertama
filesFileType[]File Drive yang dikirim bersama (nilai dari onSelect pada mountDriveDialog)
promptsobject[]Prompt yang dipakai bersama
webSearchbooleanPencarian web
deepResearchbooleanDeep Research
effort'fast' | 'balanced' | 'high' | 'xhigh' | 'max'Tingkat
model{ label, value }Model yang menjawab
room_namestringNama percakapan. roomName, title, dan name juga diterima.
folder_idstring | nullFolder tempat menyimpan
hideModePopupbooleanMenyembunyikan popup pemilihan mode

Bahasa layar

Layar Kit ditampilkan dalam bahasa Korea.

Pengaturan dan login

  • Pengaturan pengguna diubah di web atau aplikasi Keural, dan layar Kit mengikuti pengaturan tersebut.
  • Login ditangani oleh layanan Anda, dan Kit hanya menerima informasi pengguna yang sudah login.

Di halaman ini