Store meeting transcript on SharePoint

Microsoft Teams has great features like automatic recordings and transcripts. It is even possible to download the transcript after the meeting. In this blog I will show you how you can retrieve and store a meeting transcript on SharePoint Online via a Power Automate flow.

transcript_meeting_manual_download

Inspiration

I was inspired by the tweet below from Lee Holmes. He showed that it was possible to retrieve the transcript content via PowerShell. And I thought, why not try it via Power Automate as well?

YouTube video

Before you continue reading. I also have a YouTube video about the setup.

Meeting Policies

Transcription is a feature which will be enabled or disabled in one of your Meeting Policies. Double check this before you start with your Power Automate setup.

enable_transcription

GET callTranscript content

After reading some several Graph API docs I figured out this would be possible.

The onlineMeeting id can be retrieved via the Get onlineMeeting method and a $filter query parameter and the JoinWebUrl.

After that it is possible to retrieve all transcripts of our meeting with a List transcripts method.

And finally the transcript content can be retrieved in application/vnd.openxmlformats-officedocument.wordprocessingml.document format via the Get callTranscript method.

Lets try and turn this into a working flow!

Flow setup

Checklist before you start:
– This example uses HTTP connector actions which are part of a premium feature, make sure you have a license which covers this.
– The HTTP actions also use an app (with the correct Graph API permissions) in Azure Active Directory for authentication.

storetranscriptasfile

1. Add a When an upcoming event is starting soon (V3) action.

whenanupcomingeventisstartingsoon

a. Select your Calendar Id, in this case Calendar

2. Add a Get my profile (v2) action.
To retrieve my own email for the Author field of the SharePoint page.

getmyprofile_02

3. Add a Initialize variable action.

onlinemeetingvariable

a. Provide a Name, in this example onlineMeetingId
b. Select a Type, String
c. Leave Value empty

4. Add a second Initialize variable action.

initializevariable_transcriptid

a. Provide a Name, in this example transcriptId
b. Select a Type, String
c. Leave Value empty

5. Add a Condition action.
In this condition the body field within the body is checked for the meetup-join hyperlink. A indexOf function is used. If this is found it will output 1. If it is not found (equal to -1), it will output 0.

condition_checkifteamsmeeting

a. Use the expression below for the where statement

6. Add a HTTP action (in the If Yes section).
A Get onlineMeeting method from the Graph API is used. In this case specifically with a $filter query parameter and the JoinWebUrl. This is information we can retrieve from the body/body of the event message.

onlinemeetingid_graph

a. Select the GET method
b. Use the URI from the code snippet below

c. Select Active Directory OAuth for the Authentication, provide the details of your Azure AD App.

7. Add a Set Variable action (in the If Yes section).

setvariable_onlinemeetingid

a. In the Name field select the onlineMeetingId variable
b. In the Value field use the expression from the code snippet below

8. Add a Delay until action (in the If Yes section).

delayuntil_30minutesafterscheduledmeetingend

a. In the Timestamp field use the expression from the code snippet below

9. Add a second HTTP action (in the If Yes section).
A List transcripts method is used to retrieve the transcripts of the specific online meeting.

listtranscripts

a. Select the GET method
b. Use the URI from the code snippet below

c. Select Active Directory OAuth for the Authentication, provide the details of your Azure AD App.

10. Add a second Set Variable action (in the If Yes section).

setvariable_transcriptid

a. In the Name field select the transcriptId variable
b. In the Value field use the expression from the code snippet below

11. Add a third HTTP action (in the If Yes section).
A Get callTranscript method is used to retrieve the content of an individual transcripts in the application/vnd.openxmlformats-officedocument.wordprocessingml.document format.

getcalltranscriptcontent

a. Select the GET method
b. Use the URI from the code snippet below

c. Select Active Directory OAuth for the Authentication, provide the details of your Azure AD App.

12. Add a Create File action.

createfile_spo

a. Select the Site Address from the dropdown, or use an environment variable (parameter) like me
b. Select a Folder Path, in this example /Shared Documents/Meeting Transcripts
c. Use the expression from the code snippet below for the File Name

d. Use the Body field of the HTTP – Transcript action

That is it for the setup of this example.

Testing Transcription

You can start a transcript from within the More menu option.

starttranscript

When the transcript is started you would see it in the side panel during the meeting.

starttranscript02

After the meeting you will see it in the Recordings & Transcripts tab

transcript_meeting_manual_download

But also as a file in our specified Document Library

doclib_meetingtranscripts

When you open the file you should see something like below

transcript_meeting

You can now e-mail/share a link to the document. Or potentially process it with an AI model. More on that in a future blog…

For now, Happy testing!

You may also like...

7 Responses

  1. S. Sprague says:

    This is great, Dennis! Thanks so much for documenting!

    Do you think that the same process could be used to obtain the Attendance reports for meetings? If so, do you know how the process would differ?

  2. Dennis says:

    @S. Sprague, yes the process would be pretty much the same. I actually have written another blog about this as well: https://www.expiscornovus.com/2022/10/24/share-attendance-directly-after-meeting/

  3. sarah says:

    Hi,

    Thank you for you tutorial. I seem to be getting this error on the first HTTP

    ActionBranchingConditionNotSatisfied. The execution of template action ‘HTTP’ skipped: the branching condition for this action is not satisfied.

  4. samer says:

    Great work Dennis, i think this is the only post online to do this

    I am nevertheless struggling with the authentication part keep getting 403 forbidden maybe as ai am trying to access then from zapier (if you know the tool); I will try through power automate and see

  5. Samer says:

    i followed you instructions step by step but I keep getting below error at there first API call where all stops

    can you tell where I might getting this wrong? thanks for the great effort in your video and blog!

    {
    “statusCode”: 403,
    “headers”: {
    “Transfer-Encoding”: “chunked”,
    “Vary”: “Accept-Encoding”,
    “Strict-Transport-Security”: “removed”,
    “request-id”: “removed”,
    “client-request-id”: “removed”,
    “x-ms-ags-diagnostic”: “removed”,
    “scenario-id”: “removed”,
    “Date”: “Tue, 26 Mar 2024 18:34:31 GMT”,
    “Content-Type”: “application/json”,
    “Content-Length”: “198”
    },
    “body”: {
    “error”: {
    “code”: “Forbidden”,
    “message”: “”,
    “innerError”: {
    “request-id”: “removed”,
    “date”: “2024-03-26T18:34:32”,
    “client-request-id”: “removed”
    }
    }
    }
    }

  6. Dennis says:

    Hi Samer,

    That first call uses the Get OnlineMeeting method of the Graph API. Have you made sure that the app you registered in Entra Id has the correct permissions?
    https://learn.microsoft.com/en-us/graph/api/onlinemeeting-get?view=graph-rest-1.0&tabs=http#permissions

  7. Samer says:

    Thanks Dennis
    I figured it out, for some reason the formula to pick the teams url was generating a faulty link (including more text); i replaced it by two compose steps removing text before the link and then after the first “ and now it works 🙂

    Now stuck with creating the file as the $format part which i reconfirmed from ms docs is generating an error, i tried it in header with the ‘accept’ header and same as value and in the uri as you did and it is giving an error everytime

    Looking for some third party to convert transcript data body to .docx

    By the way what you did is super! Might be the only comprehensive guide on this on the internet

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.