Forum Discussion
Getting “Meeting Id is corrupted” error while trying to fetch meeting details from Graph API
We cannot use the Chat API as we don't have required scope permissions to use it. Is there anyother way round this problem?
Any updates on this?
- CMiguelFerreiraMay 16, 2025Copper Contributor
It took me ages to reverse-engineer this, but I found a working solution.
Shame, shame, shame on Microsoft for working in silos and not attempting to fix the resulting mess.
In a nutshell, you need to do some replacing of the meeting id from the one you have from Teams into Graph.
The step-by-step process is as follows:
- The ID you get from Teams looks like "MCMxOTptZWV0aW5nX016YzJabVkzT0RFdFl6QTJaaTAwT1RBMExXRXlNRFF0T0RkbVl6TTRNRE15TlRJMkB0aHJlYWQudjIjMA=="
- You decode the Base64, leading to "0#19:meeting_Mzc2ZmY3ODEtYzA2Zi00OTA0LWEyMDQtODdmYzM4MDMyNTI2@thread.v2#0"
- You then need to get rid of "0#" and "#0", hence "19:meeting_Mzc2ZmY3ODEtYzA2Zi00OTA0LWEyMDQtODdmYzM4MDMyNTI2@thread.v2"
- The prepend "1*" + <GUID of the User> + "*0**", resulting in "1*b2267176-534c-4bef-800a-d598623e2f7f*0**19:meeting_Mzc2ZmY3ODEtYzA2Zi00OTA0LWEyMDQtODdmYzM4MDMyNTI2@thread.v2"
- Finally, Base64 the result "MSpiMjI2NzE3Ni01MzRjLTRiZWYtODAwYS1kNTk4NjIzZTJmN2YqMCoqMTk6bWVldGluZ19NemMyWm1ZM09ERXRZekEyWmkwME9UQTBMV0V5TURRdE9EZG1Zek00TURNeU5USTJAdGhyZWFkLnYy"
Here is a complete implementation in C# from ITurnContext. I have two extensions methods to convert to and from Base64, which I'm not herein including:
public static async Task<IReadOnlyList<SimpleChatMessage>> GetTranscript(ITurnContext turnContext, CancellationToken cancellationToken = default)
{
var participants = await TeamsInfo.GetMembersAsync(turnContext);
var firstPartipant = participants.First();var meetingId = System.Text.Encoding.UTF8.GetString(channelData.Meeting.Id.FromBase64String());
var meetingLongId = "1*" + firstPartipant.AadObjectId + "*0**" + meetingId.Replace("#0", "").Replace("0#", "");
meetingLongId = meetingLongId.ToBytes().ToBase64String();var currentPage = await GraphServiceClient.Users[firstPartipant.AadObjectId].OnlineMeetings[meetingLongId].Transcripts.GetAsync(requestConfiguration =>
{
// requestConfiguration.QueryParameters.Top = 1; // maximum
//requestConfiguration.QueryParameters.Orderby = new string[] { "createdDateTime desc" };
}, cancellationToken).ConfigureAwait(false);var latestTranscript = currentPage.Value.Last();
}