Updates from: 10/19/2022 03:37:30
Service Microsoft Docs article Related commit history on GitHub Change details
platform Build Apps For Anonymous User https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/build-apps-for-anonymous-user.md
+
+ Title: Build apps for anonymous user
+
+description: Learn how to build apps for anonymous users and test the experience delivered to the anonymous users in meeting apps with all admin settings.
++
+ms.localizationpriority: medium
++
+# Build apps for anonymous users
+
+You can build bots, messaging extensions, cards and task modules in your app to engage with anonymous meeting participants.
+
+To test your app's experience for anonymous users, select the URL in the meeting invite and join the meeting from a private browser window.
+
+## Admin setting for anonymous user app interaction
+
+Teams admins can use the admin portal to enable or disable anonymous user app interaction for the entire tenant. This setting is enabled by default. For more information, see [allow anonymous users to interact with apps in meetings](/microsoftteams/meeting-settings-in-teams).
+
+## In-Meeting getContext from Teams client SDK
+
+Apps receive the following info for an anonymous user when they call the `getContext` API from the shared app stage. You can recognize anonymous users by checking for a `userLicenseType` value of **Unknown**.
+
+```csharp
+"userObjectId": "8:anon:<GUID1>",
+"userLicenseType": "Unknown",
+"loginHint": "8:teamsvisitor:<ID>",
+"userPrincipalName": "8:teamsvisitor:<ID>",
+"tid": "<meeting organizer tenant ID>"
+```
+
+| **Property name** | **Description** |
+| | |
+| `userObjectId` | Unique generated value for the anonymous user. This value cannot be used in calls to Graph APIs. |
+| `userLicenseType` | `Unknown`, represents anonymous user. |
+| `loginHint` | Unique generated value. This value cannot be used as a hint in login flows. |
+| `userPrincipalName` | Unique generated value. This value cannot be used in calls to Graph APIs. |
+| `tid` | Tenant ID of the meeting organizer. |
+
+> [!NOTE]
+> When an anonymous user joins a meeting, a new user ID is generated. Whenever the anonymous user re-joins a meeting, a different user ID is generated.
+
+## Bot activities and APIs
+
+With a few differences, the activities sent to your bot, and the responses that it receives from bot APIs, are consistent between anonymous and non-anonymous meeting participants. In general:
+
+* The user ID is a generated value that is different each time the anonymous user joins the meeting.
+* The `aadObjectId` property is omitted.
+* The `userRole` property is set to **anonymous**.
+* The provided tenant ID is set to the tenant ID of the meeting organizer.
+
+### Get members and get single member APIs
+
+The [get members](/microsoftteams/platform/bots/how-to/get-teams-context#fetch-the-roster-or-user-profile) and [get single member](/microsoftteams/platform/bots/how-to/get-teams-context#get-single-member-details) APIs return limited information for anonymous users:
+
+```json
+{
+ "id": "<GUID1>",
+ "name": "<AnonTest (Guest)>",
+ "tenantId": "<GUID2>",
+ "userRole": "anonymous"
+}
+```
+
+| **Property name** | **Description** |
+| | |
+| `id` | Unique generated value for the anonymous user. |
+| `name` | Name provided by the anonymous user when joining the meeting. |
+| `tenantId` | Tenant ID of the meeting organizer. |
+| `userRole` | `anonymous`, represents anonymous user. |
+
+> [!NOTE]
+> The ID received from the bot APIs and the Teams client SDK API are not the same.
+
+### ConversationUpdate activity MembersAdded and MembersRemoved
+
+```csharp
+{
+ "membersAdded": [
+ {
+ "id": "<GUID1>"
+ }
+ ],
+ "type": "conversationUpdate",
+ "timestamp": "<timestamp>",
+ "id": "<event unique identifier>",
+ "channelId": "msteams",
+ "serviceUrl": "<serviceURL>",
+ "from": {
+ "id": "<GUID2>"
+ },
+ "conversation": {
+ "isGroup": true,
+ "tenantId": "<tenant id>",
+ "id": "<conversation id>"
+ },
+ "recipient": {
+ "id": "<bot id>",
+ "name": "<bot name>"
+ },
+ "channelData": {
+ "tenant": {
+ "id": "<tenant id>"
+ },
+ "source": null,
+ "meeting": {
+ "id": "<meeting id>"
+ }
+ }
+}
+```
+
+| **Property name** | **Description** |
+| | |
+| `membersAdded.id` | Anonymous user ID. |
+| `from.id` | Meeting organizer ID. |
+| `conversation.tenantId` | Tenant ID of the meeting organizer. |
+| `conversation.id` | Conversation ID of the meeting chat. |
+| `tenant.id` | Tenant ID of the meeting organizer. |
+
+Similar changes apply to the `membersRemoved` activity payload.
+
+> [!NOTE]
+>
+> When an anonymous user joins or leaves a meeting, the `from` object in the payload always has the id of the meeting organizer, even if the action was taken by someone else.
+
+### Create Conversation API
+
+Bots are not allowed to initiate a One-on-One conversation with an anonymous user. If a bot calls the Create Conversation API with the user ID of an anonymous user, it will receive a `400` Bad Request status code and the following error response:
+
+```csharp
+{
+ "error": {
+ "code": "BadArgument",
+ "message": "Bot cannot create a conversation with an anonymous user"
+ }
+}
+```
+
+### Adaptive cards
+
+Anonymous users can view and interact with Adaptive Cards in the meeting chat. Adaptive card actions behave the same way for anonymous and non-anonymous users. For more information, see [Card actions](/microsoftteams/platform/task-modules-and-cards/cards/cards-actions?tabs=json).
+
+## Known issues and limitations
+
+* Side panel tabs and content bubbles aren't available for anonymous users. Anonymous users can still see app content shared to the meeting stage.
+
+* For an anonymous user, the user ID from `getContext` and the user ID received by the bot are different. It's not possible to correlate the two directly. If you need to track the user's identity between your tab and bot, you must prompt the user to authenticate with an external identity provider.
+
+* Anonymous users will see a generic app icon on bot messages and cards, instead of the app's actual icon. For example:
+
+ :::image type="content" source="../assets/images/apps-in-meetings/app-icon.png" alt-text="This screenshot shows you how the app icon displays for anonymous user.":::
+
+## See also
+
+* [Build apps for Teams meeting stage](build-apps-for-teams-meeting-stage.md)
+* [Meeting apps APIs](meeting-apps-apis.md)
+* [How Microsoft Teams bots work](/azure/bot-service/bot-builder-basics-teams)
platform Build Apps For Teams Meeting Stage https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/build-apps-for-teams-meeting-stage.md
+
+ Title: Build apps for Teams meeting stage
+
+description: Learn how to build apps for Teams meeting stage, share to stage APIs, and generate a deep link to share content to stage in meetings.
++
+ms.localizationpriority: medium
Last updated : 04/07/2022++
+# Build apps for Teams meeting stage
+
+Share to stage allows users to share an app to the meeting stage from the meeting side panel in an ongoing meeting. This sharing is interactive and collaborative in comparison to passive screen sharing.
+
+To invoke share to stage, users can select the **Share to Stage** icon on the top right side of the meeting side panel. **Share to Stage** icon is native to Teams client and selecting it shares the entire app to the meeting stage.
+
+## App manifest settings for apps in meeting stage
+
+To share an app to the meeting stage, update the `context` property in the app manifest as follows:
+
+```json
+"context":[
+ "meetingSidePanel",
+ "meetingStage"
+ ]
+```
+
+## Advanced share to stage APIs
+
+There are many scenarios where sharing the entire app to the meeting stage isn't as useful as sharing specific parts of the app:
+
+1. For a brainstorming or whiteboard app, a user may want to share a specific board in a meeting versus the entire app with all the boards.
+
+1. For a medical app, a doctor may want to share just the X-Ray on the screen with the patient versus sharing the entire app with all the patients records or results and so on.
+
+1. A user may want to share content from a single content provider at a time (for example, YouTube) versus sharing an entire video catalog onto stage.
+
+To help users in such scenarios, we released APIs within the Teams Client SDK that allows you to programmatically invoke share to stage for specific parts of the app from a button in the meeting side panel.
++
+Use the following APIs to share specific part of the app:
+
+|Method| Description| Source|
+|||-|
+|[**Share app content to stage**](#share-app-content-to-stage-api)| Share specific parts of the app to meeting stage from the meeting side panel in a meeting. | [Microsoft Teams JavaScript library SDK](/javascript/api/@microsoft/teams-js/meeting) |
+|[**Get app content stage sharing state**](#get-app-content-stage-sharing-state-api)| Fetch information about app's sharing state on the meeting stage. | [Microsoft Teams JavaScript library 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. | [Microsoft Teams JavaScript library SDK](/javascript/api/@microsoft/teams-js/meeting.iappcontentstagesharingcapabilities) |
+
+## Share app content to stage API
+
+The `shareAppContentToStage` API enables you to share specific parts of your app to the meeting stage. The API is available through the Teams client SDK.
+
+### Prerequisite
+
+* To use the `shareAppContentToStage` API, you must obtain the RSC permissions. In the app manifest, configure the `authorization` property, and the `name` and `type` in the `resourceSpecific` field. For example:
+
+ ```json
+ "authorization": {
+ "permissions": {
+ "resourceSpecific": [
+ {
+ "name": "MeetingStage.Write.Chat",
+ "type": "Delegated"
+ }
+ ]
+ }
+ }
+ ```
+
+* `appContentUrl` must be allowed by `validDomains` array inside manifest.json, else the API returns a 501 error.
+
+### Query parameter
+
+The following table includes the query parameters:
+
+|Value|Type|Required|Description|
+|||-||
+|**callback**| String | Yes | Callback contains two parameters, error and result. The *error* can either contain an error of type *SdkError*, or null when share is successful. The *result* can either contain a true value, if there's a successful share, or null when the share fails. |
+|**appContentURL**| String | Yes | The URL that will be shared on to the stage. |
+
+### Example
+
+```javascript
+const appContentUrl = "https://www.bing.com/";
+
+microsoftTeams.meeting.shareAppContentToStage((err, result) => {
+ if (result) {
+ // handle success
+ }
+ if (err) {
+ // handle error
+ }
+}, appContentUrl);
+```
+
+### 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.|
+
+## Get app content stage sharing state API
+
+The `getAppContentStageSharingState` API enables you to fetch information about apps sharing on the meeting stage.
+
+### 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 of type *SdkError*, in case of an error, or null when share is successful. The *result* can either contain an `IAppContentStageSharingState` object, when share is successful, or null, in case of an error.|
+
+### Example
+
+```javascript
+microsoftTeams.meeting.getAppContentStageSharingState((err, result) => {
+ if (result.isAppSharing) {
+ // Indicates if app is sharing content on the meeting stage.
+ }
+});
+```
+
+The JSON response body for the `getAppContentStageSharingState` API is:
+
+```json
+{
+ "isAppSharing":true
+}
+```
+
+### 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.|
+
+## Get app content stage sharing capabilities API
+
+The `getAppContentStageSharingCapabilities` API enables you to fetch the app's capabilities for sharing to meeting stage.
+
+### 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 of type *SdkError*, or null when share is successful. The result can either contain an `IAppContentStageSharingCapabilities` object, when share is successful, or null, in case of an error.|
+
+### Example
+
+```javascript
+microsoftTeams.meeting.getAppContentStageSharingCapabilities((err, result) => {
+ if (result.doesAppHaveSharePermission) {
+ // Indicates app has permission to share contents to meeting stage.
+ }
+});
+```
+
+The JSON response body for `getAppContentStageSharingCapabilities` API is:
+
+```json
+{
+ "doesAppHaveSharePermission":true
+}
+```
+
+### 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 permissions to allow share to stage.|
+
+## Generate a deep link to share content to stage in meetings
+
+You can also generate a deep link to share the app to stage and start or join a meeting.
+
+> [!NOTE]
+>
+> * Currently, the deep link to share content to stage in meetings is undergoing UX improvements and is available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md).
+> * Deep link to share content to stage in meeting is supported in Teams desktop client only.
+
+When a deep link is selected in an app by a user who is part of an ongoing meeting, then the app is shared to the stage and a permission pop-up window appears. Users can grant access to the participants to collaborate with an app.
++
+When a user isn't in a meeting then the user is redirected to the Teams calendar where they can join a meeting or initiate instant meeting (Meet now).
++
+Once the user initiates an instant meeting (Meet now), they can add participants and interact with the app.
++
+To add a deep link to share content on stage, you need to have an app context. The app context allows the Teams client to fetch the app manifest and check if the sharing on stage is possible. The following is an example of an app context.
+
+`{ "appSharingUrl" : "https://teams.microsoft.com/extensibility-apps/meetingapis/view", "appId": "9ec80a73-1d41-4bcb-8190-4b9eA9e29fbb" , "useMeetNow": false }`
+
+The query parameters for the app context are:
+
+* `appID`: This is the ID that can be obtained from the app manifest.
+* `appSharingUrl`: The URL which needs to be shared on stage should be a valid domain defined in the app manifest. If the URL isn't a valid domain, an error dialog will pop up to provide the user with a description of the error.
+* `useMeetNow`: This includes a boolean parameter that can be either true or false.
+ * **True**: When the `UseMeetNow` value is true and if there's no ongoing meeting, a new Meet now meeting will be initiated. When there's an ongoing meeting, this value will be ignored.
+
+ * **False**: The default value of `UseMeetNow` is false, which means that when a deep link is shared to stage and there's no ongoing meeting, a calendar pop-up will appear. However, you can share directly during a meeting.
+
+Ensure that all the query parameters are properly URI encoded and the app context has to be encoded twice in the final URL. Following is an example.
+
+```json
+var appContext= JSON.stringify({ "appSharingUrl" : "https://teams.microsoft.com/extensibility-apps/meetingapis/view", "appId": "9cc80a93-1d41-4bcb-8170-4b9ec9e29fbb", "useMeetNow":false })
+var encodedContext = encodeURIComponent(appcontext).replace(/'/g,"%27").replace(/"/g,"%22")
+var encodedAppContext = encodeURIComponent(encodedContext).replace(/'/g,"%27").replace(/"/g,"%22")
+```
+
+A deep link can be launched either from the Teams web or from the Teams desktop client.
+
+* **Teams web**: Use the following format to launch a deep link from the Teams web to share content on stage.
+
+ `https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`
+
+ Example: `https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`
+
+ |Deep link|Format|Example|
+ ||||
+ |To share the app and open Teams calendar, when UseMeeetNow is **false**, default.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Afalse%257D`|
+ |To share the app and initiate instant meeting, when UseMeeetNow is **true**.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`|
+
+* **Team desktop client**: Use the following format to launch a deep link from the Teams desktop client to share content on stage.
+
+ `msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`
+
+ Example: `msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`
+
+ |Deep link|Format|Example|
+ ||||
+ |To share the app and open Teams calendar, when UseMeeetNow is **false**, default.|`msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`|`msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Afalse%257D`|
+ |To share the app and initiate instant meeting, when UseMeeetNow is **true**.|`msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`|`msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`|
+
+The query parameters are:
+
+* `deepLinkId`: Any identifier used for telemetry correlation.
+* `fqdn`: `fqdn` is an optional parameter, which can be used to switch to an appropriate environment of a meeting to share an app on stage. It supports scenarios where a specific app share happens in a particular environment. The default value of `fqdn` is enterprise URL and possible values are `Teams.live.com` for Teams for Life, `teams.microsoft.com`, or `teams.microsoft.us`.
+
+To share the entire app to stage, in the app manifest, you must configure `meetingStage` and `meetingSidePanel` as frame contexts, see [app manifest](../resources/schem). Otherwise, meeting attendees may not be able to see the content on stage.
+
+> [!NOTE]
+> For your app to pass validation, when you create a deep link from your website, web app, or Adaptive Card, use **Share in meeting** as the string or copy.
+
+## Code sample
+
+|Sample name | Description | C# | Node.js |
+|-|--|--|-|
+|Meeting stage sample | Sample app to show a tab in meeting stage for collaboration | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs) |
+| In-meeting notification | Demonstrates how to implement in-meeting notification using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/nodejs) |
+| In-meeting document signing | Demonstrates how to implement a document signing Teams app. Includes sharing specific app content to stage, Teams SSO and user specific stage view. | [View](https://github.com/officedev/microsoft-teams-samples/tree/main/samples/meetings-share-to-stage-signing/csharp) | NA |
+
+## See also
+
+* [Teams authentication flow for tabs](../tabs/how-to/authentication/auth-flow-tab.md)
+* [Apps for Teams meetings](teams-apps-in-meetings.md)
+* [Build tabs for meeting](build-tabs-for-meeting.md)
+* [Build extensible conversation for meeting chat](build-extensible-conversation-for-meeting-chat.md)
+* [Build apps for anonymous users](build-apps-for-anonymous-user.md)
+* [Advanced meeting APIs](meeting-apps-apis.md)
+* [Custom Together Mode scenes](~/apps-in-teams-meetings/teams-together-mode.md)
+* [Live Share SDK](teams-live-share-overview.md)
platform Build Extensible Conversation For Meeting Chat https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/build-extensible-conversation-for-meeting-chat.md
+
+ Title: Build extensible conversation for meeting chat
+
+description: In this article, learn how to build extensible conversation for Microsoft Teams meeting chat with bots, cards and message extensions.
++
+ms.localizationpriority: medium
++
+# Build extensible conversation for meeting chat
+
+You can make conversations extensible in Microsoft Teams meetings. Bots, message extensions, cards, and task modules can be combined to deliver an intuitive experience.
+
+## Bots
+
+A bot is also referred to as a chatbot or conversational bot. It's an app that runs simple and repetitive tasks by users such as customer service or support staff. Everyday use of bots include, bots that provide information about the weather, make dinner reservations, or provide travel information. Interactions with bots can be quick questions and answers or complex conversations. A bot needs to be enabled in the `team` scope for a channel meeting and the `groupchat` scope for all other meeting types. To implement bots, start with [Build a bot](/microsoftteams/platform//sbs-gs-javascript?tabs=vscode%2Cvsc%2Cviscode).
+
+### Bot APIs
+
+The [Bot Framework](https://dev.botframework.com/) is a rich SDK used to create bots using C#, Java, Python, and JavaScript. If you already have a bot that is based on the Bot Framework, you can easily modify it to work in Teams. Use either C# or Node.js to take advantage of our [SDKs](/microsoftteams/platform/).
+
+### Code samples - Bots
+
+|Sample name | Description | .NETCore | Node.js | Python |
+|-|--|--|-|
+| Teams conversation bot | Messaging and conversation event handling | [View](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/csharp_dotnetcore/57.teams-conversation-bot) | [View](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/javascript_nodejs/57.teams-conversation-bot) | [View](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/python/57.teams-conversation-bot) |
+|Bot samples | Set of bot samples | [View](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/csharp_dotnetcore) | [View](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/javascript_nodejs) | [View](https://github.com/microsoft/BotBuilder-Samples/tree/main/samples/python) |
+
+## Message extensions
+
+Message extensions allow the users to interact with your web service through buttons and forms in the Teams client. Users can search or initiate actions in an external system from the compose message area, the command box, or directly from a message. You can send back the results of that interaction to the Teams client in the form of a richly formatted card. Implementing message extensions for meeting chats is no different than regular chats. To implement message extension, start with [Message extensions](/microsoftteams/platform/messaging-extensions/what-are-messaging-extensions?tabs=dotnet).
+
+## Cards and Task modules
+
+Cards provide users with various visual, audio, and selectable messages and help in conversation flow. With task modules, you can create modal pop-up experiences in Teams. They're useful for starting and completing the tasks, or displaying rich information like videos or Power business intelligence (BI) dashboards. For more information, see [building cards and task modules](/microsoftteams/platform/task-modules-and-cards/cards-and-task-modules).
+
+## Feature compatibility by user types
+
+The following table provides the user types and lists the features that each user can access in meetings:
+
+| User type | Bots | Message extensions | Adaptive Cards | Task modules |
+| :-- | :-- | :-- | :-- | :-- |
+| In-tenant user | Available | Available | Available | Available |
+| Guest, part of the tenant Azure AD | Not available | Not available | Interactions in the meeting chat are allowed. | Interactions in the meeting chat from Adaptive Card are allowed. |
+| Federated users, for more information, see [non-standard users](/microsoftteams/non-standard-users). | Interaction is allowed. Acquire, update, and delete aren't allowed. | Not available | Interactions in the meeting chat are allowed. | Interactions in the meeting chat from Adaptive Card are allowed. |
+| Anonymous user | Not available | Not available | Interactions in the meeting chat are allowed. | Not available |
+
+## See also
+
+* [Designing your Microsoft Teams message extension](../messaging-extensions/design/messaging-extension-design.md)
+* [Designing task modules for your Microsoft Teams app](../task-modules-and-cards/task-modules/design-teams-task-modules.md)
platform Build Tabs For Meeting https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/build-tabs-for-meeting.md
+
+ Title: Build tabs for meeting
+
+description: Learn how to build a tabs for a meeting chat, meeting side panel, and meeting stage in Microsoft Teams meeting.
++
+ms.localizationpriority: high
Last updated : 04/07/2022++
+# Build tabs for meeting
+
+Every team has a different way of communicating and collaborating tasks. To achieve these different tasks, customize Teams with apps for meetings. Enable your apps for Teams meetings and configure the apps to be available in the meeting scope within their app manifest.
+
+## Tabs in Teams meetings
+
+Tabs allow the meeting participants to access services and content in a specific space within a meeting. If you're new to Microsoft Teams tab development, see [Build tabs for Teams](/microsoftteams/platform/tabs/what-are-tabs).
+
+Before creating a meeting tab, it's important to learn about the surfaces that are available to target the meeting chat view, meeting details view, meeting side panel view and meeting stage view.
+
+### Meeting details view
+
+1. In your calendar, select a meeting to which you want to add a tab.
+1. Select the **Details** tab and select :::image type="icon" source="../assets/icons/add-icon.png" Border = "false":::. The app gallery appears.
+
+ :::image type="content" source="~/assets/images/apps-in-meetings/Pre-Meeting-002.png" alt-text="This screenshot shows the pre-meeting app experience in Teams meeting.":::
+
+1. In the app gallery, select the app that you want to add and follow the steps as required. The tab is added to the meeting details page.
+
+# [Desktop](#tab/desktop)
+
+The following image shows a tab added to the meeting details page in the Teams desktop client:
+
+ :::image type="content" source="~/assets/images/apps-in-meetings/PreMeetingTab.png" alt-text="The screenshot shows desktop Teams tabs in the meeting details view in the Teams meeting.":::
+
+# [Mobile](#tab/mobile)
+
+The following image shows a tab added to the meeting details page in the Teams mobile client:
+
+ :::image type="content" source="../assets/images/mobile-tab.png" alt-text="The screenshot shows mobile Teams tabs in the meeting details view in the Teams meeting.":::
+++
+### Meeting chat view
+
+1. From the Teams chat panel, select the meeting chat view.
+
+1. Select :::image type="icon" source="../assets/icons/add-icon.png" Border = "false"::: and the app gallery appears.
+
+1. In the app gallery, select the app that you want to add and follow the steps as required. The tab is added to the meeting chat.
+
+ :::image type="content" source="../assets/images/apps-in-meetings/meeting-chat-view.png" alt-text="The screenshot shows the meeting chat view in the Teams meeting.":::
+
+### Meeting side panel view
+
+1. During a meeting, you can select :::image type="icon" source="../assets/icons/add-icon.png" Border = "false"::: **Apps** from Teams meeting window to add apps to the meeting.
+
+ :::image type="content" source="../assets/images/apps-in-meetings/add-app.png" alt-text="This screenshot shows how to add an app in Teams meeting window.":::
+
+1. In the app gallery, select the app that you want to add and follow the steps as required. The app is added to the meeting side panel.
+
+ :::image type="content" source="../assets/images/side-panel-view.png" alt-text="This screenshot shows side panel view with the list of apps.":::
+
+### Meeting stage view
+
+1. After a tab is added to the meeting side panel, you can now choose to opt into global app sharing.
+
+1. This results in rendering tab on the stage for every participant in the meeting.
+
+ :::image type="content" source="../assets/images/meeting-stage-view.png" alt-text="This screenshot shows meeting stage view of the app you shared to meeting.":::
+
+### Apps in channel meeting
+
+A public scheduled channel meeting has the same list of apps as its parent team. Installing an app to a channel meeting also makes it available in the parent team, and vice versa.
+
+However, the tab instances in a channel meeting are separate from the tabs in the channel itself. For example, suppose a *Development* channel has a *Polly* tab. If you create a *Standup* meeting in that channel, that meeting would not have a *Polly* tab, until you explicitly [add the tab to the meeting](#meeting-details-view).
+
+In public scheduled channel meetings, after a meeting tab is added, you can select the meeting object in the meeting details page to access the tab.
++
+> [!NOTE]
+> On mobile, anonymous users can't access apps in scheduled public channel meetings.
+
+### App manifest settings for Tabs in meeting
+
+Update your [app manifest](/microsoftteams/platform/resources/schema/manifest-schema) with relevant context property to configure the different tab views. The meetings app capabilities are declared in your app manifest using the scopes and context arrays under the configurableTabs section.
+
+#### Scope
+
+The scope defines who can access the apps.
+
+* `groupchat` scope makes your app available in a group scope and enables the app to be added in a call or meeting (scheduled private meeting or instant meetings).
+
+* `team` scope makes your app available in a team scope and enables your app to be added in team or channel or scheduled channel meeting.
+
+#### Context
+
+The `context` property determines if the app is available in specific view after installation and configuration. Following are the values for the `context` property from which you can use all or some of the values:
+
+|Value|Description|
+|||
+| **channelTab** | A tab in the header of a team channel. |
+| **privateChatTab** | A tab in the header of a group chat between a set of users, not in the context of a team or meeting. |
+| **meetingChatTab** | A tab in the header of a group chat between a set of users for a scheduled meeting. You can specify either **meetingChatTab** or **meetingDetailsTab** to ensure the apps work in mobile. |
+| **meetingDetailsTab** | A tab in the header of the meeting details view of the calendar. You can specify either **meetingChatTab** or **meetingDetailsTab** to ensure the apps work in mobile. |
+| **meetingSidePanel** | An in-meeting panel opened through the unified bar (U-bar). |
+| **meetingStage** | An app from the `meetingSidePanel` can be shared to the meeting stage. You can't use this app either on mobile or Teams room clients. |
+
+#### Configure tab app for a meeting
+
+Apps in meetings can use the following contexts: `meetingChatTab`, `meetingDetailsTab`, `meetingSidePanel` and `meetingStage`. After a meeting participant installs an app and configures the tab in meeting, all the targeted other contexts of the app for the given meeting starts to render the tab.
+
+The following code snippet is an example of a configurable tab used in an app for Teams meetings:
+
+```json
+
+"configurableTabs": [
+ {
+ "configurationUrl": "https://contoso.com/teamstab/configure",
+ "canUpdateConfiguration": true,
+ "scopes": [
+ "team",
+ "groupchat"
+ ],
+ "context":[
+ "channelTab",
+ "privateChatTab",
+ "meetingChatTab",
+ "meetingDetailsTab",
+ "meetingSidePanel",
+ "meetingStage"
+ ]
+ }
+ ]
+```
+++
+#### Other examples
+
+Default context for tabs (if not specified) is:ΓÇ»
+
+```json
+"context":[
+ "channelTab",
+ "privateChatTab",
+ "meetingChatTab",
+ "meetingDetailsTab"
+ ]
+```
+
+To prevent an app from showing in non-meeting group chats, you must set the following context:
+
+```json
+"context":[
+ "meetingSidePanel",
+ "meetingChatTab",
+ "meetingDetailsTab"
+ ]
+```
+
+For in-meeting side panel experience only:ΓÇ»
+
+```json
+"context":[
+ "meetingSidePanel"
+ ]
+```
+
+### Advanced Tab SDK APIs
+
+The Microsoft Teams JavaScript client SDK is a rich SDK used to create Tabs using JavaScript. Use the latest TeamsJS (V.2.0 or later) to work in Teams, Office, and Outlook. For more information, see [Teams JavaScript client SDK](/microsoftteams/platform/tabs/how-to/using-teams-client-sdk?tabs=javascript%2Cmanifest-teams-toolkit).
+
+### Frame context
+
+Microsoft Teams JavaScript library exposes the frameContext in which your meeting tab URL is loaded in the getContext API. The possible values of frameContext are content, task, setting, remove, sidePanel, and meetingStage. This allows you to build customized experiences based on where the app renders. For example, showing a specific collaboration focused UI when in the `meetingStage` and a different meeting preparation UI in the chat tab (`content`). For more information, see [getContext API](/microsoftteams/platform/tabs/how-to/access-teams-context?tabs=teamsjs-v2).
+
+## Code sample
+
+|Sample name | Description | C# | Node.js |
+|-|--|--|-|
+| Meeting app | Demonstrates how to use the Meeting Token Generator app to request a token. The token is generated sequentially so that each participant has a fair opportunity to contribute in a meeting. The token is useful in situations like scrum meetings and Q&A sessions. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/nodejs) |
+| Meeting stage sample | Sample app to show a tab in meeting stage for collaboration | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs) |
+| Meeting side panel | Sample app to show how to add agenda in a meeting side panel | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/csharp) |-|
+| In-meeting notification | Demonstrates how to implement in-meeting notification using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/nodejs) |
+| In-meeting document signing | Demonstrates how to implement a document signing Teams app. Includes sharing specific app content to stage, Teams SSO and user specific stage view. | [View](https://github.com/officedev/microsoft-teams-samples/tree/main/samples/meetings-share-to-stage-signing/csharp) | NA |
+
+> [!NOTE]
+>
+> * Meeting apps (side panel and meeting stage) are supported in Teams desktop client.
+> * Meeting apps (side panel and meeting stage) in Teams web client is supported only when the [developer preview is enabled](/microsoftteams/platform/resources/dev-preview/developer-preview-intro#enable-developer-preview).
+
+## Step-by-step guides
+
+* Follow the [step-by-step guide](../sbs-meeting-token-generator.yml) to generate meeting token in your Teams meeting.
+* Follow the [step-by-step guide](../sbs-meetings-sidepanel.yml) to generate meeting side panel in your Teams meeting.
+* Follow the [step-by-step guide](../sbs-meetings-stage-view.yml) to share meeting stage view in your Teams meeting.
+* Follow the [step-by-step guide](../sbs-meeting-content-bubble.yml) to generate in-meeting notification in your Teams meeting.
+
+## See also
+
+* [In-meeting notification design guidelines](design/designing-apps-in-meetings.md#use-an-in-meeting-dialog)
+* [Teams authentication flow for tabs](../tabs/how-to/authentication/auth-flow-tab.md)
+* [Shared meeting stage experience design guidelines](~/apps-in-teams-meetings/design/designing-apps-in-meetings.md)
+* [Add apps to meetings via Microsoft Graph](/graph/api/chat-post-installedapps?view=graph-rest-1.0&tabs=http&preserve-view=true)
platform Designing Apps In Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/design/designing-apps-in-meetings.md
Floating navigation and controls off screen and requiring a scroll to find can b
## Next step > [!div class="nextstepaction"]
-> [Configure your app for meetings](~/apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md)
+> [Configure your app for meetings](~/apps-in-teams-meetings/build-tabs-for-meeting.md)
platform Enable And Configure Your App For Teams Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md
- Title: Enable and configure your apps for Teams meetings-
-description: Learn how to enable and configure your apps for Teams meetings and different meeting scenarios, update app manifest, configure features and more.
-- Previously updated : 04/07/2022--
-# Enable and configure apps for meetings
-
-Every team has a different way of communicating and collaborating tasks. To achieve these different tasks, customize Teams with apps for meetings. Enable your apps for Teams meetings and configure the apps to be available in meeting scope within their app manifest.
-
-## Prerequisites
-
-With apps for Teams meetings, you can expand the capabilities of your apps across the meeting lifecycle. Before you work with apps for Teams meetings, you must fulfill the following prerequisites:
-
-* Know how to develop Teams apps. For more information on how to develop Teams app, see [Teams app development](../overview.md).
-
-* Use your app that supports configurable tabs in the groupchat and/or team scope. For more information, see [scopes](../resources/schem).
-
-* Adhere to general [Teams tab design guidelines](../tabs/design/tabs.md) for pre- and post-meeting scenarios. For experiences during meetings, refer to the [in-meeting tab design guidelines](../apps-in-teams-meetings/design/designing-apps-in-meetings.md#use-an-in-meeting-tab) and [in-meeting dialog design guidelines](../apps-in-teams-meetings/design/designing-apps-in-meetings.md#use-an-in-meeting-dialog).
-
-* For your app to update in real time, it must be up-to-date based on event activities in the meeting. These events can be within the in-meeting dialog and other stages across the meeting lifecycle. For the in-meeting dialog, see `completionBotId` parameter in [in-meeting notification payload](API-references.md#send-an-in-meeting-notification).
-
-## Enable your app for Teams meetings
-
-To enable your app for Teams meetings, update your app manifest and use the context properties to determine where your app must appear.
-
-### Update your app manifest
-
-The meetings app capabilities are declared in your app manifest using the `configurableTabs`, `scopes`, and `context` arrays. The scope defines who can access and the context defines where your app is available.
-
-> [!NOTE]
->
-> * Apps in meetings require `groupchat` or `team` scope. The `team` scope works for tabs in channels or channel meetings.
-> * To support adding tabs in scheduled channel meetings, specify **team** scope in **scopes** section in your app manifest. Without **team** scope the app would not appear in the flyout for channel meetings.
-> * Apps in meetings can use the following contexts: `meetingChatTab`, `meetingDetailsTab`, `meetingSidePanel` and `meetingStage`.
-> * The delegated RSC permissions `MeetingStage.Write.Chat` and `ChannelMeetingStage.Write.Group` are required in the manifest to enable meeting stage sharing.
-
-The following code snippet is an example of a configurable tab used in an app for Teams meetings:
-
-```json
-
-"configurableTabs": [
- {
- "configurationUrl": "https://contoso.com/teamstab/configure",
- "canUpdateConfiguration": true,
- "scopes": [
- "team",
- "groupchat"
- ],
- "context":[
- "channelTab",
- "privateChatTab",
- "meetingChatTab",
- "meetingDetailsTab",
- "meetingSidePanel",
- "meetingStage"
- ]
- }
- ]
-```
-
-### Context property
-
-The `context` property determines what must be shown when a user invokes an app in a meeting depending on where the user invokes the app. The tab `context` and `scopes` properties enable you to determine where your app must appear. The tabs in the `team` or `groupchat` scope can have more than one context.
-
-Support the `groupchat` scope to enable your app in pre-meeting and post-meeting chats. With the pre-meeting app experience, you can find and add meeting apps and do the pre-meeting tasks. With the post-meeting app experience, you can view the results of the meeting, such as poll survey results or fee.
-
- Following are the values for the `context` property from which you can use all or some of the values:
-
-|Value|Description|
-|||
-| **channelTab** | A tab in the header of a team channel. |
-| **privateChatTab** | A tab in the header of a group chat between a set of users, not in the context of a team or meeting. |
-| **meetingChatTab** | A tab in the header of a group chat between a set of users for a scheduled meeting. You can specify either **meetingChatTab** or **meetingDetailsTab** to ensure the apps work in mobile. |
-| **meetingDetailsTab** | A tab in the header of the meeting details view of the calendar. You can specify either **meetingChatTab** or **meetingDetailsTab** to ensure the apps work in mobile. |
-| **meetingSidePanel** | An in-meeting panel opened through the unified bar (U-bar). |
-| **meetingStage** | An app from the `meetingSidePanel` can be shared to the meeting stage. You can't use this app either on mobile or Teams room clients. |
-
-After you enable your app for Teams meetings, you must configure your app before a meeting, during a meeting, and after a meeting.
-
-## Configure your app for meeting scenarios
-
-Teams meetings provide a collaborative experience for your organization. Configure your app for different meeting scenarios and to enhance the meeting experience. Now you can identify what actions can be taken in the following meeting scenarios:
-
-* [Before a meeting](#before-a-meeting)
-* [During a meeting](#during-a-meeting)
-* [After a meeting](#after-a-meeting)
-
-### Before a meeting
-
-Before a meeting, users can add tabs, bots, and message extensions. Users with organizer and presenter roles can add tabs to a meeting.
-
-To add a tab to a meeting:
-
-1. In your calendar, select a meeting to which you want to add a tab.
-1. Select the **Details** tab and select <img src="~/assets/images/apps-in-meetings/plusbutton.png" alt="Plus button" width="30"/>.
-
- <img src="../assets/images/apps-in-meetings/PreMeeting1.png" alt="Pre-meeting experience" width="900"/>
-
-1. In the tab gallery that appears, select the app that you want to add and follow the steps as required. The app is installed as a tab.
-
-To add a message extension to a meeting:
-
-1. Select the ellipses &#x25CF;&#x25CF;&#x25CF; located in the compose message area in the chat.
-1. Select the app that you want to add and follow the steps as required. The app is installed as a message extension.
-
-To add a bot to a meeting:
-
-In a meeting chat, enter the **@** key and select **Get bots**.
-
-> [!NOTE]
->
-> * The in-meeting dialog displays a dialog in a meeting and simultaneously posts an Adaptive Card in the meeting chat that users can access. The Adaptive Card in the meeting chat helps users while attending the meeting or if the Teams app is minimized.
-> * The user identity must be confirmed using [Tabs SSO](../tabs/how-to/authentication/tab-sso-overview.md). After authentication, the app can retrieve the user role using the `GetParticipant` API.
-> * Based on the user role, the app has the capability to provide role specific experiences. For example, a polling app allows only organizers and presenters to create a new poll.
-> * Role assignments can be changed while a meeting is in progress. For more information, see [roles in a Teams meeting](https://support.microsoft.com/office/roles-in-a-teams-meeting-c16fa7d0-1666-4dde-8686-0a0bfe16e019).
-
-### During a meeting
-
-During a meeting, you can use the `meetingSidePanel` or in-meeting notification to build unique experiences for your apps.
-
-#### Meeting SidePanel
-
-The `meetingSidePanel` enables you to customize experiences in a meeting that allow organizers and presenters to have different set of views and actions. In your app manifest, you must add `meetingSidePanel` to the context array. In the meeting and in all scenarios, the app is rendered in an in-meeting tab that is 320 pixels in width. For more information, see [FrameInfo interface](/javascript/api/@microsoft/teams-js/frameinfo) (known as `FrameContext` prior to TeamsJS v.2.0.0).
-
-You can [use the user's context to route requests](../tabs/how-to/access-teams-context.md#user-context). For more information, see [Teams authentication flow for tabs](../tabs/how-to/authentication/auth-flow-tab.md). Authentication flow for tabs is similar to the authentication flow for websites. Tabs can use OAuth 2.0 directly. For more information, see [Microsoft identity platform and OAuth 2.0 authorization code flow](/azure/active-directory/develop/v2-oauth2-auth-code-flow).
-
-Message extension works as expected when a user is in an in-meeting view. The user can post compose message extension cards. AppName in-meeting is a tooltip that states the app name in-meeting U-bar.
-
-> [!NOTE]
-> Use version 1.7.0 or higher of [Teams SDK](/javascript/api/overview/msteams-client?view=msteams-client-js-latest&preserve-view=true), as versions prior to it do not support the side panel.
-
-#### In-meeting notification
-
-The in-meeting notification is used to engage participants during the meeting and collect information or feedback during the meeting. Use an [in-meeting notification payload](API-references.md#send-an-in-meeting-notification) to trigger an in-meeting notification. As part of the notification request payload, include the URL where the content to be shown is hosted.
-
-In-meeting notification must not use task module. Task module isn't invoked in a meeting chat. An external resource URL is used to display in-meeting notification. You can use the `submitTask` method to submit data in a meeting chat.
--
-You can also add the Teams display picture and people card of the user to in-meeting notification based on `onBehalfOf` token with user MRI and display name passed in payload. Following is an example payload:
-
-```json
- {
- "type": "message",
- "text": "John Phillips assigned you a weekly todo",
- "summary": "Don't forget to meet with Marketing next week",
- "channelData": {
- onBehalfOf: [
- {
- itemId: 0,
- mentionType: 'person',
- mri: context.activity.from.id,
- displayname: context.activity.from.name
- }
- ],
- "notification": {
- "alertInMeeting": true,
- "externalResourceUrl": "https://teams.microsoft.com/l/bubble/APP_ID?url=<url>&height=<height>&width=<width>&title=<title>&completionBotId=BOT_APP_ID"
- }
- },
- "replyToId": "1493070356924"
- }
-```
--
-#### Shared meeting stage
-
-Shared meeting stage allows meeting participants to interact with and collaborate on app content in real time. You can share your apps to the collaborative meeting stage in the following ways:
-
-* [Share entire app to stage](#share-entire-app-to-stage) using the share to stage button in the meeting side panel of Teams client or through[[deep links](#generate-a-deep-link-to-share-content-to-stage-in-meetings).
-* [Share specific parts of the app to stage](#share-specific-parts-of-the-app-to-stage) using APIs in the Teams client SDK.
-
-##### Share entire app to stage
-
-Participants can share the entire app to the collaborative meeting stage using the share to stage button from the app side panel.
-
-<img src="../assets/images/apps-in-meetings/share_to_stage_during_meeting.png" alt="Share full app" width = "900"/>
-
-To share the entire app to stage, in the app manifest you must configure `meetingStage` and `meetingSidePanel` as frame contexts. For example:
-
-```json
-"configurableTabs": [
- {
- "configurationUrl": "https://contoso.com/teamstab/configure",
- "canUpdateConfiguration": true,
- "scopes": [
- "groupchat"
- ],
- "context":[
- "meetingSidePanel",
- "meetingStage"
- ]
- }
-]
-```
-
-For more information, see [app manifest](../resources/schem#configurabletabs).
-
-##### Share specific parts of the app to stage
-
-Participants can share specific parts of the app to the collaborative meeting stage by using the share to stage APIs. The APIs are available within the Teams client SDK and are invoked from the app side panel.
-
-<img src="../assets/images/apps-in-meetings/share-specific-content-to-stage.png" alt="Share specific parts of the app" width = "900"/>
-
-To share specific parts of the app to stage, you must invoke the related APIs in the Teams client SDK library. For more information, see [API reference](API-references.md).
-
-> [!NOTE]
->
-> * To share specific parts of the app to stage, use Teams manifest version 1.12 or later.
-> * You can share specific parts of the app to meeting stage only on Teams desktop clients. Mobile users can share specific parts of the app to stage using the [share to stage API](API-references.md#share-app-content-to-stage-api).
-
-### After a meeting
-
-The configurations of after and [before meetings](#before-a-meeting) are the same.
-
-## Generate a deep link to share content to stage in meetings
-
-You can also generate a deep link to [share the app to stage](#share-entire-app-to-stage) and start or join a meeting.
-
-> [!NOTE]
->
-> * Currently, the deep link to share content to stage in meetings is undergoing UX improvements and is available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md).
-> * Deep link to share content to stage in meeting is supported in Teams desktop client only.
-
-When a deep link is selected in an app by a user who is part of an ongoing meeting, then the app is shared to the stage and a permission pop-up window appears. Users can grant access to the participants to collaborate with an app.
--
-When a user isn't in a meeting then the user is redirected to the Teams calendar where they can join a meeting or initiate instant meeting (Meet now).
--
-Once the user initiates an instant meeting (Meet now), they can add participants and interact with the app.
--
-To add a deep link to share content on stage, you need to have an app context. The app context allows the Teams client to fetch the app manifest and check if the sharing on stage is possible. The following is an example of an app context.
-
-`{ "appSharingUrl" : "https://teams.microsoft.com/extensibility-apps/meetingapis/view", "appId": "9ec80a73-1d41-4bcb-8190-4b9eA9e29fbb" , "useMeetNow": false }`
-
-The query parameters for the app context are:
-
-* `appID`: This is the ID that can be obtained from the app manifest.
-* `appSharingUrl`: The URL which needs to be shared on stage should be a valid domain defined in the app manifest. If the URL is not a valid domain, an error dialog will pop-up to provide the user with a description of the error.
-* `useMeetNow`: This includes a boolean parameter that can be either true or false.
- * **True**: When the `UseMeetNow` value is true and if there's no ongoing meeting, a new Meet now meeting will be initiated. When there's an ongoing meeting, this value will be ignored.
-
- * **False**: The default value of `UseMeetNow` is false, which means that when a deep link is shared to stage and there's no ongoing meeting, a calendar pop-up will appear. However, you can share directly during a meeting.
-
-Ensure that all the query parameters are properly URI encoded and the app context has to be encoded twice in the final URL. Following is an example.
-
-```json
-var appContext= JSON.stringify({ "appSharingUrl" : "https://teams.microsoft.com/extensibility-apps/meetingapis/view", "appId": "9cc80a93-1d41-4bcb-8170-4b9ec9e29fbb", "useMeetNow":false })
-var encodedContext = encodeURIComponent(appcontext).replace(/'/g,"%27").replace(/"/g,"%22")
-var encodedAppContext = encodeURIComponent(encodedContext).replace(/'/g,"%27").replace(/"/g,"%22")
-```
-
-A deep link can be launched either from the Teams web or from the Teams desktop client.
-
-* **Teams web**: Use the following format to launch a deep link from the Teams web to share content on stage.
-
- `https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`
-
- Example: `https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`
-
- |Deep link|Format|Example|
- ||||
- |To share the app and open Teams calendar, when UseMeeetNow is **false**, default.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Afalse%257D`|
- |To share the app and initiate instant meeting, when UseMeeetNow is **true**.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`|
-
-* **Team desktop client**: Use the following format to launch a deep link from the Teams desktop client to share content on stage.
-
- `msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`
-
- Example: `msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`
-
- |Deep link|Format|Example|
- ||||
- |To share the app and open Teams calendar, when UseMeeetNow is **false**, default.|`msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`|`msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Afalse%257D`|
- |To share the app and initiate instant meeting, when UseMeeetNow is **true**.|`msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`|`msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`|
-
-The query parameters are:
-
-* `deepLinkId`: Any identifier used for telemetry correlation.
-* `fqdn`: `fqdn` is an optional parameter, which can be used to switch to an appropriate environment of a meeting to share an app on stage. It supports scenarios where a specific app share happens in a particular environment. The default value of `fqdn` is enterprise URL and possible values are `Teams.live.com` for Teams for Life, `teams.microsoft.com`, or `teams.microsoft.us`.
-
-To share the entire app to stage, in the app manifest, you must configure `meetingStage` and `meetingSidePanel` as frame contexts, see [app manifest](../resources/schem). Otherwise, meeting attendees may not be able to see the content on stage.
-
-> [!NOTE]
-> For your app to pass validation, when you create a deep link from your website, web app, or Adaptive Card, use **Share in meeting** as the string or copy.
-
-## Code sample
-
-|Sample name | Description | C# | Node.js |
-|-|--|--|-|
-| Meeting app | Demonstrates how to use the Meeting Token Generator app to request a token. The token is generated sequentially so that each participant has a fair opportunity to contribute in a meeting. The token is useful in situations like scrum meetings and Q&A sessions. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/nodejs) |
-|Meeting stage sample | Sample app to show a tab in meeting stage for collaboration | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs) |
-|Meeting side panel | Sample app to show how to add agenda in a meeting side panel | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/csharp) |-|
-
-## Step-by-step guides
-
-* Follow the [step-by-step guide](../sbs-meeting-token-generator.yml) to generate meeting token in your Teams meeting.
-* Follow the [step-by-step guide](../sbs-meetings-sidepanel.yml) to generate meeting sidepanel in your Teams meeting.
-* Follow the [step-by-step guide](../sbs-meetings-stage-view.yml) to share meeting stage view in your Teams meeting.
-* Follow the [step-by-step guide](../sbs-meeting-content-bubble.yml) to generate meeting content bubble in your Teams meeting.
-
-## Next step
-
-> [!div class="nextstepaction"]
-> [Meeting apps API references](API-references.md)
-
-## See also
-
-* [In-meeting dialog design guidelines](design/designing-apps-in-meetings.md#use-an-in-meeting-dialog)
-* [Teams authentication flow for tabs](../tabs/how-to/authentication/auth-flow-tab.md)
-* [Shared meeting stage experience design guidelines](~/apps-in-teams-meetings/design/designing-apps-in-meetings.md)
-* [Add apps to meetings via Microsoft Graph](/graph/api/chat-post-installedapps?view=graph-rest-1.0&tabs=http&preserve-view=true)
platform In Meeting Notification For Meeting https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/in-meeting-notification-for-meeting.md
+
+ Title: Build in-meeting notification for Teams meeting
+
+description: In this article, learn how to build in-meeting notification for Microsoft Teams meeting and its code sample.
++
+ms.localizationpriority: medium
++
+# Build in-meeting notification for Teams meeting
+
+The in-meeting notification is used to engage participants and collect information or feedback during the meeting. Use an [in-meeting notification payload](meeting-apps-apis.md#send-an-in-meeting-notification) to trigger an in-meeting notification. As part of the notification payload request, include the URL where the content to be shown is hosted.
+
+An external resource URL is used to display in-meeting notification. You can use the `submitTask` method to submit data in a meeting chat.
++
+You can also add the Teams display picture and people card of the user to in-meeting notification based on `onBehalfOf` token with user MRI and display name passed in payload. Following is an example payload:
+
+```json
+ {
+ "type": "message",
+ "text": "John Phillips assigned you a weekly todo",
+ "summary": "Don't forget to meet with Marketing next week",
+ "channelData": {
+ onBehalfOf: [
+ {
+ itemId: 0,
+ mentionType: 'person',
+ mri: context.activity.from.id,
+ displayname: context.activity.from.name
+ }
+ ],
+ "notification": {
+ "alertInMeeting": true,
+ "externalResourceUrl": "https://teams.microsoft.com/l/bubble/APP_ID?url=<url>&height=<height>&width=<width>&title=<title>&completionBotId=BOT_APP_ID"
+ }
+ },
+ "replyToId": "1493070356924"
+ }
+```
++
+## Code sample
+
+Sample name | Description | C# | Node.js |
+|-|--|--|-|
+| In-meeting notification | Demonstrates how to implement in-meeting notification using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/nodejs) |
+
+## Step-by-step guides
+
+Follow the [step-by-step guide](../sbs-meeting-content-bubble.yml) to generate in-meeting notification in your Teams meeting.
+
+## See also
+
+* [Build tabs for meeting](~/apps-in-teams-meetings/build-tabs-for-meeting.md)
+* [Build apps for Teams meeting stage](build-apps-for-teams-meeting-stage.md)
+* [Build extensible conversation for meeting chat](build-extensible-conversation-for-meeting-chat.md)
+* [Build apps for anonymous users](build-apps-for-anonymous-user.md)
+* [Advanced meeting APIs](meeting-apps-apis.md)
platform Meeting App Extensibility https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/meeting-app-extensibility.md
- Title: Unified meetings apps-
-description: Learn about Meeting lifecycle, building user's meeting experience throughout meeting lifecycle in desktop and mobile environment, participant roles and user types. In addition, learn about integrating bots and message extension in meeting lifecycle.
-- Previously updated : 04/07/2022--
-# Unified meetings apps
-
-Teams unified meetings apps are based on the following concepts:
-
-* Meeting lifecycle has different stages: pre-meeting, in-meeting, and post-meeting.
-* There are three distinct participant roles in a meeting: organizer, presenter, and attendee. For more information, see [roles in a Teams meeting](https://support.microsoft.com/office/roles-in-a-teams-meeting-c16fa7d0-1666-4dde-8686-0a0bfe16e019).
-* There are various [user types](/microsoftteams/non-standard-users#:~:text=An%20anonymous%20user%20is%20a,their%20Microsoft%20or%20organization's%20account.) in a meeting: in-tenant, [guest](/microsoftteams/guest-access), [federated](/microsoftteams/manage-external-access), and anonymous users.
-
-This article covers the information about meeting lifecycle and how to integrate tabs, bots, and message extensions. It identifies different participant roles and user types.
-
-## Meeting lifecycle
-
-A meeting lifecycle consists of pre-meeting, in-meeting, and post-meeting app experience. You can integrate tabs, bots, and message extensions in each stage of the meeting lifecycle.
-
-> [!NOTE]
->
-> * Apps for scheduled public channel meetings are currently available only in [public developer preview](../resources/dev-preview/developer-preview-intro.md).
->
-> * Meeting extensions such as bots, cards, message extensions, and message actions are supported in the web client. However, hosted experiences such as tabs, content bubbles, and share to stage are not currently fully supported.
-
-### Integrate tabs into the meeting lifecycle
-
-Tabs allow the team members to access services and content in a specific space within a meeting. The team works directly with tabs and has conversations about the tools and data available within tabs. In Teams meeting, you can add a tab by selecting <img src="~/assets/images/apps-in-meetings/plusbutton.png" alt="Plus button" width="30"/>, and select the app that you want to install.
-
-> [!IMPORTANT]
-> We recommend you to follow the Teams [single sign-on (SSO) authentication flow for tabs](../tabs/how-to/authentication/tab-sso-overview.md), if you have integrated a tab app in your meeting.
-
-> [!NOTE]
-> Add app option for Teams meeting extension tab app is not supported in Teams web client.
-
-#### Pre-meeting app experience
-
-With the pre-meeting app experience, you can find and add meeting apps. You can also do pre-meeting tasks, such as developing a poll to survey the meeting participants.
-
-#### To add tabs to an existing meeting
-
-1. In your calendar, select a meeting to which you want to add a tab.
-1. Select the **Details** tab and select <img src="~/assets/images/apps-in-meetings/plusbutton.png" alt="Plus button" width="30"/>. The tab gallery appears.
-
- :::image type="content" source="~/assets/images/apps-in-meetings/PreMeeting.png" alt-text="Pre-meeting app experience.":::
-
-1. In the tab gallery, select the app that you want to add and follow the steps as required. The app is installed as a tab.
-
- > [!NOTE]
- > You can also add a tab to an existing meeting using the meeting **Chat** tab.
-
-# [Desktop](#tab/desktop)
--
-# [Mobile](#tab/mobile)
-
-After adding the tabs to an existing meeting on mobile, you can see the same apps in pre-meeting experience under **More** section of the meeting details.
----
-#### In-meeting app experience
-
-With the in-meeting app experience, you can engage participants during the meeting by using apps and the in-meeting dialog box. Meeting apps are hosted on the toolbar of the meeting window as an in-meeting tab. Use the in-meeting dialog box to showcase actionable content for meeting participants. For more information, see [create apps for Teams meetings](create-apps-for-teams-meetings.md).
-
-For mobile, meeting apps are available from **Apps** > ellipses &#x25CF;&#x25CF;&#x25CF; in the meeting. Select **Apps** to view all the apps available in the meeting.
-
-For desktop, you can add apps during a meeting using **Add an app** :::image type="icon" source="../assets/icons/add-icon.png" border="false"::: option from the in-meeting window.
-
-To use tabs during a meeting:
-
-1. Go to Teams.
-1. In your calendar, select a meeting in which you want to use a tab.
-1. After entering the meeting, from the toolbar of the chat window, select the required app.
- An app is visible in a Teams meeting in the side panel or the in-meeting dialog box.
-1. In the in-meeting dialog box, enter your response as feedback.
-
-# [Desktop](#tab/desktop)
--
-# [Mobile](#tab/mobile)
-
-After entering the meeting and adding the app from desktop or web, the app is visible in mobile Teams meeting under the **Apps** section. Select **Apps** to show the list of apps. User can launch any of the apps as an in-meeting side panel of the app.
-
-The in-meeting dialog box is displayed where you can enter your response as feedback.
--
-> [!NOTE]
-> You need not change the app manifest for the apps to work on mobile.
---
-> [!NOTE]
->
-> * Apps can leverage the Teams Client SDK to access the `meetingId`, `userMri`, and `frameContext` to render the experience appropriately.
-> * If the in-meeting dialog box is rendered successfully, it sends a notification that the results are successfully downloaded.
-> * Your app manifest specifies the places in which you want the apps to appear. This can be done by specifying context field in manifest. It is also the part of a share meeting stage experience, subject to specified [design guidelines](~\apps-in-teams-meetings\design\designing-apps-in-meetings.md).
-
-The following image illustrates the in-meeting side panel:
-
-# [Desktop](#tab/desktop)
--
-# [Mobile](#tab/mobile)
----
-The following table describes the behavior of app when it is validated and not validated:
-
-|App capability | App is validated | App isn't validated |
-||||
-| Meeting extensibility | The app will appear in meetings. | The app won't appear in meetings for the mobile clients. |
-
-For more information, see [store validation guidelines](../concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md).
-
-#### Post-meeting app experience
-
-With post-meeting app experience, you can view the results of the meeting, such as poll survey results or feedback. Select <img src="~/assets/images/apps-in-meetings/plusbutton.png" alt="Plus button" width="30"/> to add a tab, get meeting notes, and see the results on which organizers and attendees must take action.
-
-The following image displays the **Contoso** tab with results of poll and feedback received from meeting attendees:
-
-# [Desktop](#tab/desktop)
--
-# [Mobile](#tab/mobile)
----
-#### Apps in channel meeting
-
-A public scheduled channel meeting has the same list of apps as its parent team. Installing an app to a channel meeting also makes it available in the parent team, and vice versa.
-
-However, the tab instances in a channel meeting are separate from the tabs in the channel itself. For example, suppose a "Development" channel has a "Polly" tab. If you create a "Standup" meeting in that channel, that meeting would not have a "Polly" tab, until you explicitly [add the tab to the meeting](#to-add-tabs-to-an-existing-meeting).
-
-In public scheduled channel meetings, after a meeting tab is added it can be accessed from the meeting details page by selecting on the meeting object. See the following example:
--
-### Integrate bots into the meeting lifecycle
-
-Bots that are enabled in `groupchat` scope start functioning in meetings. To implement bots, start with [build a bot](../build-your-first-app/build-bot.md) and then continue with [create apps for Teams meetings](../apps-in-teams-meetings/API-references.md#meeting-apps-api-references).
-
-### Integrate message extensions into the meeting lifecycle
-
-To implement message extension, start with [build a message extension](../messaging-extensions/how-to/create-messaging-extension.md), and then continue with [create apps for Teams meetings](../apps-in-teams-meetings/API-references.md#meeting-apps-api-references).
-
-The Teams unified meetings apps allow you to design your app based on participant roles in a meeting.
-
-## Participant roles in a meeting
--
-The default participant settings are determined by an organization's IT administrator. The following are the participant roles in a meeting:
-
-* **Organizer**: Organizer schedules a meeting, sets the meeting options, assigns meeting roles, and starts the meeting. Only users with Microsoft 365 account and Teams license can be organizers, and control attendee permissions. A meeting organizer can change the settings for a specific meeting. Organizers can make these changes on the **Meeting options** web page.
-* **Presenter**: Presenters have same capabilities of organizers with exclusions. A presenter can't remove an organizer from the session or modify meeting options for the session. By default, participants joining a meeting have the presenter role.
-* **Attendee**: An attendee is invited to attend a meeting but can't act as a presenter. Attendees can interact with other meeting members but can't manage any of the meeting settings or share the content.
-
-> [!NOTE]
-> Only an organizer or presenter can add, remove, or uninstall apps.
-
-For more information, see [roles in a Teams meeting](https://support.microsoft.com/office/roles-in-a-teams-meeting-c16fa7d0-1666-4dde-8686-0a0bfe16e019).
-
-After you design your app based on participant roles in a meeting, you can identify each user type for meetings and select what they can access.ΓÇï
-
-## User types in a meeting
-
-User types, such as in-tenant, guest, federated or external user in a meeting can do one of the [participant roles in a meeting](#participant-roles-in-a-meeting).
-
-> [!NOTE]
-> The user type is not included in the **getParticipantRole** API.
-
-User types, such as, organizer, presenter, or attendee in a meeting can be [a participant in a meeting](#participant-roles-in-a-meeting).
-
-The following list details the various user types along with their accessibility and performance:
-
-* **In-tenant**: In-tenant users belong to the organization and have credentials in Azure Active Directory (AAD) for the tenant. They're full-time, onsite, or remote employees. An in-tenant user can be an organizer, presenter, or attendee.
-* **Guest**: A guest is a participant from another organization invited to access Teams or other resources in the organization's tenant. Guests are added to the organizationΓÇÖs Azure AD and have same Teams capabilities as a native team member. They have access to team chats, meetings, and files. A guest can be an organizer, presenter, or attendee. For more information, see [guest access in Teams](/microsoftteams/guest-access).
-* **Federated or external**: A federated user is an external Teams user in another organization who has been invited to join a meeting. Federated users have valid credentials with federated partners and are authorized by Teams. They don't have access to your teams or other shared resources from your organization. Guest access is a better option for external users to have access to teams and channels. For more information, see [manage external access in Teams](/microsoftteams/manage-external-access).
-
- > [!NOTE]
- > Your Teams users can add apps when they host meetings or chats with other organizations. The users can use apps shared by external users when your users join meetings or chats hosted by other organizations. The data policies of the hosting user's organization, as well as the data sharing practices of the third-party apps shared by that user's organization, will be in effect.
-
- > [!IMPORTANT]
- > Currently, third-party apps are available in Government Community Cloud (GCC) but are not available for GCC-High and Department of Defense (DOD). Third-party apps are turned off by default for GCC. To turn on third-party apps for GCC, see [manage app permission policies](/microsoftteams/teams-app-permission-policies) and [manage apps](/microsoftteams/manage-apps).
-
-* **Anonymous**: Anonymous users don't have an Azure AD identity and aren't federated with a tenant. The anonymous participants are like external users, but their identity isn't shown in the meeting. Anonymous users can't access apps in a meeting window. An anonymous user can't be an organizer but can be a presenter or attendee.
-
- > [!NOTE]
- > Anonymous users inherit the global default user-level app permission policy. For more information, see [manage Apps](/microsoftteams/non-standard-users#anonymous-user-in-meetings-access).
-
-The following table provides the user types and lists the features that each user can access in meetings:
-
-| User type | Tabs | Bots | Message extensions | Adaptive Cards | Task modules | In-meeting dialog | Meeting stage |
-| :-- | :-- | :-- | :-- | :-- | :-- | :-- | :-- |
-| Anonymous user | Not available | Not available | Not available | Interactions in the meeting chat are allowed. | Not available | Not available | Not available |
-| Guest, part of the tenant Azure AD | Interaction is allowed. Create, update, and delete aren't allowed. | Not available | Not available | Interactions in the meeting chat are allowed. | Interactions in the meeting chat from Adaptive Card are allowed. | Available | Can start, view, and interact with app on the meeting stage only on Teams desktop client and Teams mobile. |
-| Federated users, for more information, see [non-standard users](/microsoftteams/non-standard-users). | Interaction is allowed in scheduled meetings. Create, update, and delete aren't allowed. | Interaction is allowed. Acquire, update, and delete aren't allowed. | Not available | Interactions in the meeting chat are allowed. | Interactions in the meeting chat from Adaptive Card are allowed. | Not available | Can start, view, and interact with app on the meeting stage only on Teams desktop client and Teams mobile. |
-
-> [!NOTE]
->
-> The behavior of the various user types for apps in calls is identical to their behavior in scheduled meetings with the exception of the following:
->
-> * Federated users can't interact with tab apps in calls.
-> * If federated users are added to an existing call with in-tenant or guest users, then all participants lose the ability to add, update, or remove apps. However, only the existing in-tenant or guest users would be able to still interact with the apps that were added before inviting federated users to the call.
-> * On mobile, anonymous users will not be able to access apps in scheduled public channel meetings.
-
-## Next step
-
-> [!div class="nextstepaction"]
-> [Prerequisites and API references for apps in Teams meetings](create-apps-for-teams-meetings.md)
-
-## See also
-
-* [Tab](../tabs/what-are-tabs.md#understand-how-tabs-work)
-* [Bot](../bots/what-are-bots.md)
-* [Message extension](../messaging-extensions/what-are-messaging-extensions.md)
-* [Design your app](../apps-in-teams-meetings/design/designing-apps-in-meetings.md)
-* [Microsoft Teams meeting attendance report](/microsoftteams/teams-analytics-and-reports/meeting-attendance-report)
-* [Set up the meeting recording option for OneDrive for Business and SharePoint](/MicrosoftTeams/tmr-meeting-recording-change#set-up-the-meeting-recording-option-for-onedrive-for-business-and-sharepoint)
platform Meeting Apps Apis https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/meeting-apps-apis.md
+
+ Title: Meeting apps APIs
+
+description: In this article, learn meeting apps API references that are available for Teams client and Bot Framework SDK's with examples, code samples, and response codes.
++
+ms.localizationpriority: medium
Last updated : 04/07/2022++
+# Meeting apps APIs
+
+The meeting extensibility provides APIs to enhance meeting experience. You can perform the following with help of the listed APIs:
+
+* Build apps or integrate existing apps within meeting lifecycle.
+* Use APIs to make your app aware of meeting.
+* Select required APIs to improve the meeting experience.
+
+> [!NOTE]
+> Use Teams [JavaScript SDK](/javascript/api/overview/msteams-client?view=msteams-client-js-latest&preserve-view=true) (*Version*: 1.10 and later) for SSO to work in meeting side panel.
+
+The following table provides a list of APIs available across the Microsoft Teams JavaScript library and Microsoft Bot Framework SDKs:
+
+|Method| Description| Source|
+|||-|
+|[**Get user context**](#get-user-context-api)| Get contextual information to display relevant content in a Microsoft Teams tab.| [Microsoft Teams JavaScript library SDK](/microsoftteams/platform/tabs/how-to/access-teams-context#get-context-by-using-the-microsoft-teams-javascript-library) |
+|[**Get participant**](#get-participant-api)| Fetch participant information by meeting ID and participant ID. | [Microsoft Bot Framework SDK](/dotnet/api/microsoft.bot.builder.teams.teamsinfo.getmeetingparticipantasync?view=botbuilder-dotnet-stable&preserve-view=true)
+|[**Send in-meeting notification**](#send-an-in-meeting-notification)| Provide meeting signals using the existing conversation notification API for user-bot chat and allows to notify user action that shows an in-meeting notification. | [Microsoft Bot Framework SDK](/dotnet/api/microsoft.bot.builder.teams.teamsactivityextensions.teamsnotifyuser?view=botbuilder-dotnet-stable&preserve-view=true) |
+|[**Get meeting details**](#get-meeting-details-api)| Get a meeting's static metadata. | [Microsoft Bot Framework SDK](/dotnet/api/microsoft.bot.builder.teams.teamsinfo.getmeetinginfoasync?view=botbuilder-dotnet-stable&preserve-view=true) |
+|[**Send real-time captions**](#send-real-time-captions-api)| Send real-time captions to an ongoing meeting. | [Microsoft Teams JavaScript library SDK](/azure/cognitive-services/speech-service/speech-sdk?tabs=nodejs%2Cubuntu%2Cios-xcode%2Cmac-xcode%2Candroid-studio#get-the-speech-sdk&preserve-view=true) |
+|[**Share app content to stage**](build-apps-for-teams-meeting-stage.md#share-app-content-to-stage-api)| Share specific parts of the app to meeting stage from the app side panel in a meeting. | [Microsoft Teams JavaScript library SDK](/javascript/api/@microsoft/teams-js/meeting) |
+|[**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.| [Microsoft Bot Framework SDK](/dotnet/api/microsoft.bot.builder.teams.teamsactivityhandler.onteamsmeetingstartasync?view=botbuilder-dotnet-stable&preserve-view=true) |
+| [**Get incoming audio state**](#get-incoming-audio-state) | Allows an app to get the incoming audio state setting for the meeting user.| [Microsoft Teams JavaScript library 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 state setting for the meeting user from mute to unmute or vice-versa.| [Microsoft Teams JavaScript library SDK](/javascript/api/@microsoft/teams-js/microsoftteams.meeting?view=msteams-client-js-latest&preserve-view=true) |
+
+## Get user context API
+
+To identify and retrieve contextual information for your tab content, see [get context for your Teams tab](../tabs/how-to/access-teams-context.md#get-context-by-using-the-microsoft-teams-javascript-library). `meetingId` is used by a tab running in the meeting context and is added for the response payload.
+
+## Get participant API
+
+The `GetParticipant` API must have a bot registration and ID to generate auth tokens. For more information, see [bot registration and ID](../build-your-first-app/build-bot.md).
+
+> [!NOTE]
+>
+> * The user type is not included in the **getParticipantRole** API.
+> * Do not cache participant roles since the meeting organizer can change the roles any time.
+> * Currently, the `GetParticipant` API is only supported for distributions lists or rosters with less than 350 participants.
+
+### Query parameters
+
+> [!TIP]
+> Get participant IDs and tenant IDs from the [tab SSO authentication](../tabs/how-to/authentication/tab-sso-overview.md).
+
+The `Meeting` API must have `meetingId`, `participantId`, and `tenantId` as URL parameters. The parameters are available as part of the Teams Client SDK and bot activity.
+
+The following table includes the query parameters:
+
+|Value|Type|Required|Description|
+|||-||
+|**meetingId**| String | Yes | The meeting identifier is available through Bot Invoke and Teams Client SDK.|
+|**participantId**| String | Yes | The participant ID is the user ID. It's available in Tab SSO, Bot Invoke, and Teams Client SDK. It's recommended to get a participant ID from the Tab SSO. |
+|**tenantId**| String | Yes | The tenant ID is required for the tenant users. It's available in Tab SSO, Bot Invoke, and Teams Client SDK. It's recommended to get a tenant ID from the Tab SSO. |
+
+### Example
+
+# [C#](#tab/dotnet)
+
+```csharp
+protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
+{
+ TeamsMeetingParticipant participant = await TeamsInfo.GetMeetingParticipantAsync(turnContext, "yourMeetingId", "yourParticipantId", "yourParticipantTenantId").ConfigureAwait(false);
+ TeamsChannelAccount member = participant.User;
+ MeetingParticipantInfo meetingInfo = participant.Meeting;
+ ConversationAccount conversation = participant.Conversation;
+
+ await turnContext.SendActivityAsync(MessageFactory.Text($"The participant role is: {meetingInfo.Role}"), cancellationToken);
+}
+```
+
+# [JavaScript](#tab/javascript)
+
+```typescript
+export class MyBot extends TeamsActivityHandler {
+ constructor() {
+ super();
+ this.onMessage(async (context, next) => {
+ TeamsMeetingParticipant participant = getMeetingParticipant(turnContext, "yourMeetingId", "yourParticipantId", "yourTenantId");
+ let member = participant.user;
+ let meetingInfo = participant.meeting;
+ let conversation = participant.conversation;
+
+ await context.sendActivity(`The participant role is: '${meetingInfo.role}'`);
+ await next();
+ });
+ }
+}
+```
+
+# [JSON](#tab/json)
+
+```http
+GET /v1/meetings/{meetingId}/participants/{participantId}?tenantId={tenantId}
+```
+
+```json
+{
+ "user":{
+ "id":"29:1JKiJGPAX9TTxtGxhVo0wLx_zwzo-gG8Z-X03306vBwi9p-xMTEbDXsT6KH7-0kkTS8cD-2zkrsoV6f5WJ6_aYw",
+ "aadObjectId":"e236c4bf-88b1-4f3a-b1d7-8891dfc332b5",
+ "name":"Bob Young",
+ "givenName":"Bob",
+ "surname":"Young",
+ "email":"Bob.young@microsoft.com",
+ "userPrincipalName":"Bob.young@microsoft.com",
+ "tenantId":"2fe477ab-0efc-4dfd-bde2-484374e2c373",
+ "userRole":"user"
+ },
+ "meeting":{
+ "role ":"Presenter",
+ "inMeeting":true
+ },
+ "conversation":{
+ "id":"<conversation id>",
+ "conversationType": "groupChat",
+ "isGroup":true
+ }
+}
+```
+++
+| Property name | Description |
+|||
+| **user.id** | ID of the user. |
+| **user.aadObjectId** | Azure Active Directory object ID of the user. |
+| **user.name** | Name of the user. |
+| **user.givenName** | First Name of the user.|
+| **user.surname** | Last Name of the user. |
+| **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. 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. |
+
+### Response codes
+
+The following table provides the response codes:
+
+|Response code|Description|
+|||
+| **403** | Get participant information isn't shared with the app. If the app isn't installed in the meeting, it triggers the error response 403. If the tenant admin disables or blocks the app during live site migration, it triggers the error response 403. |
+| **200** | The participant information is successfully retrieved.|
+| **401** | The app responds with an invalid token.|
+| **404** | The meeting has either expired or participants aren't available.|
+
+## Send an in-meeting notification
+
+All users in a meeting receive the notifications sent through in-meeting notification payload. In-meeting notification payload triggers an in-meeting notification and enables you to provide meeting signals that are delivered using the existing conversation notification API for user-bot chat. You can send an in-meeting notification based on user action. The payload is available through Bot Services.
+
+> [!NOTE]
+>
+> * When an in-meeting notification is invoked, the content is presented as a chat message.
+> * Currently, sending targeted notifications and support for webapp are not supported.
+> * You must invoke the [submitTask()](../task-modules-and-cards/task-modules/task-modules-bots.md#submit-the-result-of-a-task-module) function to dismiss automatically after a user takes an action in the web view. This is a requirement for app submission. For more information, see [Teams SDK task module](/javascript/api/@microsoft/teams-js/microsoftteams.tasks?view=msteams-client-js-latest#submittask-stringobject--stringstring&preserve-view=true).
+> * If you want your app to support anonymous users, initial invoke request payload must rely on `from.id` request metadata in `from` object, not `from.aadObjectId` request metadata. `from.id` is the user ID and `from.aadObjectId` is the Microsoft Azure Active Directory (Azure AD) ID of the user. For more information, see [using task modules in tabs](../task-modules-and-cards/task-modules/task-modules-tabs.md) and [create and send the task module](../messaging-extensions/how-to/action-commands/create-task-module.md?tabs=dotnet#the-initial-invoke-request).
+
+### Query parameter
+
+The following table includes the query parameter:
+
+|Value|Type|Required|Description|
+|||-||
+|**conversationId**| String | Yes | The conversation identifier is available as part of Bot Invoke. |
+
+### Examples
+
+The `Bot ID` is declared in the manifest and the bot receives a result object.
+
+> [!NOTE]
+>
+> * The `completionBotId` parameter of the `externalResourceUrl` is optional in the requested payload example.
+> * The `externalResourceUrl` width and height parameters must be in pixels. For more information, see [design guidelines](design/designing-apps-in-meetings.md).
+> * The URL is the page, which loads as `<iframe>` in the in-meeting notification. The domain must be in the apps' `validDomains` array in your app manifest.
+
+# [C#](#tab/dotnet)
+
+```csharp
+Activity activity = MessageFactory.Text("This is a meeting signal test");
+activity.TeamsNotifyUser(true, "https://teams.microsoft.com/l/bubble/APP_ID?url=<url>&height=<height>&width=<width>&title=<title>&completionBotId=BOT_APP_ID");
+await turnContext.SendActivityAsync(activity).ConfigureAwait(false);
+```
+
+# [JavaScript](#tab/javascript)
+
+```javascript
+const replyActivity = MessageFactory.text('Hi'); // this could be an adaptive card instead
+replyActivity.channelData = {
+ notification: {
+ alertInMeeting: true,
+ externalResourceUrl: 'https://teams.microsoft.com/l/bubble/APP_ID?url=<url>&height=<height>&width=<width>&title=<title>&completionBotId=BOT_APP_IDΓÇÖ
+ }
+};
+await context.sendActivity(replyActivity);
+```
+
+# [JSON](#tab/json)
+
+```http
+POST /v3/conversations/{conversationId}/activities
+```
+
+```json
+
+{
+ "type": "message",
+ "text": "John Phillips assigned you a weekly todo",
+ "summary": "Don't forget to meet with Marketing next week",
+ "channelData": {
+ "notification": {
+ "alertInMeeting": true,
+ "externalResourceUrl": "https://teams.microsoft.com/l/bubble/APP_ID?url=<url>&height=<height>&width=<width>&title=<title>&<completionBotId>=<BOT_APP_ID>"
+ }
+ },
+ "replyToId": "1493070356924"
+}
+```
+++
+| Property name | Description |
+|||
+| **type** | Type of activity. |
+| **text** | The text content of the message. |
+| **summary** | The summary text of the message. |
+| **channelData.notification.alertInMeeting** | Boolean indicating if a notification is to be shown to the user while in a meeting. |
+| **channelData.notification.externalResourceUrl** | The value of the notification's external resource URL.|
+| **replyToId** | The ID of the parent or root message of the thread. |
+| **APP_ID** | App Id declared in manifest. |
+| **completionBotId** | Bot app Id |
+
+### Response codes
+
+The following table includes the response codes:
+
+|Response code|Description|
+|||
+| **201** | The activity with signal is successfully sent. |
+| **401** | The app responds with an invalid token. |
+| **403** | The app is unable to send the signal. 403 response code can occur because of various reasons, such as the tenant admin disables and blocks the app during live site migration. In this case, the payload contains a detailed error message. |
+| **404** | The meeting chat doesn't exist. |
+
+## Get meeting details API
+
+The Meeting Details API enables your app to get a meeting's static metadata. The metadata provides data points that don't change dynamically. The API is available through Bot Services. Currently, both private scheduled or recurring meetings and channel scheduled or recurring meetings support API with different RSC permissions respectively.
+
+The `Meeting Details` API must have a bot registration and bot ID. It requires Bot SDK to get `TurnContext`. To use the Meeting Details API, you must obtain different RSC permission based on the scope of any meeting, such as private meeting or channel meeting.
+
+### Prerequisite
+
+To use the Meeting Details API, you must obtain different RSC permission based on the scope of any meeting, such as private meeting or channel meeting.
+
+<br>
+
+<details>
+
+<summary><b>For app manifest version 1.12 and later</b></summary>
+
+Use the following example to configure your app manifest's `webApplicationInfo` and `authorization` properties for any private meeting:
+
+```json
+"webApplicationInfo": {
+ "id": "<bot id>",
+ "resource": "https://RscPermission",
+},
+"authorization": {
+ "permissions": {
+ "resourceSpecific": [
+ {
+ "name": "OnlineMeeting.ReadBasic.Chat",
+ "type": "Application"
+ }
+ ]
+ }
+}
+ ```
+
+Use the following example to configure your app manifest's `webApplicationInfo` and `authorization` properties for any channel meeting:
+
+```json
+"webApplicationInfo": {
+ "id": "<bot id>",
+ "resource": "https://RscPermission",
+},
+"authorization": {
+ "permissions": {
+ "resourceSpecific": [
+ {
+ "name": "ChannelMeeting.ReadBasic.Group",
+ "type": "Application"
+ }
+ ]
+ }
+}
+ ```
+
+<br>
+
+</details>
+
+<br>
+
+<details>
+
+<summary><b>For app manifest version 1.11 and earlier</b></summary>
+
+Use the following example to configure your app manifest's `webApplicationInfo` property for any private meeting:
+
+```json
+"webApplicationInfo": {
+ "id": "<bot id>",
+ "resource": "https://RscPermission",
+ "applicationPermissions": [
+ "OnlineMeeting.ReadBasic.Chat"
+ ]
+}
+ ```
+
+Use the following example to configure your app manifest's `webApplicationInfo` property for any channel meeting:
+
+```json
+"webApplicationInfo": {
+ "id": "<bot id>",
+ "resource": "https://RscPermission",
+ "applicationPermissions": [
+ "ChannelMeeting.ReadBasic.Group"
+ ]
+}
+ ```
+
+<br>
+
+</details>
+
+> [!NOTE]
+>
+> * The bot can receive meeting start or end events automatically from all the meetings created in all the channels by adding `ChannelMeeting.ReadBasic.Group` to manifest for RSC permission.
+> * For a one-on-one call `organizer` is the initiator of the chat and for group calls `organizer` is the call initiator. For public channel meetings `organizer` is the person who created the channel post.
+
+### Query parameter
+
+The following table lists the query parameter:
+
+|Value|Type|Required|Description|
+|||-||
+|**meetingId**| String | Yes | The meeting identifier is available through Bot Invoke and Teams Client SDK. |
+
+### Example
+
+# [C#](#tab/dotnet)
+
+```csharp
+MeetingInfo result = await TeamsInfo.GetMeetingInfoAsync(turnContext);
+await turnContext.SendActivityAsync(JsonConvert.SerializeObject(result));
+```
+
+# [JavaScript](#tab/javascript)
+
+```javascript
+
+Not available
+
+```
+
+# [JSON](#tab/json)
+
+```http
+GET /v1/meetings/{meetingId}
+```
+
+The JSON response body for Meeting Details API is as follows:
+
+* **Scheduled meetings:**
+
+ ```json
+
+ {
+ "details": {
+ "id": "<meeting ID>",
+ "msGraphResourceId": "MSowYmQ0M2I4OS1lN2QxLTQxNzAtOGZhYi00OWJjYjkwOTk1YWYqMCoqMTk6bWVldGluZ19OVEkyT0RjM01qUXROV1UyW",
+ "scheduledStartTime": "2022-04-24T22:00:00Z",
+ "scheduledEndTime": "2022-04-24T23:00:00Z",
+ "joinUrl": "https://teams.microsoft.com/l/xx",
+ "title": "All Hands",
+ "type": "Scheduled"
+ },
+ "conversation": {
+ "isGroup": true,
+ "conversationType": "groupChat",
+ "id": "meeting chat ID"
+ },
+ "organizer": {
+ "id": "<organizer user ID>",
+ "aadObjectId": "<AAD object ID>",
+ "objectId": "<organizer object ID>",
+ "tenantId": "<Tenant ID>"
+ }
+ }
+ ```
+
+* **Scheduled channel meetings:**
+
+ ```json
+ {
+ "details": {
+ "msGraphResourceId": "MSoxNmUwYjdiYi05M2Q1LTQzNTItOTllMC0yM2VlNWYyZmZmZTIqMTY2MDc1ODYwNzc0MCoqMTk6a0RtQkpEWFZsYWl0QWhHcVB2SzBtRExZbHVTWnJub01WX1MxeFNkTjQxNDFAdGhyZWFkLnRhY3Yy",
+ "scheduledStartTime": "2022-08-17T18:00:00Z",
+ "scheduledEndTime": "2022-08-17T18:30:00Z",
+ "type": "ChannelScheduled",
+ "id": "MCMxOTprRG1CSkRYVmxhaXRBaEdxUHZLMG1ETFlsdVNacm5vTVZfUzF4U2RONDE0MUB0aHJlYWQudGFjdjIjMTY2MDc1ODYwNzc0MA==",
+ "joinUrl": "https://teams.microsoft.com/l/meetup-join/19%3akDmBJDXVlaitAhGqPvK0mDLYluSZrnoMV_S1xSdN4141%40thread.tacv2/1660758607740?context=%7b%22Tid%22%3a%229f044231-b634-4bdd-b29d-2776e3dbd699%22%2c%22Oid%22%3a%2216e0b7bb-93d5-4352-99e0-23ee5f2fffe2%22%7d",
+ "title": "Test channel meeting"
+ },
+ "conversation": {
+ "isGroup": true,
+ "conversationType": "channel",
+ "id": "19:kDmBJDXVlaitAhGqPvK0mDLYluSZrnoMV_S1xSdN4141@thread.tacv2;messageid=1660758607740"
+ },
+ "organizer": {
+ "tenantId": "9f044231-b634-4bdd-b29d-2776e3dbd699",
+ "objectId": "16e0b7bb-93d5-4352-99e0-23ee5f2fffe2",
+ "id": "29:1q4D6ekLXEAALkrqyLXUIcwtVSdXx31bf6vMdfahmkTb9euYVYSsN9x4133pXLV_I2idpVriFe40e19XEZt57bQ",
+ "aadObjectId": "16e0b7bb-93d5-4352-99e0-23ee5f2fffe2"
+ }
+ }
+ ```
+
+* **One-on-one calls:**
+
+ ```json
+ {
+ "details": {
+ "id": "<meeting ID>",
+ "type": "OneToOneCall"
+ },
+ "conversation": {
+ "isGroup": true,
+ "conversationType": "groupChat",
+ "id": "meeting chat ID"
+ },
+ "organizer ": {
+ "id": "<organizer user ID>",
+ "aadObjectId": "<AAD object ID>",
+ "objectId": "<organizer object ID>",
+ "tenantId": "<Tenant ID>"
+ }
+ }
+
+ ```
+
+* **Group calls:**
+
+ ```json
+ {
+ "details": {
+ "id": "<meeting ID>",
+ "type": "GroupCall",
+ "joinUrl": "https://teams.microsoft.com/l/xx"
+ },
+ "conversation": {
+ "isGroup": true,
+ "conversationType": "groupChat",
+ "id": "meeting chat ID"
+ },
+ "organizer": {
+ "id": "<organizer user ID>",
+ "objectId": "<organizer object ID>",
+ "aadObjectId": "<AAD object ID>",
+ "tenantId": "<Tenant ID>"
+ }
+ }
+
+ ```
+
+* **Instant meetings:**
+
+ ```json
+ {
+ "details": {
+ "id": "<meeting ID>",
+ "msGraphResourceId": "MSowYmQ0M2I4OS1lN2QxLTQxNzAtOGZhYi00OWJjYjkwOTk1YWYqMCoqMTk6bWVldGluZ19OVEkyT0RjM01qUXROV1UyW",
+ "scheduledStartTime": "2022-04-24T22:00:00Z",
+ "scheduledEndTime": "2022-04-24T23:00:00Z",
+ "joinUrl": "https://teams.microsoft.com/l/xx",
+ "title": "All Hands",
+ "type": "MeetNow"
+ },
+ "conversation": {
+ "isGroup": true,
+ "conversationType": "groupChat",
+ "id": "meeting chat ID"
+ },
+ "organizer": {
+ "id": "<organizer user ID>",
+ "aadObjectId": "<AAD object ID>",
+ "tenantId": "<Tenant ID>" ,
+ "objectId": "<organizer object ID>"
+ }
+ }
+
+ ```
+++
+| Property name | Description |
+|||
+| **details.id** | The meeting's ID, encoded as a BASE64 string. |
+| **details.msGraphResourceId** | The MsGraphResourceId, used specifically for MS Graph API calls. |
+| **details.scheduledStartTime** | The meeting's scheduled start time, in UTC. |
+| **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 (OneToOneCall, GroupCall, Scheduled, Recurring, MeetNow, ChannelScheduled, and ChannelRecurring). |
+| **conversation.isGroup** | Boolean indicating whether conversation has more than two participants. |
+| **conversation.conversationType** | The conversation type. |
+| **conversation.id** | The meeting chat ID. |
+| **organizer.id** | The Organizer's user ID. |
+| **organizer.aadObjectId** | The Organizer's Azure Active Directory object ID. |
+| **organizer.tenantId** | The Organizer's Azure Active Directory tenant ID. |
+
+In case of Recurring meeting type,
+
+**startDate**: Specifies the date to start applying the pattern. The value of startDate must correspond to the date value of the start property on the event resource. Note that the first occurrence of the meeting may not occur on this date if it doesn't fit the pattern.
+
+**endDate**: Specifies the date to stop applying the pattern. Note that the last occurrence of the meeting may not occur on this date if it doesn't fit the pattern.
+
+## Send real-time captions API
+
+The send real-time captions API exposes a POST endpoint for Teams communication access real-time translation (CART) captions, human-typed closed captions. Text content sent to this endpoint appears to end users in a Teams meeting when they have captions enabled.
+
+### CART URL
+
+You can get the CART URL for the POST endpoint from the **Meeting options** page in a Teams meeting. For more information, see [CART captions in a Microsoft Teams meeting](https://support.microsoft.com/office/use-cart-captions-in-a-microsoft-teams-meeting-human-generated-captions-2dd889e8-32a8-4582-98b8-6c96cf14eb47). You don't need to modify the CART URL to use CART captions.
+
+#### Query Parameter
+
+The CART URL includes the following query parameters:
+
+|Value|Type|Required|Description|
+|||-|-|
+|**meetingId**| String | Yes |The meeting identifier is available through Bot Invoke and Teams Client SDK. <br/>For example, meetingid=%7b%22tId%22%3a%2272f234bf-86f1-41af-91ab-2d7cd0321b47%22%2c%22oId%22%3a%22e071f268-4241-47f8-8cf3-fc6b84437f23%22%2c%22thId%22%3a%2219%3ameeting_NzJiMjNkMGQtYzk3NS00ZDI1LWJjN2QtMDgyODVhZmI3NzJj%40thread.v2%22%2c%22mId%22%3a%220%22%7d|
+|**token**| String | Yes |Authorization token.<br/> For example, token=04751eac |
+
+#### Example
+
+```http
+https://api.captions.office.microsoft.com/cartcaption?meetingid=%7b%22tId%22%3a%2272f234bf-86f1-41af-91ab-2d7cd0321b47%22%2c%22oId%22%3a%22e071f268-4241-47f8-8cf3-fc6b84437f23%22%2c%22thId%22%3a%2219%3ameeting_NzJiMjNkMGQtYzk3NS00ZDI1LWJjN2QtMDgyODVhZmI3NzJj%40thread.v2%22%2c%22mId%22%3a%220%22%7d&token=gjs44ra
+```
+
+### Method
+
+|Resource|Method|Description|
+|-|-|-|
+|/cartcaption|POST|Handle captions for meeting, which was started|
+
+> [!NOTE]
+> Ensure that the content type for all requests is plain text with UTF-8 encoding. The body of request contains only captions.
+
+#### Example
+
+```http
+POST /cartcaption?meetingid=04751eac-30e6-47d9-9c3f-0b4ebe8e30d9&token=04751eac&lang=en-us HTTP/1.1
+Host: api.captions.office.microsoft.com
+Content-Type: text/plain
+Content-Length: 22
+Hello IΓÇÖm Cortana, welcome to my meeting.
+```
+
+> [!NOTE]
+> Each POST request generates a new line of captions. To ensure that the end user has enough time to read the content, limit each POST request body to 80-120 characters.
+
+### Error codes
+
+The following table provides the error codes:
+
+|Error code|Description|
+|||
+| **400** | Bad request. The response body has more information. For example, not of all required parameters presented.|
+| **401** | Unauthorized. Bad or expired token. If you receive this error, generate a new CART URL in Teams. |
+| **404** | Meeting not found or not started. If you receive this error, ensure that you start the meeting and select start captions. After captions are enabled in the meeting, you can begin POSTing captions into the meeting.|
+| **500** |Internal server error. For more information, [contact support or provide feedback](../feedback.md).|
+
+## Get real-time Teams meeting events API
+
+> [!NOTE]
+> Real-time Teams meeting events are only supported for scheduled meetings.
+
+The user can receive real-time meeting events. As soon as any app is associated with a meeting, the actual meeting start and end time are shared with the bot. The actual start and end time of a meeting are different from scheduled start and end time. The Meeting Details API provides the scheduled start and end time. The event provides the actual start and end time.
+
+You must be familiar with the `TurnContext` object available through the Bot SDK. The `Activity` object in `TurnContext` contains the payload with the actual start and end time. Real-time meeting events require a registered bot ID from the Teams platform. The bot can automatically receive meeting start or end event by adding `ChannelMeeting.ReadBasic.Group` in the manifest.
+
+### Prerequisite
+
+Your app manifest must have the `webApplicationInfo` property to receive the meeting start and end events. Use the following examples to configure your manifest:
+
+<br>
+
+<details>
+
+<summary><b>For app manifest version 1.12 and later</b></summary>
+
+```json
+"webApplicationInfo": {
+ "id": "<bot id>",
+ "resource": "https://RscPermission",
+ },
+"authorization": {
+ "permissions": {
+ "resourceSpecific": [
+ {
+ "name": "OnlineMeeting.ReadBasic.Chat",
+ "type": "Application"
+ }
+ ]
+ }
+}
+ ```
+
+<br>
+
+</details>
+
+<br>
+
+<details>
+
+<summary><b>For app manifest version 1.11 and earlier</b></summary>
+
+```json
+"webApplicationInfo": {
+ "id": "<bot id>",
+ "resource": "https://RscPermission",
+ "applicationPermissions": [
+ "OnlineMeeting.ReadBasic.Chat"
+ ]
+}
+ ```
+
+<br>
+
+</details>
+
+### Example of getting `MeetingStartEndEventvalue`
+
+The bot receives event through the `OnEventActivityAsync` handler. To deserialize the JSON payload, a model object is introduced to get the metadata of a meeting. The metadata of a meeting is in the `value` property in the event payload. The `MeetingStartEndEventvalue` model object is created, whose member variables correspond to the keys under the `value` property in the event payload.
+
+> [!NOTE]
+>
+> * Get meeting ID from `turnContext.ChannelData`.
+> * Do not use conversation ID as meeting ID.
+> * Do not use meeting ID from meeting events payload `turncontext.activity.value`.
+
+The following code shows how to capture the metadata of a meeting that is `MeetingType`, `Title`, `Id`, `JoinUrl`, `StartTime`, and `EndTime` from a meeting start/end event:
+
+Meeting Start Event
+
+```csharp
+protected override async Task OnTeamsMeetingStartAsync(MeetingStartEventDetails meeting, ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
+{
+ await turnContext.SendActivityAsync(JsonConvert.SerializeObject(meeting));
+}
+```
+
+Meeting End Event
+
+```csharp
+protected override async Task OnTeamsMeetingEndAsync(MeetingEndEventDetails meeting, ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
+{
+ await turnContext.SendActivityAsync(JsonConvert.SerializeObject(meeting));
+}
+```
+
+### Example of meeting start event payload
+
+The following code provides an example of meeting start event payload:
+
+```json
+{
+ "name": "application/vnd.microsoft.meetingStart",
+ "type": "event",
+ "timestamp": "2021-04-29T16:10:41.1252256Z",
+ "id": "123",
+ "channelId": "msteams",
+ "serviceUrl": "https://microsoft.com",
+ "from": {
+ "id": "userID",
+ "aadObjectId": "aadOnjectId"
+ },
+ "conversation": {
+ "isGroup": true,
+ "tenantId": "tenantId",
+ "id": "thread id"
+ },
+ "recipient": {
+ "id": "user Id",
+ "name": "user name"
+ },
+ "entities": [
+ {
+ "locale": "en-US",
+ "country": "US",
+ "type": "clientInfo"
+ }
+ ],
+ "channelData": {
+ "tenant": {
+ "id": "channel id"
+ },
+ "source": null,
+ "meeting": {
+ "id": "meeting id"
+ }
+ },
+ "value": {
+ "MeetingType": "Scheduled",
+ "Title": "Meeting Start/End Event",
+ "Id": "meeting id",
+ "JoinUrl": "url"
+ "StartTime": "2021-04-29T16:17:17.4388966Z"
+ },
+ "locale": "en-US"
+}
+```
+
+### Example of meeting end event payload
+
+The following code provides an example of meeting end event payload:
+
+```json
+{
+ "name": "application/vnd.microsoft.meetingEnd",
+ "type": "event",
+ "timestamp": "2021-04-29T16:17:17.4388966Z",
+ "id": "123",
+ "channelId": "msteams",
+ "serviceUrl": "https://microsoft.com",
+ "from": {
+ "id": "user id",
+ "aadObjectId": "aadObjectId"
+ },
+ "conversation": {
+ "isGroup": true,
+ "tenantId": "tenantId",
+ "id": "thread id"
+ },
+ "recipient": {
+ "id": "user id",
+ "name": "user name"
+ },
+ "entities": [
+ {
+ "locale": "en-US",
+ "country": "US",
+ "type": "clientInfo"
+ }
+ ],
+ "channelData": {
+ "tenant": {
+ "id": "channel id"
+ },
+ "source": null,
+ "meeting": {
+ "id": "meeting Id"
+ }
+ },
+ "value": {
+ "MeetingType": "Scheduled",
+ "Title": "Meeting Start/End Event in Canary",
+ "Id": "19:meeting_NTM3ZDJjOTUtZGRhOS00MzYxLTk5NDAtMzY4M2IzZWFjZGE1@thread.v2",
+ "JoinUrl": "url",
+ "EndTime": "2021-04-29T16:17:17.4388966Z"
+ },
+ "locale": "en-US"
+}
+```
+
+| Property name | Description |
+|||
+| **name** | Name of the user.|
+| **type** | Activity type. |
+| **timestamp** | Local date and time of the message, expressed in ISO-8601 format. |
+| **id** | ID for the activity. |
+| **channelId** | Channel this activity is associated with. |
+| **serviceUrl** | Service URL where responses to this activity should be sent. |
+| **from.id** | ID of the user that sent the request. |
+| **from.aadObjectId** | Azure Active Directory object ID of the user that sent the request. |
+| **conversation.isGroup** | Boolean indicating whether conversation has more than two participants. |
+| **conversation.tenantId** | Azure Active Directory tenant ID of the conversation or meeting. |
+| **conversation.id** | The meeting chat ID. |
+| **recipient.id** | ID of the user that receive the request. |
+| **recipient.name** | Name of the user that receive the request. |
+| **entities.locale** | entity which contains metadata about locale. |
+| **entities.country** | entity which contains metadata about country. |
+| **entities.type** | entity which contains metadata about client. |
+| **channelData.tenant.id** | Azure Active Directory tenant ID. |
+| **channelData.source** | The source name from where event is fired or invoked. |
+| **channelData.meeting.id** | The default ID associated with the meeting. |
+| **value.MeetingType** | The type of meeting. |
+| **value.Title** | The subject of the meeting. |
+| **value.Id** | The default ID associated with the meeting. |
+| **value.JoinUrl** | The join URL of the meeting. |
+| **value.StartTime** | The meeting start time in UTC. |
+| **value.EndTime** | The meeting end time in UTC. |
+| **locale**| The locale of the message set by the client. |
+
+## Get incoming audio state
+
+The `getIncomingClientAudioState` API allows an app to get the incoming audio state setting for the meeting user. The API is available through the Teams client SDK.
+
+> [!NOTE]
+>
+> * The `getIncomingClientAudioState` API for mobile is currently available in [Public Developer Preview](../resources/dev-preview/developer-preview-intro.md).
+> * Resource specific consent is available for manifest version 1.12 and later versions, hence this API doesn't work for manifest version 1.11 and earlier versions.
+
+### Manifest
+
+```JSON
+"authorization": {
+ "permissions": {
+ "resourceSpecific": [
+ {
+ "name": "OnlineMeetingParticipant.ToggleIncomingAudio.Chat",
+ "type": "Delegated"
+ }
+ ]
+ }
+ }
+```
+
+### Example
+
+```javascript
+callback = (errcode, result) => {
+ if (errcode) {
+ // Handle error code
+ }
+ else {
+ // Handle success code
+ }
+ }
+
+microsoftTeams.meeting.getIncomingClientAudioState(this.callback)
+```
+
+### 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. |
+
+### 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 state 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 in [Public Developer Preview](../resources/dev-preview/developer-preview-intro.md).
+> * Resource specific consent is available for manifest version 1.12 and later versions, hence this API doesn't work for manifest version 1.11 and earlier versions.
+
+### Manifest
+
+```JSON
+"authorization": {
+ "permissions": {
+ "resourceSpecific": [
+ {
+ "name": "OnlineMeetingParticipant.ToggleIncomingAudio.Chat",
+ "type": "Delegated"
+ }
+ ]
+ }
+}
+```
+
+### Example
+
+```javascript
+callback = (error, result) => {
+ if (error) {
+ // Handle error code
+ }
+ else {
+ // Handle success code
+ }
+ }
+
+microsoftTeams.meeting.toggleIncomingClientAudio(this.callback)
+```
+
+### 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.
+
+### 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 |
+|-|--|--|--|
+| Meetings extensibility | Teams meeting extensibility sample for passing tokens. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/nodejs) |
+| Meeting content bubble bot | Teams meeting extensibility sample for interacting with content bubble bot in a meeting. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/nodejs)|
+| Meeting side panel | Teams meeting extensibility sample for interacting with the side panel in-meeting. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/nodejs)|
+| Details Tab in Meeting | Teams meeting extensibility sample for interacting with Details Tab in-meeting. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-details-tab/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-details-tab/nodejs)|
+| Meeting Events Sample | Sample app to show real-time Teams meeting events|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/nodejs)|
+| Meeting Recruitment Sample |Sample app to show meeting experience for recruitment scenario.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-recruitment-app/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-recruitment-app/nodejs)|
+| App installation using QR code |Sample app that generates the QR code and installs the app using the QR code|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-installation-using-qr-code/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-installation-using-qr-code/nodejs)|
+
+## See also
+
+* [Teams authentication flow for tabs](../tabs/how-to/authentication/auth-flow-tab.md)
+* [Apps for Teams meetings](teams-apps-in-meetings.md)
+* [Live Share SDK](teams-live-share-overview.md)
+
+## Next steps
+
+[Build tabs for meeting](build-tabs-for-meeting.md)
platform Teams Apps In Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/teams-apps-in-meetings.md
Last updated 04/07/2022
# Apps for Teams meetings and calls
-Meetings enable collaboration, partnership, informed communication, and shared feedback. The meeting app can deliver a user experience for each stage of the meeting lifecycle. Meeting lifecycle includes pre-meeting, in-meeting, and post-meeting app experience, depending on the attendee's status.
+Meetings enable collaboration, partnership, informed communication, and shared feedback. The meeting space can deliver a user experience for each stage of the meeting lifecycle. The following illustration gives you an idea of the meeting app extensibility features:
++
+You must be familiar with the following product concepts to create custom meeting experiences with apps in Microsoft Teams.
+
+## Supported meeting types in Teams
Teams supports access to apps during meeting for the following meeting types:
Teams supports access to apps during meeting for the following meeting types:
* [**One-on-one calls**](https://support.microsoft.com/office/start-a-call-from-a-chat-in-teams-f5138c9d-df4c-43d8-9cf6-53400c1a7798): Calls initiated in one-on-one chat. * [**Group calls**](https://support.microsoft.com/office/start-a-call-from-a-chat-in-teams-f5138c9d-df4c-43d8-9cf6-53400c1a7798): Calls initiated in group chat. * [**Instant meetings**](https://support.microsoft.com/office/start-an-instant-meeting-in-teams-ff95e53f-8231-4739-87fa-00b9723f4ef5): Meetings initiated through **Meet now** button in Teams calendar.
+* [**Webinar**](https://support.microsoft.com/office/get-started-with-teams-webinars-42f3f874-22dc-4289-b53f-bbc1a69013e3): Webinar initiated through **Webinar** button under **New Meeting** dropdown.
+Learn more about [Teams meetings, expiration and policies](/MicrosoftTeams/meeting-expiration) and [meetings, webinars, and live events](/microsoftteams/quick-start-meetings-live-events).
> [!NOTE] > > * Apps for scheduled public channel meetings are currently available only in [public developer preview](../resources/dev-preview/developer-preview-intro.md).
->
> * Apps aren't supported in the following: > * [Public Switched Telephone Network (PSTN) Teams calls](/microsoftteams/cloud-voice-landing-page#public-switched-telephone-network-connectivity-options) > * [End-to-end encrypted Teams calls](https://support.microsoft.com/office/use-end-to-end-encryption-for-teams-calls-1274b4d2-b5c5-4b24-a376-606fa6728a90) > * [Instant channel meetings](https://support.microsoft.com/office/start-an-instant-meeting-in-teams-ff95e53f-8231-4739-87fa-00b9723f4ef5) > * Meetings in [shared channel](https://support.microsoft.com/office/what-is-a-shared-channel-in-teams-e70a8c22-fee4-4d6e-986f-9e0781d7d11d)
-Users can add apps to the meeting using the **+** option from their Teams meeting window.
+## Meeting lifecycle
+
+A meeting lifecycle includes pre-meeting, in-meeting, and post-meeting app experience, depending on the user type and user's role in a Teams meeting.
+## User types in Teams
-Visit the [Teams store](https://go.microsoft.com/fwlink/p/?LinkID=2183121) and explore apps designed specifically for meetings.
+Teams supports user types, such as in-tenant, guest, federated or external user in a Teams meeting. Each user type can have one of the [user roles in Teams meeting](#user-roles-in-teams-meeting).
> [!NOTE] > > Currently when a third person is added to a one-on-one call, the call is elevated to a group call that means a new session starts. Apps added to the one-on-one call are not available in the group call. However, they can be added again.
-The following illustration gives you an idea of the meeting app extensibility features:
+The following list details the various user types along with their accessibility:
+
+* **In-tenant**: In-tenant users belong to the organization and have credentials in Azure Active Directory (AAD) for the tenant. They're full-time, onsite, or remote employees. An in-tenant user can be an organizer, presenter, or attendee.
+* **Guest**: A guest is a participant from another organization invited to access Teams or other resources in the organization's tenant. Guests are added to the organizationΓÇÖs Azure AD and have same Teams capabilities as a native team member. They have access to team chats, meetings, and files. A guest can be an organizer, presenter, or attendee. For more information, see [guest access in Teams](/microsoftteams/guest-access).
+* **Federated or external**: A federated or an external user is a Teams user from another organization who has been invited to join a meeting. Federated users have valid credentials with federated partners and are authorized by Teams. They don't have access to your Teams or other shared resources from your organization. Guest access is a better option for external users to have access to Teams and channels. For more information, see [manage external access in Teams](/microsoftteams/manage-external-access).
+
+ > [!NOTE]
+ > Teams users can add apps when they host meetings or chats with other organizations. When an external users share apps to the meeting, all the user can access the app. The host organization's data policies and data sharing practices of the third-party apps shared by that user's organization, will be in effect.
+
+* **Anonymous**: Anonymous users don't have an Azure AD identity and aren't federated with a tenant. The anonymous participants are like external users, but their identity isn't shown in the meeting. Anonymous users can't access apps in a meeting window. An anonymous user can be a presenter or an attendee, but can't be an organizer.
+
+ > [!NOTE]
+ > Anonymous users inherit the global default user-level app permission policy. For more information, see [manage Apps](/microsoftteams/non-standard-users#anonymous-user-in-meetings-access).
-![Meeting app extensibility](../assets/images/apps-in-meetings/meetingappextensibility.png)
+## User roles in Teams meeting
-This article provides an overview of meeting app extensibility, API references, enable and configure apps for meetings, and custom Together Mode scenes in Teams.
+The following are the user roles in a Teams meeting:
+
+* **Organizer**: The organizer schedules a meeting, sets the meeting options, assigns meeting roles, controls attendee permissions, and starts the meeting. Only users with a Microsoft 365 account and Teams license can be the organizer. A meeting organizer can change the settings for a specific meeting from the [**Meeting options** page](https://support.microsoft.com/en-us/office/change-participant-settings-for-a-teams-meeting-53261366-dbd5-45f9-aae9-a70e6354f88e).
+
+* **Presenter**: Presenters in a meeting have similar capabilities as the organizer, with the exception of removing an organizer from the session and modifying meeting options for the session.
+
+* **Attendee**: An attendee is a user who is invited to attend the meeting. Attendees have limited capabilities during the meeting.
> [!NOTE]
->
-> Meeting apps (side panel, meeting stage) are supported in Teams desktop client. Where as in Teams web client it is supported only when the developer preview is enabled.
+> Only an organizer or presenter can add, remove, or uninstall apps.
-* **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.
-* **Generate a deep link to share content to stage in meetings**: You can generate a deep link to share the app to stage and start or join a meeting.
+For more information, see [roles in a Teams meeting](https://support.microsoft.com/office/roles-in-a-teams-meeting-c16fa7d0-1666-4dde-8686-0a0bfe16e019).
-## Next step
+> [!TIP]
+>
+> * The [default participant settings](/microsoftteams/meeting-policies-participants-and-guests) are determined by an organization's IT administrator. As per default settings, participants joining a meeting have the presenter role.
+> * Presenter role isn't available in one-on-one calls.
+> * A user who starts the group call from a chat is considered as organizer.
-> [!div class="nextstepaction"]
-> [Unified meetings apps](meeting-app-extensibility.md)
+> [!IMPORTANT]
+>
+> * Currently, third-party apps are available in Government Community Cloud (GCC) but are not available for GCC-High and Department of Defense (DOD) tenants.
+> * Third-party apps are turned off by default for GCC. To turn on third-party apps for GCC, see [manage app permission policies](/microsoftteams/teams-app-permission-policies) and [manage apps](/microsoftteams/manage-apps).
## See also * [Designing your Microsoft Teams meeting extension](~/apps-in-teams-meetings/design/designing-apps-in-meetings.md)
-* [Meeting apps API references - Teams](~/apps-in-teams-meetings/api-references.md)
-* [Custom Together Mode scenes](~/apps-in-teams-meetings/teams-together-mode.md)
-* [Enable and configure your apps for Teams meetings](~/apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md)
-* [Meeting lifecycle](meeting-app-extensibility.md#meeting-lifecycle)
+* [Build tabs for meeting](~/apps-in-teams-meetings/build-tabs-for-meeting.md)
+* [Build apps for Teams meeting stage](build-apps-for-teams-meeting-stage.md)
+* [Build extensible conversation for meeting chat](build-extensible-conversation-for-meeting-chat.md)
+* [Build apps for anonymous users](build-apps-for-anonymous-user.md)
+* [Meeting apps APIs](meeting-apps-apis.md)
* [Enhanced collaboration with Live Share SDK](teams-live-share-overview.md)
+* [Custom Together Mode scenes](~/apps-in-teams-meetings/teams-together-mode.md)
platform App Fundamentals Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/app-fundamentals-overview.md
The following table includes Teams features and availability for GCC, GCC-High,
The following list helps to identify the availability of GCC, GCC-High, and DOD for the features:
-* For third-party apps, see [web apps](../samples/integrating-web-apps.md) and [meeting app extensibility](../apps-in-teams-meetings/meeting-app-extensibility.md).
+* For third-party apps, see [web apps](../samples/integrating-web-apps.md) and [meeting app extensibility](../apps-in-teams-meetings/teams-apps-in-meetings.md).
* For bots, see [build your first conversational bot for Teams](../get-started/first-app-bot.md), [designing your Teams bot](../bots/design/bots.md), [add bots to Microsoft Teams apps](../resources/bot-v3/bots-overview.md), and [bots in Teams](../bots/what-are-bots.md). * For sideloading apps, see [enable your Teams app to be customized](../concepts/design/enable-app-customization.md), [distribute your Microsoft Teams app](../concepts/deploy-and-publish/apps-publish-overview.md), and [Upload your app in Teams](../concepts/deploy-and-publish/apps-upload.md). * For custom connectors, see [create Office 365 connectors for Teams](../webhooks-and-connectors/how-to/connectors-creating.md).
platform Deep Links https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-links.md
else { /* handle case where capability isn't supported */ }
```
-## Generate a deep link to share content to stage in meetings
-
-You can also generate a deep link to [share the app to stage](~/apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md#share-entire-app-to-stage) and start or join a meeting.
-
-> [!NOTE]
->
-> * Currently, the deep link to share content to stage in meetings is undergoing UX improvements and is available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md).
-> * Deep link to share content to stage in meeting is supported in Teams desktop client only.
-
-When a deep link is selected in an app by a user who is part of an ongoing meeting, then the app is shared to the stage and a permission pop-up window appears. Users can grant access to the participants to collaborate with an app.
--
-When a user isn't in a meeting then the user is redirected to the Teams calendar where they can join a meeting or initiate instant meeting (Meet now).
--
-Once the user initiates an instant meeting (Meet now), they can add participants and interact with the app.
--
-To add a deep link to share content on stage, you need to have an app context. The app context allows the Teams client to fetch the app manifest and check if the sharing on stage is possible. The following is an example of an app context.
-
-* `{ "appSharingUrl" : "https://teams.microsoft.com/extensibility-apps/meetingapis/view", "appId": "9ec80a73-1d41-4bcb-8190-4b9eA9e29fbb" , "useMeetNow": false }`
-
-The query parameters for the app context are:
-
-* `appID`: This is the ID that can be obtained from the app manifest.
-* `appSharingUrl`: The URL which needs to be shared on stage should be a valid domain defined in the app manifest. If the URL is not a valid domain, an error dialog will pop-up to provide the user with a description of the error.
-* `useMeetNow`: This includes a boolean parameter that can be either true or false.
- * **True** - When the `UseMeetNow` value is true and if there's no ongoing meeting, a new Meet now meeting will be initiated. When there's an ongoing meeting, this value will be ignored.
-
- * **False** - The default value of `UseMeetNow` is false, which means that when a deep link is shared to stage and there's no ongoing meeting, a calendar pop-up will appear. However, you can share directly during a meeting.
-
-Ensure that all the query parameters are properly URI encoded and the app context has to be encoded twice in the final URL. Following is an example.
-
-```json
-var appContext= JSON.stringify({ "appSharingUrl" : "https://teams.microsoft.com/extensibility-apps/meetingapis/view", "appId": "9cc80a93-1d41-4bcb-8170-4b9ec9e29fbb", "useMeetNow":false })
-var encodedContext = encodeURIComponent(appcontext).replace(/'/g,"%27").replace(/"/g,"%22")
-var encodedAppContext = encodeURIComponent(encodedContext).replace(/'/g,"%27").replace(/"/g,"%22")
-```
-
-A deep link can be launched either from the Teams web or from the Teams desktop client.
-
-* **Teams web** - Use the following format to launch a deep link from the Teams web to share content on stage.
-
- `https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`
-
- Example: `https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`
-
- |Deep link|Format|Example|
- ||||
- |To share the app and open Teams calendar, when UseMeeetNow is "false", default.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Afalse%257D`|
- |To share the app and initiate instant meeting, when UseMeeetNow is "true".|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`|
-
-* **Team desktop client** - Use the following format to launch a deep link from the Teams desktop client to share content on stage.
-
- `msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`
-
- Example: `msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`
-
- |Deep link|Format|Example|
- ||||
- |To share the app and open Teams calendar, when UseMeeetNow is "false", default.|`msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`|`msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Afalse%257D`|
- |To share the app and initiate instant meeting, when UseMeeetNow is "true".|`msteams:/l/meeting-share? deeplinkId={deeplinkid}&fqdn={fqdn}&lm=deeplink%22&appContext={encoded app context}`|`msteams:/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`|
-
-The query parameters are:
-
-* `deepLinkId`: Any identifier used for telemetry correlation.
-* `fqdn`: `fqdn` is an optional parameter, which can be used to switch to an appropriate environment of a meeting to share an app on stage. It supports scenarios where a specific app share happens in a particular environment. The default value of `fqdn` is enterprise URL and possible values are `Teams.live.com` for Teams for Life, `teams.microsoft.com`, or `teams.microsoft.us`.
-
-To share the entire app to stage, in the app manifest, you must configure `meetingStage` and `meetingSidePanel` as frame contexts, see [app manifest](../../resources/schem). Otherwise, meeting attendees may not be able to see the content on stage.
-
-> [!NOTE]
-> For your app to pass validation, when you create a deep link from your website, web app, or Adaptive Card, use **Share in meeting** as the string or copy.
- ## Generate a deep link to a call While use of the typed APIs of TeamsJS is recommended, you can also use a manually created deep link to start a call.
platform Design Teams App Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/design/design-teams-app-overview.md
Design Adaptive Cards in our web-based tool.
## See also
-* [Enable and configure your apps for Teams meetings](../../apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md)
+* [Enable and configure your apps for meeting stage](../../apps-in-teams-meetings/build-tabs-for-meeting.md)
* [Designing your Microsoft Teams bot](~/bots/design/bots.md) * [Create Virtual Assistant](~/samples/virtual-assistant.md) * [Designing task modules for your Microsoft Teams app](~/task-modules-and-cards/task-modules/design-teams-task-modules.md)
platform Glossary https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/get-started/glossary.md
Common terms and definitions used in Teams developer documentation.
| | | | [Action command](../messaging-extensions/how-to/action-commands/define-action-command.md) | A type of message extension app that uses a pop-up to collect or display information. <br>**See also**: [Message extension](#m); [Search commands](#s) | | [Adaptive Cards](../task-modules-and-cards/what-are-cards.md) | An actionable content snippet added to a conversation by a bot or message extension. Use text, graphics, and buttons with these cards for rich communication. |
-| [Anonymous user](../apps-in-teams-meetings/meeting-app-extensibility.md#user-types-in-a-meeting) | A type of participant in a Teams meeting who doesn't have an Azure AD identity and isn't federated with a tenant. They are like external users in a meeting. <br>**See also**: [Federated user](#f) |
| [App Catalog](../toolkit/publish.md) | A site that stores SharePoint and Office apps for an organization's internal use. <br>**See also**: [SPFx](#s) | | [App manifest](../resources/schem) | The Teams app manifest describes how the app integrates into the Microsoft Teams product. Your manifest must conform to the [manifest schema](https://developer.microsoft.com/json-schemas/teams/v1.11/MicrosoftTeams.schema.json). | | [App package](../concepts/build-and-test/apps-package.md) | A Teams app package is a zip file that contains the App manifest file, color icon, and outline icon. |
Common terms and definitions used in Teams developer documentation.
| Term | Definition | | | |
-| [Federated user](../apps-in-teams-meetings/meeting-app-extensibility.md#user-types-in-a-meeting) | A type of user in a Teams app meeting who is external and is invited to the meeting. This user has valid credentials that are federated by authorized Teams partners. They're also called External users. <br>**See also**: [Anonymous user](#a) |
| [First-run Experience](../concepts/design/design-teams-app-ui-templates.md)|A First-run Experience (FRE) is a user's introduction to your product.The FRE helps users to get started with the functions, features, and benefits of the product and influences users' to come back and continue using your product.| ## G
Common terms and definitions used in Teams developer documentation.
| | | | [Identity provider](../concepts/authentication/authentication.md) | An entity which stores and provides credentials to the user. It also allows users to register themselves. <br>**See also**: [Authentication](#a) | | [Incoming Webhook](../webhooks-and-connectors/how-to/add-incoming-webhook.md) | It lets an external app share content in Teams channels. These webhooks are used as tracking and notifying tools. <br>**See also**: [Webhook](#w); [Outgoing Webhook](#o) |
-| [In-meeting app experience](../apps-in-teams-meetings/meeting-app-extensibility.md#in-meeting-app-experience) | A stage of Teams meeting lifecycle. With the in-meeting app experience, you can engage participants during the meeting by using apps and the in-meeting dialog box. <br>**See also**: [Meeting lifecycle](#m) |
+| [In-meeting app experience](../apps-in-teams-meetings/teams-apps-in-meetings.md) | A stage of Teams meeting lifecycle. With the in-meeting app experience, you can engage participants during the meeting by using apps and the in-meeting dialog box. <br>**See also**: [Meeting lifecycle](#m) |
## L
Common terms and definitions used in Teams developer documentation.
| | | | [Media capability](../concepts/device-capabilities/media-capabilities.md) | Native device capabilities, such as, camera and microphone, that you can integrate with your Teams app. <br>**See also**: [Capability](#c); [Device capability](#d) | | [Meeting bot](../bots/calls-and-meetings/calls-meetings-bots-overview.md) | Bots that interact with Teams calls and meetings using real-time voice, video, and screen sharing. <br>**See also**: [Call bot](#c); [Chat bot](#c) |
-| [Meeting lifecycle](../apps-in-teams-meetings/meeting-app-extensibility.md#meeting-lifecycle) | It spans from pre-meeting, in-meeting, and post-meeting app experience. You can integrate tabs, bots, and message extensions in each stage of the meeting lifecycle. <br>**See also**: [In-meeting experience](#i) |
+| [Meeting lifecycle](../apps-in-teams-meetings/teams-apps-in-meetings.md) | It spans from pre-meeting, in-meeting, and post-meeting app experience. You can integrate tabs, bots, and message extensions in each stage of the meeting lifecycle. <br>**See also**: [In-meeting experience](#i) |
| [Meeting stage](../sbs-meetings-stage-view.yml) | A feature of meeting extension app. It's a shared space accessible to all participants during the meeting. It helps participants interact and collaborate with app content in real time. <br>**See also**: [Stage view](#s) | | [Message extension](../messaging-extensions/what-are-messaging-extensions.md) | Message extensions are shortcuts for inserting app content or acting on a message. You can use a message extension without navigating away from the conversation. <br>**See also**: [Search commands](#s); [Action commands](#a) | | [Meeting extension](../apps-in-teams-meetings/design/designing-apps-in-meetings.md) | An app that is designed to be used during the meeting lifecycle to make it more productive, such as whiteboard, dashboard, and more. |
platform Overview Transcripts https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/graph-api/meeting-transcripts/overview-transcripts.md
For more information about how your app can know when the meetings ends, see [Su
## See also -- [Meeting apps API references](../../apps-in-teams-meetings/API-references.md#meeting-apps-api-references)
+- [Advanced meeting APIs](../../apps-in-teams-meetings/meeting-apps-apis.md)
platform Create Channel Group Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/create-channel-group-tab.md
Title: Create a channel tab
+ Title: Create a channel tab or group tab
description: Create custom channel, group tab with Node.js, ASP.NET Core, ASP.NET Core MVC. Generate app, create package, build and run app, secret tunnel, upload to Teams ms.localizationpriority: high
zone_pivot_groups: teams-app-environment
-# Create a channel tab
+# Create a channel tab or group tab
Channel or group tabs deliver content to channels and group chats, which helps to create collaborative spaces around dedicated web-based content.
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.
| 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) | | 08/01/2022| Notice: Developer Portal is now GA and App Studio is deprecated from August, 01, 2022. | Tools and SDK > [Developer Portal for Teams](concepts/build-and-test/teams-developer-portal.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 | Add the Teams display picture and people card for in-meeting notification| Build apps for Teams meetings and calls > Enable and configure apps for Teams meetings > [Build in-meeting notification for Teams meeting](apps-in-teams-meetings/in-meeting-notification-for-meeting.md) |
| 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)| | 07/26/2022|Suggested actions for bots| Build bots > Bot conversations > [Messages in bot conversations](bots/how-to/conversations/conversation-messages.md#send-suggested-actions)|
Microsoft Teams platform features that are available to all app developers.
| 02/18/2022 | Updated the App fundamentals module to Plan your app to include mapping use cases to Teams features, and app planning checklist | [Plan your app > Overview](~/concepts/app-fundamentals-overview.md) | | 02/17/2022 | What to expect after you submit your app?| Distribute your app > Publish to the Teams store > [Overview](concepts/deploy-and-publish/appsource/publish.md) | | 02/15/2022 | Introduced step-by-step guide how to upload files to Teams from a bot | Build bots > Send and receive files > [Step-by-step guide how to upload files to Teams from a bot](sbs-file-handling-in-bot.yml) |
-| 02/11/2022 | Shared meeting stage| ΓÇó Build apps for Teams meetings > [Shared meeting stage](apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md#shared-meeting-stage) </br> ΓÇó Build apps for Teams meetings > [Meeting apps API references](apps-in-teams-meetings/API-references.md) </br> ΓÇó App manifest > Public developer preview > [Developer preview manifest schema](resources/schem)|
+| 02/11/2022 | Shared meeting stage| ΓÇó Build apps for Teams meetings > [Shared meeting stage](apps-in-teams-meetings/build-tabs-for-meeting.md) </br> ΓÇó Build apps for Teams meetings > [Build apps for Teams meetings](apps-in-teams-meetings/build-apps-for-teams-meeting-stage.md) </br> ΓÇó App manifest > Public developer preview > [Developer preview manifest schema](resources/schem)|
| 02/08/2022 | Introduced step-by-step guide to create Calling and Meeting bot| Build bots > Calls and meetings bots > Register calls and meetings bot > [Step-by-step guide to create Calling and Meeting bot](sbs-calling-and-meeting.yml) | | 02/02/2022 | Introduced app manifest version 1.12 | App manifest > [App manifest schema](resources/schem) |
-| 01/25/2022 | Send real-time captions API | Build apps for Teams meetings > Meeting apps API references> [Meeting apps API references](apps-in-teams-meetings/API-references.md#send-real-time-captions-api)|
+| 01/25/2022 | Send real-time captions API | Build apps for Teams meetings > Meeting apps API references> [Advanced meeting APIs](apps-in-teams-meetings/meeting-apps-apis.md)|
| 01/19/2022 | Adaptive Cards form completion feedback | Build bots > Bot conversations > Messages in bot conversations > [Form completion feedback](bots/how-to/conversations/conversation-messages.md#form-completion-feedback)| | 01/17/2022 | People Picker in Adaptive cards for desktop | Build cards and task modules > Build cards > [People Picker in Adaptive Cards](task-modules-and-cards/cards/people-picker.md)|
Explore updates from the previous GA releases listed here.
|11/13/2021| Bots can be enabled to receive all channel messages using resource-specific consent (RSC) | ΓÇó Build bots > Bot conversations > Messages in bot conversations > [Receive all channel messages with RSC](~/bots/how-to/conversations/channel-messages-with-rsc.md) </br> ΓÇó 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) | |10/28/2021| Monetize your Teams app with a transactable SaaS offer | Distribute your app > Publish to the Teams store > [Include a SaaS offer with your Teams app](~/concepts/deploy-and-publish/appsource/prepare/include-saas-offer.md) | |10/25/2021| Updated Get started module for Microsoft Teams Developer Documentation with new structure and procedures in a step-by-step guide | Get started > [Get started with your first Teams app](get-started/get-started-overview.md) |
-|10/20/2021| Meeting stage is now available in GA | Build apps for Teams meetings > [Enable and configure your apps for Teams meetings](apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md) |
-|10/20/2021| Meeting Details API and real-time Teams meeting events | Build apps for Teams meetings > [Get meeting details API](apps-in-teams-meetings/API-references.md#get-meeting-details-api) |
+|10/20/2021| Meeting stage is now available in GA | Build apps for Teams meetings > [Enable and configure your apps for Teams meetings](apps-in-teams-meetings/build-tabs-for-meeting.md) |
+|10/20/2021| Meeting Details API and real-time Teams meeting events | Build apps for Teams meetings > [Get meeting details API](apps-in-teams-meetings/meeting-apps-apis.md) |
|10/18/2021| Tabs link unfurling and stage view | Build tabs > [Tabs link unfurling and stage view](tabs/tabs-link-unfurling.md) | |10/08/2021| New best practices for designing Adaptive Cards | Design your app > UI components > [Designing Adaptive Cards for your Teams app](task-modules-and-cards/cards/design-effective-cards.md) | |10/05/2021| Hide Teams app until Admin allows to un-hide the app | Design your app > [Block apps by default for users until an admin approves](concepts/design/enable-app-customization.md#block-apps-by-default-for-users-until-an-admin-approves) |
Explore updates from the previous GA releases listed here.
|08/19/2021| Installation update event received when you install a bot to a conversation thread | Build bots > Bot conversations > [Installation update event](bots/how-to/conversations/subscribe-to-conversation-events.md#installation-update-event) | |08/12/2021|Build tabs with Adaptive Cards| Build tabs > [Build tabs with Adaptive Cards](tabs/how-to/build-adaptive-card-tabs.md) | |08/04/2021|Tabs will no longer have margins surrounding their experiences | Build tabs > [Removing tab margins](resources/removing-tab-margins.md) |
-|07/08/2021|Teams mobile adds support for apps in meetings | Build apps for Teams meetings > [Meeting app extensibility](apps-in-teams-meetings/meeting-app-extensibility.md) |
+|07/08/2021|Teams mobile adds support for apps in meetings | Build apps for Teams meetings > [Build apps for Teams meeting](apps-in-teams-meetings/build-apps-for-teams-meeting-stage.md) |
|06/28/2021|Integrate People Picker capability | Integrate with Teams > [Integrate People Picker capability](concepts/device-capabilities/people-picker-capability.md) | |06/25/2021| Introduced step-by-step guide to send proactive messages | Build bots > Bot conversation > Proactive messages > [Step-by-step guide to send proactive messages](sbs-send-proactive.yml) | |06/09/2021| Stage view for images in Adaptive Cards with `allowExpand` attribute | Build cards and task modules > Build cards > [Stage view for images in Adaptive Cards](task-modules-and-cards/cards/cards-format.md#stage-view-for-images-in-adaptive-cards) |
Developer preview is a public program that provides early access to unreleased T
**2022 October**
-***October 11, 2022***: [Generate a deep link to share content to stage in meetings.](apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md#generate-a-deep-link-to-share-content-to-stage-in-meetings)
+***October 11, 2022***: [Generate a deep link to share content to stage in meetings.](apps-in-teams-meetings/build-apps-for-teams-meeting-stage.md#generate-a-deep-link-to-share-content-to-stage-in-meetings)
:::column-end::: :::row-end::: | **Date** | **Update** | **Find here** | | -- | | |
-| 09/23/2022 | Introduced meeting app support for Scheduled Channel Meetings. | Build apps for Teams meetings and calls > [Unified meetings apps](apps-in-teams-meetings/meeting-app-extensibility.md) |
+| 09/23/2022 | Introduced meeting app support for Scheduled Channel Meetings. | Build apps for Teams meetings and calls > [Apps for Teams meetings and calls](apps-in-teams-meetings/teams-apps-in-meetings.md) |
| 08/23/2022 | Share apps to the Teams meeting stage in mobile | Build apps for Teams meetings and calls > [Enable and configure apps for meetings](/microsoftteams/platform/apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings) | | 08/10/2022 | Apps for scheduled public channel meetings | Build apps for Teams meetings and calls > [Overview](apps-in-teams-meetings/teams-apps-in-meetings.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) |