Lage arbeidsflyt med KAI¶
KAI kan oversette en beskrivelse i naturlig språk — for eksempel "Når en e-post logges i CRM, minn ansvarlig om oppfølging etter tre uker" — til et utkast i arbeidsflyt-byggeren. Du sparer tid på å huske riktige utløsere, betingelser og handlinger, og kan justere alt før du lagrer.
KAI gjør ikke arbeidet ferdig: Utkastet lagres ikke automatisk. Du må gå gjennom det, eventuelt justere, og deretter selv velge Lagre utkast eller Lagre og aktiver (workflow-builder.component.html:21-26).
Per i dag støttes kun CRM: Workflow-katalogen som KAI bygger på har bare en CRM-modul implementert (Modules/CrmWorkflowModule.cs). Frontend laster katalogen med
getRegistry('CRM')(workflow-builder.component.ts:94). Andre moduler (HMS, Prosjekt, Time, Arbeidsordre) blir tilgjengelige etter hvert som de implementeres.
Tilgang¶
| Hvem | Hva trengs |
|---|---|
| Rolle | Administrator (siden er en del av Innstillinger og bruker moduleId: 99, se setting-routing.module.ts:44) |
| KAI-tilgang | ObjectType = KAI.WorkflowBuilder med CanCreate = true i Datatilgang. Default er fail-closed (alle felt = 0), så rettigheten må gis eksplisitt per brukernivå (Migration_20261010110000.cs:17-23). |
KAI sjekker KAI.WorkflowBuilder.CanCreate før utkastet genereres. Mangler du rettigheten, returnerer endepunktet Ingen tilgang til å lage arbeidsflyt med KAI. (WorkflowController.cs:209-215).
Forutsetninger¶
- Tenanten har KAI aktivert og en konfigurert AI-tjeneste (
IAiService) - Du vet hvilken modul arbeidsflyten gjelder — per i dag er det CRM
- Beskrivelsen din følger mønsteret når X skjer, (hvis Y,) gjør Z
- Eventuelle eksterne mottakere (brukere, roller) finnes allerede i ePortal
KAI-prompten som styrer utkastsgenereringen heter KAI.Prompt.WorkflowBuilder og er definert i KAIPromptDefaults.cs:691 og registrert i All-katalogen på linje 778. Den hentes via GetComposedPromptAsync (WorkflowController.cs:226) — det vil si: en eventuell tenant-overstyring i KAI-promptadmin brukes hvis den finnes, ellers default-teksten.
Slik ser siden ut¶
Listen ligger på /settings/portal-setting/workflows. Topplinjen har tre handlinger (workflow-list.component.html:8-20):
| Knapp | Klasse | Hva den gjør |
|---|---|---|
| KAI (lilla, med stjerne-ikon) | btn-kai-planner |
Åpner en modal hvor du beskriver arbeidsflyten på norsk |
| + Ny arbeidsflyt (mørk) | btn-action-dark |
Tom builder uten KAI-utkast |
| Oppfrisk (sirkel-ikon) | btn-action-outline |
Laster listen på nytt |
Tabellen under viser eksisterende arbeidsflyter med navn, modul, utløser og status. Status-badgen kan være Utkast, Aktiv eller Inaktiv (workflow-list.component.ts:140-143; etiketter i no.json:11-13). Den lilla "KAI"-knappen vises alltid — det er først ved klikk på Lag utkast at backend sjekker KAI.WorkflowBuilder.CanCreate.
Slik gjør du¶
1. Åpne arbeidsflyt-listen¶
Gå til Innstillinger → Arbeidsflyter (/settings/portal-setting/workflows).
2. Klikk den lilla KAI-knappen¶
Modalen åpnes med tittel Lag arbeidsflyt med KAI og et tekstfelt (workflow-list.component.html:86-104). Knappen heter rett og slett KAI (Workflow.kaiButton = "KAI" i no.json:114) — det er ikke en egen "+ Ny arbeidsflyt med KAI"-knapp.
3. Skriv beskrivelsen¶
Bruk et naturlig språk-uttrykk i formen når X, (hvis Y,) så Z. Eksempler:
- "Når en e-post logges i CRM, minn ansvarlig om oppfølging etter tre uker." (eksempelet fra hjelpeteksten —
Workflow.kaiPlaceholderi no.json:118) - "Når en CRM-oppgave får status Ferdig, varsle den som opprettet oppgaven."
- "Når en korrespondanse markeres som Innkommende e-post, lag en oppfølgingsoppgave med 7 dagers frist."
Knappen Lag utkast er deaktivert til feltet inneholder tekst (workflow-list.component.html:99).
4. Klikk Lag utkast¶
Klienten kaller POST api/Workflow/Draft med beskrivelsen din. Backend:
- Sjekker
KAI.WorkflowBuilder.CanCreate— feiler hvis nei - Validerer at promptfeltet ikke er tomt
- Bygger en katalog over lovlige moduler/objekter/hendelser/felt/handlinger (kun verdier KAI har lov til å bruke)
- Kaller AI-tjenesten med systemprompten
KAI.Prompt.WorkflowBuilderog din beskrivelse - Tolker svaret og returnerer et ulagret utkast med
IsActive = false,IsDraft = true
Se WorkflowController.cs:204-258.
På suksess navigerer klienten til builderen og passer utkastet via state.kaiDraft (workflow-list.component.ts:73-74). Du får en info-toast: "KAI-utkast lastet inn — se over og lagre når du er fornøyd." (Workflow.kaiApplied).
5. Gjennomgå utkastet i builderen¶
Builderen viser arbeidsflyten i tre seksjoner (workflow-builder.component.html:65-203):
- Generelt — Navn, Beskrivelse, Modul, Omfang (Bare meg / Hele bedriften —
Grouper ikke aktivert ennå, workflow-builder.component.ts:52) - NÅR — Objekt + Type utløser (Hendelse / Tidsbasert / Tidsplan med cron) + selve hendelsen eller datoankret
- HVIS (valgfritt) — null eller flere betingelser (
AND/OR) med felt, operator og verdi - GJØR — én eller flere handlinger. Tilgjengelige handlingstyper for CRM: Varsle, Vent, Opprett oppgave, Oppsummering (no.json:171-176)
Gå gjennom hvert felt og vurder:
- Treffer utløseren den hendelsen du faktisk ønsker å reagere på?
- Er betingelsene verken for vide eller for snevre?
- Har handlingene riktig mottaker, tittel og melding?
6. Kjør "Test på eksempel" (anbefalt)¶
Knappen Test på eksempel øverst til høyre kjører en tørrkjøring mot siste eksempel-objekt i databasen (workflow-builder.component.html:17-19, workflow-builder.component.ts:456-481). Den viser om betingelsene matcher og hvilke verdier handlingene ville fått — men lagrer ikke arbeidsflyten og sender ikke varsler.
Feiltilstander:
- "Velg et objekt" — Objektfeltet i NÅR-blokken er tomt
- "Legg til minst én handling" — GJØR-blokken er tom
- "Kunne ikke kjøre test" — backend-kall feilet (se feilsøking-siden)
7. Lagre¶
Du har to lagre-knapper (workflow-builder.component.html:21-26):
| Knapp | Effekt |
|---|---|
| Lagre utkast | Lagrer med IsDraft = true, IsActive = false — status = Utkast |
| Lagre og aktiver | Lagrer med IsDraft = false, IsActive = true — arbeidsflyten begynner å trigge på neste matchende hendelse |
Validering før save (workflow-builder.component.ts:386-402):
- Navn må være satt ("Gi arbeidsflyten et navn.")
- Objekt må være valgt ("Velg et objekt.")
- Minst én handling ("Legg til minst én handling.")
- Hvis utløsertype er Cron, må uttrykket være satt ("Angi et cron-uttrykk for tidsplanen.")
8. Deaktiver / aktiver / slett i listen¶
I tabellen har hver rad en knapperad (workflow-list.component.html:58-77):
| Knapp | Hva den gjør |
|---|---|
| Play/pause-ikon | Toggler isActive (kaller Workflow.deactivate / Workflow.activate) — aktivering setter samtidig isDraft = false |
| Blyant | Åpner builderen for redigering |
| Journal-ikon | Åpner kjøringsloggen for arbeidsflyten |
| Søppelbøtte | Bekreftelsesmodal → sletter arbeidsflyten |
Det finnes ingen separat "Pause"-status i koden — en arbeidsflyt som ikke kjører er Inaktiv (statusInactive i workflow-list.component.ts:142).
Vanlige problemer¶
"Lag utkast"-knappen er disabled¶
Tekstfeltet er tomt eller bare mellomrom — [disabled]="kaiLoading || !kaiPrompt.trim()" (workflow-list.component.html:99). Skriv noe og prøv igjen.
Toast: "KAI kunne ikke lage et utkast. Prøv å omformulere."¶
Tre mulige årsaker, alle i WorkflowController.cs:204-258:
| Underliggende feil | Hva som skjedde |
|---|---|
| "Ingen tilgang til å lage arbeidsflyt med KAI." | KAI.WorkflowBuilder.CanCreate = false på ditt brukernivå |
| "KAI er ikke tilgjengelig akkurat nå." | AI-tjenesten svarte ikke eller var avskrudd |
| "Kunne ikke tolke svaret fra KAI. Prøv å omformulere." | KAIs svar var ikke gyldig JSON eller manglet katalog-godkjente verdier — typisk når beskrivelsen er for vag |
Toasten du ser i nettleseren er Workflow.kaiFailed ("KAI kunne ikke lage et utkast. Prøv å omformulere.", no.json:121). Konkret bakenforliggende melding finner du i F12-konsollen / i toasten via showApiError.
KAI laget en arbeidsflyt med feil utløser eller felt¶
KAI får bare bruke verdier som finnes i katalogen for den valgte modulen (per i dag CRM). Hvis arbeidsflyten du beskrev krever et felt eller en hendelse som ikke finnes i CRM-katalogen, vil KAI:
- enten velge nærmeste lovlige alternativ
- eller returnere et svar som ikke parses → toast "Kunne ikke tolke svaret fra KAI."
Løsning: bytt Objekt og Hendelse manuelt i builderen, eller bygg arbeidsflyten uten KAI.
Status er fortsatt Utkast etter "Lagre og aktiver"¶
Toggeren i listen kaller setActive. Hvis kallet feiler, ser du "Kunne ikke lagre arbeidsflyt" og raden forblir Utkast. Sjekk nettverkskonsollen og kjøringsloggen.
"Group"-omfanget mangler¶
I builderen ser du bare Bare meg og Hele bedriften under Omfang. Teamet mitt (Group) er bevisst skrudd av til team/gruppe-konseptet er på plass (workflow-builder.component.ts:51-52).
Konsekvenser for andre¶
- Aktiverte arbeidsflyter trigger på reelle hendelser fra alle brukere i scope — utløste varsler kan ikke rulles tilbake
- Hver kjøring loggføres i
Workflow.logTitle(Kjøringslogg) for den enkelte regel (workflow-list.component.ts:90-92) - KAI-utkastsgenerering går mot ekstern AI-tjeneste og medfører token-forbruk på din KAI-konto
Reversibel med forbehold: Du kan deaktivere eller slette arbeidsflyten, men varsler/oppgaver som allerede er sendt eller opprettet, finnes fortsatt i mottakernes innbokser / oppgavelister.



