# Vern ein assistent med di eiga pÃ¥logging via callbackUrl

`callbackUrl` er feltet du brukar nÃ¥r ein coreAI-assistent skal vere tilgjengeleg berre for innlogga brukarar i ditt eige system. NÃ¥r feltet er sett, kontaktar coreAI di eiga URL med tokenet til brukaren fÃ¸r chatwidgeten initialiserast, og berre brukarar som endepunktet ditt godkjenner med HTTP 200 fÃ¥r snakke med assistenten. PÃ¥loggingen, sesjonen og brukardatabasen vert hjÃ¥ deg â€“ coreAI eig ikkje logikken for kven som er kven.

## NÃ¥r du bÃ¸r bruke callbackUrl

Bruk `callbackUrl` nÃ¥r assistenten svarar pÃ¥ data som ikkje skal vere offentlege: kundeportalar, intranett, tilsettedokument eller fleirkundelÃ¸ysingar der kvar brukar berre skal sjÃ¥ sitt eige. Den typiske oppskrifta er at brukaren loggar inn hjÃ¥ deg, du embeddar coreAI-widgeten pÃ¥ ei verna side, og widgeten sender med eit token (di eiga sesjons-ID, ein JWT, ein signert eingongskode â€“ det du allereie brukar) som coreAI verifiserer mot endepunktet ditt fÃ¸r chatten startar.

Viss assistenten skal svare alle som besÃ¸kjer ei open side, treng du ikkje `callbackUrl`. Lat feltet stÃ¥ tomt.

## To mÃ¥tar Ã¥ sende tokenet pÃ¥

`callbackUrl` stÃ¸ttar to format, og coreAI vel metode ut frÃ¥ korleis URL-en er skriven:

- **`{TOKEN}` i URL-en.** Skriv `https://mitt-system.no/validate?token={TOKEN}`, sÃ¥ byter coreAI plasshaldaren mot tokenet til brukaren og kallar URL-en med GET (fell tilbake til POST viss GET gjev 404). Plasshaldaren kan stÃ¥ kvar som helst i URL-en, Ã²g i stien: `https://mitt-system.no/validate/{TOKEN}` verkar Ã²g.
- **Bearer-header.** Skriv ein fast URL utan `{TOKEN}`, til dÃ¸mes `https://mitt-system.no/api/validate`. coreAI kallar dÃ¥ URL-en med POST og legg ved `Authorization: Bearer <token>` (fell tilbake til GET viss POST gjev 404).

Vel det som er enklast Ã¥ byggje inn i di eksisterande auth-stack. Bearer-varianten passar best nÃ¥r du allereie har eit JSON-API som validerer tokens; URL-varianten er enklast nÃ¥r validatoren er eit standalone endpoint.

## Slik svarar endepunktet ditt

Endepunktet ditt mÃ¥ svare HTTP 200 med ein JSON-kropp for Ã¥ sleppe brukaren gjennom. Alt anna â€“ 401, 403, 500, nettverksfeil â€“ vert tolka som avslag, og widgeten initialiserast ikkje. Viss svaret inneheld feltet `status`, mÃ¥ verdien vere `"success"`; alt anna vert avslÃ¥tt sjÃ¸lv om statuskoden er 200.

JSON-svaret kan Ã²g returnere Ã©in eller fleire `external_id`-ar:

```json
{
  "status": "success",
  "external_id": ["customer-4711", "department-sales"]
}
```

NÃ¥r feltet er til stades, lÃ¥ser coreAI samtalen til datakjeldene som matchar desse `external_id`-ane i kunnskapsbasen til assistenten. Det er denne mekanismen som gjer fleirkundeportalar praktiske: Ã©in assistent, Ã©in kunnskapsbase, men kvar brukar fÃ¥r berre sjÃ¥ sine eigne ordrar, dokumenta til si eiga organisasjon, sitt eige innhald. Du avgjer scopinga i ditt eige endepunkt â€“ coreAI les berre resultatet.

## Kva som vert skrudd av automatisk

SÃ¥ snart ein assistent har ein `callbackUrl` sett, slÃ¥r coreAI av tre overflater som elles ville omgÃ¥tt sjekken:

- **Offentleg sÃ¸kjedemo** â€“ sÃ¸kje-endepunktet for upubliserte demo-treff svarar 403.
- **Direktelenkje til widgeten** â€“ den delbare URL-en som opnar widgeten Ã¥leine i nettlesaren returnerer 403.
- **MCP-eksponering** â€“ assistenten vert ikkje registrert som eit MCP-tool for AI-agentar.

Det er ingen veg utanom callbacken nÃ¥r han fÃ¸rst er sett. Viss du vil eksponere noko offentleg igjen, mÃ¥ du fjerne `callbackUrl` eller opprette ein separat assistent for den opne overflata.

## Kvifor sjekken vert kÃ¸yrd Ã©in gong per widget-lasting

Tokenet vert validert nÃ¥r widgeten initialiserast â€“ altsÃ¥ Ã©in gong per sideinnlasting â€“ og ikkje for kvart spÃ¸rsmÃ¥l brukaren stiller eller kvar melding som vert strauma tilbake. Det er eit medvite val. Ã
 validere pÃ¥ nytt for kvart chat-kall ville lagt nettverkslatens frÃ¥ endepunktet ditt mellom kvart spÃ¸rsmÃ¥l og kvart svar, men ikkje gjeve nokon reell tryggleiksvinst: tilgangen til assistenten vert allereie avgjord av at widgeten vart lasta i ein autentisert sesjon. Ein kompromittert sesjon hjÃ¥ deg ville sloppe gjennom uansett kor ofte coreAI spurde.

I praksis tyder det at endepunktet ditt fÃ¥r Ã©in HTTP-fÃ¸respurnad per gong ein brukar opnar sida assistenten ligg pÃ¥. Det er ei realistisk last Ã¥ byggje for, Ã²g for endepunkt som gjer tunge lookups mot databasen din.