Service | Microsoft Docs article | Related commit history on GitHub | Change details |
---|---|---|---|
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 | Last updated 04/07/2022 # Build apps for Teams meeting stage +Microsoft Teams enhances meeting experiences by providing features that facilitate seamless collaboration and communication. The screen sharing function is a prime example, allowing users to present their entire screen, specific windows, or even whiteboard sessions. This capability is essential for effective presentations and collaborative work, as it ensures all participants can view and interact with the shared content, making virtual meetings more dynamic and engaging. ++In addition to screen sharing, Microsoft Teams offers various tools designed to make virtual interactions more productive. These tools replicate the dynamics of in-person meetings, enabling users to work together efficiently, regardless of their physical location. Integrating these features in Teams empowers organizations to conduct more interactive and fruitful meetings, driving better teamwork and results. ++[Share to Stage](#share-to-stage) and [Screen share content to meetings](#screen-share-content-to-meetings) are features that enhance the sharing experience in Teams. Share to Stage allows users to share an app to the meeting stage from the meeting side panel in an ongoing meeting. Screen share content to meetings enables users to share content to the meeting stage in Teams using the screen sharing architecture. ++The following table lists the scenarios to use Screen share and Share to stage features: ++| Feature | Share to stage | Screen share content to stage | +| | | | +| **Interaction Level** | Allows attendees to interact with the content. | View-only mode of the app or content. | +| **Scenarios** | Collaborative experiences, such as whiteboarding. | Coconsumption scenarios, such as reviewing dashboards in a scrum meeting. | +| **Developer Effort** | Requires more effort. |Aims to reduce developer effort for bringing the app or content onto the meeting stage. | +| **Implementation Logic** | Suitable for smaller meetings. | Suitable for larger meetings or when only one user has a premium license. | ++## Share to 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 upper-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 +### App manifest -To share an app to the meeting stage, you must configure the context and resource-specific consent (RSC) permissions in the [app manifest](../resources/schem): +To share an app to the meeting stage, you must configure the context and Resource-specific consent (RSC) permissions in the [app manifest](../resources/schem): 1. Update the `context` property in the app manifest as follows: To share an app to the meeting stage, you must configure the context and resourc } ``` -## Advanced share to stage APIs +### 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 brainstorming or whiteboard app, a user might 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. For a medical app, a doctor might 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. For a video streaming app, a user might want to share content from a single content provider at a time (for example, YouTube) versus sharing an entire video catalog onto stage. +1. A user might 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 Microsoft Teams JavaScript client library (TeamsJS) that allow you to programmatically invoke share to stage for specific parts of the app from a button in the meeting side panel. +To help users in such scenarios, APIs in the Microsoft Teams JavaScript client library (TeamsJS) allow you to programmatically invoke share to stage for specific parts of the app from a button in the meeting side panel. # [Desktop](#tab/desktop) The following image shows the share to stage option in the Teams mobile client: 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. | [TeamsJS library](/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. | [TeamsJS library](/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. | [TeamsJS library](/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 TeamsJS library. +* **Share app content to stage**: Share specific parts of the app to meeting stage from the meeting side panel in a meeting. [TeamsJS library](/javascript/api/@microsoft/teams-js/meeting) -### Prerequisite +* **Get app content stage sharing state**: Fetch information about app's sharing state on the meeting stage. [TeamsJS library](/javascript/api/@microsoft/teams-js/meeting.iappcontentstagesharingstate) -`appContentUrl` must be allowed by `validDomains` array inside manifest.json, else the API returns a 501 error. +* **Get app content stage sharing capabilities**: Fetch the app's capabilities for sharing to the meeting stage. [TeamsJS library](/javascript/api/@microsoft/teams-js/meeting.iappcontentstagesharingcapabilities) -### Query parameter +# [Share app content to stage](#tab/app-content) -The following table includes the query parameters: +The `shareAppContentToStage` API enables you to share specific parts of your app to the meeting stage. The API is available through the TeamsJS library. -|Value|Type|Required|Description| -|||-|| -|**callback**| String | Yes | Callback contains two parameters, error and result. The *error* can contain either an error of type *SdkError* or null when share is successful. The *result* can contain either a true value if there's a successful share or null when the share fails. | -|**appContentURL**| String | Yes | The URL that's shared on to the stage. | +The `validDomains` array must allow the `appContentUrl` inside manifest.json. Else, the API returns a 501 error. -### Example +The following code is an example of `shareAppContentToStage` API: ```javascript const appContentUrl = "https://www.bing.com/"; microsoftTeams.meeting.shareAppContentToStage((err, result) => { }, appContentUrl); ``` -### Response codes +**Query parameter** -The following table provides the response codes: +The following table includes the query parameters: -|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.| +|Value|Type|Required|Description| +|||-|| +|`callback`| String | Yes | Callback contains two parameters, error and result. The *error* can contain either an error of type *SdkError* or null when share is successful. The *result* can contain either a true value if there's a successful share or null when the share fails. | +|`appContentURL`| String | Yes | The URL that is shared on to the stage. | +| `shareOptions`| Object | No | Defines additional sharing options.| +|`shareOptions.sharingProtocol` | Enum | No | The screen sharing protocol. The supported values are `Collaborative` and `ScreenShare`. Default is `Collaborative`.| -## Get app content stage sharing state API +# [Get app content stage sharing state](#tab/get-app-content) 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 contain either an error of type *SdkError* if there's an error or null when share is successful. The *result* can contain either an `IAppContentStageSharingState` object when share is successful or null if there's an error.| --### Example +The following table is an example of `getAppContentStageSharingState` API: ```javascript microsoftTeams.meeting.getAppContentStageSharingState((err, result) => { The JSON response body for the `getAppContentStageSharingState` API is: } ``` -### Response codes +**Query parameter** -The following table provides the response codes: +The following table includes the query parameter: -|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.| +|Value|Type|Required|Description| +|||-|| +|**callback**| String | Yes | Callback contains two parameters, error and result. The *error* can contain either an error of type *SdkError* if there's an error or null when share is successful. The *result* can contain either an `IAppContentStageSharingState` object when share is successful or null if there's an error.| -## Get app content stage sharing capabilities API +# [Get app content stage sharing capabilities](#tab/get-app-content-capabilities) The `getAppContentStageSharingCapabilities` API enables you to fetch the app's capabilities for sharing the app content to meeting stage. Apps need to call the `getAppContentStageSharingCapabilities` API to either enable or disable the custom share to stage button for a meeting participant in the meeting side panel. The share to stage button must be disabled or hidden if a meeting participant doesn't have permission to share the app content to meeting stage. The app sharing capabilities depend on the tenant user type and participant role * **User type**: In-tenant, guest, and external user type participants can share the app to stage and also see and interact with the app being shared on stage. Anonymous user can't see, share, or interact with the app that is being shared on the stage. For more information, see [user types in a meeting.](~/apps-in-teams-meetings/teams-apps-in-meetings.md#user-types-in-teams) -* **User roles**: Participants with presenter and organizer user roles in a meeting can share the app to stage. Attendee won't have the share to stage button enabled and ability to share the app to stage. For more information, see [user roles in Teams meeting.](~/apps-in-teams-meetings/teams-apps-in-meetings.md#user-roles-in-teams-meeting) --### 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 contain either an error of type *SdkError* or null when share is successful. The result can contain either an `IAppContentStageSharingCapabilities` object, when share is successful or null if there's an error.| +* **User roles**: Participants with presenter and organizer user roles in a meeting can share the app to stage. The share to stage button and ability to share the app to stage isn't enabled for the Attendee. For more information, see [user roles in Teams meeting.](~/apps-in-teams-meetings/teams-apps-in-meetings.md#user-roles-in-teams-meeting) -### Example +The following code is an example of `getAppContentStageSharingCapabilities` API: ```javascript microsoftTeams.meeting.getAppContentStageSharingCapabilities((err, result) => { The JSON response body for `getAppContentStageSharingCapabilities` API is: } ``` -### Response codes +**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 contain either an error of type *SdkError* or null when share is successful. The result can contain either an `IAppContentStageSharingCapabilities` object, when share is successful or null when there's an error.| ++++## Screen share content to meetings ++> [!NOTE] +> +> * Only In-tenant or guest and external users with presenter or organizer role can initiate a sharing session. +> * Share to stage using screen share isn't supported on Mac, classic Teams, mobile, web and VDI. ++Users can screen share content to the meeting Stage in Teams using the screen sharing architecture. When a user shares an app to the meeting stage, the app is rendered only on the presenterΓÇÖs device and then the screen is shared or mirrored to all other attendees in a new window. After the app content is shared in a meeting, all the participants can view the content, but only the presenter has the ability to interact with the content, which provides a multi-player viewing experience. +++Screen share content to the meeting Stage simplifies app content sharing during meetings and provides a seamless multi-player viewing experience. Let's explore the use cases of the feature: ++|For Developers |For Users | +||| +|**Coordinated Content Presentation**: You can now showcase coordinated content to multiple participants on a larger stage, moving beyond the fixed-width Side Panel. This expanded visibility attracts more attention and integrates closely with the meeting lifecycle. | **Contextual Tool Usage**: Users can seamlessly use their favorite tools within the ongoing communication context. This minimizes context switching and enhances meeting outcomes. | +|**Out-of-the-Box App Sharing**: Basic sharing of the entire app is available out-of-the-box, requiring no additional investment from you. This streamlined approach simplifies the content sharing process. | **Inline Content Display**: Content appears inline within the meeting window, ensuring easy access for all participants. No need to navigate away from the conversation. | +|**Enhanced APIs for Specific Content Sharing**: Existing Share to Stage APIs are enhanced to enable sharing of specific content via the Screen Sharing protocol. You can now tailor content sharing to meet specific use cases. |**Sharing Button on Meeting Side Panels**: Users with these roles can initiate content sharing directly from the meeting side panels. This empowers presenters to engage with the audience effectively. | +|**Deep Link and "Share in Meeting" Button Support**: Use the Screen Sharing protocol to share content via deep links or by using the "Share in Meeting" button. This flexibility ensures a seamless experience for users. | Participants can start sharing content through a deep link or by using the "Share in Meeting" button. Both options are exposed by you, allowing for a seamless experience. | ++Users can screen share content to the meeting stage in the following scenarios: ++* **Share entire app**: When you share a tab to the Meeting Stage in a Teams meeting, the `contentUrl` associated with the tab is poped-out a new window for the app and screen shares that window with all other meeting participants. The `page.frameContext` property in the `getContext` object is set to `meetingStage` to signal the app that it's being presented on a large surface, allowing the app to update its content appropriately. ++ > [!NOTE] + > Apps that specify `MeetingStage` in the `page.frameContext` property of the `getContext` object in the manifest and declare `MeetingStage.Write.Chat` permissions support collaborative Share to Stage infrastructure. The share button initiates the existing collaborative protocol instead of the screen sharing protocol. ++* **Share specific parts of your app to the meeting stage**: Specify the appropriate sharing protocol along with the `appContentURL`. ++The following code is an example of sharing app content to meeting stage view and share content in view only screen sharing mode: ++# [Share app content](#tab/share-app-content) ++```typescript + // Share the content to meeting stage view. + const shareSpecificAppContent = (partName) => { + var appContentUrl = ""; + microsoftTeams.app.getContext().then((context) => { + appContentUrl = partName == 'todo' ? `${window.location.origin}/todoView?meetingId=${context.meeting.id}` : partName == 'doing' ? `${window.location.origin}/doingView?meetingId=${context.meeting.id}` : `${window.location.origin}/doneView?meetingId=${context.meeting.id}`; + microsoftTeams.meeting.shareAppContentToStage((err, result) => { + if (result) { + // handle success + console.log(result); + } ++ if (err) { + // handle error + alert(JSON.stringify(err)) + } + }, appContentUrl); + }); + }; +``` ++# [View-only screen share](#tab/screen-share-content) ++```javascript + // Share the content in view-only screen sharing mode. + const shareSpecificAppContentScreenShare = (partName) => { + var appContentUrl = ""; + microsoftTeams.app.getContext().then((context) => { + appContentUrl = partName == 'todo' ? `${window.location.origin}/todoView?meetingId=${context.meeting.id}` : partName == 'doing' ? `${window.location.origin}/doingView?meetingId=${context.meeting.id}` : `${window.location.origin}/doneView?meetingId=${context.meeting.id}`; + microsoftTeams.meeting.shareAppContentToStage((err, result) => { + if (result) { + // handle success + console.log(result); + } ++ if (err) { + // handle error + alert(JSON.stringify(err)) + } + }, appContentUrl, + // Optional shareOptions with sharingProtocol set to ScreenShare + { + sharingProtocol: microsoftTeams.meeting.SharingProtocol.ScreenShare + }); + }); + }; +``` ++ -The following table provides the response codes: + | Value | Type | Required | Description | + | | | | | + |`callback` | String | Yes| Callback contains two parameters, error and result. The error can contain either an error of type SdkError or null when share is successful. The result can contain either a true value if there's a successful share or null when the share fails.| + |`appContentURL`| String |Yes |The URL that is shared on to the stage.| + | `shareOptions`| Object | No | Defines additional sharing options.| + |`shareOptions.sharingProtocol` | Enum | No | The screen sharing protocol. The supported values are `Collaborative` and `ScreenShare`. Default is `Collaborative`.| -|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.| + For more information on parameters, see [shareAppContentToStage](/javascript/api/%40microsoft/teams-js/meeting?#@microsoft-teams-js-meeting-shareappcontenttostage). ++ > [!NOTE] + > If the value for the `sharingProtocol` property is set as `screenShare`, you don't need to set `MeetingStage` in the `getContext` object of the manifest. Resource-Specific Consent (RSC) permissions are required in the app manifest for the `shareAppContentToStage` API, regardless of the `sharingProtocol` value used. ++### Scenarios ++|Scenario|Example| +|-|--| +|Sales enablement app| Phoebe, a sales rep for Contoso, pins the Sales enablement app to his upcoming meeting with Nicolette, the VP of HR at NorthWest. During the meeting, Phoebe opens the Sales enablement app side panel and sees a list of precurated content that he can share in the meeting to aid his sales pitch. Nicolette can consume the content on her Teams meeting window and ask questions based on the content shown.| +|Contoso Cloud Board| Demet, a technical program manager at Contoso, helps run the daily scrum meetings of various teams in the organization. For each scrum, he pins the pod-relevant board as a tab to the standup meeting. During the meeting, he opens the side panel of the Contoso app and selects the Share button provided within the side panel. This allows the board to take over the meeting stage for all participants such that everyone views the same board. As each member shares their updates, Demet makes appropriate changes in the sprint board, which is then reflected for all other attendees.| ++### Advantages ++* You can show coordinated content to multiple participants over a larger stage, getting more attention, and integrating more closely with the meeting lifecycle. +* Basic sharing for the entire app is available without additional investment. +* Users can use their favorite tools within the context of their ongoing communication, improving meeting outcomes. +* Content is displayed inline within the meeting window. +* A sharing button is available on all meeting side panels for users with organizer or presenter roles. +* Users can initiate sharing through a deep link or the Share in Meeting button. ## Build an in-meeting document signing app The participants can review and sign documents, such as purchase agreements and :::image type="content" source="../assets/images/sbs-inmeeting-doc-signing/final-output.png" alt-text="Screenshot shows an in-meeting document signing app"::: -The following participant roles may be involved during the meeting: +The following participant roles might be involved during the meeting: * **Document creator**: This role can add their own documents to be reviewed and signed. * **Signer**: This role can sign reviewed documents. * **Reader**: This role can view the documents added to the meeting. -## 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 | Scheduled meeting or Instant calendar meeting | One-on-one call | Group call | Scheduled channel meeting | -| :-- | :-- | :-- | :-- | :-- | -| In-tenant | Presenter or organizer can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage. <br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | -| Guest | Presenter or organizer can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | -| Federated or External | Presenter can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Not available | Not available | Presenter can start, view, and interact with app on meeting stage.<br><br> Attendee can only view and interact. | -| Anonymous |Presenter can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Not available | Not available | Not available | - ## Code sample |Sample name | Description | .NET| Node.js | Manifest | The following table provides the user types and lists the features that each use |Meeting stage sample | This sample app shows a tab in meeting stage for collaboration. This sample also uses Live Share SDK for collaborative Stageview. | [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) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp/demo-manifest) | | In-meeting notification | Demonstrates how to implement in-meeting notifications using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp/demo-manifest) | | In-meeting document signing | This sample app shows how to implement a document signing Teams app. Includes sharing specific app content to stage, Teams single sign-on (SSO), and user specific Stageview. | [View](https://github.com/officedev/microsoft-teams-samples/tree/main/samples/meetings-share-to-stage-signing/csharp) | NA | NA |+|Screen share content to stage| This sample app shows how screen share content to the meeting Stage in Teams using the screen sharing architecture.| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp)|NA|NA| ## Step-by-step guide |
platform | Meeting Apps Apis | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/meeting-apps-apis.md | The following table provides a list of APIs available across the Microsoft Teams |[**Send in-meeting notification**](#send-an-in-meeting-notification)| Provides meeting signals using the existing conversation notification API for user-bot chat and allows the bot 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. | [TeamsJS library](/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. | [TeamsJS library](/javascript/api/@microsoft/teams-js/meeting) | +|[**Share app content to stage**](build-apps-for-teams-meeting-stage.md#share-to-stage)| Share specific parts of the app to meeting stage from the app side panel in a meeting. | [TeamsJS library](/javascript/api/@microsoft/teams-js/meeting) | |[**Receive real-time Teams meeting events**](#receive-real-time-teams-meeting-events)|Receive real-time meeting events, such as meeting start and end or participant join and leave.| [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.| [TeamsJS library](/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.| [TeamsJS library](/javascript/api/@microsoft/teams-js/microsoftteams.meeting?view=msteams-client-js-latest&preserve-view=true) | The following table includes the query parameters: ### Example -# [C#](#tab/dotnet) +# [C#](#tab/dotnet3) * [SDK reference](/dotnet/api/microsoft.bot.builder.teams.teamsinfo.getmeetingparticipantasync?view=botbuilder-dotnet-stable&preserve-view=true) * [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/meetings-context-app/csharp/MeetingContextApp/Bots/MeetingContextBot.cs#L33) protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivi } ``` -# [JavaScript](#tab/javascript) +# [JavaScript](#tab/javascript3) * [SDK reference](/javascript/api/botbuilder/teamsinfo?view=botbuilder-ts-latest#botbuilder-teamsinfo-getmeetingparticipant&preserve-view=true) * [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/meetings-token-app/nodejs/server/bot/botActivityHandler.js#L30) export class MyBot extends TeamsActivityHandler { } ``` -# [JSON](#tab/json) +# [JSON](#tab/json3) ```http GET /v1/meetings/{meetingId}/participants/{participantId}?tenantId={tenantId} The following table includes the query parameter: > * 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) +# [C#](#tab/dotnet2) * [SDK reference](/dotnet/api/microsoft.bot.builder.teams.teamsactivityextensions.teamsnotifyuser?view=botbuilder-dotnet-stable#microsoft-bot-builder-teams-teamsactivityextensions-teamsnotifyuser(microsoft-bot-schema-iactivity)&preserve-view=true) * [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/bot-proactive-messaging/csharp/proactive-cmd/Program.cs#L178) activity.TeamsNotifyUser(true, "https://teams.microsoft.com/l/bubble/APP_ID?url= await turnContext.SendActivityAsync(activity).ConfigureAwait(false); ``` -# [JavaScript](#tab/javascript) +# [JavaScript](#tab/javascript2) * [SDK reference](/javascript/api/botbuilder-core/turncontext?view=botbuilder-ts-latest#botbuilder-core-turncontext-sendactivity&preserve-view=true) * [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/bot-conversation/nodejs/bots/teamsConversationBot.js#L74) replyActivity.channelData = { await context.sendActivity(replyActivity); ``` -# [JSON](#tab/json) +# [JSON](#tab/json2) ```http POST /v3/conversations/{conversationId}/activities |
platform | Teams Apps In Meetings | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/teams-apps-in-meetings.md | For more information, see [roles in a Teams meeting](https://support.microsoft.c > * Presenter role isn't available in one-on-one calls. > * A user who starts the group call from a chat is considered as an organizer. +## 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 | Scheduled meeting or Instant calendar meeting | One-on-one call | Group call | Scheduled channel meeting | +| :-- | :-- | :-- | :-- | :-- | +| In-tenant | Presenter or organizer can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage. <br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | +| Guest | Presenter or organizer can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | +| Federated or External | Presenter can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Not available | Not available | Presenter can start, view, and interact with app on meeting stage.<br><br> Attendee can only view and interact. | +| Anonymous |Presenter can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Not available | Not available | Not available | + ## See also * [Designing your Microsoft Teams meeting extension](~/apps-in-teams-meetings/design/designing-apps-in-meetings.md) |
platform | High Quality Message Extension | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/high-quality-message-extension.md | The requirements for building message extension plugins for Copilot for Microsof > > * [Define app, command, and parameter descriptions](#define-descriptions) > * [Enhance message extension to retrieve information through compound utterances](#compound-utterances)+> * [Define sample prompts](#sample-prompts) > * [Create rich Adaptive Card responses](#adaptive-card-response) ## Define descriptions For Copilot for Microsoft 365, a search-based message extension must support mor The search parameters must have good descriptions with acceptable parameters, enums, acronyms, and output format. For more information and examples, see [Parameter description](#parameter-description). +## Sample prompts ++> [!NOTE] +> Sample prompts will be available soon in Copilot for Microsoft 365. ++The [`samplePrompts`](../resources/schem#composeextensionscommands) property guides users on how to use the various plugins within Copilot. Copilot uses the sample prompts to display the prompts for the user. The prompts must be adaptable to different locales and clear across different commands. Sample prompts will be available in the following areas within Copilot for Microsoft 365: ++* First Run Experience (FRE): When a user first installs or enables a plugin. +* Prompt library or Copilot Lab: When a user seeks help with prompts. +* Plugin suggestions: To guide users towards better utterances. +++> [!NOTE] +> +> * If the app manifest doesn't specify the `samplePrompts` property, the prompts aren't displayed. +> * The `samplePrompts` property is mandatory for app validation during the app submission process. +> * If you define multiple commands for your app, a maximum of three prompts (one from each of the top three commands) are displayed to the user. The prompts rotate to provide the user with a diverse set of prompts across different commands. ++We recommend you to follow these guidelines to increase the chances of your app to pass the Microsoft Teams Store submission process: ++* A plugin must have at least three prompts and maximum of five prompts for each command. +* Each prompt must not exceed 128 characters. +* Two commands within the same plugin must not have identical prompts. +* Sample prompts must be generic in nature and not include custom references. For example, project names and task name. +* All sample prompts must be functional and return responses. +* Prompt must be relevant to the commands. ++The following code is an example of the `samplePrompts` property in app manifest: ++```json +"composeExtensions": [ + { + "canUpdateConfiguration": true, + "botId": "bxxxxxx5-xxxx-xxxx-xxxx-4xxxxxx16599", + "commands": [ + { + "id": "orders", + "title": "Orders", + "context": [ + "Commandbox", + "Compose" + ], + "description": "Search for orders", + "semanticDescription": "Search for orders", + "samplePrompts": [ + { + "text": "Search for all orders" + }, + { + "text": "Search for orders related to Contoso" + }, + { + "text": "Search for all pending orders" + }, + { + "text": "Search for all completed ordered for Fabrikam" + } + ] + } + ] + } +] +``` + ## Adaptive Card response Message extensions respond to a user input with an Adaptive Card. An Adaptive Card for a message extension plugin must function effectively, appear rich, and meet the following requirements: Message extensions respond to a user input with an Adaptive Card. An Adaptive Ca ## Extend your plugin to Copilot in meetings -Copilot for Microsoft 365 is available in Teams meetings. We recommend you to implement the following best practices: +Copilot for Microsoft 365 is available in Teams meetings. You must implement the following: * Adaptive Cards must not display a horizontal scroll. To avoid horizontal scrolls, donΓÇÖt specify a fixed width. *[Mandatory fix]* |
platform | Whats New | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md | Teams platform features that are available to all app developers. **2024 July** -***July 02, 2024***: [You can extend bot-based message extension plugins to Teams meetings.](messaging-extensions/build-bot-based-plugin.md#enable-message-extension-as-a-plugin-for-copilot-for-meetings) +* ***July 3, 2024***: [Screen share content to the meeting Stage simplifies app content sharing during meetings and provides a seamless multi-player viewing experience.](apps-in-teams-meetings/build-apps-for-teams-meeting-stage.md#screen-share-content-to-meetings) ++* ***July 02, 2024***: [You can extend bot-based message extension plugins to Teams meetings.](messaging-extensions/build-bot-based-plugin.md#enable-message-extension-as-a-plugin-for-copilot-for-meetings) :::column-end::: :::row-end::: |