# Topics and Entities in Copilot Studio **Last updated:** 2026-06-19 **Status:** GA **Category:** Copilot Extensibility & Integration --- ## Introduksjon Topics og entities utgjør kjernen i samtalelogikken i Copilot Studio. En **topic** er en diskret samtaletråd mellom bruker og agent, strukturert som en samtaleflyt med noder. **Entities** er AI-drevne datatyper som identifiserer og ekstraherer spesifikk informasjon fra brukerens input — som navn, datoer, beløp eller egendefinerte verdier. Sammen muliggjør de: - **Strukturerte samtaleflyter** med spørsmål, betingelser, videresendinger og handlinger - **Intelligent informasjonsinnhenting** via slot filling, hvor agenten automatisk gjenkjenner og husker nøkkelinformasjon - **Kontekstavhengig logikk** som tilpasser samtalebanen basert på brukerens svar og entitetsverdier Topics kan opprettes manuelt, ved AI-assistert beskrivelse (Copilot-generering), eller fra eksisterende innhold. Entities finnes både som prebuilt-varianter (age, money, email, phone number, etc.) og egendefinerte (closed list eller regex). **Verificert:** Basert på Microsoft Learn-dokumentasjon (januar 2026). --- ## Kjernekomponenter ### Topics | Komponent | Beskrivelse | Modelltilknytning | |-----------|-------------|-------------------| | **Trigger phrases** | Ord, fraser eller spørsmål som triggererer topic (kun i classic orchestration) | NLU-matching, krever 5-10 fraser for god trening | | **Topic description** | Beskriver topicets formål (nødvendig i generative orchestration) | Brukes av GPT-modell til å velge riktig topic dynamisk | | **Conversation nodes** | Byggeklosser i samtaleflyt: Message, Question, Condition, Variable management, Tool, Redirect, End | Hver node utfører en handling (sende melding, stille spørsmål, kalle flow, etc.) | | **Authoring canvas** | Visuell editor med low-code-grensesnitt | Støtter drag-and-drop, betinget logikk og variabelhåndtering | | **Code editor (YAML)** | Tekstbasert editor for eksport/import av topic-logikk | YAML-format, støtter kopiering og versjonering | | **Input/output parameters** | Parametere som brukes ved videresending mellom topics eller i generative actions | Automatisk slot filling i generative mode | ### Entities | Type | Beskrivelse | Bruk | |------|-------------|------| | **Prebuilt entities** | 30+ innebygde typer: age, boolean, city, color, country, date/time, email, money, number, phone, URL, etc. | Direkte tilgjengelig via entity picker i Question-noder | | **Closed list entities** | Egendefinert liste med verdier og synonymer (f.eks. "hiking" med synonymer "trekking", "mountaineering") | Best for små, oversiktlige lister med forutsigbare verdier | | **Regex entities** | Mønsterbasert matching med regulære uttrykk | For strukturerte formater som ordre-ID (INC000001), lisensplater, IP-adresser. NLU/CLU bruker .NET regex; NLU+ bruker JavaScript regex (Verified 2026-04) | | **Smart matching** | Fuzzy logic for stavefeil og semantisk utvidelse (f.eks. "softball" → "baseball") | Aktiveres per closed list entity | | **External entities** | Importerte entities fra CLU (Conversational Language Understanding) med custom JSON resolutions | For avanserte NLU-scenarier med komplekse datatyper | **Sammenligning: Closed List vs. Regex** | Kriterium | Closed List | Regex | |-----------|-------------|-------| | **Format** | Liste med verdier + synonymer | Mønster (f.eks. `^INC\d{6}$`) | | **Best for** | Produkt-kategorier, valg, steder | Strukturerte data med fast format | | **Smart matching** | Støttes (aktiveres per entity) | Nei (pattern må matche eksakt) | | **Vedlikehold** | Enkelt å legge til/fjerne verdier | Krever regex-kompetanse | | **Eksempel** | "Hiking" med synonymer "Trekking", "Mountaineering" | Tracking ID: `[A-Z]{2}\d{8}` | --- ## Arkitekturmønstre ### Topic Design Patterns #### 1. Single-turn vs. Multi-turn Conversations | Mønster | Beskrivelse | Eksempel | |---------|-------------|----------| | **Single-turn** | Ett spørsmål, ett svar | "Hva er åpningstidene?" → svar med link til nettside | | **Multi-turn** | Flere spørsmål i sekvens, med betinget logikk | "Hvilken butikk?" → "Hvilken dato?" → viser åpningstider for valgt butikk og dato | #### 2. Branching Logic med Betingelser ```yaml - kind: ConditionGroup conditions: - condition: =Topic.State = "California" || Topic.State = "Washington" actions: - kind: SendMessage message: "Shipping is free to West Coast states." elseActions: - kind: SendMessage message: "Additional shipping charge of $27.50." ``` **Arkitekturprinsipp:** Bruk ConditionGroup-noder for å route samtalen basert på entity-verdier, brukerinput eller globale variabler. #### 3. Topic Redirect og Subtopics ```yaml - kind: RedirectToTopic targetTopic: "StoreClosureInformation" ``` | Scenario | Redirect-strategi | |----------|-------------------| | **Underemne** | Redirect til subtopic, fortsett original topic etter | | **Avslutning** | Redirect til system-topics (End of Conversation, Escalate, Goodbye) | | **Globale topics** | System fallback-topic for ugjenkjente forespørsler | #### 4. Slot Filling Patterns ##### Pattern A: Sequential Slot Filling (tradisjonell) Agent stiller spørsmål i rekkefølge for å samle informasjon: 1. "Hvilken aktivitet?" → "hiking" 2. "Hvor lenge?" → "2 timer" 3. "Budsjett?" → "under $100" ##### Pattern B: Proactive Slot Filling (intelligent) Bruker sier: *"I want to buy hiking boots under $100 for a weekend trip"* Agent gjenkjenner automatisk: - **Activity**: hiking - **Product**: boots - **Budget**: $100 - **Duration**: weekend (implisitt) Agent hopper over allerede besvarte spørsmål. **Merk (oppdatert 2026-04):** Proactive slot filling er aktivert som standard. Deaktiver per node via **Skip question → Ask every time** i Question-noden Properties. Agenten lytter aktivt og husker informasjon gjennom hele samtalen. **Entity literals (Verified 2026-06):** Du kan eksponere eksakt ordlyd fra bruker-input (f.eks. "tomorrow") ved å aktivere **Include metadata** i Question-nodens entity recognition-properties. Variabelen blir da av typen *record* med `.Literal` (råtekst fra bruker) og `.Value` (strukturert verdi). Du kan også legge til betinget logikk basert på `.ConfidenceScore`. Nyttig for naturlige bekreftelsesmeldinger («Du bestilte for i morgen (4/2/2026)»). **Arkitekturvalg:** | Funksjon | Beskrivelse | Kontroll | |----------|-------------|----------| | **Skip question (default)** | Agent hopper over spørsmål hvis slot allerede er fylt | `alwaysPrompt: false` (YAML) | | **Ask every time** | Tving spørsmål uavhengig av om slot er fylt | `alwaysPrompt: true` (YAML) eller via node properties | #### 5. Multiple Entity Recognition En Question-node kan akseptere opptil 5 forskjellige entities (Verified 2026-04): ```yaml - kind: Question prompt: "Provide your account number or phone number" entity: - AccountNumber (regex) - PhoneNumber (prebuilt) - UnknownOption (closed list: "I don't know") ``` **Variable type:** Record med ett element per entity (f.eks. `Identifier.account`, `Identifier.phone`, `Identifier.unknown`). **Begrensning:** Agent identifiserer kun første matchende entity i listen ved multiple matches. --- ## Beslutningsveiledning ### Når bruke Topics vs. Generative Answers | Scenario | Anbefaling | Begrunnelse | |----------|------------|-------------| | Strukturert prosess (bestilling, onboarding) | **Topics** | Full kontroll over samtaleflyt, validering, betingelser | | Åpne spørsmål fra kunnskapsbase | **Generative Answers** | AI genererer svar fra knowledge sources (websites, SharePoint, Dataverse) | | Hybrid (prosess + fleksibilitet) | **Generative Orchestration** | AI velger automatisk mellom topics, tools og knowledge | | Task automation (e-post, CRM-oppdatering) | **Topics med Tools** | Topic kaller Power Automate flow eller connector | ### Når bruke Prebuilt vs. Custom Entities | Kriterium | Prebuilt | Custom (Closed List) | Custom (Regex) | |-----------|----------|---------------------|---------------| | **Datatye er standard** (email, phone, date) | ✅ Ja | - | - | | **Domene-spesifikk liste** (produkter, lokasjoner) | - | ✅ Ja | - | | **Fast format** (ordre-ID, tracking code) | - | - | ✅ Ja | | **Trenger synonymer** | Nei (innebygd) | ✅ Ja | Nei | | **Smart matching/fuzzy logic** | Automatisk | Valgfritt (toggle) | Nei | ### Topic Design Checklist 1. **Identifiser topic-formål:** Informasjon, oppgavegjennomføring eller feilsøking? 2. **List alle scenarioer:** Hvilke varianter av samtalen kan oppstå? 3. **Design samtaletreet:** Tegn flyt på høyt nivå med betingelser og veivalg 4. **Minimér antall spørsmål:** Bruk slot filling for å samle flere verdier fra én input 5. **Valider og iterer:** Test med ekte brukere, les session transcripts i Analytics **Anti-patterns:** - ❌ Replikere funksjonalitet som allerede finnes på nettside/app (brukere kan gjøre dette selv) - ❌ Bygge topics for "long tail"-scenarioer før høyvolum-issues er dekket - ❌ Bruke periods (`.`) i topic-navn (blokkerer solution export) --- ## Integrasjon med Microsoft-stakken ### Power Automate Integration Topics kan kalle Power Automate flows via Tool-noder: ```yaml - kind: CallAction id: call-flow-get-weather action: GetWeatherForecast inputs: city: =Topic.City zipcode: =Topic.ZipCode output: Topic.WeatherData ``` **Brukstilfeller:** - Send e-post med data samlet i topic - Oppdater Dataverse-record - Trigger external API (via HTTP action i flow) - Hente data fra SharePoint eller SQL ### Dynamics 365 og Dataverse Topics kan referere til Dataverse-tables via: - **Generative answers** fra Dataverse knowledge sources - **Power Automate flows** som oppretter/leser records - **Copilot Studio connectors** (Dataverse connector i Tool-node) **Eksempel:** Topic som oppretter sample account records med lat/long-koordinater (se code samples i dokumentasjon). ### Microsoft 365 Copilot Handoff Topics kan videresende samtale til Microsoft 365 Copilot via continuation token: ```typescript await context.sendActivities([ { type: ActivityTypes.Message, text: "Continuing conversation from copilot..." }, { type: ActivityTypes.Message, text: `Fetching more details using continuation token: ${token}` }, { type: ActivityTypes.Message, text: "Handoff successful!" } ]); ``` **Brukstilfeller:** - Copilot Studio-agent starter samtale, M365 Copilot tar over for dype spørsmål i organisasjonens data - Agent i Teams/M365 redirecter til Copilot Studio for strukturerte workflows ### Azure Bot Service Channels Topics kan publiseres til eksterne kanaler (SMS, Facebook, Slack, WhatsApp) via Azure Bot Service integration (GA): 1. **DirectLineClient** starter Copilot Studio-samtale via DirectLine API 2. **OnMessageActivityAsync** handler i bot-relay sender brukermelding til Copilot Studio 3. **Watermark** tracker turntaking i samtalen 4. **Token refresh** kreves hver 30. minutt (håndteres i relay-logikk) **WhatsApp (GA jul 2025):** Copilot Studio støtter direkte publisering til WhatsApp-nummer — ingen mellomlagring via Azure Bot Service nødvendig. (Verified 2026-04) --- ## Offentlig sektor (Norge) ### Compliance og Datahåndtering | Krav | Implementasjon via Topics og Entities | |------|---------------------------------------| | **GDPR** | Entities (email, phone, name) lagres i Dataverse med compliance-settings; variable retention via "Clear variable" node | | **Arkivloven** | Topic session transcripts kan eksporteres til arkivsystem via Power Automate (Azure Blob/Sharepoint) | | **Personvern** | Bruk regex entities for sensitive ID-formater (fødselsnummer, passnummer) med masking i logs | | **Tilgjengelighet (UU)** | Topics støtter SSML for voice-kanaler; adaptive cards følger accessibility-standarder | ### Flerspråklig Support Topics og trigger phrases kan defineres per språk: | Språk | Støtte | NLU-kvalitet | |-------|--------|--------------| | **Norsk bokmål** | ✅ GA | God (prebuilt entities, GPT-modell) | | **Norsk nynorsk** | Delvis (via custom entities) | Moderat (krever custom training) | | **Samisk** | Nei (bruk engelsk som fallback) | Ikke støttet | **Anbefalinger for norsk offentlig sektor:** 1. Bruk engelsk for entity-navn og variable-navn (code readability) 2. Bruk norsk i trigger phrases og meldinger til brukere 3. Definer custom closed list entities for norske geografiske navn, organisasjoner og termer 4. Test med ekte innbyggerhenvendelser for å iterere på trigger phrases --- ## Kostnad og lisensiering ### Lisenskriterier | Lisens | Topics-kapabilitet | Entities-kapabilitet | |--------|-------------------|---------------------| | **Copilot Studio** (standalone) | Ubegrenset topics, 25 000 messages/måned per $200 capacity | Alle prebuilt + custom entities, external entities (NLU+) | | **Power Apps Premium** | Inkludert (inntil 250 messages/bruker/måned) | Alle prebuilt + custom entities | | **Microsoft 365 Copilot** | Topics via Copilot Studio extension | Entities støttes i generative orchestration | ### Kostnadsoptimalisering | Kostnadsfaktor | Påvirkning | Optimalisering | |----------------|-----------|----------------| | **Antall topic-traversals** | Hver gang topic redirectes eller topic kaldes, telles som én turn | Konsolider logikk i færre topics | | **Generative answers calls** | GPT API calls koster mer enn statiske svar | Bruk topics for kjente scenarioer, generative answers for "long tail" | | **Tool calls (Power Automate)** | Hver flow-kjøring teller mot Power Automate kvote | Batch flere handlinger i én flow | | **Session lengde** | Lengre samtaler (flere turns) øker message-forbruk | Design topics for å løse brukerens behov raskt | **Estimert kostnad (norsk offentlig virksomhet, 1000 brukere):** - Basis Copilot Studio lisens: $200/måned (25 000 messages) - Ekstra kapasitet: $100 per 10 000 messages - Typisk forbruk: 3-5 messages per samtale (én topic med 2-3 spørsmål) - Estimert månedlig kostnad: $200-$400 for 5000-10 000 samtaler --- ## For arkitekten (Cosmo) ### Designprinsipper for Topics 1. **Start med high-impact topics:** Analyser support-volum og bygg topics for topp 5-10 henvendelser først. 2. **Bruk slot filling aggressivt:** La brukere gi flere opplysninger i én setning, unngå unødvendige spørsmål. 3. **Design for fallback:** Alltid ha fallback-logikk (system fallback topic, escalate til agent, eller generative answers). 4. **Test med ekte data:** Bruk Analytics-transcripts for å iterere på trigger phrases og betingelser. 5. **Versjonskontroll topics:** Eksporter topics som YAML til git for versjonering og code review. ### Entity-strategi | Scenario | Entity-valg | Rationale | |----------|-------------|-----------| | **Persondata (navn, e-post, telefon)** | Prebuilt | Innebygd validering og global NLU-støtte | | **Norske stedsnavn** | Custom closed list med smart matching | Fuzzy logic håndterer stavefeil ("Tronsheim" → "Trondheim") | | **Interne ordre-ID, sak-ID** | Regex | Fast format (f.eks. `SAK-\d{6}`) garanterer korrekt parsing | | **Kategori-valg (f.eks. tjenestetype)** | Custom closed list | Synlig for brukere som knapper, støtter synonymer | ### Integrasjonsarkitektur ``` User → Copilot Studio Agent (Topic) ↓ [Question Node med Entity] ↓ [Slot Filling + Betingelser] ↓ [Tool Node → Power Automate Flow] ↓ [Dataverse / Azure / SAP / Custom API] ↓ [Svar til bruker + Redirect eller End] ``` **Key Decisions:** - **Generative vs. Classic Orchestration:** Velg generative hvis brukerforespørsler er uforutsigbare; classic hvis du trenger deterministisk flyt. - **Topic granularity:** En topic per brukerforspørsel (f.eks. "Book møterom") vs. flere topics per domene (f.eks. "Møterom: søk", "Møterom: bestill", "Møterom: kanseller"). - **Entity scope:** Globale entities (gjenbrukes på tvers av topics) vs. topic-spesifikke entities (scope-isolasjon). ### Testing og Iterasjon 1. **Test-panel i Copilot Studio:** Bruk "Track between topics" for å debugge samtaleflyt. 2. **Variable watch window:** Inspiser entity-verdier real-time under testing. 3. **Analytics:** Analyser "unanswered queries" og "generative answer quality" for å forbedre topics. 4. **A/B-testing:** Lag to versjoner av samme topic med ulike trigger phrases, sammenlign CSAT-score. ### Når Bruke Code Editor (YAML) - ✅ Kopiering av topics mellom agents - ✅ Versjonering i git (diffing, code review) - ✅ Bulk-editing av betingelser eller meldinger - ✅ Import av komplekse topics fra andre teams - ❌ IKKE for å designe nye topics fra scratch (bruk GUI først, eksporter YAML etter) --- ## Kilder og verifisering ### Primærkilder (Verified) Alle referanser er hentet fra offisiell Microsoft Learn-dokumentasjon via MCP (`microsoft-learn` server), juni 2026: 1. **Create and edit topics** https://learn.microsoft.com/en-us/microsoft-copilot-studio/authoring-create-edit-topics Comprehensive guide til topic authoring, node types, code editor (YAML), input/output parameters. 2. **Use entities and slot filling in agents** https://learn.microsoft.com/en-us/microsoft-copilot-studio/advanced-entities-slot-filling Detaljer om prebuilt entities, custom entities (closed list, regex), slot filling, proactive slot filling, multiple entity recognition. 3. **Topics in Copilot Studio (Guidance)** https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/topics-overview Overview av topic-konseptet, trigger phrases, conversation nodes, AI-generering. 4. **Defining agent topics (Guidance)** https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/defining-chatbot-topics Topic design process, single-turn vs. multi-turn, best practices. 5. **Variables overview (Entities table)** https://learn.microsoft.com/en-us/microsoft-copilot-studio/authoring-variables-about Fullstendig tabell over prebuilt entities og variable base types. 6. **Implement slot-filling best practices (Guidance)** https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/slot-filling-best-practices Best practices for entity-bruk, closed list vs. regex, user experience-forbedringer. 7. **Training: Manage topics in Microsoft Copilot Studio** https://learn.microsoft.com/en-us/training/modules/manage-power-virtual-agents-topics/ Strukturert læringssti for topic management, branching, fallback topics. 8. **Training: Work with entities and variables** https://learn.microsoft.com/en-us/training/modules/power-virtual-agents-entities/ Praktisk trening i entity-bruk og variable-håndtering. ### Code Samples (Verified) YAML-eksempler hentet fra Microsoft Learn code samples: 1. **AdaptiveDialog topic med conditional logic og entities** https://learn.microsoft.com/en-us/microsoft-copilot-studio/authoring-create-edit-topics#edit-a-topic YAML-eksempel med Question nodes, ConditionGroup, StatePrebuiltEntity, BooleanPrebuiltEntity. 2. **Power Automate integration i topic** https://learn.microsoft.com/en-us/microsoft-copilot-studio/advanced-use-flow Eksempel på Tool node som kaller flow med inputs/outputs. 3. **Azure Bot Service DirectLineClient integration** https://learn.microsoft.com/en-us/microsoft-copilot-studio/publication-connect-bot-to-azure-bot-service-channels C#-eksempel på session management, conversation routing. 4. **Dynamics 365 account creation via topic** https://learn.microsoft.com/en-us/dynamics365/guidance/resources/field-service-deploy-copilot-studio-create-sample-data YAML-eksempel med SearchAndSummarizeContent node, Question nodes for lat/long, ConditionGroup. ### Baseline (modellkunnskap) Følgende informasjon er basert på modellens treningsdata (januar 2025) og bekreftet mot Microsoft Learn januar 2026: - Generative orchestration vs. classic orchestration - Topic lifecycle (draft, published, deprecated) - Topic vs. Generative Answers use cases - Entity types og variable base types - Power Fx expressions i betingelser ### Confidence Rating | Seksjon | Confidence | Kilde | |---------|-----------|-------| | Kjernekomponenter | **Verified** | Microsoft Learn (fetch + search) | | Arkitekturmønstre | **Verified** | Microsoft Learn + code samples | | Beslutningsveiledning | **Baseline** | Modellkunnskap, bekreftet mot docs | | Microsoft-integrasjon | **Verified** | Microsoft Learn (code samples) | | Offentlig sektor (Norge) | **Baseline** | Modell-ekstrapolasjon basert på general GDPR/compliance-kunnskap | | Kostnad og lisensiering | **Baseline** | Modellkunnskap (januar 2025), kan ha endret seg i 2026 | **Sist verifisert:** 2026-06-19 (via MCP `microsoft-learn` server) --- **For Cosmo:** Når du rådgir om topics og entities, vurder: 1. **Topic granularity:** Hvor mange topics trenger løsningen? (Tommelfingerregel: 1 topic per høynivå-brukerforspørsel) 2. **Entity-strategi:** Hvilke entities er kritiske for slot filling? Prebuilt vs. custom? 3. **Orchestration mode:** Classic (deterministisk) vs. Generative (fleksibel)? 4. **Integration points:** Trenger topics å kalle Power Automate, Dataverse, eller eksterne APIer? 5. **Fallback-strategi:** Hva skjer ved ugjenkjente forespørsler? (Generative answers, escalate, eller redirect?) Bruk dette dokumentet som referanse når du designer samtaleflyt, evaluerer entity-behov, og planlegger integrasjoner.