Updates from: 08/26/2021 03:11:21
Service Microsoft Docs article Related commit history on GitHub Change details
platform API References https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/apps-in-teams-meetings/API-references.md
+
+ Title: Meeting apps API references
+
+description: Identify meeting apps API references
++
+localization_priority: Normal
+keywords: teams apps meetings user participant role api
++
+# Meeting apps API references
+
+The meeting extensibilities provide APIs to transform the meeting experience:
+
+* Build apps or integrate existing apps within meeting lifecycle.
+* Use the APIs to make your app aware of the meeting.
+* Select the APIs you want to use to enhance the meeting experience.
+
+The following table provides a list of APIs:
+
+|API|Description|Request|Source|
+|||-||
+|**GetUserContext**| This API enables you to get contextual information to display relevant content in a Teams tab. |_**microsoftTeams.getContext( ( ) => { /*...*/ } )**_|Microsoft Teams Client SDK|
+|**GetParticipant**| This API enables a bot to fetch participant information by meeting ID and participant ID. |**GET** _**/v1/meetings/{meetingId}/participants/{participantId}?tenantId={tenantId}**_ |Microsoft Bot Framework SDK|
+|**NotificationSignal** | This API enables you to provide meeting signals that are delivered using the existing conversation notification API for user-bot chat. It allows you to signal based on user action that shows an in-meeting dialog box. |**POST** _**/v3/conversations/{conversationId}/activities**_|Microsoft Bot Framework SDK|
+|**Meeting Details** | This API enables you to get static meeting metadata. |**GET** _**/v1/meetings/{meetingId}**_| Bot SDK |
+
+The following table provides the Bot Framework SDK methods for the APIs:
+
+|API|Bot Framework SDK method|
+|||
+|**GetParticipant**| `GetMeetingParticipantAsync (Microsoft.Bot.Builder.ITurnContext turnContext, string meetingId = default, string participantId = default, string tenantId = default, System.Threading.CancellationToken cancellationToken = default);` |
+|**NotificationSignal** | `activity.TeamsNotifyUser(true, "https://teams.microsoft.com/l/bubble/APP_ID?url=&height=&width=&title=<title>&completionBotId=BOT_APP_ID");` |
+|**Meeting Details** | `TeamsMeetingInfo (string id = default);` |
+
+## GetUserContext 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 when running in the meeting context and is added for the response payload.
+
+## GetParticipant API
+
+> [!NOTE]
+> * Do not cache participant roles since the meeting organizer can change the roles any time.
+> * Teams does not currently support large distribution lists or roster sizes of more than 350 participants for the `GetParticipant` API.
+
+The `GetParticipant` API allows a bot to fetch participant information by meeting ID and participant ID. The API includes query parameters, examples, and response codes.
+
+### Query parameters
+
+The `GetParticipant` API includes the following 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
+
+The `GetParticipant` API includes the following examples:
+
+# [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}
+```
+++
+The JSON response body for `GetParticipant` API is:
+
+```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>",
+ "isGroup":true
+ }
+}
+```
+
+### Response codes
+
+The `GetParticipant` API returns the following 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 most common error response 403. If the tenant admin disables or blocks the app during live site migration, 403 error response is triggered. |
+| **200** | The participant information is successfully retrieved.|
+| **401** | The app responds with an invalid token.|
+| **404** | The meeting has either expired or participant cannot be found.|
+
+## NotificationSignal API
+
+All users in a meeting receive the notifications sent through the `NotificationSignal` API.
+
+> [!NOTE]
+> * When an in-meeting dialog box is invoked, the content is presented as a chat message.
+> * Currently, sending targeted notifications is not supported.
+
+`NotificationSignal` API enables you to provide meeting signals that are delivered using the existing conversation notification API for user-bot chat. This API allows you to signal based on user action that shows an in-meeting dialog box. The API includes query parameter, examples, and response codes.
+
+### Query parameter
+
+The `NotificationSignal` API includes the following 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. `Bot ID` is declared in the manifest and the bot receives a result object.
+> * The `externalResourceUrl` width and height parameters must be in pixels. To ensure the dimensions are within the allowed limits, see [design guidelines](design/designing-apps-in-meetings.md).
+> * The URL is the page loaded as an `<iframe>` in the in-meeting dialog box. The domain must be in the app's `validDomains` array in your app manifest.
+
+The `NotificationSignal` API includes the following examples:
+
+# [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
+
+{
+ "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"
+}
+```
+++
+### Response codes
+
+The `NotificationSignal` API includes the following 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. |
+
+## Meeting Details API
+
+> [!NOTE]
+> This feature is currently available in [public developer preview](../resources/dev-preview/developer-preview-intro.md) only.
+
+The Meeting Details API enables your app to get static meeting metadata. The metadata provides data points that don't change dynamically.
+The API is available through Bot Services.
+
+### Prerequisite
+
+To use the Meeting Details API, you must obtain RSC permissions. Use the following example to configure your app manifest's `webApplicationInfo` property:
+
+```json
+"webApplicationInfo": {
+ "id": "<bot id>",
+ "resource": "https://RscPermission",
+ "applicationPermissions": [
+ "OnlineMeeting.ReadBasic.Chat"
+ ]
+}
+ ```
+
+### Query parameter
+
+The Meeting Details API includes the following query parameter:
+
+|Value|Type|Required|Description|
+|||-||
+|**meetingId**| String | Yes | The meeting identifier is available through Bot Invoke and Teams Client SDK. |
+
+### Example
+
+The Meeting Details API includes the following examples:
+
+# [C#](#tab/dotnet)
+
+```csharp
+MeetingInfo result = await TeamsInfo.GetMeetingInfoAsync(turnContext);
+await turnContext.SendActivityAsync(JsonConvert.SerializeObject(result));
+```
+
+# [JavaScript](#tab/javascript)
+
+Not available
+
+# [JSON](#tab/json)
+
+```http
+GET /v1/meetings/{meetingId}
+```
+++
+The JSON response body for Meeting Details API is as follows:
+
+```json
+{
+ "details": {
+ "id": "meeting ID",
+ "msGraphResourceId": "",
+ "scheduledStartTime": "2020-08-21T02:30:00+00:00",
+ "scheduledEndTime": "2020-08-21T03:00:00+00:00",
+ "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 ID>",
+ "tenantId": "<Tenant ID>"
+ }
+}
+```
+
+## Real-time Teams meeting events
+
+> [!NOTE]
+> This feature is currently available in [public developer preview](../resources/dev-preview/developer-preview-intro.md) only.
+
+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.
+
+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.
+
+### Prerequisite
+
+Your app manifest must have the `webApplicationInfo` property to receive the meeting start and end events. Use the following example to configure your manifest:
+
+```json
+"webApplicationInfo": {
+ "id": "<bot id>",
+ "resource": "https://RscPermission",
+ "applicationPermissions": [
+ "OnlineMeeting.ReadBasic.Chat"
+ ]
+}
+ ```
+
+### 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"
+}
+```
+
+### Example of getting metadata of a meeting
+
+Your bot receives the 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(MeetingEndEventDetails 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));
+}
+```
+
+## Code sample
+
+|Sample name | Description | .NET | Node.js |
+|-|--|--|--|
+| Meetings extensibility | Microsoft 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 | Microsoft 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 meetingSidePanel | Microsoft 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 | Microsoft 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)|
+
+## See also
+
+* [Teams authentication flow for tabs](../tabs/how-to/authentication/auth-flow-tab.md)
+* [Apps for Teams meetings](teams-apps-in-meetings.md)
+
+## Next step
+
+> [!div class="nextstepaction"]
+> [Enable and configure your apps for Teams meetings](enable-and-configure-your-app-for-teams-meetings.md)
platform Create Apps For Teams Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/apps-in-teams-meetings/create-apps-for-teams-meetings.md
Title: Prerequisites and API references for apps in Teams meetings
+ Title: Prerequisites for apps in Teams meetings
-description: Work with apps for Teams meetings
+description: Identify prerequisites with apps for Teams meetings
localization_priority: Normal keywords: teams apps meetings user participant role api
-# Prerequisites and API references for apps in Teams meetings
+# Prerequisites for apps in Teams meetings
-To expand the app capabilities across the meeting lifecycle, Teams enables you to work with apps for Teams meetings. Go through the prerequisites and use the meeting apps API references to enhance the meeting experience.
-
-## Prerequisites
-
-Before you work with apps for Teams meetings, you must have an understanding of the following 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). * Update the Teams app manifest to indicate that the app is available for meetings. For more information, see [app manifest](enable-and-configure-your-app-for-teams-meetings.md#update-your-app-manifest).
-* Your app must support configurable tabs in the groupchat scope, for your app to function in the meeting lifecycle as a tab. For more information, see [groupchat scope](../resources/schem).
+* Use your app that supports configurable tabs in the groupchat scope. For more information, see [group chat scope](../resources/schem).
* Adhere to general Teams tab design guidelines for pre and post-meeting scenarios. For experiences during meetings, refer to the in-meeting tab and in-meeting dialog design guidelines. For more information, see [Teams tab design guidelines](../tabs/design/tabs.md), [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). * 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 post-meeting app experience, you can view the results of the meeting, such as poll survey results or feedback.
-* Meeting API URL parameters must have `meetingId`, `userId`, and `tenantId`. The parameters are available as part of the Teams Client SDK and bot activity. Also, you can retrieve reliable information for user ID and tenant ID using [tab SSO authentication](../tabs/how-to/authentication/auth-aad-sso.md).
-
-* 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).
-
-* 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 box and other stages across the meeting lifecycle. For the in-meeting dialog box, see completion `bot Id` parameter in `NotificationSignal` API.
-
-* Meeting Details API must have a bot registration and bot ID. It requires Bot SDK to get `TurnContext`.
-
-* For real-time meeting events, 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.
-
-After you've gone through the prerequisites, you can use the meeting apps API references `GetUserContext`, `GetParticipant`, `NotificationSignal`, and Meeting Details API that enable you to access information using attributes and display relevant content.
-
-## Meeting apps API references
-
-The following new meeting extensibilities provide APIs to transform the meeting experience:
-
-* Build apps or integrate existing apps within meeting lifecycle.
-* Use the APIs to make your app aware of the meeting.
-* Select the APIs you want to use to enhance the meeting experience.
-
-The following table provides a list of these APIs:
-
-|API|Description|Request|Source|
-|||-||
-|**GetUserContext**| This API enables you to get contextual information to display relevant content in a Teams tab. |_**microsoftTeams.getContext( ( ) => { /*...*/ } )**_|Microsoft Teams Client SDK|
-|**GetParticipant**| This API allows a bot to fetch participant information by meeting ID and participant ID. |**GET** _**/v1/meetings/{meetingId}/participants/{participantId}?tenantId={tenantId}**_ |Microsoft Bot Framework SDK|
-|**NotificationSignal** | This API enables you to provide meeting signals that are delivered using the existing conversation notification API for user-bot chat. It allows you to signal based on user action that shows an in-meeting dialog box. |**POST** _**/v3/conversations/{conversationId}/activities**_|Microsoft Bot Framework SDK|
-|**Meeting Details** | This API enables you to get static meeting metadata. |**GET** _**/v1/meetings/{meetingId}**_| Bot SDK |
-
-The following table provides the Bot Framework SDK methods for the APIs:
-
-|API|Bot Framework SDK method|
-|||
-|**GetParticipant**| `GetMeetingParticipantAsync (Microsoft.Bot.Builder.ITurnContext turnContext, string meetingId = default, string participantId = default, string tenantId = default, System.Threading.CancellationToken cancellationToken = default);` |
-|**NotificationSignal** | `activity.TeamsNotifyUser(true, "https://teams.microsoft.com/l/bubble/APP_ID?url=&height=&width=&title=<title>&completionBotId=BOT_APP_ID");` |
-|**Meeting Details** | `TeamsMeetingInfo (string id = default);` |
-
-### GetUserContext 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 when running in the meeting context and is added for the response payload.
-
-### GetParticipant API
-
-> [!NOTE]
-> * Do not cache participant roles since the meeting organizer can change the roles any time.
-> * Teams does not currently support large distribution lists or roster sizes of more than 350 participants for the `GetParticipant` API.
-
-The `GetParticipant` API allows a bot to fetch participant information by meeting ID and participant ID. The API includes query parameters, examples, and response codes.
-
-#### Query parameters
-
-The `GetParticipant` API includes the following 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
-
-The `GetParticipant` API includes the following examples:
-
-# [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}
-```
---
-The JSON response body for `GetParticipant` API is:
-
-```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>",
- "isGroup":true
- }
-}
-```
-
-#### Response codes
-
-The `GetParticipant` API returns the following 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 most common error response 403. If the tenant admin disables or blocks the app during live site migration, 403 error response is triggered. |
-| **200** | The participant information is successfully retrieved.|
-| **401** | The app responds with an invalid token.|
-| **404** | The meeting has either expired or participant cannot be found.|
-
-### NotificationSignal API
-
-All users in a meeting receive the notifications sent through the `NotificationSignal` API.
-
-> [!NOTE]
-> * When an in-meeting dialog box is invoked, the content is presented as a chat message.
-> * Currently, sending targeted notifications is not supported.
-
-`NotificationSignal` API enables you to provide meeting signals that are delivered using the existing conversation notification API for user-bot chat. This API allows you to signal based on user action that shows an in-meeting dialog box. The API includes query parameter, examples, and response codes.
-
-#### Query parameter
-
-The `NotificationSignal` API includes the following 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. `Bot ID` is declared in the manifest and the bot receives a result object.
-> * The `externalResourceUrl` width and height parameters must be in pixels. To ensure the dimensions are within the allowed limits, see [design guidelines](design/designing-apps-in-meetings.md).
-> * The URL is the page loaded as an `<iframe>` in the in-meeting dialog box. The domain must be in the app's `validDomains` array in your app manifest.
-
-The `NotificationSignal` API includes the following examples:
-
-# [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
-
-{
- "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"
-}
-```
---
-#### Response codes
-
-The `NotificationSignal` API includes the following 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. |
-
-### Meeting Details API
-
-> [!NOTE]
-> This feature is currently available in [public developer preview](../resources/dev-preview/developer-preview-intro.md) only.
-
-The Meeting Details API enables your app to get static meeting metadata. The metadata provides data points that don't change dynamically.
-The API is available through Bot Services.
-
-#### Prerequisite
-
-To use the Meeting Details API, you must obtain RSC permissions. Use the following example to configure your app manifest's `webApplicationInfo` property:
-
-```json
-"webApplicationInfo": {
- "id": "<bot id>",
- "resource": "https://RscPermission",
- "applicationPermissions": [
- "OnlineMeeting.ReadBasic.Chat"
- ]
-}
- ```
-
-#### Query parameter
-
-The Meeting Details API includes the following query parameter:
-
-|Value|Type|Required|Description|
-|||-||
-|**meetingId**| String | Yes | The meeting identifier is available through Bot Invoke and Teams Client SDK. |
-
-#### Example
-
-The Meeting Details API includes the following examples:
-
-# [C#](#tab/dotnet)
-
-```csharp
-MeetingInfo result = await TeamsInfo.GetMeetingInfoAsync(turnContext);
-await turnContext.SendActivityAsync(JsonConvert.SerializeObject(result));
-```
-
-# [JavaScript](#tab/javascript)
-
-Not available
-
-# [JSON](#tab/json)
-
-```http
-GET /v1/meetings/{meetingId}
-```
---
-The JSON response body for Meeting Details API is as follows:
-
-```json
-{
- "details": {
- "id": "meeting ID",
- "msGraphResourceId": "",
- "scheduledStartTime": "2020-08-21T02:30:00+00:00",
- "scheduledEndTime": "2020-08-21T03:00:00+00:00",
- "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 ID>",
- "tenantId": "<Tenant ID>"
- }
-}
-```
-
-## Real-time Teams meeting events
-
-> [!NOTE]
-> This feature is currently available in [public developer preview](../resources/dev-preview/developer-preview-intro.md) only.
-
-The user can receive real-time meeting events. As soon as any app is associated with a meeting, the actual meeting start and meeting end time are shared with the bot.
-
-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.
-
-### Prerequisite
-
-Your app manifest must have the `webApplicationInfo` property to receive the meeting start and end events. Use the following example to configure your manifest:
-
-```json
-"webApplicationInfo": {
- "id": "<bot id>",
- "resource": "https://RscPermission",
- "applicationPermissions": [
- "OnlineMeeting.ReadBasic.Chat"
- ]
-}
- ```
-
-### 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"
-}
-```
-
-### Example of getting metadata of a meeting
-
-Your bot receives the 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:
+* Have parameters `meetingId`, `userId`, and `tenantId` in meeting API URL. The parameters are available as part of the Teams Client SDK and bot activity. Also, you can retrieve reliable information for user ID and tenant ID using [tab SSO authentication](../tabs/how-to/authentication/auth-aad-sso.md).
-Meeting Start Event
-```csharp
-protected override async Task OnTeamsMeetingStartAsync(MeetingEndEventDetails meeting, ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
-{
- await turnContext.SendActivityAsync(JsonConvert.SerializeObject(meeting));
-}
-```
+* Have a bot registration and ID in the `GetParticipant` API to generate auth tokens. For more information, see [bot registration and ID](../build-your-first-app/build-bot.md).
-Meeting End Event
-```csharp
-protected override async Task OnTeamsMeetingEndAsync(MeetingEndEventDetails meeting, ITurnContext<IEventActivity> turnContext, CancellationToken cancellationToken)
-{
- await turnContext.SendActivityAsync(JsonConvert.SerializeObject(meeting));
-}
-```
+* Keep your app up-to-date based on event activities in the meeting. These events can be within the in-meeting dialog box and other stages across the meeting lifecycle. For the in-meeting dialog box, check the completion `bot Id` parameter in `NotificationSignal` API.
-## Code sample
+* Have a bot registration and bot ID in the `MeetingDetails` API. It requires Bot SDK to get `TurnContext`.
-|Sample name | Description | .NET | Node.js |
-|-|--|--|--|
-| Meetings extensibility | Microsoft 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 | Microsoft 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 meetingSidePanel | Microsoft 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 | Microsoft 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)|
+* 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.
## See also
protected override async Task OnTeamsMeetingEndAsync(MeetingEndEventDetails meet
## Next step > [!div class="nextstepaction"]
-> [Enable and configure your apps for Teams meetings](enable-and-configure-your-app-for-teams-meetings.md)
+> [Meeting apps API references](API-references.md)
platform Designing Apps In Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/apps-in-teams-meetings/design/designing-apps-in-meetings.md
In-meeting dialogs can vary in size to account for different scenarios. Make sur
* **Width**: You can specify the width of the dialog's iframe anywhere within the supported size range. * **Height**: You can specify the height of the dialog's iframe anywhere within the supported size range. You also can allow users to scroll vertically if your app content exceeds the maximum height.
-To implement, specify the width and height using the [`externalResourceUrl`](~/apps-in-teams-meetings/create-apps-for-teams-meetings.md#notificationsignal-api) key.
+To implement, specify the width and height using the [`externalResourceUrl`](~/apps-in-teams-meetings/API-references.md#notificationsignal-api) key.
:::image type="content" source="../../assets/images/apps-in-meetings/in-meeting-dialog-responsive.png" alt-text="Example shows the in-meeting dialog. Width: Min--280 pixels (248 pixels iframe). Max--460 pixels (428 pixels iframe). Height: 300 pixels (iframe)." border="false":::
platform Enable And Configure Your App For Teams Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/apps-in-teams-meetings/enable-and-configure-your-app-for-teams-meetings.md
# Enable and configure your apps for Teams meetings
-Every team has a different way of communicating and collaborating tasks. You can achieve these different tasks by customizing Teams with apps for meetings. To customize and to achieve different tasks, you must enable your apps for Teams meetings and configure your apps to be available in meeting scope within their app manifest.
+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.
## Enable your app for Teams meetings
-To enable your app for Teams meetings, you must update your app manifest and use the context properties to determine where your app must appear.
+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. Scope defines to whom and context defines where your app is available.
+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]
-> * Try updating your app manifest with the [manifest schema](../resources/schem).
-> * Apps in meetings require groupchat scope. The team scope works for tabs in channels only.
+> * You must update your app manifest with the [manifest schema](../resources/schem).
+> * Apps in meetings require `groupchat` scope. The `team` scope works for tabs in channels only.
The app manifest must include the following code snippet:
The app manifest must include the following code snippet:
### 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. Tabs in the `team` or `groupchat` scope can have more than one context. Following are the values for the `context` property from which you can use all or some of the values:
+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. 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 in the context of a scheduled meeting. You can specify either **meetingChatTab** or **meetingDetailsTab** to ensure the apps work in mobile. |
+| **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. This tab is not supported on mobile. |
+| **meetingStage** | An app from the `meetingSidePanel` can be shared to the meeting stage. You can't use this app on mobile. |
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
-> [!NOTE]
-> For your app to be visible in the tab gallery, it must support configurable tabs and the group chat scope.
-
-Teams meetings provides a unique collaborative experience for your organization. It provides the opportunity to configure your app for different meeting scenarios. You can configure your apps to enhance the meeting experience based on participant role or user type. Now you can identify what actions can be taken in the following 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)
Before a meeting, users can add tabs, bots, and messaging extensions. Users with
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"/>.
- ![Pre-meeting experience](../assets/images/apps-in-meetings/PreMeeting.png)
+ <img src="../assets/images/apps-in-meetings/PreMeeting.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.
- > [!NOTE]
- > Currently, in meetings tab, getting meeting details and participant information is not supported.
- **To add a messaging extension to a meeting** 1. Select the ellipses &#x25CF;&#x25CF;&#x25CF; located in the compose message area in the chat.
In a meeting chat, enter the **@** key and select **Get bots**.
### During a meeting
-During a meeting, you can use the meetingSidePanel or the in-meeting dialog box to build unique experiences for your apps.
+During a meeting, you can use the `meetingSidePanel` or the in-meeting dialog box to build unique experiences for your apps.
#### Meeting Sidepanel
-With the meetingSidePanel, you can customize experiences in a meeting that enable 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 [FrameContext interface](/javascript/api/@microsoft/teams-js/microsoftteams.framecontext?view=msteams-client-js-latest&preserve-view=true).
+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 [FrameContext interface](/javascript/api/@microsoft/teams-js/microsoftteams.framecontext?view=msteams-client-js-latest&preserve-view=true).
-To use the `userContext` API to route requests accordingly, see [Teams SDK](../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 very similar to the authentication flow for websites. So 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).
+To use the `userContext` API to route requests, see [Teams SDK](../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. So 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).
-Messaging extension works as expected when a user is in an in-meeting view, and the user can post compose message extension cards. AppName in-meeting is a tooltip that states the app name in-meeting U-bar.
+Messaging 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 dialog box
-The in-meeting dialog box can be used to engage participants during the meeting and collect information or feedback during the meeting. Use the [`NotificationSignal`](create-apps-for-teams-meetings.md#notificationsignal-api) API to signal that a bubble notification must be triggered. As part of the notification request payload, include the URL where the content to be shown is hosted.
+The in-meeting dialog box is used to engage participants during the meeting and collect information or feedback during the meeting. Use the [`NotificationSignal`](API-references.md#notificationsignal-api) API to trigger a bubble notification. As part of the notification request payload, include the URL where the content to be shown is hosted.
-In-meeting dialog must not use task module. Task module is not invoked in a meeting chat. An external resource URL is used to display content bubble in a meeting. You can use the `submitTask` method to submit data in a meeting chat.
+In-meeting dialog must not use task module. Task module isn't invoked in a meeting chat. An external resource URL is used to display the content bubble in a meeting. You can use the `submitTask` method to submit data in a meeting chat.
> [!NOTE] > * 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, your initial invoke request payload must rely on the `from.id` request metadata in the `from` object, not the `from.aadObjectId` request metadata. `from.id` is the user ID and `from.aadObjectId` is the Azure Active Directory (AAD) 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).
+> * 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 Azure Active Directory (AAD) 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).
#### Shared meeting stage > [!NOTE]
-> * This capability is currently available in [developer preview](../resources/dev-preview/developer-preview-intro.md) only.
+> This capability is currently available in [developer preview](../resources/dev-preview/developer-preview-intro.md) only.
-Shared meeting stage allows meeting participants to interact with and collaborate on app content in real-time.
+Shared meeting stage allows meeting participants to interact with and collaborate on app content in real time.
-The required context is `meetingStage` in the app manifest. A prerequisite for this is to have the `meetingSidePanel` context. This enables **Share** in the meetingSidePanel.
+The required context is `meetingStage` in the app manifest. A prerequisite is to have the `meetingSidePanel` context and it enables **Share** in the `meetingSidePanel`.
![Share to stage during meeting experience](~/assets/images/apps-in-meetings/share_to_stage_during_meeting.png)
-To enable shared meeting stage, configure your app manifest like this:
+To enable shared meeting stage, configure your app manifest as follows:
```json "configurableTabs": [
See how to [design a shared meeting stage experience](~/apps-in-teams-meetings/d
### After a meeting
-The configurations after and [before meetings](#before-a-meeting) are the same.
+The configurations of after and [before meetings](#before-a-meeting) are the same.
## Code sample |Sample name | Description | Sample | |-|--|--|-|--|
-| Meeting app | Demonstrates how to use the Meeting Token Generator app to request a token, which is generated sequentially so that each participant has a fair opportunity to contribute in a meeting. This can be useful in situations like scrum meetings and Q&A sessions. | [View](https://github.com/OfficeDev/microsoft-teams-sample-meetings-token) |
+| 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-sample-meetings-token) |
## See also
platform Meeting App Extensibility https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/apps-in-teams-meetings/meeting-app-extensibility.md
Title: Meeting app extensibility
+ Title: Unified meetings apps
-description: Understand the meeting app extensibility
+description: Understand unified meetings apps
-# Meeting app extensibility
+# Unified meetings apps
-TeamsΓÇÖ meeting app extensibility is based on the following concepts:
+Teams unified meetings apps are based on the following concepts:
-* A meeting lifecycle has various stages, such as pre-meeting, in-meeting, and post-meeting.
+* 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 information about the meeting lifecycle and how to integrate tabs, bots, and messaging extensions in a meeting. It provides information to identify various participant roles and user types to perform tasks.
+> [!VIDEO https://www.youtube-nocookie.com/embed/rrNpFJbxqrg]
+
+This article covers the information about meeting lifecycle and how to integrate tabs, bots, and messaging extensions. It identifies different participant roles and user types.
## Meeting lifecycle
A meeting lifecycle consists of pre-meeting, in-meeting, and post-meeting app ex
### Integrate tabs into the meeting lifecycle
-Tabs allow 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 a Teams meeting, users can add a tab by selecting <img src="~/assets/images/apps-in-meetings/plusbutton.png" alt="Plus button" width="30"/>, and choosing the app that they want to install.
+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] > If you have integrated a tab with your meeting, then your app must follow the Teams [single sign-on (SSO) authentication flow for tabs](../tabs/how-to/authentication/auth-aad-sso.md).
Tabs allow team members to access services and content in a specific space withi
#### Pre-meeting app experience
-With the pre-meeting app experience, you can find and add meeting apps and perform pre-meeting tasks, such as developing a poll to survey meeting participants.
+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.
- ![Pre-meeting experience](../assets/images/apps-in-meetings/PreMeeting.png)
+ <img src="../assets/images/apps-in-meetings/PreMeeting.png" alt="Pre-meeting experience" width="900"/>
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.
- > * Tab layout must be in an organized state, if there are more than 10 polls or surveys.
+ > [!NOTE]
+ > * You can also add a tab to an existing meeting using the meeting **Chat** tab.
+ > * Tab layout must be in an organized state, if there are more than 10 polls or surveys.
# [Desktop](#tab/desktop)
With the pre-meeting app experience, you can find and add meeting apps and perfo
# [Mobile](#tab/mobile)
-After the tabs are added to an existing meeting on desktop or web, you can see the same apps in pre-meeting experience under **More** section of the meeting details.
+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.
<img src="../assets/images/apps-in-meetings/mobilepremeeting.png" alt="Mobile pre-meeting experience" width="200"/>
For mobile, meeting apps are available from **Apps** > ellipses &#x25CF;&#x25CF;
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 a feedback.
+1. In the in-meeting dialog box, enter your response as feedback.
# [Desktop](#tab/desktop)
For mobile, meeting apps are available from **Apps** > ellipses &#x25CF;&#x25CF;
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 a feedback.
+The in-meeting dialog box is displayed where you can enter your response as feedback.
<img src="../assets/images/apps-in-meetings/mobile-in-meeting-dialog-view.png" alt="Mobile dialog box view" width="200"/>
The in-meeting dialog box is displayed where you can enter your response as a fe
> [!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, you will get a notification that the results are successfully downloaded.
+> * 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. The context field is used for this purpose. It is also the part of a share-tray experience, subject to specified design guidelines. The following image illustrates the in-meeting side panel:
The following image illustrates the in-meeting side panel:
The following table describes the behavior of app when it is approved and not approved:
-|App capability | App is approved | App is not approved |
+|App capability | App is approved | App isn't approved |
||||
-| Meeting extensibility | The app will appear in meetings. | The app will not appear in meetings for the mobile clients. |
+| Meeting extensibility | The app will appear in meetings. | The app won't appear in meetings for the mobile clients. |
#### Post-meeting app experience
The following image displays the **Contoso** tab with results of poll and feedba
### Integrate bots into the meeting lifecycle
-Bots 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/create-apps-for-teams-meetings.md#meeting-apps-api-references).
+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 messaging extensions into the meeting lifecycle
-To implement messaging extensions, start with [build a messaging extension](../messaging-extensions/how-to/create-messaging-extension.md) and then continue with [create apps for Teams meetings](../apps-in-teams-meetings/create-apps-for-teams-meetings.md#meeting-apps-api-references).
+To implement messaging extension, start with [build a messaging 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 meeting app extensibility allows you to design your app based on participant roles in a meeting.
+The Teams unified meetings apps allow you to design your app based on participant roles in a meeting.
## Participant roles in a meeting ![Participants in a meeting](../assets/images/apps-in-meetings/participant-roles.png)
-Default participant settings are determined by an organization's IT administrator. The following are the 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**: The organizer schedules a meeting, sets the meeting options, assigns meeting roles, and starts the meeting. Only users with M365 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 cannot 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 a user who has been invited to attend a meeting but is not authorized to act as a presenter. Attendees can interact with other meeting members but cannot manage any of the meeting settings or share content.
+* **Organizer**: The organizer schedules a meeting, sets the meeting options, assigns meeting roles, and starts the meeting. The users with Microsoft 365 account and Teams license can only be the 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**: The presenters have same capabilities of the 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 a user who has been invited to attend a meeting. But attendees aren't authorized to 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.
After you design your app based on participant roles in a meeting, you can ident
## User types in a meeting
+User types, such as organizer, presenter, or attendee 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 perform one of the [participant roles 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 are usually 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 AAD and have same Teams capabilities as a native team member with access to team chats, meetings, and files. A guest user 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 do not 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).
+* **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 AAD 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.
The following list details the various user types along with their accessibility
> [!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 do not have an AAD identity and are not federated with a tenant. The anonymous participants are like external users, but their identity is not projected in the meeting. Anonymous users are not able to access apps in a meeting window. An anonymous user cannot be an organizer but can be a presenter or attendee.
+* **Anonymous**: Anonymous users don't have an AAD 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).
-A guest or anonymous user cannot add, remove, or uninstall apps.
+A guest or anonymous user can't add, remove, or uninstall apps.
-The following table provides the user types and what features each user can access:
+The following table provides the user types and lists the features that each user can access:
| User type | Tabs | Bots | Messaging extensions | Adaptive Cards | Task modules | In-meeting dialog | | :-- | :-- | :-- | :-- | :-- | :-- | :-- | | Anonymous user | Not available | Not available | Not available | Interactions in the meeting chat are allowed. | Interactions in the meeting chat from an Adaptive Card are allowed. | Not available |
-| Guest that is part of the tenant AAD | Interaction is allowed. Creating, updating, and deleting are not allowed. | Not available | Not available | Interactions in the meeting chat are allowed. | Interactions in the meeting chat from an Adaptive Card are allowed. | Available |
-| Federated user. For more information, see [non-standard users](/microsoftteams/non-standard-users). | Interaction is allowed. Creating, updating, and deleting are not allowed. | Interaction is allowed. Acquiring, updating, and deleting are not allowed. | Not available | Interactions in the meeting chat are allowed. | Interactions in the meeting chat from an Adaptive Card are allowed. | Not available |
+| Guest that is part of the tenant AAD | 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 an Adaptive Card are allowed. | Available |
+| Federated user. For more information, see [non-standard users](/microsoftteams/non-standard-users). | Interaction is allowed. 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 an Adaptive Card are allowed. | Not available |
## See also
platform Teams Apps In Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/apps-in-teams-meetings/teams-apps-in-meetings.md
keywords: teams apps meetings user participant role api
# Apps for Teams meetings
-Meetings enable collaboration, partnership, informed communication, and shared feedback in an inclusive and active forum. The meeting app can deliver a user experience for each stage of the meeting lifecycle including 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 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.
-The users can access apps during meetings using the tab gallery, for example:
+The users can access apps during meetings using the tab gallery from their calendar, such as:
* Pre-stage a Kanban board. * Launch an in-meeting actionable dialog.
The users can access apps during meetings using the tab gallery, for example:
> [!VIDEO https://www.youtube-nocookie.com/embed/nKAy5rNDus4]
+The following illustration gives you an idea of the meeting app extensibility features:
+
+![Meeting app extensibility](../assets/images/apps-in-meetings/meetingappextensibility.png)
+ This article provides an overview of meeting app extensibility, API references, enable and configure apps for meetings, and custom Together Mode scenes in Teams.
-You can enhance your meeting experience by using the meeting extensibility feature, which enables you to integrate your apps within meetings. It also includes different stages of a meeting lifecycle, where you can integrate tabs, bots, and messaging extensions. With meetings extensibility APIs, you can identify different participant roles and user types, get meeting events, generate in-meeting dialogs, and so on.
+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 messaging extensions. You can identify various participant roles and user types, get meeting events, and generate in-meeting dialogs.
-To customize Teams with apps for meetings, you can enable your apps for Teams meetings by updating your app manifest and you can also configure your apps for meeting scenarios.
+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.
-The new custom Together Mode scenes feature enables users to collaborate in a meeting with their team in one place without being separated by boxes.
+The new custom Together Mode scenes feature enables users to collaborate in a meeting with their team in one place.
## See also
platform Teams Together Mode https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/apps-in-teams-meetings/teams-together-mode.md
> [!NOTE] > This feature is currently available in [public developer preview](../resources/dev-preview/developer-preview-intro.md) only.
-Custom Together Mode scenes in Microsoft Teams provides an immersive and engaging meeting environment that brings people together and encourages them to turn on their video. It digitally combines participants into a single virtual scene and places their video streams in pre-determined seats designed and fixed by the scene creator.
+Custom Together Mode scenes in Microsoft Teams provide an immersive and engaging meeting environment with the following actions:
-> [!VIDEO https://www.youtube-nocookie.com/embed/MGsNmYKgeTA]
+* Bring people together and encourage them to turn on their video.
+* Combine participants digitally into a single virtual scene.
+* Place the participants' video streams in pre-determined seats designed and fixed by the scene creator.
-A scene in custom Together Mode scenes is an artifact created by the scene developer using the Microsoft Scene studio. In a conceived scene setting, participants have designated seats with video streams rendered in those seats.
+> [!VIDEO https://www.youtube-nocookie.com/embed/MGsNmYKgeTA]
-> [!NOTE]
-> Scene only apps are recommended as the acquisition experience for such apps is more seamless.
+In custom Together Mode scenes, the scene is an artifact. The scene is created by the scene developer using the Microsoft Scene studio. In a conceived scene setting, participants have seats with video streams. The videos are rendered in those seats. Scene only apps are recommended as the experience for such apps is clear.
The following process gives an overview to create a scene only app: :::image type="content" source="../assets/images/apps-in-meetings/create-together-mode-scene-flow.png" alt-text="Create scene only app" border="false":::
-> [!NOTE]
-> * A scene only app is still an app in Microsoft Teams. The Scene studio handles the app package creation in the background.
-> * Multiple scenes in a single app package appear as a flat list of scenes to users.
+A scene only app is still an app in Microsoft Teams. The Scene studio handles the app package creation in the background. Multiple scenes in a single app package appear as a flat list to the users.
## Prerequisites You must have a basic understanding of the following to use custom Together Mode scenes:
-* Definition of scene and seats in a scene.
+* Define scene and seats in a scene.
* Have a Microsoft Developer account and be familiar with the Microsoft Teams [Developer Portal](../concepts/build-and-test/teams-developer-portal.md) and App Studio.
-* [Concept of app sideloading](../concepts/deploy-and-publish/apps-upload.md).
-* Ensure that the Administrator has granted permission to [**Upload a custom app**](../concepts/deploy-and-publish/apps-upload.md) and to select all filters as part of App Setup and Meeting policies respectively.
+* Understand the [concept of app sideloading](../concepts/deploy-and-publish/apps-upload.md).
+* Ensure that the Administrator has granted permission to [**Upload a custom app**](../concepts/deploy-and-publish/apps-upload.md) and select all filters as part of App Setup and Meeting policies respectively.
## Best practices
-Prior to building a scene, consider the following to have a seamless scene building experience:
+Consider the following practices for a scene building experience:
* Ensure that all images are in PNG format.
-* Ensure that the final package with all the images put together must not exceed 1920x1080 resolution.
-
- > [!NOTE]
- > The resolution is an even number. This is a requirement for scenes to be lit up successfully.
-
+* Ensure that the final package with all the images put together must not exceed 1920x1080 resolution. The resolution is an even number. This resolution is a requirement for scenes to be shown successfully.
* Ensure that the maximum scene size is 10 MB.
-* Ensure that the maximum size of each image is 5 MB.
-
- > [!NOTE]
- > * A scene is a collection of multiple images. The limit is for each individual image.
- > * The individual image resolution must also be an even number.
-
-* Ensure that the **Transparent** checkbox is selected if the image is transparent. This checkbox is available on the right panel when an image is selected.
-
- > [!NOTE]
- > Overlapping images need to be marked as **Transparent** to indicate that they are overlapping images in the scene.
+* Ensure that the maximum size of each image is 5 MB. A scene is a collection of multiple images. The limit is for each individual image.
+* Ensure to select **Transparent** as required. This checkbox is available on the right panel when an image is selected. The overlapping images must be marked as **Transparent** to indicate that they're overlapping images in the scene.
## Build a scene using the Scene studio
-Microsoft has a Scene studio that allows you to build scenes. It is available on [Scenes Editor - Teams Developer Portal](https://dev.teams.microsoft.com/scenes).
+Microsoft has a Scene studio that allows you to build scenes. It's available on [Scenes Editor - Teams Developer Portal](https://dev.teams.microsoft.com/scenes). This document refers to Scene studio in the Microsoft Teams Developer Portal. The interface and functionalities are all the same in App Studio Scene Designer.
-> [!NOTE]
-> This document is referring to Scene studio in the Microsoft Teams Developer Portal. The interface and functionalities are all the same in App Studio Scene Designer.
-
-A scene in the context of the Scene studio is an artifact that contains the following:
-
-* Seats reserved for meeting organizer and meeting presenters.
-
- > [!NOTE]
- > Presenter does not refer to the user who is actively sharing. It refers to the [meeting role](https://support.microsoft.com/en-us/office/roles-in-a-teams-meeting-c16fa7d0-1666-4dde-8686-0a0bfe16e019).
+A scene in the context of the Scene studio is an artifact that contains the following elements:
-* Seat and image for each participant with an adjustable width and height.
+* Seats reserved for meeting organizer and meeting presenters. The presenter doesn't refer to the user who is actively sharing. It refers to the [meeting role](https://support.microsoft.com/en-us/office/roles-in-a-teams-meeting-c16fa7d0-1666-4dde-8686-0a0bfe16e019).
- > [!NOTE]
- > PNG is the only supported format.
+* Seat and image for each participant with an adjustable width and height. Only PNG format is supported for the image.
* XYZ coordinates of all the seats and images.+ * Collection of images that are camouflaged as one image.
-The seat dimensions become the canvas for rendering the participant video stream. The following image shows each seat represented as an avatar for building scenes:
+The following image shows each seat represented as an avatar for building the scenes:
![Scene studio](../assets/images/apps-in-meetings/scene-design-studio.png)
The seat dimensions become the canvas for rendering the participant video stream
1. Go to [Scenes Editor - Teams Developer Portal](https://dev.teams.microsoft.com/scenes).
- >[!NOTE]
- > * To open Scene studio, you can navigate to the home page of [Teams Developer Portal](https://dev.teams.microsoft.com/home) and select **Create custom scenes for meetings**.
- > * To open Scene studio, you can navigate to the home page of [Teams Developer Portal](https://dev.teams.microsoft.com/home), select **Tools** from the left hand section, and select **Scene studio** from the **Tools** section.
+ Alternately, to open Scene studio you can go to the home page of [Teams Developer Portal](https://dev.teams.microsoft.com/home):
+ * Select **Create custom scenes for meetings**.
+ * Select **Tools** from the left-hand section, and select **Scene studio** from the **Tools** section.
-1. In the **Scenes Editor** page, select **Create a new scene**.
+1. In **Scenes Editor**, select **Create a new scene**.
-1. In the **Scene** box, enter a name for the scene.
+1. In **Scene Name**, enter a name for the scene.
- >[!NOTE]
- > * You can select **Close** to toggle between closing or reopening the right pane.
- > * You can zoom in or zoom out of the scene using the zoom bar for a better view of the scene.
+ * You can select **Close** to toggle between closing or reopening the right pane.
+ * You can zoom in or zoom out of the scene using the zoom bar for a better view of the scene.
-1. Drag and drop the image into the environment as displayed in the following image:
+1. Select **Add images** to add the image into the environment:
+
+ ![Add images into environment](../assets/images/apps-in-meetings/addimages.png)
>[!NOTE] > * You can download the [SampleScene.zip](https://github.com/MicrosoftDocs/msteams-docs/tree/master/msteams-platform/apps-in-teams-meetings/SampleScene.zip) and [SampleApp.zip](https://github.com/MicrosoftDocs/msteams-docs/tree/master/msteams-platform/apps-in-teams-meetings/SampleApp.zip) files with the images.
- > * Alternately, you can add background images to the scene using **Add images**.
-
- ![Drag into the scene](../assets/images/apps-in-meetings/drag-and-drop-scene.png)
-1. Select the image that you have placed.
+1. Select the image that you've added.
-1. From the right pane, select an alignment for the image or use the **Resize** slider to adjust the image size.
+1. From the right pane, select an alignment for the image or use **Resize** to adjust the image size:
![Alignment for images](../assets/images/apps-in-meetings/image-alignment.png)
The seat dimensions become the canvas for rendering the participant video stream
1. In the upper-right corner, select **Participants** under **Layers**.
-1. Select the number of participants for the scene from the **Number of participants** box, and select **Add**.
-
- >[!NOTE]
- > * After the scene is shipped, the avatar placements are replaced with actual participant's video streams.
- > * You can drag the participant images around the scene and place them in the required position and resize them using the resize arrow.
-
-1. Select any participant image, and select the **Assign Spot** check box to assign the spot to the participant.
+1. Select the number of participants for the scene from the **Number of participants** box, and select **Add**. After the scene is shipped, the avatar placements are replaced with actual participant's video streams. You can drag the images of the participants around the scene and place them in the required position. You can resize them using the resize arrow.
-1. Select **Meeting Organizer** or **Presenter** role for the participant.
+1. Select any participant image, and select **Assign Spot** to assign the spot to the participant.
- >[!NOTE]
- > In a meeting, one participant must be assigned the role of a meeting organizer.
+1. Select **Meeting Organizer** or **Presenter** role for the participant. In a meeting, one participant must be assigned the role of a meeting organizer:
![Assign spot](../assets/images/apps-in-meetings/assign-spot.png) 1. Select **Save** and select **View in Teams** to quickly test your scene in Microsoft Teams.
- >[!NOTE]
- > * Selecting **View in Teams** automatically creates a Microsoft Teams app that can be viewed in the **Apps** page in the Teams Developer Portal.
- > * Selecting **View in Teams** automatically creates an app package that is appmanifest.json behind the scene. As stated earlier, this is abstracted, but you can access the automatically created app package by navigating to **Apps** from the menu.
- > * To delete a scene you created, select **Delete scene** on the top bar.
+ * Selecting **View in Teams** automatically creates a Microsoft Teams app that can be viewed in the **Apps** page in the Teams Developer Portal.
+ * Selecting **View in Teams** automatically creates an app package that is appmanifest.json behind the scene. You can go to **Apps** from the menu and access the automatically created app package.
+ * To delete a scene you created, select **Delete scene** on the top bar.
+1. In **View in Teams**, select **Preview in Teams**.
1. In the dialog box that appears, select **Add**.
- The scene can be tested or accessed by creating a test meeting and launching custom Together Mode scenes. For more information, see [activate custom Together Mode scenes](#activate-custom-together-mode-scenes).
+ The scene is tested or accessed by creating a test meeting and launching custom Together Mode scenes. For more information, see [activate custom Together Mode scenes](#activate-custom-together-mode-scenes):
![Launch custom Together Mode scenes](../assets/images/apps-in-meetings/launchtogethermode.png)
- >[!NOTE]
- > * The scene can be viewed in the custom Together Mode scenes gallery.
+ The scene can then be viewed in the custom Together Mode scenes gallery.
-1. Optionally, you can select **Share** from the **Save** drop-down menu to create a shareable link to easily distribute your scenes for others to use. Opening this link installs the scene for the user and they can start using it.
+Optionally, you can select **Share** from the **Save** drop-down menu. You can create a shareable link to distribute your scenes for others to use. The user can open the link to install the scene and start using it.
-1. After preview, the scene can be shipped as an app to Teams by going to the Apps section in the Teams Developer Center. From there you can download the app package or publish directly to your organization.
+After preview, the scene is shipped as an app to Teams by following the steps for app submission. This step requires the app package. The app package is different from the scene package, for the scene that was designed. The app package created automatically is found in the **Apps** section in the Teams Developer Center.
- >[!NOTE]
- > This step requires the app package that is different from the scene package, for the scene that was designed. The app package created automatically can be found in the **Apps** section in the Teams Developer Center.
-
-1. Optionally, the scene package can be saved by selecting **Export** from the **Save** drop-down menu. A .zip file, that is the scene package, is downloaded.
+Optionally, the scene package is retrieved by selecting **Export** from the **Save** drop-down menu. A **.zip** file, that is the scene package, is downloaded. Scene package includes a scene.json and the PNG assets used to build a scene. The scene package is reviewed for incorporating other changes:
- ![Export a scene](../assets/images/apps-in-meetings/build-a-scene.png)
-
- >[!NOTE]
- > Scene package comprises of a scene.json and the PNG assets used to build a scene. The scene package can be reviewed for incorporating other changes as described in the Sample scene.json section of this document.
+![Export a scene](../assets/images/apps-in-meetings/build-a-scene.png)
-A more complex scene that leverages the Z-axis is demonstrated in the step-by-step getting started sample.
+A complex scene that uses the Z-axis is demonstrated in the step-by-step getting started sample.
## Sample scene.json
-Scene.json along with the images indicate the exact position of the seats. A scene consists of bitmap images, sprites, and rectangles to put participant videos in. These sprites and participant boxes are defined in a world coordinate system with the X-axis pointing to the right and the Y-axis pointing downwards. Custom Together Mode scenes supports zooming in on the current participants. This is helpful for small meetings in a large scene. A sprite is a static bitmap image positioned in the world. The Z value of the sprite determines the position of the sprite. Rendering starts with the sprite with lowest Z value, so higher Z value means it is closer to the camera. Each participant has its own video feed, which is segmented so that only the foreground is rendered.
+Scene.json along with the images indicate the exact position of the seats. A scene consists of bitmap images, sprites, and rectangles to put participant videos in. These sprites and participant boxes are defined in a world coordinate system. The X-axis points to the right and the Y-axis points downwards.
-Following is the scene.json sample:
+Custom Together Mode scenes support zooming in on the current participants. This feature is helpful for small meetings in a large scene. A sprite is a static bitmap image positioned in the world. The Z value of the sprite determines the position of the sprite. Rendering starts with the sprite with lowest Z value, so higher Z value means it's closer to the camera. Each participant has its own video feed, which is segmented so only the foreground is rendered.
+
+The following code is the scene.json sample:
```json {
Following is the scene.json sample:
} ```
-Each scene has a unique ID and name. The scene JSON also contains information on all the assets used for the scene. Each asset contains a filename, width, height, and position on the X and Y-axis. Similarly, each seat contains a seat ID, width, height, and position on the X and Y-axis. The seating order is generated automatically and can be altered as per preference.
-
-> [!NOTE]
-> Seating order number corresponds to the order of people joining the call.
+Each scene has a unique ID and name. The scene JSON also contains information on all the assets used for the scene. Each asset contains a filename, width, height, and position on the X and Y-axis. Similarly, each seat contains a seat ID, width, height, and position on the X and Y-axis. The seating order is generated automatically and is altered as per preference. The seating order number corresponds to the order of people joining the call.
-The zOrder represents the order of placing images and seats along the Z-axis. In many cases, it gives a sense of depth or partition if required. For more information, see the step-by-step getting started sample. The sample leverages the zOrder.
+The `zOrder` represents the order of placing images and seats along the Z-axis. It gives a sense of depth or partition if necessary. See the step-by-step getting started sample. The sample uses the `zOrder`.
-Now that you have gone through the sample scene.json, you can activate the custom Together Mode scenes to engage in scenes.
+Now that you've gone through the sample scene.json, you can activate the custom Together Mode scenes to engage in scenes.
## Activate custom Together Mode scenes
-Get end-to-end information of how an end user engages with scenes in custom Together Mode scenes.
+Get more information of how a user engages with scenes in custom Together Mode scenes.
**To select scenes and activate custom Together Mode scenes**
Get end-to-end information of how an end user engages with scenes in custom Toge
1. From the **Scene Gallery**, select the scene you want to use for your meeting.
-1. Optionally, the meeting organizer and presenter can **Change scene for all participants** in the meeting.
+ Optionally, the meeting organizer and presenter can **Change scene for all participants** in the meeting.
>[!NOTE]
- > At any point in time, only one scene can be used homogeneously for the meeting. If a presenter or organizer changes a scene, it changes for all. Switching in or out of custom Together Mode scenes is up to individual participants, but while in custom Together Mode scenes, all participants have the same scene.
+ > At any point in time, only one scene is used homogeneously for the meeting. If a presenter or organizer changes a scene, it changes for all. Switching in or out of custom Together Mode scenes is up to individual participants, but while in custom Together Mode scenes, all participants have the same scene.
1. Select **Apply**. Teams installs the app for the user and applies the scene. ## Open a custom Together Mode scenes Scene Package
-You can share the Scene Package that is a .zip file retrieved from the Scene studio to other creators to further enhance the scene. The **Import a Scene** functionality can be leveraged. This tool helps unwrap a scene package to let the creator continue building the scene.
+You can share the Scene Package that is a .zip file retrieved from the Scene studio to other creators to further enhance the scene. The **Import a Scene** functionality helps unwrap a scene package to let the creator continue building the scene.
![Scene zip file](../assets/images/apps-in-meetings/scene-zip-file.png)
platform Auth Aad Sso Bots https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/bots/how-to/authentication/auth-aad-sso-bots.md
If the application contains a bot and a tab, then use the following code to add
**webApplicationInfo** is the parent of the following elements:
-* **id** - The client ID of the application. This is the application ID that you obtained as part of registering the application with AAD.
+* **id** - The client ID of the application. This is the application ID that you obtained as part of registering the application with AAD. Do not share this Application ID with multiple Teams apps. Create a new AAD app for each application manifest that uses `webApplicationInfo`.
* **resource** - The domain and subdomain of your application. This is the same URI, including the `api://` protocol that you registered when creating your `scope` in [Register your app through the AAD portal](#register-your-app-through-the-aad-portal). You must not include the `access_as_user` path in your resource. The domain part of this URI must match the domain and subdomains used in the URLs of your Teams application manifest. ### Add the code to request and receive a bot token
platform Channel Messages With Rsc https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/bots/how-to/conversations/channel-messages-with-rsc.md
To sideload in a team to test, whether all channel messages in a team with RSC a
![Bot receives message](~/bots/how-to/conversations/Media/botreceivingmessage.png)
+## Code sample
+
+| Sample name | Description | C# |Node.js|
+|-|-||-|
+|Channel messages with RSC permissions| Microsoft Teams sample app demonstrating on how a bot can receive all channel messages with RSC without being @mentioned.| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-receive-channel-messages-withRSC/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-receive-channel-messages-withRSC/nodejs) |
+ ## See also * [Bot conversations](/microsoftteams/platform/bots/how-to/conversations/conversation-basics)
platform Conversational Tabs https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/tabs/how-to/conversational-tabs.md
microsoftTeams.conversations.onCloseConversation = (conversationResponse) => {
}; ```
+## Code sample
+
+| Sample name | Description | C# |Node.js|
+|-|-||-|
+|Create Conversational tab| Microsoft Teams tab sample app for demonstrating create conversation tab. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-conversations/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-conversations/nodejs) |
+ ## See also * [Teams tabs](~/tabs/what-are-tabs.md)
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/whats-new.md
Microsoft Teams platform features that are available to all app developers.
| **Date** | **Notes** | **Changed topics** | | -- | | |
+|08/25/2021| Introduced step-by-step guide to create a Teams bot with Single sign-on (SSO). | [Step-by-step guide to create Teams bot with SSO](sbs-bots-with-sso.yml) |
|08/19/2021| Installation update event received when you install a bot to a conversation thread. | [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 with Adaptive Cards](tabs/how-to/build-adaptive-card-tabs.md)| |08/04/2021| Tabs will no longer have margins surrounding their experiences. | [Removing tab margins](resources/removing-tab-margins.md) |
Developer preview is a public program that provides early access to unreleased T
| **Date** | **Notes** | **Changed topics** | | -- | | |
-|06/23/2021| Meeting Details API and real-time Teams meeting events. | [Create apps for Teams meetings](~/apps-in-teams-meetings/create-apps-for-teams-meetings.md#meeting-details-api) |
+|06/23/2021| Meeting Details API and real-time Teams meeting events. | [Create apps for Teams meetings](~/apps-in-teams-meetings/API-references.md#meeting-details-api) |
|06/21/2021|Uninstall behavior for personal app with bot | [Uninstall behavior updates in personal apps with bots](bots/how-to/conversations/subscribe-to-conversation-events.md#uninstall-behavior-for-personal-app-with-bot)| |06/16/2021| Resource-specific consent for chats. |[Resource-specific consent](graph-api/rsc/resource-specific-consent.md), [Test resource-specific consent permissions in Teams](graph-api/rsc/test-resource-specific-consent.md)| |05/25/2021| Updated Teams Toolkit for [Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=TeamsDevApp.ms-teams-vscode-extension) and [Visual Studio](https://marketplace.visualstudio.com/items?itemName=msft-vsteamstoolkit.vsteamstoolkit&ssr=false#overview). | [Get started with Teams app development](~/get-started/prerequisites.md) |