Spring til indhold
Menu

Artikler Annonce

Granola API + Power Automate: Send mødereferatet til Teams

Granola skriver referatet, men det bliver liggende i Granola. Byg et flow, der henter den seneste note via API'et og poster den i Microsoft Teams.

Anders Jensen Automatiserings- og AI-instruktør

Annonce: Denne artikel er lavet i samarbejde med Granola, som har betalt for at få deres produkt vist. Fremgangsmåden, vurderingerne og forbeholdene er mine egne.

Video: Automatisk Granola-mødereferat til Microsoft Teams med Power Automate

Granola skriver et pænt referat af dit møde. Problemet er, at referatet bliver liggende i Granola, og at ingen andre end dig åbner appen. I denne guide bygger du et Power Automate-flow, der henter den seneste note via Granolas API og poster den som en besked i Microsoft Teams, med titel, resumé og et link til hele noten.

Jeg underviser i Power Automate til daglig, og det her er den type integration jeg oftest bliver spurgt om: To værktøjer der hver for sig virker fint, men som ikke taler sammen. Granolas API er kort nok til, at hele kæden kan bygges på en formiddag, og det gør den til et godt sted at lære, hvordan man kalder et fremmed API fra et flow.

Det skal du have først

  • Granola sat op med din Microsoft-konto: Er du ikke i gang endnu, starter du med guiden til Granola med Teams og Outlook. Denne artikel tager over, hvor den slipper.
  • Granola på en Business-plan: API-nøgler kan kun oprettes af medlemmer på Business-planen. Er I på en gratis eller personlig plan, kan I ikke bygge det her. På Enterprise styrer workspace-administratoren desuden hvilke scopes I må bruge.
  • Power Automate: HTTP-handlingen er premium, så den kræver en licens der dækker den.
  • Microsoft Teams: Til at modtage beskeden.
  • Postman (valgfrit): Jeg bruger det til at forstå API'et, før jeg bygger. Du kan springe det over og gå direkte til flowet.

Trin 1: Hent en API-nøgle i Granola

  1. Åbn Granolas desktop-app.
  2. Klik dit navn nederst i venstre hjørne, og vælg "Settings".
  3. Gå til "Connectors" og find "Personal API Keys".
  4. Klik "Create new key".
  5. Vælg hvilken adgang nøglen skal have, og klik "Generate API Key".
Granolas indstillinger med Connectors-siden åben og listen over integrationer

Du skal tage stilling til to scopes:

  • Personal notes: Noter du selv ejer, noter der er delt direkte med dig, og noter i private mapper du har adgang til.
  • Public notes: Noter alle i workspacet kan se, og noter i Team-spacet.

Vælg det mindste, der løser opgaven. Skal flowet kun hente dine egne mødereferater, er "Personal notes" nok.

Dialogen API Key Created i Granola med den nye nøgle sløret og en advarsel om, at den kun vises én gang

Kopiér nøglen med det samme. Den vises kun denne ene gang, og du kan ikke hente den frem igen bagefter. Mister du den, laver du en ny og sletter den gamle.

Trin 2: Forstå API'et, før du bygger flowet

Det tager ti minutter at kalde API'et manuelt først, og de ti minutter sparer dig for at fejlsøge to ting på én gang senere. Granolas API-dokumentation rummer i skrivende stund tre endpoints: List notes, Get note og List folders.

Start med List notes:

  • Metode: GET
  • URL: https://public-api.granola.ai/v1/notes?page_size=10
  • Header: Authorization: Bearer DIN_API_NØGLE
API-dokumentationen for List Notes med metode, URL, autorisation og eksempel på svaret

Svaret er en liste af noter, hvor hver note har et id, en title, en owner og tidsstempler. Noternes id'er starter med not_. Det er kun oversigtsdata: Selve referatet ligger ikke med her.

Postman med List notes-kaldet og JSON-svaret, der viser id, title og owner for den seneste note

Referatet henter du med Get note, hvor du sætter et note-id ind i URL'en:

  • URL: https://public-api.granola.ai/v1/notes/{note_id}

Her ligger de tre felter, resten af guiden handler om:

  • title: Mødets titel.
  • summary_text: Selve referatet som ren tekst. Der findes også summary_markdown, hvis du hellere vil have formateringen med.
  • web_url: Link direkte til noten i Granola på nettet.
Postman med Get note-kaldet og svaret, hvor summary_text og web_url er synlige

Trin 3: Opret flowet

  1. Gå til make.powerautomate.com.
  2. Vælg "Create", og derefter "Instant cloud flow".
  3. Giv flowet et navn, for eksempel "Granola Meeting Summary to Teams".
  4. Vælg triggeren "Manually trigger a flow", og klik "Create".
Dialogen Build an instant cloud flow i Power Automate med flownavn og manuel trigger valgt

Manuel trigger, fordi du skal kunne trykke på knappen mens du bygger. Den bliver skiftet ud til sidst.

Trin 4: Læg nøglen ét sted

Tilføj en Compose-handling, omdøb den til "Compose - API Key", og indsæt nøglen i Inputs.

Grunden er praktisk: Nøglen skal bruges i to forskellige HTTP-kald, og når den står ét sted, skal den kun skiftes ét sted. Vær opmærksom på, at nøglen står i klartekst i flowet, og at alle med redigeringsadgang kan læse den. Skal det køre for andre end dig selv, hører nøglen hjemme i Azure Key Vault i stedet.

Trin 5: Hent listen af noter

  1. Tilføj en HTTP-handling, og omdøb den til "HTTP - List notes".
  2. URI: https://public-api.granola.ai/v1/notes?page_size=10
  3. Method: GET
  4. Under Headers: Key = Authorization, Value = Bearer efterfulgt af outputtet fra Compose-handlingen.
Dynamic content-vælgeren i Power Automate, hvor outputtet fra Compose - API Key sættes ind i Authorization-headeren

Husk mellemrummet efter Bearer. Det er den hyppigste årsag til en 401 herfra.

Gem, og kør flowet. Klik derefter på handlingen i kørselsoversigten og vælg "Show raw outputs", så du kan se hvad der faktisk kom retur.

Power Automate viser Your flow ran successfully efter første testkørsel

Trin 6: Find den seneste note

Svaret indeholder ti noter. Du skal bruge den nyeste, altså den første i listen.

  1. Tilføj en Compose-handling, og omdøb den til "Compose - Latest note id".
  2. Sæt følgende udtryk ind i Inputs:
body('HTTP_-_List_notes')?['notes'][0]?['id']
Expression-editoren i Power Automate med udtrykket, der henter id på den første note i listen

Udtrykket læses sådan:

  • body('HTTP_-_List_notes'): Svaret fra HTTP-handlingen. Mellemrum i handlingens navn bliver til understregninger her, og det er værd at huske, hvis du har omdøbt dine handlinger anderledes end mine.
  • ?['notes']: Listen af noter i svaret. Spørgsmålstegnet gør, at flowet ikke fejler, hvis feltet mangler.
  • [0]: Det første element.
  • ?['id']: Notens id.

Kør flowet igen, og se at outputtet nu er ét id og ikke andet.

Trin 7: Hent selve referatet

  1. Tilføj endnu en HTTP-handling, og omdøb den til "HTTP - Get note".
  2. URI: https://public-api.granola.ai/v1/notes/ efterfulgt af outputtet fra "Compose - Latest note id".
  3. Method: GET
  4. Samme Authorization-header som før.
HTTP - Get note-handlingen i Power Automate med det dynamiske note-id sat ind i URL'en

Kør flowet, og bekræft at svaret nu indeholder title, summary_text og web_url.

Kørselsresultatet fra HTTP - Get note med referatets titel, resumé og web-link i JSON-svaret

Trin 8: Post beskeden i Teams

  1. Tilføj handlingen "Post message in a chat or channel" fra Microsoft Teams.
  2. Post as: Flow bot
  3. Post in: Chat with Flow bot
  4. Recipient: Din egen mailadresse
Handlingslisten i Power Automate med Microsoft Teams-handlingen Post message in a chat or channel

Byg derefter beskeden af de tre felter fra Get note: Titlen, resuméet og linket. Selve linket er det trin, folk går i stå på. Du kan ikke bare indsætte web_url og forvente et klikbart link. Skriv i stedet et ord, marker det, opret et link på det, og skift derefter beskedfeltet til HTML-visning, hvor du erstatter den midlertidige adresse med web_url.

Beskedfeltet i Power Automate med mødetitel, resumé og link sammensat af dynamisk indhold fra Granola

Verificér at det virker

Kør flowet en sidste gang, og åbn Teams. Beskeden fra Flow bot skal indeholde mødets titel, referatet og et link, der åbner noten i Granola.

Microsoft Teams-chat med en besked fra Flow bot, der viser mødets titel, Granolas referat og et link til hele noten

Virker linket ikke, ligger fejlen næsten altid i HTML-visningen fra trin 8.

Typiske faldgruber

  • 401 fra API'et: Manglende mellemrum efter Bearer, eller en nøgle der er slettet.
  • Nøglen vises kun én gang: Der er ingen vej tilbage. Lav en ny.
  • Rate limits: Granola tillader 25 kald over 5 sekunder i burst og 5 kald i sekundet vedvarende. Derover får du 429 Too Many Requests. Det rammer du ikke med et manuelt flow, men det er værd at kende, når flowet begynder at køre på en tidsplan.
  • [0] er kun den nyeste note, fordi listen kommer sorteret. Flowet stoler på den rækkefølge. Vil du være sikker, kan du filtrere med created_after i stedet.
  • Understregninger i udtryk: Mellemrum i handlingsnavne bliver til _. Omdøber du en handling efter du har skrevet udtrykket, holder udtrykket op med at virke.
  • Referatet kan være langt. summary_text har ingen øvre grænse, og et langt møde giver en tung Teams-besked. Overvej at klippe teksten og lade linket bære resten.

Fra demo til noget der kører af sig selv

Flowet i denne guide er stadig manuelt: Du trykker på knappen, og den henter den seneste note. Det er med vilje, fordi det er nemmere at fejlsøge sådan.

Skal det køre af sig selv, mangler der to ting. Du skifter den manuelle trigger ud med en tidsplan, for eksempel hvert kvarter. Og du gemmer id'erne på de noter, flowet allerede har sendt, i en SharePoint-liste, så den samme note ikke bliver postet igen ved næste kørsel.

Det er den del, der ikke er pyntet: API'et har ikke en webhook, der kan sige til, når en ny note er klar. Flowet skal selv spørge med jævne mellemrum, og så skal det selv huske hvad det har set. Det er ekstra arbejde, og det er den rigtige måde at bygge det på alligevel.

Er det besværet værd?

Hvis du er den eneste, der læser dine mødereferater, er svaret nej. Så åbn Granola.

Det bliver interessant i det øjeblik referatet skal videre til nogen. En kanal hvor teamet følger med, en projektgruppe der skal have beslutningerne, eller et system der skal opdateres. Granola er god til at fange mødet, og Power Automate er god til at flytte resultatet derhen hvor arbejdet foregår. Teams er bare det første og nemmeste sted at sende det hen. Når kæden først står, er det den samme fremgangsmåde, der lægger referatet i Planner, i en SharePoint-liste eller i jeres CRM.

Granola giver dig den første måned gratis med mit link, hvis du vil prøve kæden af på dit næste møde.

Kommentarer

Der er ingen kommentarer endnu. Skriv den første.

Skriv en kommentar

Dit navn og din kommentar vises offentligt efter godkendelse. Din e-mail vises ikke. Læs mere i privatlivspolitikken.

Flere artikler

  • Sådan bruger du Granola med Microsoft Teams og Outlook

    Få automatiske mødereferater i Teams uden en bot i mødet. Log ind med din Microsoft-konto, synkronisér Outlook-kalenderen, og lad Granola skrive referatet.

    Læs mere →
  • Shadow AI: Sådan finder Microsoft 365 lokale AI-agenter

    Microsoft har lanceret en Shadow AI-side i M365 admin center, der scanner Intune-enheder for lokale AI-agenter. Se hvad den kan, og hvordan I slår den til.

    Læs mere →
  • Webinarer om AI og automatisering

    Se vores webinarer om AI og automatisering on demand: Microsoft Copilot, Power Automate og ChatGPT-sessioner med praktiske demoer, du kan bruge på jobbet.

    Læs mere →