Updates from: 08/10/2023 06:43:45
Service Microsoft Docs article Related commit history on GitHub Change details
platform Conversation Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/conversation-messages.md
Ensure to handle these errors appropriately in your Teams app. The following tab
| 403 | **Code**: `BotDisabledByAdmin` <br/> **Message**: The tenant admin disabled this bot | Tenant admin has blocked interactions between user and the bot app. Tenant admin needs to allow the app for the user inside of app policies. For more information, see [app policies](/microsoftteams/app-policies). | No | Stop posting to conversation until interaction with bot is explicitly initiated by a user in the conversation indicating that the bot is no longer blocked. | | 403 | **Code**: `BotNotInConversationRoster` <br/> **Message**: The bot isn't part of the conversation roster. | The bot isn't part of the conversation. App needs to be reinstalled in conversation. | No | Before attempting to send another conversation request, wait for an [`installationUpdate`](~/bots/how-to/conversations/subscribe-to-conversation-events.md#install-update-event) event, which indicates that the bot has been added again.| | 403 | **Code**: `ConversationBlockedByUser` <br/> **Message**: User blocked the conversation with the bot. | User has blocked the bot in personal chat or a channel through moderation settings. | No | Delete the conversation from cache. Stop attempting to post to conversations until interaction with bot is explicitly initiated by a user in the conversation, indicating that the bot is no longer blocked. |
+| 403 |**Code**: `ForbiddenOperationException` <br/> **Message**: Bot is not installed in user's personal scope | Proactive message is sent by a bot, which isn't installed in a personal scope. | No | Before attempting to send another conversation request, install the app in personal scope. |
| 403 |**Code**: `InvalidBotApiHost` <br/> **Message**: Invalid bot api host. For GCC tenants, please call `https://smba.infra.gcc.teams.microsoft.com`.|The bot called the public API endpoint for a conversation that belongs to a GCC tenant.| No | Update the service URL for the conversation to `https://smba.infra.gcc.teams.microsoft.com` and retry the request.| | 403 | **Code**: `NotEnoughPermissions` <br/> **Message**: *scenario specific | Bot doesn't have required permissions to perform the requested action. | No | Determine the required action from the error message. | | 404 | **Code**: `ActivityNotFoundInConversation` <br/> **Message**: Conversation not found. | The message ID provided couldn't be found in the conversation. Message doesn't exist or it has been deleted. | No | Check if message ID sent is an expected value. Remove the ID if it was cached. |
platform Send Proactive Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/send-proactive-messages.md
Sending a proactive message is different from sending a regular message. There's
To send a proactive message, follow these steps:
-1. [Get the user ID, team ID, or channel ID](#get-the-user-id-team-id-or-channel-id), if necessary.
+1. [Get the user AAD ID, user ID, team ID, or channel ID](#get-the-user-aad-id-user-id-team-id-or-channel-id), if necessary.
1. [Create the conversation](#create-the-conversation), if necessary. 1. [Get the conversation ID](#get-the-conversation-id). 1. [Send the message](#send-the-message). The code snippets in the [samples](#samples) section are to create a one-on-one conversation. For links to samples for both one-on-one conversations and group or channels messages, see [code sample](#code-sample). To use proactive messages effectively, see [best practices for proactive messaging](#best-practices-for-proactive-messaging).
-## Get the user ID, team ID, or channel ID
+## Get the user AAD ID, user ID, team ID, or channel ID
You can create a new conversation with a user or a conversation thread in a channel and you must have the correct ID. You can receive or retrieve this ID using any of the following ways:
You can create a new conversation with a user or a conversation thread in a chan
* You can retrieve the [list of channels](~/bots/how-to/get-teams-context.md) in a team where your app is installed. * You can retrieve the [list of members](~/bots/how-to/get-teams-context.md) of a team where your app is installed.
-Regardless of how you get the information, store the `tenantId` and either the `userId` or `channelId` to create a new conversation. You can also use the `teamId` to create a new conversation thread in the general or default channel of a team.
+Regardless of how you get the information, store the `tenantId` and then store either the `userId`, or `channelId` to create a new conversation. You can also use the `teamId` to create a new conversation thread in the general or default channel of a team. Ensure that the bot is installed in the team before you can send a proactive message to a channel.
-The `userId` is unique to your bot ID and a particular user. You can't reuse the `userId` between bots. The `channelId` is global. However, install the bot in the team before you can send a proactive message to a channel.
+* The `aadObjectId` is unique to the user and can be retrieved using the [graph API](/graph/api/user-list) to create a new conversation in personal chat. Ensure that the bot is installed in the personal scope before you can send a proactive message. If the bot isn't installed in a personal scope when sending a proactive message using the `aadObjectId`, the bot returns a `403` error with `ForbiddenOperationException` message.
+
+* The `userId` is unique to your bot ID and a particular user. You can't reuse the `userId` between bots.
+
+* The `channelId` is global.
Create the conversation, after you have the user or channel information.
+> [!NOTE]
+> Sending proactive messages using `aadObjectId` is supported only in personal scope.
+ ## Create the conversation You can create the conversation if it doesn't exist or you don't know the `conversationId`. Create the conversation only once and store the `conversationId` value or `conversationReference` object.
-To create the conversation, you need a `userId`, `tenantId`, and `serviceUrl`.
+To [create the conversation](/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference#create-conversation), you need a `aadObjectId` or `userId`, `tenantId`, and `serviceUrl`.
For `serviceUrl`, use the value from an incoming activity triggering the flow or one of the global service URLs. If the `serviceUrl` isn't available from an incoming activity triggering the proactive scenario, use the following global URL endpoints:
The following table provides a simple code sample that incorporates basic conver
| Teams Conversation Basics | This sample app shows how to use different bot conversation events available in bot framework v4 for personal and teams scope.| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/python) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/bot-conversation/csharp/demo-manifest/bot-conversation.zip) | Start new thread in a channel | This sample shows how to start a thread in a specific Team's channel using Bot Framework v4. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/python) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/bot-initiate-thread-in-channel/csharp/demo-manifest/bot-initiate-thread-in-channel.zip) | | Proactive installation of app and sending proactive notifications | This sample shows how you can use proactive installation of app for users and send proactive notifications by calling Microsoft Graph APIs. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-proactive-installation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-proactive-installation/nodejs) | NA | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/graph-proactive-installation/csharp/demo-manifest/graph-proactive-installation.zip)
-| Proactive Messaging | This is a sample that shows how to save user's conversation reference information to send proactive reminder message using Bots. | NA | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-proactive-messaging-teamsfx) | NA |
+| Proactive Messaging | This is a sample that shows how to save user's conversation reference information to send proactive reminder message using Bots. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-proactive-messaging-teamsfx) | NA |
> [!div class="nextstepaction"] > [More code sample of proactive messaging](/samples/officedev/msteams-samples-proactive-messaging/msteams-samples-proactive-messaging/)
platform Fetch Id https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/graph-api/meeting-transcripts/fetch-id.md
Title: Obtain meeting ID and organizer ID for fetching meeting transcripts
-description: Describes the process of Obtain meeting ID and organizer ID for fetching meeting transcripts
+ Title: Obtain meeting ID and organizer ID for fetching meeting transcripts and recordings
+description: Describes the process of Obtain meeting ID and organizer ID for fetching meeting transcripts and recordings
ms.localizationpriority: high Last updated 01/05/2023 # Obtain meeting ID and organizer ID
-Your app can fetch transcripts of a meeting using the meeting ID and the user ID of the meeting organizer, also known as organizer ID. The Graph REST APIs fetch transcripts based on the meeting ID and organizer ID that are passed as parameters in the API.
+Your app can fetch transcripts and recordings of a meeting using the meeting ID and the user ID of the meeting organizer, also known as organizer ID. The Graph REST APIs fetch transcripts and recordings based on the meeting ID and organizer ID that are passed as parameters in the API.
> [!NOTE] > The meeting ID for scheduled meetings may expire in some days if it's unused. It can be revived by using the meeting URL to join the meeting. For more information about meeting expiration timeline for different meeting types, see [meeting expiration](/microsoftteams/limits-specifications-teams#meeting-expiration).
-To obtain meeting ID and organizer ID for fetching the transcript, choose one of the two ways:
+To obtain meeting ID and organizer ID for fetching the transcript and recording, choose one of the two ways:
- [Subscribe to change notifications](#subscribe-to-change-notifications) - [Use Bot Framework](#use-bot-framework-to-get-meeting-id-and-organizer-id) ## Subscribe to change notifications
-You can subscribe your app to receive change notifications for scheduled meeting events. When your app is notified about the subscribed meeting events, it can obtain transcripts, if it's authorized via required Azure AD permissions.
+You can subscribe your app to receive change notifications for scheduled meeting events. When your app is notified about the subscribed meeting events, it can obtain transcripts and recordings, if it's authorized via required Azure AD permissions.
Your app receives notification for the type of meeting events for which it's subscribed: - [User-level notification](#obtain-meeting-details-using-user-level-notification) - [Tenant-level notification](#obtain-meeting-details-using-tenant-level-notification)
-When your app is notified of a subscribed meeting event, it can retrieve the meeting ID and organizer ID from the notification message. Based on the meeting details obtained, your app can fetch the meeting transcripts after the meeting has ended.
+When your app is notified of a subscribed meeting event, it can retrieve the meeting ID and organizer ID from the notification message. Based on the meeting details obtained, your app can fetch the meeting transcripts and recordings after the meeting has ended.
## Obtain meeting details using user-level notification
-Choose to subscribe your app to user-level notifications for getting transcripts of a particular user's meeting event. When a meeting is scheduled for that user, your app is notified. Your app can receive meeting notifications using calendar events as well.
+Choose to subscribe your app to user-level notifications for getting transcripts and recordings of a particular user's meeting event. When a meeting is scheduled for that user, your app is notified. Your app can receive meeting notifications using calendar events as well.
For subscribing your app to calendar events, see [change notifications for Outlook resources in Microsoft Graph](/graph/outlook-change-notifications-overview).
To obtain meeting ID and organizer ID from user-level notification:
### Obtain meeting details using tenant-level notification
-Tenant-level notifications are useful if your app is authorized to access all meeting transcripts across the tenant. Subscribe your app to be notified for events when transcription starts or call ends for scheduled online Teams meetings. After the meeting ends, your app can access and retrieve the meeting transcript.
+Tenant-level notifications are useful if your app is authorized to access all meeting transcripts and recordings across the tenant. Subscribe your app to be notified for events when transcription and recording starts or call ends for scheduled online Teams meetings. After the meeting ends, your app can access and retrieve the meeting transcript and recording.
For subscribing your app to tenant-level notifications, see [get change notifications](/graph/teams-changenotifications-chatmessage#subscribe-to-messages-across-all-chats).
-When your app is notified about subscribed meeting events, it searches through the notifications for transcription started and meeting ended events. These events contain the chat ID, which is used to obtain chat entity, and eventually meeting ID and organizer ID.
+When your app is notified about subscribed meeting events, it searches through the notifications for:
+
+- Transcription started events.
+- Meeting ended events.
+
+These events contain the chat ID, which is used to obtain chat entity, and eventually meeting ID and organizer ID.
To obtain meeting ID and organizer ID from tenant-level notification:
To obtain meeting ID and organizer ID from tenant-level notification:
</details>
-4. **Fetch transcript**: The organizer ID and meeting ID obtained in the Steps 2 and 3 let your app fetch the transcripts for that particular meeting event.
+4. **Fetch transcript or recording**: The organizer ID and meeting ID obtained in the Steps 2 and 3 let your app fetch the transcripts or recordings for that particular meeting event.
- To fetch transcripts, you'll need to:
+ - To fetch transcripts, you'll need to:
- 1. **Retrieve transcript ID based on organizer ID and meeting ID**:
+ 1. **Retrieve transcript ID based on organizer ID and meeting ID**:
- Use the following example to request the transcript ID:
+ Use the following example to request the transcript ID:
- ```http
- GET https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings('MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM1pqWTJAdGhyZWFkLnYy')/transcripts
- ```
+ ```http
+ GET https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings('MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM1pqWTJAdGhyZWFkLnYy')/transcripts
+ ```
- In this example:
+ In this example:
- - The meeting ID is included as the value for `onlineMeetings`: *MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bW
+ - The meeting ID is included as the value for `onlineMeetings`: *MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bW
VldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM 1pqWTJAdGhyZWFkLnYy*.
- - The organizer ID is *14b779ae-cb64-47e7-a512-52fd50a4154d*.
+ - The organizer ID is *14b779ae-cb64-47e7-a512-52fd50a4154d*.
- The response payload contains the transcript ID for the meeting ID and organizer ID in the `id` member of the `value` property.
- <br>
- <details>
- <summary><b>Example</b>: Response payload for getting transcript ID</summary>
+ The response payload contains the transcript ID for the meeting ID and organizer ID in the `id` member of the `value` property.
+ <br>
+ <details>
+ <summary><b>Example</b>: Response payload for getting transcript ID</summary>
- ```json
- {
+ ```json
+ {
"@odata.context": "https://graph.microsoft.com/beta/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings('MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM1pqWTJAdGhyZWFkLnYy')/transcripts", "@odata.count": 1, "value": [
To obtain meeting ID and organizer ID from tenant-level notification:
"createdDateTime": "2022-04-14T11:34:39.5662792Z" } ]
- }
- ```
+ }
+ ```
- In this example, the transcript ID is *MSMjMCMjMDEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh*.
+ In this example, the transcript ID is *MSMjMCMjMDEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh*.
- </details>
+ </details>
- 1. **Access and get meeting transcript based on the transcript ID**:
+ 1. **Access and get meeting transcript based on the transcript ID**:
- Use the following example to request the transcripts for a specific meeting in the `.vtt` format:
+ Use the following example to request the transcripts for a specific meeting in the `.vtt` format:
- ```http
- GET https://graph.microsoft.com/betEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh')/content?$format=text/vtt
- ```
+ ```http
+ GET https://graph.microsoft.com/betEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh')/content?$format=text/vtt
+ ```
+
+ The response payload will contain the transcripts in the `.vtt` format.
+
+ - To fetch recordings, you'll need to:
+
+ 1. **Retrieve recording ID based on organizer ID and meeting ID**:
+
+ Use the following example to request the recording ID:
+
+ ```http
+ GET https://graph.microsoft.com/beta/users/b935e675-5e67-48b9-8d45-249d5f88e964/onlineMeetings/MSpiOTM1ZTY3NS01ZTY3LTQ4YjktOGQ0NS0yNDlkNWY4OGU5NjQqMCoqMTk6bWVldGluZ19ZbU0zTnpJNU9USXRZakU0WlMwME1tUTNMVGt6TVRRdFkyWm1PRGRtWmpsaVptRTNAdGhyZWFkLnYy/recordings/
+ ```
- The response payload will contain the transcripts in `.vtt` format.
+ In this example:
+
+ - The meeting ID is included as the value for `onlineMeetings`: *MSpiOTM1ZTY3NS01ZTY3LTQ4YjktOGQ0NS0yNDlkNWY4OGU5NjQqMCoqMTk6bWVl
+ dGluZ19ZbU0zTnpJNU9USXRZakU0WlMwME1tUTNMVGt6TVRRdFkyWm1
+ PRGRtWmpsaVptRTNAdGhyZWFkLnYy*.
+ - The organizer ID is *b935e675-5e67-48b9-8d45-249d5f88e964*.
+
+ The response payload contains the recording ID for the meeting ID and organizer ID in the `id` member of the `value` property.
+ <br>
+ <details>
+ <summary><b>Example</b>: Response payload for getting recording ID</summary>
+
+ ```json
+ {
+ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('b935e675-5e67-48b9-8d45-249d5f88e964')/onlineMeetings('MSpiOTM1ZTY3NS01ZTY3LTQ4YjktOGQ0NS0yNDlkNWY4OGU5NjQqMCoqMTk6bWVldGluZ19ZbU0zTnpJNU9USXRZakU0WlMwME1tUTNMVGt6TVRRdFkyWm1PRGRtWmpsaVptRTNAdGhyZWFkLnYy')/recordings",
+ "@odata.count": 1,
+ "value": [
+ {
+ "id": "7e31db25-bc6e-4fd8-96c7-e01264e9b6fc",
+ "createdDateTime": "2023-04-10T08:13:17.5990966Z"
+ }
+ ]
+ }
+ ```
+
+ In this example, the recording ID is *7e31db25-bc6e-4fd8-96c7-e01264e9b6fc*.
+
+ </details>
+
+ 1. **Access and get meeting recording based on the recording ID**:
+
+ Use the following example to request the recordings for a specific meeting in the `.mp4` format:
+
+ ```http
+ GET https://graph.microsoft.com/beta/users/b935e675-5e67-48b9-8d45-249d5f88e964/onlineMeetings/MSpiOTM1ZTY3NS01ZTY3LTQ4YjktOGQ0NS0yNDlkNWY4OGU5NjQqMCoqMTk6bWVldGluZ19ZbU0zTnpJNU9USXRZakU0WlMwME1tUTNMVGt6TVRRdFkyWm1PRGRtWmpsaVptRTNAdGhyZWFkLnYy/recordings/7e31db25-bc6e-4fd8-96c7-e01264e9b6fc/content?$format=video/mp4
+ ```
+
+ The response payload will contain the recordings in the `.mp4` format.
### Use Bot Framework to get meeting ID and organizer ID
dGluZ19OV00xTVRJNU56TXROamd6TXkwMFlXUTRMVGhtT1dRdFpUZzNNVEJtT1RnM
</details>
-After your app obtains the meeting ID and the organizer ID, it triggers the Graph APIs to fetch transcript content using these meeting details.
+After your app obtains the meeting ID and the organizer ID, it triggers the Graph APIs to fetch transcript content and recording using these meeting details.
### Code samples
You can try the following code sample for a bot app:
> [!div class="nextstepaction"] > [Graph APIs for fetching transcripts](/graph/api/resources/calltranscript)
+> [!div class="nextstepaction"]
+> [Graph APIs for fetching recordings](/graph/api/resources/callrecording?view=graph-rest-beta&preserve-view=true)
+ ## See also - [Apps for Teams meetings and calls](../../apps-in-teams-meetings/teams-apps-in-meetings.md)
platform Overview Transcripts https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/graph-api/meeting-transcripts/overview-transcripts.md
Title: Use Microsoft Graph to fetch transcripts for a Teams meeting
-description: Describes the process, scenarios, and APIs to fetch transcripts in the post-meeting scenario.
+ Title: Use Microsoft Graph to fetch transcripts and recordings for a Teams meeting
+description: In this module, learn the process, scenarios, and APIs to fetch transcripts and recordings in the post-meeting scenario.
ms.localizationpriority: high Last updated 02/20/2023
-# Get meeting transcripts using Graph APIs
+# Get meeting transcripts and recordings using Graph APIs
-You can now configure your app to fetch Microsoft Teams meeting transcripts in the post-meeting scenario. Your app can use Microsoft Graph REST APIs to access and fetch transcripts generated for a Teams meeting that has been scheduled beforehand.
+> [!NOTE]
+> Get meeting transcripts and recordings using Graph APIs are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md).
+
+You can now configure your app to fetch Microsoft Teams meeting transcripts and recordings in the post-meeting scenario. Your app can use Microsoft Graph REST APIs to access and fetch transcripts and recordings generated for a Teams meeting that has been scheduled beforehand.
-Here are some use cases for fetching meeting transcripts using Graph API:
+Here are some use cases for fetching meeting transcripts and recordings using Graph API:
-| Use case | How Transcript APIs help... |
+| Use case | How Transcript and Recording APIs help... |
| | |
-| You need to obtain transcripts for capturing meaningful insights from multiple meetings across the Sales vertical. It's time-consuming and inefficient to keep track of all meetings, and to retrieve meeting notes manually. After the meeting is over, you'd need to examine conversations in all those meetings to obtain useful information. | Using Graph APIs in your app to fetch meeting transcripts automatically retrieves the transcripts from all meetings relevant for your purpose. Your app can receive meeting notifications, and get the transcript when it's generated after the meeting ends. This data can then be used to gain: <br> ΓÇó Aggregated insights and intelligence analysis <br> ΓÇó New leads and highlights <br> ΓÇó Meeting follow-ups and summaries |
-| As an HR initiative, you're holding a brainstorming session to understand and improve employee health and productivity. Having to continually take notes to provide post-meeting summary can impede the flow of thoughts, and you might not capture all valuable suggestions. After the session, you'd need to analyze the discussion to gather data points for planning improvements. | Using Graph APIs in your app to fetch transcripts post-meeting frees you and the participants to fully focus on the discussion. The content of the meeting transcript is available for: <br> ΓÇó Engagement and sentiment analysis <br> ΓÇó Listing tasks or issues <br> ΓÇó Follow-up meetings and notifications |
+| You need to obtain transcripts and recordings for capturing meaningful insights from multiple meetings across the Sales vertical. It's time-consuming and inefficient to keep track of all meetings, and to retrieve meeting transcripts and recordings manually. After the meeting is over, you'd need to examine conversations in all those meetings to obtain useful information. | Using Graph APIs in your app to fetch meeting transcripts and recordings automatically retrieves them from all meetings relevant for your purpose. Your app can receive meeting notifications, and get the transcript and recording when it's generated after the meeting ends. This data can then be used to gain: <br> ΓÇó Aggregated insights and intelligence analysis <br> ΓÇó New leads and highlights <br> ΓÇó Meeting follow-ups and summaries |
+| As an HR initiative, you're holding a brainstorming session to understand and improve employee health and productivity. Having to continually take notes to provide post-meeting summary can impede the flow of thoughts, and you might not capture all valuable suggestions. After the session, you'd need to analyze the discussion to gather data points for planning improvements. | Using Graph APIs in your app to fetch transcripts and recordings post-meeting frees you and the participants to fully focus on the discussion. The content of the meeting transcript and recording is available for: <br> ΓÇó Engagement and sentiment analysis <br> ΓÇó Listing tasks or issues <br> ΓÇó Follow-up meetings and notifications |
+
+You can fetch meeting transcript, recording, or both using Graph APIs.
> [!NOTE]
-> In the future, Microsoft may require you or your customers to pay additional fees based on the amount of data accessed through the API.
+> The APIs to fetch meeting transcript and recording content are metered APIs. For more information, see [payment models for meeting APIs](/graph/teams-licenses#payment-models-for-meeting-apis).
-To fetch the transcript for a particular meeting:
+To fetch the transcript and recording for a particular meeting:
-- [Configure permissions on Azure AD to access transcript](#configure-permissions-on-azure-ad-to-access-transcript)
+- [Configure permissions on Azure AD to access transcript and recording](#configure-permissions-on-azure-ad-to-access-transcript-and-recording)
- [Obtain meeting ID and organizer ID](fetch-id.md) - [Get notified when the meeting transcript is available](/graph/teams-changenotifications-callrecording-and-calltranscript) - [Use Graph APIs to fetch transcript](/graph/api/resources/calltranscript)
+- [Use Graph APIs to fetch recording](/graph/api/resources/callrecording?view=graph-rest-beta&preserve-view=true)
-## Configure permissions on Azure AD to access transcript
+## Configure permissions on Azure AD to access transcript and recording
-Your app must have the required permissions for fetching transcripts. It can access and fetch transcripts for a Teams meeting using organization-wide application permissions or resource-specific consent (RSC) application permissions for a particular meeting.
+Your app must have the required permissions for fetching transcripts and recordings. It can access and fetch transcripts and recordings for a Teams meeting using organization-wide application permissions or resource-specific consent (RSC) application permissions for a particular meeting.
### Use organization-wide application permissions
-You can configure your app to access meeting transcripts across the tenant. In this case, the meeting organizer doesn't need to install your app in the Teams meeting chat. When the tenant administrator authorizes the organization-wide application permissions, your app can read and access transcripts for all meetings in the tenant.
+You can configure your app to access meeting transcripts and recordings across the tenant. In this case, the meeting organizer doesn't need to install your app in the Teams meeting chat. When the tenant administrator authorizes the organization-wide application permissions, your app can read and access transcripts and recordings for all meetings in the tenant.
For more information about the organization-wide application permissions that can be granted to your app, see [online meeting permissions](/graph/permissions-reference#online-meetings-permissions). ### Use meeting-specific RSC application permissions
-If you want your app to fetch transcripts only for the Teams meeting where it's installed, configure meeting-specific RSC permission for your app. Authorized users can install your app in the meeting chat. After the meeting ends, your app can make the API call to obtain the transcript for that meeting.
+If you want your app to fetch transcripts and recordings only for the Teams meeting where it's installed, configure meeting-specific RSC permission for your app. Authorized users can install your app in the meeting chat. After the meeting ends, your app can make the API call to obtain the transcript and recording for that meeting.
For more information about the meeting-specific RSC permissions, see [RSC permissions for a chat or meeting](../rsc/resource-specific-consent.md#rsc-permissions-for-a-chat-or-meeting).
-After you've configured the permissions, configure your app to receive change notifications for all relevant meeting events. Notifications contain meeting ID and organizer ID that help in accessing transcript content. Your app can fetch the transcript for a meeting when it's generated after it ends. The content of the transcript is available as a `.vtt` file.
+After you've configured the permissions, configure your app to receive [change notifications](/graph/teams-changenotifications-callrecording-and-calltranscript) for transcripts available events or all relevant meeting events. Notifications contain meeting ID and organizer ID that help in accessing transcript content and recording. Your app can fetch the transcript and recording for a meeting when it's generated after it ends. The content of the transcript is available as `.vtt` file. The recording of the meeting is available as an `.mp4` file.
For more information about how your app can know when the meetings ends, see [subscribe to change notifications](fetch-id.md#subscribe-to-change-notifications) and [use Bot Framework to get meeting ID and organizer ID](fetch-id.md#use-bot-framework-to-get-meeting-id-and-organizer-id).
+For more information about how your app can know when a transcript or recording is available after the online meeting ends, see [get notified when transcripts is available](/graph/teams-changenotifications-callrecording-and-calltranscript).
+ > [!NOTE]
-> The process for calling Graph APIs to access and retrieve transcripts remains the same for both meeting-specific RSC application permissions or organization-wide application permissions. These APIs currently support only scheduled meetings.
+> The process for calling Graph APIs to access and retrieve transcripts and recordings remains the same for both meeting-specific RSC application permissions and organization-wide application permissions. These APIs currently support only scheduled meetings.
## Next step
platform Teamsjs Support M365 https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/m365-apps/teamsjs-support-m365.md
Preview. Namespace providing functionality to start a chat with others.
[Reference](/javascript/api/@microsoft/teams-js/dialog) | [Sample](https://github.com/vikramtha/microsoft-teams-library-js/blob/vikramtha/teamsjs-cc-app/apps/teamsjs-cc-app/tabs/src/components/capabilities/Dialog.tsx)
-Preview. This group of capabilities enables apps to show modal dialogs. There are two primary types of dialogs: URL-based dialogs and Adaptive Card dialogs. Both types of dialogs are shown on top of your app, preventing interaction with your app while they're displayed.
+Preview. This group of capabilities enables apps to show modal task modules (dialogs). There are two primary types of dialogs: URL-based dialogs and Adaptive Card dialogs. Both types of dialogs are shown on top of your app, preventing interaction with your app while they're displayed.
- URL-based dialogs allow you to specify a URL from which the contents are shown inside the dialog. For URL dialogs, use the functions and interfaces in the url namespace. - Adaptive Card-based dialogs allow you to provide JSON describing an Adaptive Card that is shown inside the dialog. For Adaptive Card dialogs, use the functions and interfaces in the adaptiveCard namespace.
platform Manifest Schema https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/schema/manifest-schema.md
This item is an array (maximum of 16 elements) with all elements of the type `ob
|||||| |`entityId`|string|64 characters|✔️|A unique identifier for the entity that the tab displays.| |`name`|string|128 characters||The display name of the tab in the channel interface.|
-|`contentUrl`|string|||The https:// URL that points to the entity UI to be displayed in the Teams canvas.|
-|`contentBotId`|string|||The Microsoft app ID specified for the bot in the [Bot Framework portal](https://dev.botframework.com/bots).|
-|`websiteUrl`|string|||The https:// URL to point to if a user opts to view in a browser.|
-|`searchUrl`|string|||The https:// URL to point to for a user's search queries.|
+|`contentUrl`|string|2048 characters||The https:// URL that points to the entity UI to be displayed in the Teams canvas.|
+|`contentBotId`|string|128 characters||The Microsoft app ID specified for the bot in the [Bot Framework portal](https://dev.botframework.com/bots).|
+|`websiteUrl`|string|2048 characters||The https:// URL to point to if a user opts to view in a browser.|
+|`searchUrl`|string|2048 characters||The https:// URL to point to for a user's search queries.|
|`scopes`|array of enums|3|✔️| Currently, static tabs support only the `personal` scope, which means it can be provisioned only as part of the personal experience.| |`context` | array of enums| 8|| The set of `contextItem` scopes where a [tab is supported](../../tabs/how-to/access-teams-context.md). Default: **[personalTab, channelTab, privateChatTab, meetingChatTab, meetingDetailsTab, meetingStage, meetingSidepanel, teamLevelApp]**.|
The object is an array (maximum of one element) with all elements of type `objec
|Name| Type| Maximum size | Required | Description| ||||||
-|`configurationUrl`|string|2048 characters|✔️|The https:// URL to use when configuring the connector.|
+|`configurationUrl`|string|2048 characters| |The https:// URL to use when configuring the connector.|
|`scopes`|array of enums|1|✔️|Specifies whether the Connector offers an experience in the context of a channel in a `team`, or an experience scoped to an individual user alone (`personal`). Currently, only the `team` scope is supported.| |`connectorId`|string|64 characters|✔️|A unique identifier for the Connector that matches its ID in the [Connectors Developer Dashboard](https://aka.ms/connectorsdashboard).|
Provide your Azure Active Directory App ID and Microsoft Graph information to he
|Name| Type| Maximum size | Required | Description| |||||| |`id`|string|128 characters|✔️|Azure AD application ID of the app. This ID must be a GUID.|
-|`resource`|string|2048 characters|✔️|Resource URL of app for acquiring auth token for SSO. </br> **NOTE:** If you aren't using SSO, ensure that you enter a dummy string value in this field to your app manifest, for example, `https://example` to avoid an error response. |
+|`resource`|string|2048 characters||Resource URL of app for acquiring auth token for SSO. </br> **NOTE:** If you aren't using SSO, ensure that you enter a dummy string value in this field to your app manifest, for example, `https://example` to avoid an error response. |
## graphConnector
When `defaultBlockUntilAdminAction` property is set to **true**, the app is hidd
**Optional**ΓÇöstring
-**Maximum size** - 128 characters
+**Maximum size** - 2048 characters
The `publisherDocsUrl` is an HTTPS URL to an information page for admins to get guidelines before allowing an app, which is blocked by default. It can also be used to provide any instructions or information about the app, which can be useful for the tenant admin.
Specify meeting extension definition. For more information, see [custom Together
|Name| Type|Maximum size|Required |Description| ||||||
-|`id`|||✔️| The unique identifier for the scene. This id must be a GUID. |
+|`id`|string | 128 characters|✔️| The unique identifier for the scene. This id must be a GUID. |
|`name`| string | 128 characters |✔️| The name of the scene. |
-|`file`|||✔️| The relative file path to the scenes' metadata json file. |
-|`preview`|||✔️| The relative file path to the scenes' PNG preview icon. |
+|`file`|string|2048 characters|✔️| The relative file path to the scenes' metadata json file. |
+|`preview`|string|2048 characters|✔️| The relative file path to the scenes' PNG preview icon. |
|`maxAudience`| integer | 50 |✔️| The maximum number of audiences supported in the scene. | |`seatsReservedForOrganizersOrPresenters`| integer | 50 |✔️| The number of seats reserved for organizers or presenters.|
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md
Cater your app to a specific audience from the available list of countries or re
Teams platform features that are available to all app developers.
-**2023 July**
+**2023 August**
-* ***July 28, 2023***: [Use Collaborative Stage View to engage with your app content in a new Teams window](tabs/tabs-link-unfurling.md#collaborative-stage-view).
-
-* ***July 25, 2023***: [Use people icon in an Adaptive Card to view the images of users](task-modules-and-cards/cards/cards-format.md#people-icon-in-an-adaptive-card).
-
-* ***July 20, 2023***: [App caching for iOS personal tray](tabs/how-to/app-caching.md).
-
-* ***July 06, 2023***: [Use app icon badging to identify any app activity during a meeting](apps-in-teams-meetings/app-icon-badging-for-your-app.md).
+***August 10, 2023***: [Send a proactive message using AAD ID](bots/how-to/conversations/send-proactive-messages.md)
:::column-end::: :::row-end:::
Teams platform features that are available to all app developers.
| **Date** | **Update** | **Find here** | | -- | | -|
+| 25/07/2023 | Use Collaborative Stage View to engage with your app content in a new Teams window | Build tabs > [Tabs link unfurling and Stage View](tabs/tabs-link-unfurling.md#collaborative-stage-view).
+| 25/07/2023 | Use people icon in an Adaptive Card to view the images of users | Build cards and task modules > Build cards > Review store validation guidelines > [Build cards](task-modules-and-cards/cards/cards-format.md#people-icon-in-an-adaptive-card) |
+| 20/07/2023 | App caching for iOS personal tray | Build tabs > [App caching for iOS personal tray](tabs/how-to/app-caching.md) |
+| 06/07/2023 | Use app icon badging to identify any app activity during a meeting | Build apps for Teams meetings and calls > Build in-meeting notification and app icon badging > [Use app icon badging to identify any app activity during a meeting](apps-in-teams-meetings/app-icon-badging-for-your-app.md) |
| 14/06/2023 | Added validation guidelines for Teams app powered by Artificial Intelligence (AI). | Distribute your app > Publish to the Teams store > Review store validation guidelines > [Apps powered by Artificial Intelligence](concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#apps-powered-by-artificial-intelligence) | | 02/06/2023 | Get real-time meeting events for channel meetings. | Build apps for Teams meetings and calls > Enable and configure apps for Teams meeting > Meeting apps APIs > [Get real-time Teams meeting events API](apps-in-teams-meetings/meeting-apps-apis.md#get-real-time-teams-meeting-events-api) | | 24/04/2023 | Develop your apps with a seamless transition between Teams Developer Portal and Teams Toolkit. | Tools and SDKs > Developer Portal for Teams > [Develop your apps with Teams Toolkit](concepts/build-and-test/develop-your-apps-with-teams-toolkit.md) |
Discover Microsoft Teams platform features that are in developer preview. You ca
Developer preview is a public program that provides early access to unreleased Teams platform features.
-**2023 July**
-
-* ***July 31, 2023***: [Bots can mention tags in Adaptive Cards](bots/how-to/conversations/channel-and-group-conversations.md#tag-mention).
+**2023 August**
-* ***July 13, 2023***: [Extend static tabs to group chat or meetings with a customizable experience.](tabs/what-are-tabs.md)
+***August 08, 2023***: [Use callRecording API to fetch meeting recording from all meetings.](graph-api/meeting-transcripts/overview-transcripts.md)
:::column-end::: :::row-end:::
Developer preview is a public program that provides early access to unreleased T
| **Date** | **Update** | **Find here** | | -- | | -|
+|31/07/2023| Bots can mention tags in Adaptive Cards. |Build bots > Bot conversations > Message in bot conversations > Channel and group chat conversation with a bot > [Bots can mention tags in Adaptive Cards](bots/how-to/conversations/channel-and-group-conversations.md#tag-mention)|
+|13/07/2023| Extend static tabs to group chat or meetings with a customizable experience. |Build tabs > [Overview](tabs/what-are-tabs.md)|
|31/01/2023| Send notifications to specific participants on a meeting stage with targeted in-meeting notification. |Build apps for Teams meetings and calls > Enable and configure apps for meetings > Build in-meeting notification for Teams meeting > Build tabs for meeting > [Targeted in-meeting notification](apps-in-teams-meetings/in-meeting-notification-for-meeting.md#targeted-in-meeting-notification)| |30/01/2023| Enable app caching to improve subsequent launch time of the apps to the meeting side panel.|Build tabs > [App caching for your tab app](tabs/how-to/app-caching.md) |