Updates from: 08/04/2022 01:18:31
Service Microsoft Docs article Related commit history on GitHub Change details
platform API References https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/API-references.md
The following table provides a list of APIs available across the Microsoft Teams
|[**Get app content stage sharing state**](#get-app-content-stage-sharing-state-api)| Fetch information about app's sharing state on the meeting stage. | [MSTC SDK](/javascript/api/@microsoft/teams-js/meeting.iappcontentstagesharingstate) | |[**Get app content stage sharing capabilities**](#get-app-content-stage-sharing-capabilities-api)| Fetch the app's capabilities for sharing to the meeting stage. | [MSTC SDK](/javascript/api/@microsoft/teams-js/meeting.iappcontentstagesharingcapabilities) | |[**Get real-time Teams meeting events**](#get-real-time-teams-meeting-events-api)|Fetch real-time meeting events, such as actual start and end time.| [MSBF SDK](/dotnet/api/microsoft.bot.builder.teams.teamsactivityhandler.onteamsmeetingstartasync?view=botbuilder-dotnet-stable&preserve-view=true) |
+| [**Get incoming audio speaker**](#get-incoming-audio-speaker) | Allows an app to get the incoming audio speaker setting for the meeting user.| [MSTC SDK](/javascript/api/@microsoft/teams-js/microsoftteams.meeting?view=msteams-client-js-latest&preserve-view=true) |
+| [**Toggle incoming audio**](#toggle-incoming-audio) | Allows an app to toggle the incoming audio speaker setting for the meeting user from mute to unmute or vice-versa.| [MSTC SDK](/javascript/api/@microsoft/teams-js/microsoftteams.meeting?view=msteams-client-js-latest&preserve-view=true) |
## Get user context API
GET /v1/meetings/{meetingId}/participants/{participantId}?tenantId={tenantId}
| **user.email** | Mail ID of the user. | | **user.userPrincipalName** | UPN of the user. | | **user.tenantId** | Azure Active Directory tenant ID. |
-| **user.userRole** | Role of the user e.g. 'admin' or 'user'. |
-| **meeting.role** | The participant's role in the meeting. e.g. 'Organizer' or 'Presenter' or 'Attendee'. |
+| **user.userRole** | Role of the user. For example, 'admin' or 'user'. |
+| **meeting.role** | The participant's role in the meeting. For example, 'Organizer' or 'Presenter' or 'Attendee'. |
| **meeting.inMeeting** | The value indicating if the participant is in the meeting. | | **conversation.id** | The meeting chat ID. | | **conversation.isGroup** | Boolean indicating whether conversation has more than two participants. |
All users in a meeting receive the notifications sent through in-meeting notific
### Query parameter
-The following table includes the query parameters:
+The following table includes the query parameter:
|Value|Type|Required|Description| |||-||
The JSON response body for Meeting Details API is as follows:
| **details.scheduledEndTime** | The meeting's scheduled end time, in UTC. | | **details.joinUrl** | The URL used to join the meeting. | | **details.title** | The title of the meeting. |
-| **details.type** | The meeting's type - e.g. GroupCall, OneToOneCall, Adhoc, Broadcast, MeetNow, Recurring, Scheduled, Unknown. |
+| **details.type** | The meeting's type (GroupCall, OneToOneCall, Adhoc, Broadcast, MeetNow, Recurring, Scheduled, or Unknown). |
| **conversation.isGroup** | Boolean indicating whether conversation has more than two participants. | | **conversation.conversationType** | The conversation type. | | **conversation.id** | The meeting chat ID. |
The `getAppContentStageSharingState` API enables you to fetch information about
### Query parameter
-The following table includes the query parameters:
+The following table includes the query parameter:
|Value|Type|Required|Description| |||-||
The `getAppContentStageSharingCapabilities` API enables you to fetch the app's c
### Query parameter
-The following table includes the query parameters:
+The following table includes the query parameter:
|Value|Type|Required|Description| |||-||
The following code provides an example of meeting end event payload:
| **value.EndTime** | The meeting end time in UTC. | | **locale**| The locale of the message set by the client. |
+## Get incoming audio speaker
+
+The `getIncomingClientAudioState` API allows an app to get the incoming audio speaker setting for the meeting user. The API is available through the Teams client SDK.
+
+> [!NOTE]
+> The `getIncomingClientAudioState` API for mobile is currently available only in [Public Developer Preview](../resources/dev-preview/developer-preview-intro.md).
+
+### Query parameter
+
+The following table includes the query parameter:
+
+|Value|Type|Required|Description|
+|||-||
+|**callback**| String | Yes | Callback contains two parameters `error` and `result`. The *error* can either contain an error type `SdkError` or `null` when the audio fetch is successful. The *result* can either contain true or false value when the audio fetch is successful or null when the audio fetch fails. The incoming audio is muted if the result is true and unmuted if the result is false. |
+
+### Example
+
+```typescript
+function getIncomingClientAudioState(
+ callback: (error: SdkError | null, result: boolean | null) => void,
+ ): void {
+ if (!callback) {
+ throw new Error('[get incoming client audio state] Callback cannot be null');
+ }
+ ensureInitialized(FrameContexts.sidePanel, FrameContexts.meetingStage);
+ sendMessageToParent('getIncomingClientAudioState', callback);
+ }
+
+```
+
+### Response codes
+
+The following table provides the response codes:
+
+|Response code|Description|
+|||
+| **500** | Internal error. |
+| **501** | API isn't supported in the current context.|
+| **1000** | App doesn't have proper permissions to allow share to stage.|
+
+## Toggle incoming audio
+
+The `toggleIncomingClientAudio` API allows an app to toggle the incoming audio speaker setting for the meeting user from mute to unmute or vice-versa. The API is available through the Teams client SDK.
+
+> [!NOTE]
+> The `toggleIncomingClientAudio` API for mobile is currently available only in [Public Developer Preview](../resources/dev-preview/developer-preview-intro.md).
+
+### Query parameter
+
+The following table includes the query parameter:
+
+|Value|Type|Required|Description|
+|||-||
+|**callback**| String | Yes | Callback contains two parameters `error` and `result`. The *error* can either contain an error type `SdkError` or `null` when the toggle is successful. The *result* can either contain true or false value, when the toggle is successful or null when the toggle fails. The incoming audio is muted if the result is true and unmuted if the result is false. |
+
+### Example
+
+```typescript
+function toggleIncomingClientAudio(callback: (error: SdkError | null, result: boolean | null) => void): void {
+ if (!callback) {
+ throw new Error('[toggle incoming client audio] Callback cannot be null');
+ }
+ ensureInitialized(FrameContexts.sidePanel, FrameContexts.meetingStage);
+ sendMessageToParent('toggleIncomingClientAudio', callback);
+ }
+
+```
+
+### Response code
+
+The following table provides the response codes:
+
+|Response code|Description|
+|||
+| **500** | Internal error. |
+| **501** | API isn't supported in the current context.|
+| **1000** | App doesn't have proper permissions to allow share to stage.|
+ ## Code sample |Sample name | Description | C# | Node.js |
platform Teams Apps In Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/teams-apps-in-meetings.md
The following illustration gives you an idea of the meeting app extensibility fe
This article provides an overview of meeting app extensibility, API references, enable and configure apps for meetings, and custom Together Mode scenes in Teams.
-Enhance your meeting experience by using the meeting extensibility feature. This feature enables you to integrate your apps within meetings. It also includes different stages of a meeting lifecycle, where you can integrate tabs, bots, and message extensions. You can identify various participant roles and user types, get meeting events, and generate in-meeting dialogs.
-
-To customize Teams with apps for meetings, enable your apps for Teams meetings by updating the app manifest and also configure the apps for meeting scenarios.
-
-Customize the app permission for external members in shared channel, if your app shares important information. App permissions in [Shared channels](../concepts/build-and-test/Shared-channels.md) follow host team's app roster and host tenant's app policy.
-
-The new custom Together Mode scenes feature enables users to collaborate in a meeting with their team in one place.
+- **Extend meeting app**: Enhance your meeting experience by using the meeting extensibility feature. This feature enables you to integrate your apps within meetings. It also includes different stages of a meeting lifecycle, where you can integrate tabs, bots, and message extensions. You can identify various participant roles and user types, get meeting events, and generate in-meeting dialogs.
+- **Configure apps for meetings**: To customize Teams with apps for meetings, enable your apps for Teams meetings by updating the app manifest and also configure the apps for meeting scenarios.
+- **Customize with Together Mode scenes**: The new custom Together Mode scenes feature enables users to collaborate in a meeting with their team in one place.
+- **Customize app permission in shared channel: If your app shares important information in shared channel, you can customize the app permission for external members. App permissions in [Shared channels](../concepts/build-and-test/Shared-channels.md) follow host team's app roster and host tenant's app policy.
+- **Retrieve meeting transcripts**: You can access and retrieve meeting transcripts in a post-meeting scenario. Configure your app to get transcripts automatically for a scheduled meeting, and use them for insights, intelligent analysis, and more.
## Next step
platform Analyze Your Apps Usage In Developer Portal https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/analyze-your-apps-usage-in-developer-portal.md
+
+ Title: Analyze your app's usage in Developer Portal
+description: In this module, learn how to analyze your app's usage in Developer Portal
+ms.localizationpriority: medium
++++
+# Analyze your app's usage in Developer Portal
+
+In the Developer Portal for Teams, on the **Overview** page, you can see the total number of active users for your app.
+
+> [!NOTE]
+> Usage analytics are currently available only for new custom apps published to your org through **Developer Portal** for Teams or imported into **Developer Portal** for Teams after April 2022. Usage analytics for all the apps published to the Teams store is available in **Partner Center**, for more information [Teams apps usage report](/office/dev/store/teams-apps-usage).
+
+| Metric | Definition |
+| :--| :|
+| *Monthly R30* | The default usage metric. It shows the count of unique active users who used your app within that rolling 30 day window in UTC. |
+| *Daily* | It shows you the count of unique active users who used your app in a given day in UTC. |
+
+The app usage for a given day is reflected within 24 to 48 hours, and usage data for new apps can take up to three to five days to reflect in the charts.
+
+You can view your app's usage and other insights from the **Analytics** page. To access the page:
+
+1. Go to **[Developer Portal for Teams](https://dev.teams.microsoft.com)**.
+1. Select **Apps** from the left pane.
+1. Select the required app from the **Apps** page.
+1. Select **Analytics** under the **Overview** or select **View details** under the **Active Users (Preview)** card.
+
+ :::image type="content" source="../../assets/images/tdp/dev-app-portal.png" alt-text="The screenshots shows you the analytics page of your app in Developer Portal."lightbox="../../assets/images/tdp/dev-app-portal.png":::
+
+As you explore individual metrics on this page, you can use the **Filter** button to analyze your app's usage from the following filter options:
+
+* Aggregation type: This filter allows you to group the following metrics by a count of distinct users or a count of distinct tenants or customers.
+* Platform
+* Operating system
+* Area
+
+ :::image type="content" source="../../assets/images/tdp/dev-analytics-filter.png" alt-text="The screenshots shows you the analytics page filter in Developer Portal.":::
+
+After you have selected your desired filters, you can explore the following individual widgets:
+
+* [Usage by time period](#usage-by-time-period)
+* [Usage by platform and OS](#usage-by-platform-and-os)
+* [Usage by retention state](#usage-by-retention-state)
+* [Usage intensity](#usage-intensity)
+
+## Usage by time period
+
+The **Usage by time period** chart shows you the number of active users or tenants who opened and used your app across different time periods.
+
+ :::image type="content" source="../../assets/images/tdp/usage-by-time-period.png" alt-text="The screenshots shows you the usage by time period chart for your published app.":::
+
+| Metric | Definition |
+| :--| :|
+| Monthly R30 | Each data point represents a given R30 (Rolling 30 day) period. |
+| Monthly R28 | Each data point represents a given R28 (Rolling 28 day) period. |
+| Weekly R7| Each data point represents a given R7 (Rolling 7 day) period. |
+| Daily | Each data point represents a given R1 (Rolling 1 day) period. |
+
+## Usage by platform and OS
+
+The **Usage by platform and OS** chart shows your app's active usage across various endpoints, such as **Windows**, **Mac**, **iOS**, **Android**, and **Web**. The same user or tenant can use an app on multiple endpoints. Each data point represents a given R30 (Rolling 30 day) period.
+
+ :::image type="content" source="../../assets/images/tdp/usage-by-platform-OS.png" alt-text="The screenshots shows you the usage by platform and OS chart for your published app.":::
+
+## Usage by retention state
+
+The **Usage by retention state** chart lets you track four key retention or churn metrics for your app over time.
++
+| Metric | Definition |
+| :--| :|
+| New users or tenants | Active users or tenants who are new new and have not used your app. |
+| Returning users or tenants | Active users or tenants who used your app during a given R30 (Rolling 30 day) time period and the immediately preceding R30 time period. |
+| Resurrected users or tenants | Active users or tenants who used your app one or more times before but not in the immediately preceding R30 time period. |
+| Lapsed users or tenants | Active users or tenants who were not seen during a given R30 time period but were seen during the immediately preceding R30 time period. |
+
+## Usage intensity
+
+The **Usage intensity** chart shows you key usage intensity metrics for your app.
+
+ :::image type="content" source="../../assets/images/tdp/usage-intensity.png" alt-text="The screenshots shows you the usage intensity chart for your published app.":::
+
+| Metric | Definition |
+| :--| :|
+| Median days used per month | The median numbers of days in which your app was opened in the last R30 (Rolling 30 day) time period. |
+| % of 5+ Days usage | The % of Active Users who opened or used the app more than five days in the last R30 time period. |
+| DAU/MAU | The ratio of the average number of unique users or tenants who used your app on each day divided by the Monthly Active Users for the selected R30 time period. |
+
+## App dashboard
+
+The **My App dashboard** table shows you the latest R30 (Rolling 30 day) data for each of the metrics under the previous four categories, and the Month over Month change. Use the time picker on the upper left and select the desired date, you can see daily R30 data for the last 75 days and end of month R30 data for up to 12 months.
+
+You can select each of these **Metric name** to see trends over time.
+
+ :::image type="content" source="../../assets/images/tdp/app-dashboard.png" alt-text="The screenshots shows you App dashboard chart for your published app.":::
+
+## See also
+
+[Include a SaaS offer with your Microsoft Teams app](~/concepts/deploy-and-publish/appsource/prepare/include-saas-offer.md)
platform Manage Your Apps In Developer Portal https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/manage-your-apps-in-developer-portal.md
+
+ Title: Manage your apps with the Developer Portal
+description: In this article, learn how to configure, distribute, and manage your apps using the Developer Portal for Microsoft Teams.
+ms.localizationpriority: medium
++++
+# Manage your apps in Developer Portal
+
+After you create or upload your app, you can manage your apps in Developer Portal with the following:
+
+* [Overview](#overview)
+* [Configure](#configure)
+* [Advanced](#advanced)
+* [Publish](#publish)
+
+## Overview
+
+In the **Overview** section, you can see the following components to manage your app:
+
+* Dashboard
+
+ * In the **Dashboard** under **Overview** section, you can see the following components for your app:
+ * **Teams store validation**: App validation tool checks your app package against the test cases Microsoft uses when reviewing your app.
+ * **Announcement**: Latest updates of your apps on Developer Portal for Teams
+ * **Active users (Preview)**: Shows you the active user count
+ * **Basic information**: Shows you the App ID, Version, Manifest version, and so on.
+
+ :::image type="content" source="../../assets/images/tdp/dashboard-page.png" alt-text="The screenshot is an example that shows the Overview page of the app you created in Developer Portal for Teams.":::
+
+* Analytics
+
+ In the **Analytics** page under **Overview** section, you can see the total number of active users for your app. For more information, see [Analyze your app's usage](analyze-your-apps-usage-in-developer-portal.md).
+
+## Configure
+
+To install and render your app in Teams, you must include a set of configurations that Teams recognizes. To upload your apps in Teams, you need to have app manifest, which contains all the app details to display your app in Teams. This can be achieved with the help of components and tools that are available in Developer Portal.
+
+In the **Configure** section, you can see the following components to manage and access your app:
+
+* **Basic information**: This section shows and allows you to edit the App name, App ID, Descriptions, Version, Developer Information, App URLs, Application (client) ID, and Microsoft Partner Network ID.
+* **Branding**: This page shows the app icon details.
+* **App features**: You can add the following features to your app:
+ * Personal app
+ * Bot
+ * Connector
+ * Scene
+ * Group and channel app
+ * Messaging extension
+ * Meeting extension
+ * Activity feed notification
+* **Permissions**: This section allows you to give Device permissions, Team permissions, Chat or Meeting permissions, and User Permissions for your app.
+* **Single sign-on**: You can configure your app to authenticate users with single sign-on (SSO).
+* **Languages**: You can set up or change the language of your app.
+* **Domain**: You can add the domains to load your apps in the Teams client (For example: *.example.com).
++
+## Advanced
+
+In the **Advanced** section, you can see the following components to manage your app in Developer Portal:
+
+* **Owners**
+
+ Each app includes an **Owners** page, where you can share your app registration with others in your org. You can add **Administrator** and **Operative** role to manage who can change the settings of your app. The **Operative** role has the same permissions as the **Administrator** role except to delete an app.
+
+ To add an owner:
+
+ 1. In the **Advanced** section, select **Owners**.
+ 1. Select **Add an owner**.
+ 1. Enter a name and select a user ID from the drop-down list.
+ 1. Under **Role**, select **Operative** or **Administrator**.
+ 1. Select **Add**.
+
+* **App content**: You can configure your app with the following additional features:
+
+ * Loading indicator: Displays an indicator to let users know your hosted app content (For example: Tabs and Task modules) is loading.
+ * Full-screen mode: Displays a personal app without an app header. It is only supported for the published apps to your org.
+
+* **Environments**
+
+ You can configure environments and global variables to help transition your app from your local runtime to production. Global variables are used across all environments.
+
+ To set up an environment:
+
+ 1. In the Developer Portal, select the **Apps** that you're working.
+ 1. Go to **Environments** under **Advanced** section and select **+ Add an environment**.
+ 1. Select **Add**.
+
+ * **Global variables**
+
+ 1. Select **Add a global variable** to create configuration variables for your environment.
+
+ To use global variables:
+
+ Use the variable names instead of hard-coded values to set your app configurations.
+
+ 1. Enter `{{` in any field in the Developer Portal. A dropdown with all the variables you've created for the chosen environment along with the global variables appears.
+ 1. Before downloading your app package (for example, when getting ready to publish to the Teams store), select the environment you want to use. Your app configurations update automatically based on the environment.
+
+* **Plan and pricing**: You can link a SaaS offer which you've created in the Partner center for your app.
+* **Admin settings**:
+ * App Customization: You can customize your app
+ * Block app by default: You can block your app by default for users until a tenant admin chooses to enable it.
+
+## Publish
+
+You can publish your app to your org or to the Teams store.
+
+* **Publish your app to org**:
+
+ 1. In the app **Overview** page, under **Publish**, select **Publish to Org**.
+ 1. Select **Publish your App**.
+
+* **Publish your app to store**:
+
+ 1. In the app **Overview** page, under **Publish**, select **Publish to Store**.
+ 1. Select **Publish**.
+
+ > [!NOTE]
+ > The app validation tool checks your app package against the test cases that Microsoft uses to review your app. Resolve errors or warnings and read the **App submission checklist** before submitting your app.
+
+ You can download the app package by selecting **Download app package** button from the Publish to store page.
+
+* **App package**: The app package describes how your app is configured that includes app features, required resources, and other important attributes in manifest. The Icon tab shows the icon used for your app.
+
+## Test your app directly in Teams
+
+The Developer Portal provides options for testing and debugging your app:
+
+* On the **Overview** page, you can see a snapshot whether your app is configured and is validated against Teams store test cases.
+* The **Preview in Teams** button launches your app quickly in the Teams client for debugging.
+
+## Use tools to create app features
+
+The Developer Portal also includes tools to help you build key features of Teams apps. The following are the tools:
+
+* **Scene studio**: Design [custom Together Mode scenes](~/apps-in-teams-meetings/teams-together-mode.md) for Teams meetings.
+* **Adaptive Cards editor**: Create and preview Adaptive Cards to include with your apps.
+* **Microsoft identity platform management**: Register your apps with Azure Active Directory to help users sign in and provide access to APIs.
+* **Teams store app validation**: Check your app package against the test cases that Microsoft uses to review your app.
+* **Bot management**: Add conversational bots to your app that communicate with users, respond to their questions, and proactively notify them about changes and other events.
+
+To add a bot:
+
+1. In the Developer Portal, select **Tools** in the left pane.
+1. Select the **Bot management**.
+1. In the Bot management page, select **New Bot**.
+1. Enter the name and select **Add**.
++
+From the Developer portal, you can go to Bot framework portal and configure your bot to update icon and other properties.
+
+## See also
+
+[Include a SaaS offer with your Microsoft Teams app](~/concepts/deploy-and-publish/appsource/prepare/include-saas-offer.md)
platform Share To Teams From Personal App Or Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-to-teams-from-personal-app-or-tab.md
ms.localizationpriority: medium
# Share to Teams from personal app or tab
-> [!NOTE]
-> Share to Teams is currently available only in [public developer preview](../../resources/dev-preview/developer-preview-intro.md).
- Share to Teams allows users to share the content from personal app or tab to other user or group or channel within Teams. Users can select Share to Teams to launch the Share to Teams experience in a pop-up window. The pop-up window allows users to add other user or group or channel to share the content. The following image shows the Share to Teams pop-up window:
platform Share To Teams From Web Apps https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-to-teams-from-web-apps.md
The following image displays the link unfurling experience through Share to Team
:::image type="content" source="~/assets/images/share-to-teams-link-unfurling.png" alt-text="Share-to-Teams link unfurling":::
-> [!NOTE]
-> Link unfurling in share to Teams is currently available only in public developer preview.
- This article guides you on how to create and embed a Share to Teams button for your website, craft your website preview, and extend Share to Teams for Education. See the following video to learn how to embed Share to Teams button:
platform Teams Developer Portal https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/teams-developer-portal.md
Title: Manage your apps with the Developer Portal
-description: In this module, learn how to configure, distribute, and manage your apps using the Developer Portal for Microsoft Teams.
+ Title: Developer Portal for Teams
+description: In this article, learn more about Developer Portal and how to create a brand new app and import an existing app in the Teams Developer Portal.
ms.localizationpriority: medium
-# Manage your Teams apps using Developer Portal
+# Developer Portal for Teams
The <a href="https://dev.teams.microsoft.com" target="_blank">Developer Portal for Teams</a> is the primary tool for configuring, distributing, and managing your Microsoft Teams apps. With the Developer Portal, you can collaborate with colleagues on your app, set up runtime environments, and much more.
The <a href="https://dev.teams.microsoft.com" target="_blank">Developer Portal f
> * Currently, Developer Portal is not available for Government Community Cloud (GCC), GCC-High, or Department of Defense (DOD) tenants. > * However, you can use a regular tenant to build an app in the Developer Portal, download the app, and upload the app using [Microsoft Graph](/graph/api/teamsapp-publish?view=graph-rest-1.0&tabs=http&preserve-view=true) to a national cloud. For more information, see [National cloud deployments](/graph/deployments).
-> [!IMPORTANT]
-> If you are migrating from App Studio to Developer Portal, the following table provides the detailed information of the features that are supported in the Developer Portal:
-
-| Features | App Studio | Developer Portal |
-| | | |
-| App analytics* | ❌ | ✔️ |
-| App capabilities-Bots | ✔️ | ✔️ |
-| App capabilities-Connectors | ✔️ | ✔️ |
-| App capabilities-Messaging extension | ✔️ | ✔️ |
-| App capabilities-Meeting extension | ❌ | ✔️ |
-| App capabilities-Personal apps | ✔️ | ✔️ |
-| App capabilities-Tabs | ✔️ | ✔️ |
-| App environments | ❌ | ✔️ |
-| App languages | ✔️ | ✔️ |
-| App manifest preview and download | ✔️ | ✔️ |
-| App plans and pricing | ❌ | ✔️ |
-| App publishing | ✔️ | ✔️ |
-| App permissions | ❌ | ✔️ |
-| App sharing-share with co-developers | ❌ | ✔️ |
-| App validation | ✔️ | ✔️ |
-| Create a new app | ✔️ | ✔️ |
-| Impart a zip package | ✔️ | ✔️ |
-
-\* *App analytics will be available for GA soon.*
- ## Register an app
-The Developer Portal provides a couple ways to register a Teams app:
+The Developer Portal provides the following ways to register a Teams app:
-* Register a brand new app.
+* Create and register a brand new app.
* Import an existing app package.
-> [!NOTE]
-> If you create an app using the [Microsoft Teams Toolkit for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension), you can manage that app in the Developer Portal.
-
-## Set up an environment
-
-You can configure environments and global variables to help transition your app from your local runtime to production. Global variables are used across all environments.
-
-To set up an environment:
-
-1. In the Developer Portal, select the app you're working on.
-2. Go to the **Environments** page and select **+ Add an environment**.
-3. Select **+ Add a variable** to create configuration variables for your environment.
+### Create and register a brand new app
-To use variables:
+The Developer portal allows you to create a brand new app:
-Use the variable names instead of hard-coded values to set your app configurations.
+1. Log into [Developer Portal](https://dev.teams.microsoft.com), select **Apps** from the left pane.
-1. Enter `{{` in any field in the Developer Portal. A dropdown with all the variables you've created for the chosen environment along with the global variables appears.
-1. Before downloading your app package (for example, when getting ready to publish to the Teams store), select the environment you want to use. Your app configurations update automatically based on the environment.
+ :::image type="content" source="../../assets/images/tdp/home-page.png" alt-text="The screenshot is an example that shows the Developer Portal for Teams home page.":::
-## Identify app owners
+1. Select **New app** and enter app name.
-Each app includes an **Owners** page, where you can share your app registration with colleagues in your org. The **Contributor** role has the same permissions as the **Owner** role except the ability to delete an app.
+ :::image type="content" source="../../assets/images/tdp/enter-app-name-tdp.png" alt-text="The screenshot shows how to create a brand new app in Developer Portal for Teams." lightbox="../../assets/images/tdp/create-new-app-in-tdp.png":::
-## Configure your app's capabilities and other important metadata
+1. Select **Add**.
-A Teams app is a web app. Like all web apps, its source code is typically developed in an IDE or code editor and hosted somewhere in the cloud (like Azure).
+Now you've successfully created a brand new app and you can see all the basic information of the new app.
-To install and render your app in Teams, you must include a set of configurations that Teams recognizes. This has traditionally been done by crafting an app manifest, a JSON file that contains all the metadata Teams needs to display your app content. The Developer Portal abstracts this process and includes new features and tooling to help you be more successful.
-## Test your app directly in Teams
+### Import an existing app
-The Developer Portal provides options for testing and debugging your app:
+Follow the steps to import and manage your existing app in the Developer Portal.
-* On the **Overview** page, you can see a snapshot of whether your app's configurations validate against Teams store test cases.
-* The **Preview in Teams** button lets you launch your app quickly in the Teams client for debugging.
+1. In the Developer Portal, select **Apps** from the left pane.
+1. Select **Import App**.
-## Distribute your app
+ :::image type="content" source="../../assets/images/tdp/import-app.png" alt-text="The screenshot show how to import your existing app in Developer Portal for Teams to manage your apps.":::
-From the Developer Portal, use the **Distribute** button to download an app package, publish to your org, or publish to the Teams store.
-
-For more information, see [distribute your Teams app](~/concepts/deploy-and-publish/apps-publish-overview.md).
-
-## Analyze your app's usage
-
-In the Developer Portal for Teams, on the **Overview** page, you can see the total number of active users for your app.
+1. Select the app manifest file, and then select **Open**.
+1. Select **Import**.
> [!NOTE]
-> Usage analytics are currently available only for new custom apps published to your org through **Developer Portal** for Teams (formerly App Studio) or imported into **Developer Portal** for Teams after April 2022. Usage analytics for all the apps published to the Teams store is available in **Partner Center**, for more information [Teams apps usage report](/office/dev/store/teams-apps-usage).
-
-| Metric | Definition |
-| :--| :|
-| *Monthly R30* | The default usage metric. It shows the count of unique active users who used your app within that rolling 30 day window in UTC. |
-| *Daily* | It shows you the count of unique active users who used your app in a given day in UTC. |
-
-The app usage for a given day is reflected within 24 to 48 hours, and usage data for new apps can take up to three to five days to reflect in the charts.
-
-You can view your app's usage and other insights from the **Analytics** page. To access the page:
-
-1. Go to **[Developer Portal for Teams](https://dev.teams.microsoft.com)**.
-1. Select **Apps** from the left pane.
-1. Select the required app from the **Apps** page.
-1. Select **Analytics** under the **Overview** or select **View details** under the **Active Users (Preview)** card.
-
- :::image type="content" source="../../assets/images/tdp/dev-app-portal.PNG" alt-text="dev-Portal-analytics"lightbox="../../assets/images/tdp/dev-app-portal.PNG":::
-
-As you explore individual metrics on this page, you can use the **Filter** button to analyze your app's usage from the following filter options:
-
-* Aggregation type: This filter allows you to group the following metrics by a count of distinct users or a count of distinct tenants or customers.
-* Platform
-* Operating system
-* Area
-
- :::image type="content" source="../../assets/images/tdp/dev-analytics-filter.PNG" alt-text="Filter":::
-
-After you have selected your desired filters, you can explore the following individual widgets:
-
-* [Usage by time period](#usage-by-time-period)
-* [Usage by platform and OS](#usage-by-platform-and-os)
-* [Usage by retention state](#usage-by-retention-state)
-* [Usage intensity](#usage-intensity)
-
-### Usage by time period
-
-The **Usage by time period** chart shows you the number of active users or tenants who opened and used your app across different time periods.
-
- :::image type="content" source="../../assets/images/tdp/usage-by-time-period.png" alt-text="Period":::
-
-| Metric | Definition |
-| :--| :|
-| Monthly R30 | Each data point represents a given R30 (Rolling 30 day) period. |
-| Monthly R28 | Each data point represents a given R28 (Rolling 28 day) period. |
-| Weekly R7| Each data point represents a given R7 (Rolling 7 day) period. |
-| Daily | Each data point represents a given R1 (Rolling 1 day) period. |
-
-### Usage by platform and OS
-
-The **Usage by platform and OS** chart shows your app's active usage across various endpoints, such as **Windows**, **Mac**, **iOS**, **Android**, and **Web**. The same user or tenant can use an app on multiple endpoints. Each data point represents a given R30 (Rolling 30 day) period.
-
- :::image type="content" source="../../assets/images/tdp/usage-by-platform-OS.png" alt-text="Platform":::
-
-### Usage by retention state
-
-The **Usage by retention state** chart lets you track four key retention or churn metrics for your app over time.
--
-| Metric | Definition |
-| :--| :|
-| New users or tenants | Active users or tenants who are new new and have not used your app. |
-| Returning users or tenants | Active users or tenants who used your app during a given R30 (Rolling 30 day) time period and the immediately preceding R30 time period. |
-| Resurrected users or tenants | Active users or tenants who used your app one or more times before but not in the immediately preceding R30 time period. |
-| Lapsed users or tenants | Active users or tenants who were not seen during a given R30 time period but were seen during the immediately preceding R30 time period. |
-
-### Usage intensity
-
-The **Usage intensity** chart shows you key usage intensity metrics for your app.
-
- :::image type="content" source="../../assets/images/tdp/usage-intensity.png" alt-text="Intensity":::
-
-| Metric | Definition |
-| :--| :|
-| Median days used per month | The median numbers of days in which your app was opened in the last R30 (Rolling 30 day) time period. |
-| % of 5+ Days usage | The % of Active Users who opened or used the app more than five days in the last R30 time period. |
-| DAU/MAU | The ratio of the average number of unique users or tenants who used your app on each day divided by the Monthly Active Users for the selected R30 time period. |
-
-### App dashboard
-
-The **My App dashboard** table shows you the latest R30 (Rolling 30 day) data for each of the metrics under the previous four categories, and the Month over Month change. Use the time picker on the upper left and select the desired date, you can see daily R30 data for the last 75 days and end of month R30 data for up to 12 months.
-
-You can select each of these **Metric name** to see trends over time.
-
- :::image type="content" source="../../assets/images/tdp/app-dashboard.png" alt-text="app":::
-
-## Use tools to create app features
-
-The Developer Portal also includes tools to help you build some key features of Teams apps. Some of these tools include:
-
-* **Scene studio**: Design [custom Together Mode scenes](~/apps-in-teams-meetings/teams-together-mode.md) for Teams meetings.
-* **Adaptive Cards editor**: Create and preview Adaptive Cards to include with your apps.
-* **Microsoft identity platform management**: Register your apps with Azure Active Directory to help users sign in and provide access to APIs.
+>
+> * The Developer Portal creates a unique app ID and locks the ID for your registered Teams app. You canΓÇÖt edit or provide an ID of your choice, which prevents to have duplicate app IDs for multiple apps.
+> * If you create an app using the Microsoft Teams Toolkit for Visual Studio Code, you can manage your app in the Developer Portal. For more information, see [Build apps with teams toolkit and Visual studio code](~/toolkit/visual-studio-code-overview.md).
+> * You can import an existing app which you created on App Studio to the Developer Portal.
## See also
platform Create Partner Center Dev Account https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/create-partner-center-dev-account.md
The following resources can also assist:
## Update Apple App Store Connect Team ID on Partner Center
-For enabling users to install your app on the Teams iOS platform, you must update your Apple App Store Connect Team ID in the Microsoft Partner Center. To update your Apple App Store Connect Team ID, follow these steps:
+To enable end-users to install your app on the Teams iOS platform, update your Apple App Store Connect Team ID in the Microsoft Partner Center. The Apple App Store Connect Team ID is shared with Apple. To update your Apple App Store Connect Team ID, follow these steps:
1. Login to [Microsoft Partner Center](https://partner.microsoft.com/dashboard/home) using the global admin credentials. 1. Select the settings icon from the upper right corner of the page. 1. Go to the **Legal info** section under **Organization profile** from the left pane. 1. Select the **Developer** tab.
-1. Type your Apple App Store Connect Team ID.
+1. Provide your Apple App Store Connect Team ID.
1. Go to the offer page and republish your Teams app.
- Your Apple App Store Connect Team ID is now updated and users can install your app on the Teams iOS platform.
+
+Your Apple App Store Connect Team ID is now updated and users can install your app on the Teams iOS platform.
To get Apple App Store Connect Team ID from Apple Developer portal, follow these steps: 1. Login to [Apple Developer Center](https://developer.apple.com/). 1. Select **Account** and go to **Membership**.
-1. You'll find the **Apple App Store Connect Team ID** under **Membership**.
+1. Under **Membership**, access **Apple App Store Connect Team ID**.
## Next step
platform Api Transcripts https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/graph-api/meeting-transcripts/api-transcripts.md
+
+ Title: Use Graph APIs to fetch transcript
+description: Describes the APIs to fetch meeting transcripts
+ms.localizationpriority: high
++
+# Use Graph APIs to fetch transcript
+
+Use Graph REST APIs to get transcripts for a particular meeting. Your app fetches the transcripts based on the user ID of the meeting organizer and the meeting ID.
+
+The following APIs are used for fetching transcripts:
+
+- [List callTranscripts](#list-calltranscripts)
+- [Get callTranscript](#get-calltranscript)
+- [Get callTranscript content](#get-calltranscript-content)
+
+### List callTranscripts
+
+This API is used to get a list of all `callTranscript` objects based on the user ID and meeting ID. It returns the metadata of the transcripts of the meeting, which contains the transcript ID and the created date and time of that transcript.
+
+**HTTP request**
+
+```http
+GET /me/onlineMeetings('{meetingId}')/transcripts
+GET /users('{userId}')/onlineMeetings('{meetingId}')/transcripts
+```
+
+**Optional query parameters**
+
+The method supports the `$skipToken` and `$top` [OData query parameters](/graph/query-parameters) to help customize the response.
+
+**Supported query patterns**
+
+| Pattern | Supported | Syntax | Notes |
+| - | - | -- | -- |
+| Server-side pagination | Γ£ô | `@odata.nextLink` | Get a continuation token in the response, when a result set spans multiple pages. |
+| Page limit | Γ£ô | `/transcripts?$top=20` | Get transcripts with page size 20. Default page limit is 10. Max page limit is 100. |
+
+**Request headers**
+
+| Header | Value |
+|:|:--|
+| Authorization | Bearer {token}. Required. |
+
+**Request body**
+
+Don't supply a request body for this method.
+
+**Response**
+
+If successful, this method returns a `200 OK` response code and a collection of `callTranscript` objects in the response body.
+
+<br>
+<details>
+<summary><b>Example: List of callTranscript</b></summary>
+<br>
+<b>Request</b>
+<br>
+
+```http
+GET https://graph.microsoft.com/beta/users/ba321e0d-79ee-478d-8e28-85a19507f456/onlineMeetings/MSo1N2Y5ZGFjYy03MWJmLTQ3NDMtYjQxMy01M2EdFGkdRWHJlQ/transcripts
+```
+
+<br>
+<b>Response</b>
+<br>
+
+> [!NOTE]
+> The response object shown here might be shortened for readability.
+
+```http
+HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('ba321e0d-79ee-478d-8e28-85a19507f456')/onlineMeetings('MSo1N2Y5ZGFjYy03MWJmLTQ3NDMtYjQxMy01M2EdFGkdRWHJlQ')/transcripts",
+ "@odata.count": 3,
+ "@odata.nextLink": "https://graph.microsoft.com/beta/users('ba321e0d-79ee-478d-8e28-85a19507f456')/onlineMeetings('MSo1N2Y5ZGFjYy03MWJmLTQ3NDMtYjQxMy01M2EdFGkdRWHJlQ')/transcripts?$skiptoken=MSMjMCMjMjAyMS0wOS0xNlQxMzo1OToyNy4xMjEwMzgzWg%3d%3d",
+ "value": [
+ {
+ "id": "MSMjMCMjZDAwYWU3NjUtNmM2Yi00NjQxLTgwMWQtMTkzMmFmMjEzNzdh",
+ "createdDateTime": "2021-09-17T06:09:24.8968037Z"
+ },
+ {
+ "id": "MSMjMCMjMzAxNjNhYTctNWRmZi00MjM3LTg5MGQtNWJhYWZjZTZhNWYw",
+ "createdDateTime": "2021-09-16T18:58:58.6760692Z"
+ },
+ {
+ "id": "MSMjMCMjNzU3ODc2ZDYtOTcwMi00MDhkLWFkNDItOTE2ZDNmZjkwZGY4",
+ "createdDateTime": "2021-09-16T18:56:00.9038309Z"
+ }
+ ]
+}
+```
+
+</details>
+
+### Get callTranscript
+
+Your app parses through the list of transcript IDs, received as the response of the `List callTranscripts` API, to get the required transcript ID. This API is used to get a single transcript metadata based on the user ID, meeting ID, and transcript ID.
+
+**HTTP request**
+
+```http
+GET me/onlineMeetings('{meetingId}')/transcripts('{transcriptId}')
+GET users('{userId}')/onlineMeetings('{meetingId}')/transcripts('{transcriptId}')
+```
+
+**Request headers**
+
+| Header | Value |
+|:|:--|
+| Authorization | Bearer {token}. Required. |
+
+**Request body**
+
+Don't supply a request body for this method.
+
+**Response**
+
+If successful, this method returns a `200 OK` response code and a `callTranscript` object in the response body.
+
+<br>
+<details>
+<summary><b>Example: Get a callTranscript</b></summary>
+<br>
+<b>Request</b>
+<br>
+
+```http
+GET https://graph.microsoft.com/bethkLWFkNDItOTE2ZDNmZjkwZGY4
+```
+
+<br>
+<b>Response</b>
+<br>
+
+> [!NOTE]
+> The response object shown here might be shortened for readability.
+
+```http
+HTTP/1.1 200 OK
+Content-type: application/json
+
+{
+ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('ba321e0d-79ee-478d-8e28-85a19507f456')/onlineMeetings('MSo1N2Y5ZGFjYy03MWJmLTQ3NDMtYjQxMy01M2EdFGkdRWHJlQ')/transcripts/$entity",
+ "id": "MSMjMCMjNzU3ODc2ZDYtOTcwMi00MDhkLWFkNDItOTE2ZDNmZjkwZGY4",
+ "createdDateTime": "2021-09-17T06:09:24.8968037Z"
+}
+```
+
+</details>
+
+### Get callTranscript content
+
+This API is used to get the transcript of the selected transcript ID that was obtained in the response of the `Get callTranscript` API. It returns the content of the transcript.
+
+**HTTP request**
+
+```http
+GET me/onlineMeetings('{meetingId}')/transcripts('{transcriptId}')/content
+GET users('{userId}')/onlineMeetings('{meetingId}')/transcripts('{transcriptId}')/content
+```
+
+**Optional query parameters**
+
+This method supports the `$format` [OData query parameter](/graph/query-parameters) that allows response customization.
+
+The supported format types are `text/vtt` for vtt OR `application/vnd.openxmlformats-officedocument.wordprocessingml.document` for docx format.
+
+**Request headers**
+
+| Header | Value |
+|:|:--|
+| Authorization | Bearer {token}. Required. |
+| Accept | text/vtt OR application/vnd.openxmlformats-officedocument.wordprocessingml.document. Optional. |
+
+**Request body**
+
+Don't supply a request body for this method.
+
+**Response**
+
+If successful, this method returns a `200 OK` response code and contains bytes for callTranscript object in the response body. The `content-type` header specifies type of the transcript content.
+
+**Examples**
+<br>
+<details>
+<summary><b>Example: Get a callTranscript content</b></summary>
+<br>
+<b>Request</b>
+<br>
+
+```http
+GET https://graph.microsoft.com/bethkLWFkNDItOTE2ZDNmZjkwZGY4/content
+```
+
+<br>
+<b>Response</b>
+<br>
+
+Response contains bytes for the transcript in the body. The `content-type` header specifies type of the transcript content.
+
+> [!NOTE]
+> The response object shown here might be shortened for readability.
+
+```http
+HTTP/1.1 200 OK
+Content-type: text/vtt
+
+WEBVTT
+
+0:0:0.0 --> 0:0:5.320
+<v User Name>This is a transcript test.</v>
+```
+
+</details>
+<br>
+<details>
+<summary><b>Example: Get a callTranscript content specifying $format query param</b></summary>
+<br>
+<b>Request</b>
+<br>
+
+```http
+GET https://graph.microsoft.com/bethkLWFkNDItOTE2ZDNmZjkwZGY4/content?$format=text/vtt
+ ```
+
+<br>
+<b>Response</b>
+<br>
+
+Response contains bytes for the transcript in the body. The `content-type` header specifies type of the transcript content.
+
+> [!NOTE]
+> The response object shown here might be shortened for readability.
+
+```http
+HTTP/1.1 200 OK
+Content-type: text/vtt
+
+WEBVTT
+
+0:0:0.0 --> 0:0:5.320
+<v User Name>This is a transcript test.</v>
+```
+
+</details>
+<br>
+<details>
+<summary><b>Example: Get a callTranscript content specifying Accept header</b></summary>
+<br>
+<b>Request</b>
+<br>
+
+```http
+GET https://graph.microsoft.com/bethkLWFkNDItOTE2ZDNmZjkwZGY4/content
+Accept: application/vnd.openxmlformats-officedocument.wordprocessingml.document
+```
+
+<br>
+<b>Response</b>
+<br>
+
+Response contains bytes for the transcript in the body. The `content-Type` header specifies type of the transcript content.
+
+> [!NOTE]
+> The response object shown here might be shortened for readability.
+
+```http
+HTTP/1.1 200 OK
+Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document
+
+0:0:0.0 --> 0:0:5.320
+User Name
+This is a transcript test.
+```
+
+</details>
+<br>
+<details>
+<summary><b>Example: Get a callTranscript content with $format getting precedence over the accept header</b></summary>
+<br>
+<b>Request</b>
+<br>
+
+```http
+GET https://graph.microsoft.com/bethkLWFkNDItOTE2ZDNmZjkwZGY4/content?$format=text/vtt
+Accept: application/vnd.openxmlformats-officedocument.wordprocessingml.document
+```
+
+<br>
+<b>Response</b>
+<br>
+
+Response contains bytes for the transcript in the body. The `content-Type` header specifies type of the transcript content.
+
+> [!NOTE]
+> The response object shown here might be shortened for readability.
+
+```http
+HTTP/1.1 200 OK
+Content-type: text/vtt
+
+WEBVTT
+
+0:0:0.0 --> 0:0:5.320
+<v User Name>This is a transcript test.</v>
+```
+
+</details>
+
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
+ms.localizationpriority: high
++
+# 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.
+
+> [!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:
+
+- [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.
+
+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.
+
+#### 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.
+
+For subscribing your app to calendar events, see [Change notifications for Outlook resources in Microsoft Graph](/graph/outlook-change-notifications-overview).
+
+Use the following example to subscribe to user-level notifications:
+
+```http
+
+POST https://graph.microsoft.com/v1.0/subscriptions/
+{
+ "changeType": "created,updated,deleted",
+ "notificationUrl": "https://webhook.azurewebsites.net/api/send/myNotifyClient",
+ "resource": "users('1273a016-201d-4f95-8083-1b7f99b3edeb')/events",
+ "expirationDateTime": "2022-05-05T14:58:56.7951795+00:00",
+ "clientState": "ClientSecret",
+ "includeResourceData": false
+}
+```
+
+When your app is notified about a subscribed meeting event, it looks for calendar event ID in the notification. Use the event ID to get `JoinWebUrl` for retrieving a specific chat ID and subscribing to its messages. After your app has subscribed to the chat messages, follow the steps given for [tenant-level notifications](#obtain-meeting-details-using-tenant-level-notification) to obtain meeting ID and organizer ID.
+
+To obtain meeting ID and organizer ID from user-level notification:
+
+1. **Get event ID**: Your app gets the `eventId` property from the notification payload.
+
+ <details>
+ <summary><b>Example</b>: Notification payload</summary>
+
+ ```json
+ {
+ "subscriptionId": "ef30cdc6-b5ae-4702-b924-f458fd9e5fc3",
+ "changeType": "created",
+ "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34",
+ "clientState": "ClientSecret",
+ "subscriptionExpirationDateTime": "2022-05-05T07:54:53.1886542-07:00",
+ "resource": "Users/1273a016-201d-4f95-8083-1b7f99b3edeb/Events/AAMkADY0NjM1MjRhLTNiNjAtNDBiOC1hYTQxLThkMjAxN2QzMjZhYQBGAAAAAAC03Gz8aL_JQp2Kxvw5a29SBwDFFWHjtoMRTqdrVyQ1h8yLAAAAAAENAADFFWHjtoMRTqdrVyQ1h8yLAAFwC7nAAAA=",
+ "resourceData": {}
+ }
+ ```
+
+ In this example, the `eventID` contained within `resource` is *AAMkADY0NjM1MjRhLTNiNjAtNDBiOC1hYTQxLThkMjAxN2QzMjZhYQBGAAAAAAC03Gz8aL_JQp2Kxvw5a29SBwDFFWHjtoMRTqdrVyQ1h8yLAAAAAAENAADFFWHjtoMRTqdrVyQ1h8yLAAFwC7nAAAA=*.
+ </details>
+
+2. **Get meeting URL**: Use the event ID to retrieve `joinUrl` that contains the meeting URL.
+
+ For more information, see [Get event](/graph/api/event-get).
+
+ Use the following example to request the meeting URL:
+
+ ```http
+ GET https://graph.microsoft.com/v1.0/users/1273a016-201d-4f95-8083-1b7f99b3edeb/events/AAMkADY0NjM1MjRhLTNiNjAtNDBiOC1hYTQxLThkMjAxN2QzMjZhYQBGAAAAAAC03Gz8aL_JQp2Kxvw5a29SBwDFFWHjtoMRTqdrVyQ1h8yLAAAAAAENAADFFWHjtoMRTqdrVyQ1h8yLAAFwC7nAAAA=
+ ```
+
+ The response payload contains `joinURL`.
+
+ <details>
+ <summary><b>Example</b>: Response payload for getting meeting URL</summary>
+
+ ```json
+ {
+ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('1273a016-201d-4f95-8083-1b7f99b3edeb')/events/$entity",
+ "@odata.etag": "W/\"xRVh47aDEU6na1ckNYfMiwABb2Twsg==\"",
+ "id": "AAMkADY0NjM1MjRhLTNiNjAtNDBiOC1hYTQxLThkMjAxN2QzMjZhYQBGAAAAAAC03Gz8aL_JQp2Kxvw5a29SBwDFFWHjtoMRTqdrVyQ1h8yLAAAAAAENAADFFWHjtoMRTqdrVyQ1h8yLAAFwC7nAAAA=",
+ "start": {
+ "dateTime": "2022-05-06T15:00:00.0000000",
+ "timeZone": "UTC"
+ },
+ "end": {
+ "dateTime": "2022-05-06T15:30:00.0000000",
+ "timeZone": "UTC"
+ },
+
+ "onlineMeeting": {
+ "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MjExYzJiMTItZDY1MS00ZGZkLWE5YzQtZTBmNWI1MDg2M2Uw%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%221273a016-201d-4f95-8083-1b7f99b3edeb%22%7d",
+ "conferenceId": "438824583",
+ "tollNumber": "+1 213-279-1007"
+ }
+ }
+ ```
+
+ </details>
+
+ The meeting URL is contained in `joinUrl`.
+
+3. **Get chat thread ID**: Use the meeting URL obtained in `joinUrl` to get the chat thread ID. Specify this meeting URL as value for the `joinWebUrl` parameter while fetching the related meeting.
+
+ Use the following example to request the thread ID:
+
+ ``` http
+ GET https://graph.microsoft.com/v1.0/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings?$filter=JoinWebUrl%20eq%20'https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d'
+ ```
+
+ The response payload contains the `threadID` member in the `chatInfo` property.
+ <br>
+ <details>
+ <summary><b>Example</b>: Response payload with thread ID</summary>
+
+ ```json
+ {
+ "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings",
+ "value": [
+ {
+ "id": "MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19NVE01T1RZM01HVXRObVk0TWkwMFlqZzRMVGsyTURVdFkySXlaR1JsTm1VMVpqQTJAdGhyZWFkLnYy",
+ "creationDateTime": "2022-04-26T07:41:17.3736455Z",
+ "startDateTime": "2022-04-26T10:30:00Z",
+ "endDateTime": "2022-04-26T11:00:00Z",
+ "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d",
+ "joinWebUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d",
+ "chatInfo": {
+ "threadId": "19:meeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2@thread.v2",
+ "messageId": "0",
+ "replyChainMessageId": null
+ }
+ }
+ ]
+ }
+ ```
+
+ </details>
+
+ The chat ID is contained in `threadId`.
+
+4. **Subscribe to chat messages**: Use chat ID to subscribe your app to receive chat messages for that particular meeting. For more information, see [Subscribe to messages in a chat](/graph/teams-changenotifications-chatmessage#subscribe-to-messages-in-a-chat).
+
+ If you want your app to subscribe to messages with specific text, see [Subscribe to messages in a chat that contain certain text](/graph/teams-changenotifications-chatmessage#example-2-subscribe-to-messages-in-a-chat-that-contain-certain-text).
+
+5. Follow steps for [tenant-level notifications](#obtain-meeting-details-using-tenant-level-notification) to obtain meeting ID and organizer ID.
+
+#### 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.
+
+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.
+
+To obtain meeting ID and organizer ID from tenant-level notification:
+
+1. **Get chat ID**: Your app gets the `chatId` property from the notification to make subsequent calls. Your app can get the chat ID from the payloads of:
+
+ - Transcription started event: `callTranscriptEventMessageDetail` event type
+
+ <details>
+ <summary><b>Example</b>: Payload for transcription started event</summary>
+
+ ```json
+ {
+ "subscriptionId": "1217470f-564c-4fe3-b51f-ebd962cb8797",
+ "changeType": "created",
+ "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34",
+ "resource": "chats('19:meeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk@thread.v2')/messages('1649787549174')",
+ "contentDecryptedBySimulator": {
+ "@odata.context": "https://graph.microsoft.com/$metadata#chats('19%3Ameeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk%40thread.v2')/messages/$entity",
+ "messageType": "systemEventMessage",
+ "createdDateTime": "2022-04-12T18:19:09.174Z",
+ "lastModifiedDateTime": "2022-04-12T18:19:09.174Z",
+ "chatId": "19:meeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk@thread.v2",
+ "body": {
+ "contentType": "html",
+ "content": "<systemEventMessage/>"
+ },
+ "channelIdentity": null,
+ "eventDetail": {
+ "@odata.type": "#Microsoft.Teams.GraphSvc.callTranscriptEventMessageDetail",
+ "callId": "16481de8-3262-419b-abc7-0139e6239515",
+ "callTranscriptICalUid": "",
+ "meetingOrganizer": {
+ "application": null,
+ "device": null,
+ "user": {
+ "userIdentityType": "aadUser",
+ "id": "14b779ae-cb64-47e7-a512-52fd50a4154d",
+ "displayName": null
+ }
+ }
+ }
+ },
+ "encryptedContent": {}
+ }
+ ```
+
+ </details>
+
+ - Call ended event: `callEndedEventMessageDetail` event type
+
+ <details>
+ <summary><b>Example</b>: Payload for call ended event</summary>
+
+ ```json
+ {
+ "subscriptionId": "1217470f-564c-4fe3-b51f-ebd962cb8797",
+ "changeType": "created",
+ "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34",
+ "resource": "chats('19:meeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk@thread.v2')/messages('1649787585457')",
+ "resourceData": {},
+ "contentDecryptedBySimulator": {
+ "@odata.context": "https://graph.microsoft.com/$metadata#chats('19%3Ameeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk%40thread.v2')/messages/$entity",
+ "createdDateTime": "2022-04-12T18:19:45.457Z",
+ "lastModifiedDateTime": "2022-04-12T18:19:45.457Z",
+ "chatId": "19:meeting_ZjVkMjc0ZWYtNThkMy00ZGI1LWFiYjAtYjg3ZGU0ZWI3MzZk@thread.v2",
+ "eventDetail": {
+ "@odata.type": "#Microsoft.Teams.GraphSvc.callEndedEventMessageDetail",
+ "callId": null,
+ "callDuration": "PT1M44S",
+ "callEventType": "meeting",
+ "callParticipants": [
+ ],
+ "initiator": {
+
+ }
+ }
+ },
+ "encryptedContent": {
+
+ }
+ }
+ ```
+
+ </details>
+
+2. **Get chat entity**: Your app can retrieve the chat entity using the chat ID obtained in Step 1. Use the chat entity to get the URL for joining the call. The `joinWebUrl` member of the `onlineMeetingInfo` property contains this URL, and is used to obtain meeting ID eventually. The organizer ID is also a part of the response payload.
+
+ For more information about chat entity, see [Get chat](/graph/api/chat-get).
+
+ Use the following example to request chat entity based on the chat ID:
+
+ ``` http
+ GET https://graph.microsoft.com/v1.0/chats/19:meeting_NmU0NTkxYzMtM2Y2My00NzRlLWFmN2YtNTFiMGM5OWM3ZjY2@thread.v2
+ ```
+
+ The response payload contains the following elements:
+
+ - **Organizer ID**: It's contained in the `id` member of the `organizer` property in the response payload.
+ - **URL for meeting call**: This URL is used to retrieve the meeting ID, and it's available in the response payload in one of the two scenarios:
+ - If the meeting is an online Teams meeting, the `joinWebUrl` member of the `onlineMeetingInfo` property contains this URL.
+ - If the meeting wasn't created as an online meeting from Teams client or Outlook client, it contains the `calendarEventId` member in the `onlineMeetingInfo` property. Your app can use the `calendarEventId` to obtain `joinUrl`, which is the same as `joinWebUrl`.
+
+ For more information about events, see [Get event](/graph/api/event-get?view=graph-rest-1.0&tabs=http&preserve-view=true).
+
+ Examples for response payload scenarios depending on the type of join meeting URL:
+
+ - Online Teams meeting where `joinWebUrl` is available
+
+ <details>
+ <summary><b>Example</b>: Response payload for online meeting</b></summary>
+
+ ```json
+ {
+ "@odata.context": "https://graph.microsoft.com/beta/$metadata#chats/$entity",
+ "id": "19:meeting_NmU0NTkxYzMtM2Y2My00NzRlLWFmN2YtNTFiMGM5OWM3ZjY2@thread.v2",
+ "topic": "Test Meet Create Online Meeting",
+ "createdDateTime": "2022-04-14T11:30:45.903Z",
+ "lastUpdatedDateTime": "2022-04-26T06:27:45.265Z",
+ "chatType": "meeting",
+ "webUrl": "https://teams.microsoft.com/l/chat/19%3Ameeting_NmU0NTkxYzMtM2Y2My00NzRlLWFmN2YtNTFiMGM5OWM3ZjY2%40thread.v2/0?tenantId=2432b57b-0abd-43db-aa7b-16eadd115d34",
+ "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34",
+ "viewpoint": null,
+ "onlineMeetingInfo": {
+ "calendarEventId": null,
+ "joinWebUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_NmU0NTkxYzMtM2Y2My00NzRlLWFmN2YtNTFiMGM5OWM3ZjY2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d",
+ "organizer": {
+ "id": "14b779ae-cb64-47e7-a512-52fd50a4154d",
+ "displayName": null,
+ "userIdentityType": "aadUser"
+ }
+ }
+ }
+ ```
+
+ </details>
+
+ - Meeting scheduled through Teams client or Outlook client, not marked as an online meeting where `calendarEventId` is available
+
+ <details>
+ <summary><b>Example</b>: Response payload for meeting not marked as online</summary>
+
+ ```json
+ {
+ "@odata.context": "https://graph.microsoft.com/beta/$metadata#chats/$entity",
+ "id": "19:meeting_YzM1NGFiZWYtOGFiOS00NjM5LTg4OTktYmU0MjI4NTQyNGZm@thread.v2",
+ "topic": "Non Online Meeting Teams Client",
+ "createdDateTime": "2022-04-26T09:43:23.711Z",
+ "lastUpdatedDateTime": "2022-04-26T09:43:46.157Z",
+ "chatType": "meeting",
+ "webUrl": "https://teams.microsoft.com/l/chat/19%3Ameeting_YzM1NGFiZWYtOGFiOS00NjM5LTg4OTktYmU0MjI4NTQyNGZm%40thread.v2/0?tenantId=2432b57b-0abd-43db-aa7b-16eadd115d34",
+ "tenantId": "2432b57b-0abd-43db-aa7b-16eadd115d34",
+ "viewpoint": null,
+ "onlineMeetingInfo": {
+ "calendarEventId": "AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQBGAAAAAAD3AG5jNnlgQJvdCL_KgXJIBwBsww5BlIxtT7iFyYWrXV3AAAAAAAENAABsww5BlIxtT7iFyYWrXV3AAACSDwYeAAA=",
+ "joinWebUrl": null,
+ "organizer": {
+ "id": "14b779ae-cb64-47e7-a512-52fd50a4154d",
+ "displayName": null,
+ "userIdentityType": "aadUser"
+ }
+ }
+ }
+ ```
+
+ </details>
+
+ - Use the following example to get `joinWebUrl` from the `calendarEventId`:
+
+ ``` http
+ GET https://graph.microsoft.com/beta/users/14b779ae-cb64-47e7-a512-52fd50a4154d/events/AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQBGAAAAAAD3AG5jNnlgQJvdCL_KgXJIBwBsww5BlIxtT7iFyYWrXV3AAAAAAAENAABsww5BlIxtT7iFyYWrXV3AAACSDwYdAAA=
+ ```
+
+ In this example:
+
+ - The organizer ID is *14b779ae-cb64-47e7-a512-52fd50a4154d*.
+
+ The response payload of this request contains `joinUrl` in the `onlineMeeting` property.
+
+ > [!NOTE]
+ > `joinUrl` is the same as `joinWebUrl`.
+
+ <br>
+ <details>
+ <summary><b>Example</b>: Response payload that contains the URL to join meeting</summary>
+
+ ```json
+ {
+ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/events/$entity",
+ "@odata.etag": "W/\"bMMOQZSMbU+4hcmFq11dwAAAkc3Tmw==\"",
+ "id": "AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQBGAAAAAAD3AG5jNnlgQJvdCL_KgXJIBwBsww5BlIxtT7iFyYWrXV3AAAAAAAENAABsww5BlIxtT7iFyYWrXV3AAACSDwYdAAA=",
+ "start": {
+ "dateTime": "2022-04-26T10:30:00.0000000",
+ "timeZone": "UTC"
+ },
+ "end": {
+ "dateTime": "2022-04-26T11:00:00.0000000",
+ "timeZone": "UTC"
+ },
+ "onlineMeeting": {
+ "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d"
+ },
+ "calendar@odata.associationLink": "https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/calendars('AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQAuAAAAAAD3AG5jNnlgQJvdCL_KgXJIAQBsww5BlIxtT7iFyYWrXV3AAAAAAAENAAA=')/$ref",
+ "calendar@odata.navigationLink": "https://graph.microsoft.com/beta/users('14b779ae-cb64-47e7-a512-52fd50a4154d')/calendars('AAMkAGE3NjJhOTVhLTNkZDQtNDE2OS05ZjU0LTJmOGQ0YTY2YTdiZQAuAAAAAAD3AG5jNnlgQJvdCL_KgXJIAQBsww5BlIxtT7iFyYWrXV3AAAAAAAENAAA=')"
+ }
+ ```
+
+ </details>
+
+3. **Get meeting ID**: Now, your app can use `joinWebUrl` to get the meeting ID.
+
+ Use the following example to request the online meeting ID:
+
+ ``` http
+ GET https://graph.microsoft.com/betUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d'
+ ```
+
+ The response payload contains the meeting ID in the `id` member of the `value` property.
+ <br>
+ <details>
+ <summary><b>Example</b>: Response payload with meeting ID</summary>
+
+ ```json
+ {
+ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings",
+ "value": [
+ {
+ "id": "MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19NVE01T1RZM01HVXRObVk0TWkwMFlqZzRMVGsyTURVdFkySXlaR1JsTm1VMVpqQTJAdGhyZWFkLnYy",
+ "creationDateTime": "2022-04-26T07:41:17.3736455Z",
+ "startDateTime": "2022-04-26T10:30:00Z",
+ "endDateTime": "2022-04-26T11:00:00Z",
+ "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d",
+ "joinWebUrl": "https://teams.microsoft.com/l/meetup-join/19%3ameeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2%40thread.v2/0?context=%7b%22Tid%22%3a%222432b57b-0abd-43db-aa7b-16eadd115d34%22%2c%22Oid%22%3a%2214b779ae-cb64-47e7-a512-52fd50a4154d%22%7d",
+ "chatInfo": {
+ "threadId": "19:meeting_MTM5OTY3MGUtNmY4Mi00Yjg4LTk2MDUtY2IyZGRlNmU1ZjA2@thread.v2",
+ "messageId": "0",
+ "replyChainMessageId": null
+ }
+ }
+ ]
+ }
+ ```
+
+ </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.
+
+ To fetch transcripts, you'll need to:
+
+ 1. **Retrieve transcript ID based on organizer ID and meeting 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
+ ```
+
+ In this example:
+
+ - The meeting ID is included as the value for `onlineMeetings`: *MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bW
+ VldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM
+ 1pqWTJAdGhyZWFkLnYy*.
+ - 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>
+
+ ```json
+ {
+ "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('14b779ae-cb64-47e7-a512-52fd50a4154d')/onlineMeetings('MSoxNGI3NzlhZS1jYjY0LTQ3ZTctYTUxMi01MmZkNTBhNDE1NGQqMCoqMTk6bWVldGluZ19ObVUwTlRreFl6TXRNMlkyTXkwME56UmxMV0ZtTjJZdE5URmlNR001T1dNM1pqWTJAdGhyZWFkLnYy')/transcripts",
+ "@odata.count": 1,
+ "value": [
+ {
+ "id": "MSMjMCMjMDEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh",
+ "createdDateTime": "2022-04-14T11:34:39.5662792Z"
+ }
+ ]
+ }
+ ```
+
+ In this example, the transcript ID is *MSMjMCMjMDEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh*.
+
+ </details>
+
+ 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:
+
+ ```http
+ GET https://graph.microsoft.com/betEyNjJmNjgtOTc2Zi00MzIxLTlhNDQtYThmMmY4ZjQ1ZjVh')/content?$format=text/vtt
+ ```
+
+ The response payload will contain the transcripts in `.vtt` format.
+
+### Use Bot Framework to get meeting ID and organizer ID
+
+Your app can use the Bot Framework for obtaining meeting ID and organizer ID. The bot can receive meeting start or end events automatically from all the scheduled online meetings.
+
+Use the following example to obtain meeting ID and organizer ID using a bot app:
+
+```json
+GET /v1/meetings/{meetingId}
+```
+
+The response payload contains:
+
+- The meeting ID in the `msGraphResourceId` member of the `details` property.
+- The organizer ID in the `id` member of the `organizer` property.
+<br>
+<details>
+<summary><b>Example</b>: Response payload for getting meeting details</b></summary>
+
+```json
+{
+ details: {
+ id: "MCMxOTptZWV0aW5nX05XTTFNVEk1TnpNdE5qZ3pNeTAwWVdRNExUaG1PV1F0WlRnM01UQm1PVGczWW1VekB0aHJlYWQudjIjMA==",
+ msGraphResourceId: "MSo2NzAyYWZiNi0xMDliLTRjMzItYTE0MS02ZTY1NDY5NTAyYjkqMCoqMTk6bWVldGluZ19OV00xTVRJNU56TXROamd6TXkwMFlXUTRMVGhtT1dRdFpUZzNNVEJtT1RnM1ltVXpAdGhyZWFkLnYy",
+ scheduledStartTime: {
+ },
+ scheduledEndTime: {
+ },
+ joinUrl: "https://teams.microsoft.com/l/meetup-join/19%3ameeting_NWM1MTI5NzMtNjgzMy00YWQ4LThmOWQtZTg3MTBmOTg3YmUz%40thread.v2/0?context=%7b%22Tid%22%3a%22b3cdf1c8-024a-49e2-a994-f67f830b02f3%22%2c%22Oid%22%3a%226702afb6-109b-4c32-a141-6e65469502b9%22%7d",
+ Title: "Testing meeting bot 1 - Hun",
+ type: "Scheduled",
+ },
+ conversation: {
+ id: "19:meeting_NWM1MTI5NzMtNjgzMy00YWQ4LThmOWQtZTg3MTBmOTg3YmUz@thread.v2",
+ isGroup: true,
+ conversationType: "groupChat",
+ },
+ organizer: {
+ id: "29:1VZkVr77S3GW_RdAXKrfgFeytpqMegL3tkKvEbwrPqoCVvmqrlKtVrfKWUY7xIM-bZIx4Sq-p1MjdjSZnb5W20w",
+ tenantId: "b3cdf1c8-024a-49e2-a994-f67f830b02f3",
+ aadObjectId: "6702afb6-109b-4c32-a141-6e65469502b9",
+ },
+}
+```
+
+In this example:
+
+- The meeting ID is included as the value for `msGraphResourceId`: *MSo2NzAyYWZiNi0xMDliLTRjMzItYTE0MS02ZTY1NDY5NTAyYjkqMCoqMTk6bWVl
+dGluZ19OV00xTVRJNU56TXROamd6TXkwMFlXUTRMVGhtT1dRdFpUZzNNVEJtT1RnM
+1ltVXpAdGhyZWFkLnYy*.
+- The organizer ID is contained as the value for `id` for `organizer`: *29:1VZkVr77S3GW_RdAXKrfgFeytpqMegL3tkKvEbwrPqoCVvmqrlKtVrfKWUY7xIM-bZIx4Sq-p1MjdjSZnb5W20w*.
+
+</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.
+
+### Code samples
+
+You can try the following code sample for a bot app:
+
+| **Sample name** | **Description** | **C#** | **Node.js** |
+|-|--|--|--|--|
+| Meeting transcription | This is a sample application which demonstrates how to get Transcript using Graph API and show it in the task module. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-transcription/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-transcription/nodejs) |
+
+## Next step
+
+> [!div class="nextstepaction"]
+> [Graph APIs for fetching transcripts](/graph/api/resources/calltranscript)
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.
+ms.localizationpriority: high
++
+# Get meeting transcripts 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.
+
+Here are some use cases for fetching meeting transcripts using Graph API:
+
+| Use case | How Transcript 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 |
+
+> [!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.
+
+To fetch the transcript for a particular meeting:
+
+- [Configure permissions on Azure AD to access transcript](#configure-permissions-on-azure-ad-to-access-transcript)
+- [Obtain meeting ID and organizer ID](fetch-id.md)
+- [Use Graph APIs to fetch transcript](/graph/api/resources/calltranscript)
+
+## Configure permissions on Azure AD to access transcript
+
+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.
+
+### 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.
+
+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.
+
+For more information about the meeting-specific RSC permissions that can be granted to your app, see [Resource-specific consent](../rsc/resource-specific-consent.md#resource-specific-permissions-for-a-chat).
+
+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 `.vtt` or `.docx` 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).
+
+> [!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.
+
+## Next step
+
+> [!div class="nextstepaction"]
+> [Obtain meeting ID and organizer ID](fetch-id.md)
+
+## See also
+
+- [Meeting apps API references](../../apps-in-teams-meetings/API-references.md#meeting-apps-api-references)
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md
Microsoft Teams platform features that are available to all app developers.
| **Date** | **Update** | **Find here** | | -- | | -|
+| 08/03/2022 | Share to Teams from personal app or tab | Integrate with Teams > Share to Teams > [Share to Teams from personal app or tab](concepts/build-and-test/share-to-teams-from-personal-app-or-tab.md) |
+| 08/03/2022 | Added feature for retrieving meeting transcripts in the post-meeting scenario. | Build apps for Teams meetings and calls > Get meeting transcripts using Graph APIs > [Overview](graph-api/meeting-transcripts/overview-transcripts.md) |
+| 08/03/2022 | Link unfurling for share to teams from web apps | Integrate with Teams > Share to Teams > [Share to Teams from web apps](concepts/build-and-test/share-to-teams-from-web-apps.md) |
| 07/28/2022 | Add the Teams display picture and people card for in-meeting notification| Build apps for Teams meetings and calls > Enable and configure apps for meetings > [In-meeting notification](apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md#in-meeting-notification) | | 07/28/2022 | Build shared channels in Teams | Build apps for Teams meetings and calls > [Shared channels](concepts/build-and-test/Shared-channels.md) | | 07/28/2022|Introduced app manifest v1.14| App manifest > [App manifest schema for Teams](resources/schem)|
Developer preview is a public program that provides early access to unreleased T
| **Date** | **Update** | **Find here** | | -- | | |
-|08/02/2022| Collaboration controls for Teams| Integrate with Teams > [Collaboration controls](samples/collaboration-control.md)|
+| 08/03/2022 | Mute and unmute APIs for apps in Teams meeting stage | Build apps for Teams meetings and calls > [Meeting apps API references](/microsoftteams/platform/apps-in-teams-meetings/api-references?tabs=dotnet) |
+| 08/02/2022| Collaboration controls for Teams| Integrate with Teams > [Collaboration controls](samples/collaboration-control.md)|
| 06/30/2022 | Apps for instant meetings, one-on-one, and group calls| Build apps for Teams meetings and calls > [Overview](apps-in-teams-meetings/teams-apps-in-meetings.md)|
-| 06/16/2022 | Link unfurling for share to teams from web apps| Integrate with Teams > Share to Teams > [Share to Teams from web apps](concepts/build-and-test/share-to-teams-from-web-apps.md) |
|05/24/2022| Enhanced collaboration with Live Share SDK | Build apps for Teams meetings > Enhanced collaboration with Live Share > [Overview](apps-in-teams-meetings/teams-live-share-overview.md) |
-| 04/06/2022 | Share to Teams from personal app or tab | Integrate with Teams > Share to Teams > [Share to Teams from personal app or tab](concepts/build-and-test/share-to-teams-from-personal-app-or-tab.md) |
| 02/03/2022 | Introduced app manifest version 1.13 | App manifest > Public developer preview > [Manifest schema](resources/schem) | | 01/17/2022 | People Picker in Adaptive cards for mobile | Build cards and task modules > Build cards > [People Picker in Adaptive Cards](task-modules-and-cards/cards/people-picker.md)| | 10/28/2021 |Bots can be enabled to receive all channel messages using resource-specific consent (RSC) | ΓÇó Build bots > Bot conversations > [bot conversation overview](~/bots/how-to/conversations/conversation-basics.md) </br> ΓÇó Build bots > Bot conversations > [channel and group conversations](~/bots/how-to/conversations/channel-and-group-conversations.md) |