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.
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
- Åbn Granolas desktop-app.
- Klik dit navn nederst i venstre hjørne, og vælg "Settings".
- Gå til "Connectors" og find "Personal API Keys".
- Klik "Create new key".
- Vælg hvilken adgang nøglen skal have, og klik "Generate API Key".
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.
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
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.
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.
Trin 3: Opret flowet
- Gå til make.powerautomate.com.
- Vælg "Create", og derefter "Instant cloud flow".
- Giv flowet et navn, for eksempel "Granola Meeting Summary to Teams".
- Vælg triggeren "Manually trigger a flow", og klik "Create".
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
- Tilføj en HTTP-handling, og omdøb den til "HTTP - List notes".
- URI:
https://public-api.granola.ai/v1/notes?page_size=10 - Method: GET
- Under Headers: Key =
Authorization, Value =Bearerefterfulgt af outputtet fra Compose-handlingen.
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.
Trin 6: Find den seneste note
Svaret indeholder ti noter. Du skal bruge den nyeste, altså den første i listen.
- Tilføj en Compose-handling, og omdøb den til "Compose - Latest note id".
- Sæt følgende udtryk ind i Inputs:
body('HTTP_-_List_notes')?['notes'][0]?['id']
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
- Tilføj endnu en HTTP-handling, og omdøb den til "HTTP - Get note".
- URI:
https://public-api.granola.ai/v1/notes/efterfulgt af outputtet fra "Compose - Latest note id". - Method: GET
- Samme Authorization-header som før.
Kør flowet, og bekræft at svaret nu indeholder title, summary_text og web_url.
Trin 8: Post beskeden i Teams
- Tilføj handlingen "Post message in a chat or channel" fra Microsoft Teams.
- Post as: Flow bot
- Post in: Chat with Flow bot
- Recipient: Din egen mailadresse
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.
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.
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 medcreated_afteri 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_texthar 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.