Updates from: 02/23/2023 02:33:21
Service Microsoft Docs article Related commit history on GitHub Change details
platform Build Apps For Teams Meeting Stage https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/build-apps-for-teams-meeting-stage.md
There are many scenarios where sharing the entire app to the meeting stage isn't
To help users in such scenarios, we released APIs within the Microsoft Teams JavaScript client library (TeamsJS) that allow you to programmatically invoke share to stage for specific parts of the app from a button in the meeting side panel.
-# [Desktop](#tab/desktop)
-
-The following image shows the share to stage option in the Teams desktop client:
-
- :::image type="content" source="../assets/images/apps-in-meetings/shared-meeting-stage-edit-review-component.png" alt-text="The screenshot shows the share to meeting stage view.":::
-
-# [Mobile](#tab/mobile)
-
-The following image shows the share to stage option in the Teams mobile client:
-
- :::image type="content" source="../assets/images/meeting-stage/meeting-share-to-stage-mobile.png" alt-text="This screenshot shows meeting stage view of the app you shared to meeting in Teams mobile.":::
-- Use the following APIs to share specific part of the app:
The following table provides the response codes:
The `getAppContentStageSharingCapabilities` API enables you to fetch the app's capabilities for sharing the app content to meeting stage. Apps need to call the `getAppContentStageSharingCapabilities` API to either enable or disable the custom share to stage button for a meeting participant in the meeting side panel. The share to stage button must be disabled or hidden if a meeting participant doesn't have permission to share the app content to meeting stage.
-The app sharing capabilities depend on the tenant user type and participant roles in a meeting.
+The app sharing capabilities depends on the tenant user type and participant roles in a meeting.
* **User type**: In-tenant, guest, and external user type participants can share the app to stage and also see and interact with the app being shared on stage. Anonymous user can't see, share, or interact with the app that is being shared on the stage. For more information, see [user types in a meeting.](~/apps-in-teams-meetings/teams-apps-in-meetings.md#user-types-in-teams)
The following table provides the user types and lists the features that each use
| User type | Scheduled meeting or Instant calendar meeting | One-on-one call | Group call | Scheduled channel meeting | | :-- | :-- | :-- | :-- | :-- | | In-tenant | Presenter or organizer can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage. <br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. |
-| Guest | Presenter or organizer can start, view and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. |
+| Guest | Presenter or organizer can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Presenter or organizer can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. |
| Federated or External | Presenter can start, view, and interact with the app in the meeting stage.<br><br> Attendee can only view and interact. | Not available | Not available | Presenter can start, view, and interact with app on meeting stage.<br><br> Attendee can only view and interact. | | Anonymous |Presenter can start, view, and interact with the app on meeting stage.<br><br> Attendee can only view and interact. | Not available | Not available | Not available |
platform Build Extensible Conversation For Meeting Chat https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/build-extensible-conversation-for-meeting-chat.md
The [Bot Framework](https://dev.botframework.com/) is a rich SDK used to create
### Code samples - Bots
-|Sample name | Description | .NETCore | Node.js | Python |
-|-|--|--|-|
-| Teams conversation bot | Messaging and conversation event handling | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/python) |
-|Bot samples | Set of bot samples | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk) |
+|Sample name | Description | .NETCore | Node.js | Python | Java| Manifest
+|-|--|--|-|-|-|-|
+| Teams conversation bot | Messaging and conversation event handling | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/java) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp/demo-manifest/bot-conversation.zip)
+|Bot samples | Set of bot samples | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk) |
## Message extensions
The following table provides the user types and lists the features that each use
* [Design task modules for your Microsoft Teams app](../task-modules-and-cards/task-modules/design-teams-task-modules.md) * [Receive all conversation messages with RSC](../bots/how-to/conversations/channel-messages-with-rsc.md) * [Conversation basics](../bots/how-to/conversations/conversation-basics.md)
-* [Adaptive Cards](../task-modules-and-cards/cards/cards-reference.md#adaptive-card)
+* [Adaptive Card](../task-modules-and-cards/cards/cards-reference.md#adaptive-card)
platform Build Tabs For Meeting https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/build-tabs-for-meeting.md
The following image shows a tab added to the meeting details page in the Teams m
1. In the app gallery, select the app that you want to add and follow the steps as required. The tab is added to the meeting chat.
-# [Meeting chat view desktop](#tab/meeting-chat-view-desktop)
-
- The following image shows an app added to the meeting chat in the Teams desktop client:
-
- :::image type="content" source="../assets/images/apps-in-meetings/meeting-chat-view.png" alt-text="The screenshot shows the meeting chat view in a meeting chat in Teams desktop.":::
-
-# [Meeting chat view mobile](#tab/meeting-chat-view-mobile)
-
- The following image shows an app added to the meeting chat in the Teams mobile client:
-
- :::image type="content" source="../assets/images/apps-in-meetings/meeting-chat-view-mobile.png" alt-text="The screenshot shows the meeting chat view in a meeting chat in Teams mobile.":::
--
+ :::image type="content" source="../assets/images/apps-in-meetings/meeting-chat-view.png" alt-text="Screenshot shows the meeting chat view in the Teams meeting.":::
### Meeting side panel view
The following image shows a tab added to the meeting details page in the Teams m
1. This results in rendering tab on the stage for every participant in the meeting.
-# [Meeting stage view desktop](#tab/meeting-stage-view-desktop)
-
- The following image shows a tab added to the meeting stage in the Teams desktop client:
-
- :::image type="content" source="../assets/images/meeting-stage-view.png" alt-text="This screenshot shows meeting stage view of the app you shared to meeting in Teams desktop.":::
-
-# [Meeting stage view mobile](#tab/meeting-stage-view-mobile)
-
- The following image shows a tab added to the meeting stage in the Teams mobile client:
-
- :::image type="content" source="../assets/images/meeting-stage/meeting-stage-view-mobile.png" alt-text="This screenshot shows meeting stage view of the app you shared to meeting in Teams mobile.":::
--
+ :::image type="content" source="../assets/images/meeting-stage-view.png" alt-text="Screenshot shows meeting stage view of the app you shared to meeting.":::
### Apps in channel meeting
A public scheduled channel meeting has the same list of apps as its parent team.
However, the tab instances in a channel meeting are separate from the tabs in the channel itself. For example, suppose a *Development* channel has a *Polly* tab. If you create a *Standup* meeting in that channel, that meeting wouldn't have a *Polly* tab, until you explicitly [add the tab to the meeting](#meeting-details-view).
-# [Channel meeting desktop](#tab/channel-meeting-desktop)
-
- The following image shows apps in a channel in the Teams desktop client:
-
- :::image type="content" source="../assets/images/apps-in-meetings/apps-in-channel-meeting-desktop.png" alt-text="This screenshot shows a tab added to a channel meeting in Teams desktop.":::
-
-# [Channel meeting mobile](#tab/channel-meeting-mobile)
-
- The following image shows apps in a channel in the Teams mobile client:
-
- :::image type="content" source="../assets/images/apps-in-meetings/apps-in-channel-meeting-mobile.png" alt-text="This screenshot shows a tab added to a channel meeting in Teams mobile.":::
--- In public scheduled channel meetings, after a meeting tab is added, you can select the meeting object in the meeting details page to access the tab. :::image type="content" source="~/assets/images/apps-in-meetings/after-a-meeting1.png" alt-text="Screenshot shows the selection of the meeting object.":::
The `context` property determines if the app is available in specific view after
| **meetingChatTab** | A tab in the header of a group chat between a set of users for a scheduled meeting. You can specify either `meetingChatTab` or `meetingDetailsTab` to ensure the apps work in mobile. | | **meetingDetailsTab** | A tab in the header of the meeting details view of the calendar. You can specify either `meetingChatTab` or `meetingDetailsTab` to ensure the apps work in mobile. | | **meetingSidePanel** | An in-meeting panel opened through the unified bar (U-bar). |
-| **meetingStage** | An app from the `meetingSidePanel` can be shared to the meeting stage. You can't use this app in Teams room clients. |
+| **meetingStage** | An app from the `meetingSidePanel` can be shared to the meeting stage. You can't use this app either on mobile and Teams room clients. |
#### Configure tab app for a meeting
The following table provides the user types and lists the features that each use
## Code sample
-|Sample name | Description | .NET | Node.js |
-|-|--|--|-|
-| Meeting app | Demonstrates how to use the Meeting Token Generator app to request a token. The token is generated sequentially so that each participant has a fair opportunity to contribute in a meeting. The token is useful in situations like scrum meetings and Q&A sessions. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/nodejs) |
-| Meeting stage sample | Sample app to show a tab in meeting stage for collaboration. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs) |
-| Meeting side panel | Sample app to show how to add agenda in a meeting side panel. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/csharp) | NA |
-| In-meeting notification | Demonstrates how to implement in-meeting notification using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/nodejs) |
-| In-meeting document signing | Demonstrates how to implement a document signing Teams app. Includes sharing specific app content to stage, Teams SSO, and user specific stage view. | [View](https://github.com/officedev/microsoft-teams-samples/tree/main/samples/meetings-share-to-stage-signing/csharp) | NA |
+|Sample name | Description | .NET | Node.js | Manifest
+|-|--|--|-|-|
+| Meeting app | Demonstrates how to use the Meeting Token Generator app to request a token. The token is generated sequentially so that each participant has a fair opportunity to contribute in a meeting. The token is useful in situations like scrum meetings and Q&A sessions. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp/demo-manifest/meetings-token-app.zip)
+| Meeting stage sample | Sample app to show a tab in meeting stage for collaboration | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs) |
+| Meeting side panel | Sample app to show how to add agenda in a meeting side panel | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/csharp) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/nodejs) ||
+| In-meeting notification | Demonstrates how to implement in-meeting notification using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/csharp/demo-manifest/Meetings-Events.zip)
+| In-meeting document signing | Demonstrates how to implement a document signing Teams app. Includes sharing specific app content to stage, Teams SSO and user specific stage view. | [View](https://github.com/officedev/microsoft-teams-samples/tree/main/samples/meetings-share-to-stage-signing/csharp) | NA |
| App caching | Sample app to show how app caching works in the meeting side panel. | NA | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-cache-meetings/nodejs) |-
+| Meeting tabs | This sample shows app stage view, Mute/Unmute Teams meeting audio call in meeting Side panel tab. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-tabs/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-tabs/nodejs) |
> [!NOTE] >
-> * Meeting apps (side panel and meeting stage) are supported in Teams desktop and mobile clients.
+> * Meeting apps (side panel and meeting stage) is supported in Teams desktop client.
> * Meeting apps (side panel and meeting stage) in Teams web client is supported only when the [developer preview is enabled](/microsoftteams/platform/resources/dev-preview/developer-preview-intro#enable-developer-preview). ## Step-by-step guides
platform In Meeting Notification For Meeting https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/in-meeting-notification-for-meeting.md
The in-meeting notification is used to engage participants and collect informati
An external resource URL is used to display in-meeting notification. You can use the `submitTask` method to submit data in a meeting chat.
-# [Desktop](#tab/desktop)
-
- The following image shows an in-meeting notification in the Teams desktop client:
-
- :::image type="content" source="../assets/images/apps-in-meetings/in-meeting-dialogbox.png" alt-text="Screenshot shows an in-meeting notification on Teams desktop.":::
-
-# [Mobile](#tab/mobile)
-
- The following image shows an in-meeting notification in the Teams mobile client:
-
- :::image type="content" source="../assets/images/apps-in-meetings/in-meeting-notification-mobile.png" alt-text="Screenshot shows an in-meeting notification in on Teams mobile.":::
-- You can also add the Teams display picture and people card of the user to in-meeting notification based on `onBehalfOf` token with user MRI and display name passed in payload. Following is an example payload:
The following table provides the user types and lists the features that each use
| User type | Scheduled meeting or Instant calendar meeting | One-on-one call | Group call | Scheduled channel meeting | | :-- | :-- | :-- | :-- | :-- |
-| In-tenant | Available | Available | Available | Available |
+| In-tenant user | Available | Available | Available | Available |
| Guest | Available | Available | Available | Available | | Federated or External | Available | Not available | Not available | Available | | Anonymous | Available | Not available | Not available | Not available |
For more information on `targetedMeetingNotification`, see [Targeted meeting not
## Code sample
-Sample name | Description | .NET | Node.js |
-|-|--|--|-|
-| In-meeting notification | Demonstrates how to implement in-meeting notification using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/nodejs) |
-| Targeted-in-meeting notification | Demonstrates how to send notifications to specific participants in a meeting stage. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp) |
+Sample name | Description | .NET | Node.js | Manifest
+|-|--|--|-|-|
+| In-meeting notification | Demonstrates how to implement in-meeting notification using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp/demo-manifest/meetings-notification.zip) |
+| Targeted in-meeting notification | Demonstrates how to send notifications to specific participants in a meeting stage. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp) |
## Step-by-step guide
platform Meeting Apps Apis https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/meeting-apps-apis.md
The `getIncomingClientAudioState` API allows an app to get the incoming audio st
> [!NOTE] >
-> * The `getIncomingClientAudioState` API for mobile is available only in [public developer preview](../resources/dev-preview/developer-preview-intro.md).
+> * The `getIncomingClientAudioState` API for mobile is currently available in [Public Developer Preview](../resources/dev-preview/developer-preview-intro.md).
> * Resource specific consent is available for manifest version 1.12 and later versions, hence this API doesn't work for manifest version 1.11 and earlier versions. ### Manifest
The `toggleIncomingClientAudio` API allows an app to toggle the incoming audio s
> [!NOTE] >
-> * The `toggleIncomingClientAudio` API for mobile is available only in [public developer preview](../resources/dev-preview/developer-preview-intro.md).
+> * The `toggleIncomingClientAudio` API for mobile is currently available in [Public Developer Preview](../resources/dev-preview/developer-preview-intro.md).
> * Resource specific consent is available for manifest version 1.12 and later versions, hence this API doesn't work for manifest version 1.11 and earlier versions. ### Manifest
The following table provides the response codes:
## Code sample
-|Sample name | Description | .NET | Node.js |
-|-|--|--|--|
-| Meetings extensibility | Teams meeting extensibility sample for passing tokens. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/nodejs) |
-| Meeting content bubble bot | Teams meeting extensibility sample for interacting with content bubble bot in a meeting. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-content-bubble/nodejs)|
+|Sample name | Description | .NET | Node.js | Manifest
+|-|--|--|--|--|
+| Meetings extensibility | Teams meeting extensibility sample for passing tokens. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-token-app/csharp/demo-manifest/meetings-token-app.zip)
+| Meeting content bubble bot | Teams meeting extensibility sample for interacting with content bubble bot in a meeting. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp/demo-manifest/meetings-notification.zip) |
| Meeting side panel | Teams meeting extensibility sample for interacting with the side panel in-meeting. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-sidepanel/nodejs)|
-| Details Tab in Meeting | Teams meeting extensibility sample for interacting with Details Tab in-meeting. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-details-tab/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-details-tab/nodejs)|
-| Meeting Events Sample | Sample app to show real-time Teams meeting events|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/nodejs)|
-| Meeting Recruitment Sample |Sample app to show meeting experience for recruitment scenario.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-recruitment-app/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-recruitment-app/nodejs)|
-| App installation using QR code |Sample app that generates the QR code and installs the app using the QR code|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-installation-using-qr-code/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-installation-using-qr-code/nodejs)|
+| Details Tab in Meeting | Teams meeting extensibility sample for interacting with Details Tab in-meeting. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-details-tab/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-details-tab/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-details-tab/csharp/demo-manifest/meetings-details-tab.zip)
+| Meeting Events Sample | Sample app to show real-time Teams meeting events|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-events/csharp/demo-manifest/Meetings-Events.zip)
+| Meeting Recruitment Sample |Sample app to show meeting experience for recruitment scenario.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-recruitment-app/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-recruitment-app/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meeting-recruitment-app/csharp/demo-manifest/Meeting-Recruitment-App.zip)
## See also
platform Teams Apps In Meetings https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/teams-apps-in-meetings.md
Meetings enable collaboration, partnership, informed communication, and shared f
:::row-end::: --> + You must be familiar with the following product concepts to create custom meeting experiences with apps in Microsoft Teams. ## Supported meeting types in Teams
Teams supports access to apps during meeting for the following meeting types:
Learn more about [Teams meetings, expiration, and policies](/microsoftteams/meeting-expiration) and [meetings, webinars, and live events](/microsoftteams/quick-start-meetings-live-events). > [!NOTE] >
-> * Apps for scheduled public channel meetings are available only in [public developer preview](../resources/dev-preview/developer-preview-intro.md).
+> * Apps for scheduled public channel meetings are currently available in [public developer preview](../resources/dev-preview/developer-preview-intro.md).
> * Apps aren't supported in the following: > * [Public Switched Telephone Network (PSTN) Teams calls](/microsoftteams/cloud-voice-landing-page#public-switched-telephone-network-connectivity-options) > * [End-to-end encrypted Teams calls](https://support.microsoft.com/office/use-end-to-end-encryption-for-teams-calls-1274b4d2-b5c5-4b24-a376-606fa6728a90)
For more information, see [roles in a Teams meeting](https://support.microsoft.c
* [Custom Together Mode scenes](~/apps-in-teams-meetings/teams-together-mode.md) * [Get meeting transcripts using Graph APIs](../graph-api/meeting-transcripts/overview-transcripts.md) * [Instrumenting for Teams app specific analytics](../concepts/design/overview-analytics.md#instrumenting-for-teams-app-specific-analytics)+
platform Bot Basics https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/bot-basics.md
# Bot activity handlers
-This document builds on the article on [how bots work](/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0&preserve-view=true) in the core [Bot Framework documentation](/azure/bot-service/?view=azure-bot-service-4.0&preserve-view=true). The primary difference between bots developed for Microsoft Teams and the core Bot Framework is in the features provided in Teams.
+This document builds on the article on [how bots work](https://aka.ms/how-bots-work) in the core [Bot Framework documentation](https://aka.ms/azure-bot-service-docs). The primary difference between bots developed for Microsoft Teams and the core Bot Framework is in the features provided in Teams.
An activity handler is used to organize the conversational logic for your bot. Activities are handled in two ways using Teams activity handlers and bot logic. The Teams activity handler adds support for Teams-specific events and interactions. The bot object contains the conversational reasoning or logic for a turn and exposes a turn handler, which is the method that can accept incoming activities from the bot adapter.
The code snippets for Teams activity handlers:
`OnTeamsChannelCreatedAsync` ```csharp+ protected override Task OnTeamsChannelCreatedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { // Code logic here
protected override Task OnTeamsChannelCreatedAsync(ChannelInfo channelInfo, Team
`OnTeamsChannelDeletedAsync` ```csharp+ protected override Task OnTeamsChannelDeletedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { // Code logic here
protected override Task OnTeamsChannelDeletedAsync(ChannelInfo channelInfo, Team
`OnTeamsChannelRenamedAsync` ```csharp+ protected override Task OnTeamsChannelRenamedAsync(ChannelInfo channelInfo, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { // Code logic here
protected override Task OnTeamsChannelRenamedAsync(ChannelInfo channelInfo, Team
`OnTeamsTeamRenamedAsync` ```csharp+ protected override Task OnTeamsTeamRenamedAsync(TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { // Code logic here
protected override Task OnTeamsTeamRenamedAsync(TeamInfo teamInfo, ITurnContext<
`OnTeamsMembersAddedAsync` ```csharp+ protected override Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> teamsMembersAdded, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken) { // Code logic here
protected override Task OnTeamsMembersAddedAsync(IList<TeamsChannelAccount> team
`OnTeamsMembersRemovedAsync` ```csharp+ protected override Task OnTeamsMembersRemovedAsync(IList<TeamsChannelAccount> teamsMembersRemoved, TeamInfo teamInfo, ITurnContext<IConversationUpdateActivity> turnContext, CancellationToken cancellationToken); { // Code logic here } ```
-`OnTeamsMessageEditAsync`
-
-```csharp
-protected override async Task OnTeamsMessageEditAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
- {
- // Code logic here
- }
-```
-
-`OnTeamsMessageUndeleteAsync`
-
-```csharp
-protected override async Task OnTeamsMessageUndeleteAsync(ITurnContext<IMessageUpdateActivity> turnContext, CancellationToken cancellationToken)
- {
- // Code logic here
- }
-```
-
-`OnTeamsMessageSoftDeleteAsync`
-
-```csharp
- protected override async Task OnTeamsMessageSoftDeleteAsync(ITurnContext<IMessageDeleteActivity> turnContext, CancellationToken cancellationToken)
- {
- // Code logic here
- }
-```
- # [JavaScript](#tab/javascript) Bots are created using the Bot Framework. If the bots receive a message activity, then the turn handler receives a notification of that incoming activity. The turn handler then sends the incoming activity to the `onMessage` activity handler. In Teams, this functionality remains the same. If the bot receives a conversation update activity, then the turn handler receives a notification of that incoming activity and sends the incoming activity to `dispatchConversationUpdateActivity`. The Teams activity handler first checks for any Teams specific events. If no events are found, it then passes them along to the Bot Framework's activity handler.
onTeamsMembersRemoved(async (membersRemoved, teamInfo, context, next) => {
Bots are created using the Bot Framework. If the bots receive a message activity, then the turn handler receives a notification of that incoming activity. The turn handler then sends the incoming activity to the `on_message_activity` activity handler. In Teams, this functionality remains the same. If the bot receives a conversation update activity, then the turn handler receives a notification of that incoming activity and sends the incoming activity to `on_conversation_update_activity`. The Teams activity handler first checks for any Teams specific events. If no events are found, it then passes them along to the Bot Framework's activity handler.
-In the Teams activity handler class, there are two primary Teams activity handlers, `on_conversation_update_activity` and `on_invoke_activity`. `on_conversation_update_activity` routes all conversation update activities and `on_invoke_activity` routes all Teams invokes activities.
+In the Teams activity handler class, there are two primary Teams activity handlers, `on_conversation_update_activity` and `on_invoke_activity`. `on_conversation_update_activity` routes all conversation update activities and `on_invoke_activity` routes all Teams invoke activities.
To implement your logic for Teams specific activity handlers, you must override the methods in your bot as shown in the [bot logic](#bot-logic) section. There's no base implementation for these handlers. Therefore, add the logic that you want in your override.
The list of handlers defined in `ActivityHandler` includes the following events:
| Event | Handler | Description | | :-- | :-- | :-- | | Any activity type received | `OnTurnAsync` | This method calls one of the other handlers, based on the type of activity received. |
-| Message activity received | `OnMessageActivityAsync` | You can override this method to handle a `Message` activity. |
-| Message update activity received | `OnMessageUpdateActivityAsync` | You can override this method to handle a message update activity. |
-| Message delete activity received | `OnMessageDeleteActivityAsync` | You can override this method to handle a message delete activity. |
+| Message activity received | `OnMessageActivityAsync` | This method can be overridden to handle a `Message` activity. |
| Conversation update activity received | `OnConversationUpdateActivityAsync` | This method calls a handler if members other than the bot joined or left the conversation, on a `ConversationUpdate` activity. |
-| Non-bot members joined the conversation | `OnMembersAddedAsync` | You can override this method to handle members joining a conversation. |
-| Non-bot members left the conversation | `OnMembersRemovedAsync` | You can override this method to handle members leaving a conversation. |
+| Non-bot members joined the conversation | `OnMembersAddedAsync` | This method can be overridden to handle members joining a conversation. |
+| Non-bot members left the conversation | `OnMembersRemovedAsync` | This method can be overridden to handle members leaving a conversation. |
| Event activity received | `OnEventActivityAsync` | This method calls a handler specific to the event type, on an `Event` activity. |
-| Token-response event activity received | `OnTokenResponseEventAsync` | You can override this method to handle token response events. |
-| Non-token-response event activity received | `OnEventAsync` | You can override this method to handle other types of events. |
-| Other activity type received | `OnUnrecognizedActivityTypeAsync` | You can override this method to handle any activity type otherwise unhandled. |
+| Token-response event activity received | `OnTokenResponseEventAsync` | This method can be overridden to handle token response events. |
+| Non-token-response event activity received | `OnEventAsync` | This method can be overridden to handle other types of events. |
+| Other activity type received | `OnUnrecognizedActivityTypeAsync` | This method can be overridden to handle any activity type otherwise unhandled. |
#### Teams specific activity handlers
The `TeamsActivityHandler` extends the list of handlers in the core Bot Framewor
| Event | Handler | Description | | :-- | :-- | :-- |
-| channelCreated | `OnTeamsChannelCreatedAsync` | You can override this method to handle a Teams channel being created. For more information, see [channel created](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-created) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
-| channelDeleted | `OnTeamsChannelDeletedAsync` | You can override this method to handle a Teams channel being deleted. For more information, see [channel deleted](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-deleted) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| channelRenamed | `OnTeamsChannelRenamedAsync` | You can override this method to handle a Teams channel being renamed. For more information, see [channel renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-renamed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| teamRenamed | `OnTeamsTeamRenamedAsync` | `return Task.CompletedTask;` You can override this method to handle a Teams team being renamed. For more information, see [team renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-renamed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| MembersAdded | `OnTeamsMembersAddedAsync` | This method calls the `OnMembersAddedAsync` method in `ActivityHandler`. You can override this method to handle members joining a team. For more information, see [team members added](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-members-added) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| MembersRemoved | `OnTeamsMembersRemovedAsync` | This method calls the `OnMembersRemovedAsync` method in `ActivityHandler`. You can override this method to handle members leaving a team. For more information, see [team members removed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-members-removed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| messageEdit | `OnTeamsMessageEditAsync` | You can override this method to handle a Teams message edit event. |
-| messageUndelete | `OnTeamsMessageUndeleteAsync` | You can override this method to handle a Teams message undelete event. |
-| messageSoftDelete | `OnTeamsMessageSoftDeleteAsync` | You can override this method to handle a Teams message soft delete event. |
+| channelCreated | `OnTeamsChannelCreatedAsync` | This method can be overridden to handle a Teams channel being created. For more information, see [channel created](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-created) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events). |
+| channelDeleted | `OnTeamsChannelDeletedAsync` | This method can be overridden to handle a Teams channel being deleted. For more information, see [channel deleted](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-deleted) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| channelRenamed | `OnTeamsChannelRenamedAsync` | This method can be overridden to handle a Teams channel being renamed. For more information, see [channel renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-renamed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| teamRenamed | `OnTeamsTeamRenamedAsync` | `return Task.CompletedTask;` This method can be overridden to handle a Teams team being renamed. For more information, see [team renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-renamed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| MembersAdded | `OnTeamsMembersAddedAsync` | This method calls the `OnMembersAddedAsync` method in `ActivityHandler`. The method can be overridden to handle members joining a team. For more information, see [team members added](how-to/conversations/subscribe-to-conversation-events.md#members-added) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| MembersRemoved | `OnTeamsMembersRemovedAsync` | This method calls the `OnMembersRemovedAsync` method in `ActivityHandler`. The method can be overridden to handle members leaving a team. For more information, see [team members removed](how-to/conversations/subscribe-to-conversation-events.md#members-removed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
#### Teams invoke activities
The list of Teams activity handlers called from the `OnInvokeActivityAsync` Team
| fileConsent/invoke | `OnTeamsFileConsentAsync` | This method is invoked when a file consent card activity is received from the connector. | | fileConsent/invoke | `OnTeamsFileConsentDeclineAsync` | This method is invoked when a file consent card is declined by the user. | | actionableMessage/executeAction | `OnTeamsO365ConnectorCardActionAsync` | This method is invoked when a connector card for Microsoft 365 Groups action activity is received from the connector. |
-| signin/verifyState | `OnTeamsSigninVerifyStateAsync` | This method is invoked when a signIn verify state activity is received from the connector. |
-| task/fetch | `OnTeamsTaskModuleFetchAsync` | You can override this method in a derived class to provide logic when a task module is fetched. |
-| task/submit | `OnTeamsTaskModuleSubmitAsync` | You can override this method in a derived class to provide logic when a task module is submitted. |
+| signin/verifyState | `OnTeamsSigninVerifyStateAsync` | This method is invoked when a `signIn` verify state activity is received from the connector. |
+| task/fetch | `OnTeamsTaskModuleFetchAsync` | This method can be overridden in a derived class to provide logic when a task module is fetched. |
+| task/submit | `OnTeamsTaskModuleSubmitAsync` | This method can be overridden in a derived class to provide logic when a task module is submitted. |
-The Invoke activities listed in this section are for conversational bots in Teams. The Bot Framework SDK also supports invoke activities specific to message extensions. For more information, see [what are message extensions](../messaging-extensions/what-are-messaging-extensions.md).
+The Invoke activities listed in this section are for conversational bots in Teams. The Bot Framework SDK also supports invoke activities specific to message extensions. For more information, see [what are message extensions](https://aka.ms/azure-bot-what-are-messaging-extensions).
# [JavaScript](#tab/javascript)
The list of handlers defined in `ActivityHandler` includes the following events:
| :-- | :-- | :-- | | Any activity type received | `onTurn` | This method calls one of the other handlers, based on the type of activity received. | | Message activity received | `onMessage` | This method helps to handle a `Message` activity. |
-| Message update activity received | `onMessageUpdate` | This method calls a handler if a message is updated. |
-| Message delete activity received | `onMessageDelete` | This method calls a handler if a message is deleted. |
| Conversation update activity received | `onConversationUpdate` | This method calls a handler if members other than the bot joined or left the conversation, on a `ConversationUpdate` activity. | | Non-bot members joined the conversation | `onMembersAdded` | This method helps to handle members joining a conversation. | | Non-bot members left the conversation | `onMembersRemoved` | This method helps to handle members leaving a conversation. |
The `TeamsActivityHandler` extends the list of handlers in the core Bot Framewor
| Event | Handler | Description | | :-- | :-- | :-- |
-| channelCreated | `OnTeamsChannelCreatedAsync` | You can override this method to handle a Teams channel being created. For more information, see [channel created](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-created) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
-| channelDeleted | `OnTeamsChannelDeletedAsync` | You can override this method to handle a Teams channel being deleted. For more information, see [channel deleted](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-deleted) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| channelRenamed | `OnTeamsChannelRenamedAsync` | You can override this method to handle a Teams channel being renamed. For more information, see [channel renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-renamed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
-| teamRenamed | `OnTeamsTeamRenamedAsync` | `return Task.CompletedTask;` You can override this method to handle a Teams team being renamed. For more information, see [team renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-renamed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
-| MembersAdded | `OnTeamsMembersAddedAsync` | This method calls the `OnMembersAddedAsync` method in `ActivityHandler`. You can override this method to handle members joining a team. For more information, see [team members added](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-members-added) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
-| MembersRemoved | `OnTeamsMembersRemovedAsync` | This method calls the `OnMembersRemovedAsync` method in `ActivityHandler`. You can override this method to handle members leaving a team. For more information, see [team members removed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-members-removed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
-| message edit | `onTeamsMessageEditEvent` | You can override this method to handle when a message in a conversation is edited. |
-| message undelete | `onTeamsMessageUndeleteEvent` | You can override this method to handle when a deleted message in a conversation is undeleted. For example, when the user decides to undo a deleted message. |
-| message soft delete | `onTeamsMessageSoftDeleteEvent` | You can override this method to handle when a message in a conversation is soft deleted. |
+| channelCreated | `onTeamsChannelCreated` | This method can be overridden to handle a Teams channel being created. For more information, see [channel created](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-created) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events). |
+| channelDeleted | `onTeamsChannelDeleted` | This method can be overridden to handle a Teams channel being deleted. For more information, see [channel deleted](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-deleted) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| channelRenamed | `onTeamsChannelRenamed` | This method can be overridden to handle a Teams channel being renamed. For more information, see [channel renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-renamed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events). |
+| teamRenamed | `onTeamsTeamRenamed` | `return Task.CompletedTask;` This method can be overridden to handle a Teams team being renamed. For more information, see [team renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-renamed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events). |
+| MembersAdded | `onTeamsMembersAdded` | This method calls the `OnMembersAddedAsync` method in `ActivityHandler`. The method can be overridden to handle members joining a team. For more information, see [team members added](how-to/conversations/subscribe-to-conversation-events.md#members-added) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events). |
+| MembersRemoved | `onTeamsMembersRemoved` | This method calls the `OnMembersRemovedAsync` method in `ActivityHandler`. The method can be overridden to handle members leaving a team. For more information, see [team members removed](how-to/conversations/subscribe-to-conversation-events.md#members-removed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events). |
#### Teams invoke activities
The list of Teams activity handlers called from the `onInvokeActivity` Teams act
| fileConsent/invoke | `handleTeamsFileConsent` | This method is invoked when a file consent card activity is received from the connector. | | fileConsent/invoke | `handleTeamsFileConsentDecline` | This method is invoked when a file consent card is declined by the user. | | actionableMessage/executeAction | `handleTeamsO365ConnectorCardAction` | This method is invoked when a connector card for Microsoft 365 Groups action activity is received from the connector. |
-| signin/verifyState | `handleTeamsSigninVerifyState` | This method is invoked when a signIn verify state activity is received from the connector. |
-| task/fetch | `handleTeamsTaskModuleFetch` | You can override this method in a derived class to provide logic when a task module is fetched. |
-| task/submit | `handleTeamsTaskModuleSubmit` | You can override this method in a derived class to provide logic when a task module is submitted. |
+| signin/verifyState | `handleTeamsSigninVerifyState` | This method is invoked when a `signIn` verify state activity is received from the connector. |
+| task/fetch | `handleTeamsTaskModuleFetch` | This method can be overridden in a derived class to provide logic when a task module is fetched. |
+| task/submit | `handleTeamsTaskModuleSubmit` | This method can be overridden in a derived class to provide logic when a task module is submitted. |
-The invoke activities listed in this section are for conversational bots in Teams. The Bot Framework SDK also supports invoke activities specific to message extensions. For more information, see [what are message extensions](../messaging-extensions/what-are-messaging-extensions.md).
+The invoke activities listed in this section are for conversational bots in Teams. The Bot Framework SDK also supports invoke activities specific to message extensions. For more information, see [what are message extensions](https://aka.ms/azure-bot-what-are-messaging-extensions).
# [Python](#tab/python)
The list of handlers defined in `ActivityHandler` includes the following events:
| Event | Handler | Description | | :-- | :-- | :-- | | Any activity type received | `on_turn` | This method calls one of the other handlers, based on the type of activity received. |
-| Message activity received | `on_message_activity` | You can override this method to handle a `Message` activity. |
+| Message activity received | `on_message_activity` | This method can be overridden to handle a `Message` activity. |
| Conversation update activity received | `on_conversation_update_activity` | This method calls a handler if members other than the bot join or leave the conversation. |
-| Non-bot members joined the conversation | `on_members_added_activity` | You can override this method to handle members joining a conversation. |
-| Non-bot members left the conversation | `on_members_removed_activity` | You can override this method to handle members leaving a conversation. |
+| Non-bot members joined the conversation | `on_members_added_activity` | This method can be overridden to handle members joining a conversation. |
+| Non-bot members left the conversation | `on_members_removed_activity` | This method can be overridden to handle members leaving a conversation. |
| Event activity received | `on_event_activity` | This method calls a handler specific to the type of event. |
-| Token-response event activity received | `on_token_response_event` | You can override this method to handle token response events. |
-| Non-token-response event activity received | `on_event` | You can override this method to handle other types of events. |
-| Other activity types received | `on_unrecognized_activity_type` | You can override this method to handle any type of activity that isn't handled. |
+| Token-response event activity received | `on_token_response_event` | This method can be overridden to handle token response events. |
+| Non-token-response event activity received | `on_event` | This method can be overridden to handle other types of events. |
+| Other activity types received | `on_unrecognized_activity_type` | This method can be overridden to handle any type of activity that isn't handled. |
#### Teams specific activity handlers
The `TeamsActivityHandler` extends the list of handlers from the core Bot Framew
| Event | Handler | Description | | :-- | :-- | :-- |
-| channelCreated | `on_teams_channel_created` | You can override this method to handle a Teams channel being created. For more information, see [channel created](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-created) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
-| channelDeleted | `on_teams_channel_deleted` | You can override this method to handle a Teams channel being deleted. For more information, see [channel deleted](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-deleted) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| channelRenamed | `on_teams_channel_renamed` | You can override this method to handle a Teams channel being renamed. For more information, see [channel renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-renamed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| teamRenamed | `on_teams_team_renamed` | `return Task.CompletedTask;` You can override this method to handle a Teams team being renamed. For more information, see [team renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-renamed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| MembersAdded | `on_teams_members_added` | This method calls the `OnMembersAddedAsync` method in `ActivityHandler`. You can override this method to handle members joining a team. For more information, see [team members added](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-members-added) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| MembersRemoved | `on_teams_members_removed` | This method calls the `OnMembersRemovedAsync` method in `ActivityHandler`. You can override this method to handle members leaving a team. For more information, see [team members removed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-members-removed) in [conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
+| channelCreated | `on_teams_channel_created` | This method can be overridden to handle a Teams channel being created. For more information, see [channel created](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-created) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events). |
+| channelDeleted | `on_teams_channel_deleted` | This method can be overridden to handle a Teams channel being deleted. For more information, see [channel deleted](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-deleted) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| channelRenamed | `on_teams_channel_renamed` | This method can be overridden to handle a Teams channel being renamed. For more information, see [channel renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#channel-renamed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| teamRenamed | `on_teams_team_renamed` | This method can be overridden to handle a Teams team being renamed. For more information, see [team renamed](https://aka.ms/azure-bot-subscribe-to-conversation-events#team-renamed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| MembersAdded | `on_teams_members_added` | This method calls the `OnMembersAddedAsync` method in `ActivityHandler`. The method can be overridden to handle members joining a team. For more information, see [team members added](how-to/conversations/subscribe-to-conversation-events.md#members-added) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
+| MembersRemoved | `on_teams_members_removed` | This method calls the `OnMembersRemovedAsync` method in `ActivityHandler`. The method can be overridden to handle members leaving a team. For more information, see [team members removed](how-to/conversations/subscribe-to-conversation-events.md#members-removed) in [Conversation update events](how-to/conversations/subscribe-to-conversation-events.md#conversation-update-events).|
#### Teams invoke activities
The list of Teams activity handlers called from the `on_invoke_activity` Teams a
| fileConsent/invoke | `on_teams_file_consent` | This method is invoked when a file consent card activity is received from the connector. | | fileConsent/invoke | `on_teams_file_consent_decline` | This method is invoked when a file consent card is declined by the user. | | actionableMessage/executeAction | `on_teams_o365_connector_card_action` | This method is invoked when a connector card for Microsoft 365 Groups action activity is received from the connector. |
-| signin/verifyState | `on_teams_signin_verify_state` | This method is invoked when a signIn verify state activity is received from the connector. |
-| task/fetch | `on_teams_task_module_fetch` | You can override this method in a derived class to provide logic when a task module is fetched. |
-| task/submit | `on_teams_task_module_submit` | You can override this method in a derived class to provide logic when a task module is submitted. |
+| signin/verifyState | `on_teams_signin_verify_state` | This method is invoked when a `signIn` verify state activity is received from the connector. |
+| task/fetch | `on_teams_task_module_fetch` | This method can be overridden in a derived class to provide logic when a task module is fetched. |
+| task/submit | `on_teams_task_module_submit` | This method can be overridden in a derived class to provide logic when a task module is submitted. |
-The invoke activities listed in this section are for conversational bots in Teams. The Bot Framework SDK also supports invoke activities specific to message extensions. For more information, see w[hat are message extensions](../messaging-extensions/what-are-messaging-extensions.md).
+The invoke activities listed in this section are for conversational bots in Teams. The Bot Framework SDK also supports invoke activities specific to message extensions. For more information, see [what are message extensions](https://aka.ms/azure-bot-what-are-messaging-extensions).
The invoke activities listed in this section are for conversational bots in Team
Now that you've familiarized yourself with bot activity handlers, let us see how bots behave differently depending on the conversation and the messages it receives or sends.
+## Code sample
+
+|Sample name | Description | .NET | Node.js | Python|
+|-|--|--|-|-|
+| Teams conversation bot | Messaging and conversation event handling. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/python)|
+| Bot samples | Set of bot samples | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples#bots-samples-using-the-v4-sdk)|
+ ## Next step > [!div class="nextstepaction"]
Now that you've familiarized yourself with bot activity handlers, let us see how
* [App manifest schema for Teams](../resources/schem) * [API reference for the Bot Framework Connector service](/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference) * [Get Teams specific context for your bot](how-to/get-teams-context.md)
-* [Messages in bot conversations](how-to/conversations/conversation-messages.md)
platform Bot Features https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/bot-features.md
this.onMessage(async (context, next) => {
* [API reference for the Bot Framework Connector service](/azure/bot-service/rest-api/bot-framework-rest-connector-api-reference) * [Publish your bot to Azure](/azure/bot-service/bot-builder-deploy-az-cli) * [Authentication flow for bots in Microsoft Teams](how-to/authentication/auth-flow-bot.md)
-* [Channel and group chat conversations with a bot](how-to/conversations/channel-and-group-conversations.md)
+* [Channel and group chat conversations with a bot](how-to/conversations/channel-and-group-conversations.md)
platform Call Notifications https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/call-notifications.md
For more information, see [validate inbound requests](https://github.com/microso
* [Work with the cloud communications API in Microsoft Graph](/graph/api/resources/communications-api-overview) * [Authentication flow for bots in Microsoft Teams](../how-to/authentication/auth-flow-bot.md) * [Set up an auto attendant](/microsoftteams/create-a-phone-system-auto-attendant)
-* [Set up auto answer for Microsoft Teams Rooms on Android and Teams video phone devices](/microsoftteams/set-up-auto-answer-on-teams-android)
+* [Set up auto answer for Microsoft Teams Rooms on Android and Teams video phone devices](/microsoftteams/set-up-auto-answer-on-teams-android)
platform Calls Meetings Bots Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/calls-meetings-bots-overview.md
Real-time media refers to scenarios where media must be processed in real-time,
* [App manifest schema for Teams](../../resources/schem) * [Teams recording policy](/microsoftteams/teams-recording-policy) * [Set up an auto attendant](/microsoftteams/create-a-phone-system-auto-attendant)
-* [Set up auto answer for Microsoft Teams Rooms on Android and Teams video phone devices](/microsoftteams/set-up-auto-answer-on-teams-android)
+* [Set up auto answer for Microsoft Teams Rooms on Android and Teams video phone devices](/microsoftteams/set-up-auto-answer-on-teams-android)
platform Add Authentication https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/authentication/add-authentication.md
OAuth 2.0 is an open standard for authentication and authorization used by Micro
See [OAuth 2 Simplified](https://aka.ms/oauth2-simplified) for a basic understanding, and [OAuth 2.0](https://oauth.net/2/) for the complete specification.
-For more information about how the Azure Bot Service handles authentication, see [User authentication within a conversation](/azure/bot-service/bot-builder-concept-authentication?view=azure-bot-service-4.0&preserve-view=true).
+For more information about how the Azure Bot Service handles authentication, see [User authentication within a conversation](https://aka.ms/azure-bot-authentication).
In this article you'll learn:
With the preliminary settings done, let's focus on the creation of the bot to us
### Deploy the bot to Azure
-To deploy the bot, follow the steps in the How to [Deploy your bot to Azure](/azure/bot-service/provision-and-publish-a-bot?view=azure-bot-service-4.0&tabs=userassigned%2Ccsharp&preserve-view=true).
+To deploy the bot, follow the steps in the [How to deploy your bot to Azure](https://aka.ms/azure-bot-deployment-cli).
Alternatively, while in Visual Studio, you can follow these steps:
Alternatively, while in Visual Studio, you can follow these steps:
:::image type="content" source="../../../assets/images/authentication/auth-bot-app-service.png" alt-text="Screenshot shows how to enter required information for auth app service."::: 1. Select **Create**.
-1. If the deployment completes successfully, you should see it reflected in Visual Studio. A page is displayed in your default browser saying *Your bot is ready!*. The URL will be similar to this: `https://botteamsauth.azurewebsites.net/`. Save it to a file.
+1. If the deployment completes successfully, you should see it reflected in Visual Studio. Moreover, a page is displayed in your default browser saying *Your bot is ready!*. The URL will be similar to this: `https://botteamsauth.azurewebsites.net/`. Save it to a file.
1. In your browser, go to the [**Azure portal**][azure-portal]. 1. Check your resource group, the bot should be listed along with the other resources. The following image is an example:
Alternatively, while in Visual Studio, you can follow these steps:
## Test the bot using the Emulator
-If you haven't done it already, install the [Microsoft Bot Framework Emulator](https://aka.ms/bot-framework-emulator-readme). See also [Debug with the Emulator](/azure/bot-service/bot-service-debug-emulator?view=azure-bot-service-4.0&tabs=csharp&preserve-view=true).
+If you haven't done it already, install the [Microsoft Bot Framework Emulator](https://aka.ms/bot-framework-emulator-readme). See also [Debug with the Emulator](https://aka.ms/bot-framework-emulator-debug-with-emulator).
In order for the bot sample login to work you must configure the Emulator.
After you've configured the authentication mechanism, you can perform the actual
1. Start the Emulator. 1. Select the **Open bot** button. 1. In the **Bot URL**, enter the bot's local URL. Usually, `http://localhost:3978/api/messages`.
-1. In the **Microsoft App ID**, enter the bot's app ID from `appsettings.json`.
-1. In the **Microsoft App password**, enter the bot's app password from the `appsettings.json`.
+1. In the **Microsoft App ID** enter the bot's app ID from `appsettings.json`.
+1. In the **Microsoft App password** enter the bot's app password from the `appsettings.json`.
1. Select **Connect**. 1. After the bot is up and running, enter any text to display the sign-in card. 1. Select the **Sign in** button.
Within the following dialog step, check for the presence of a token in the resul
This section provides Bot authentication v3 SDK sample.
-| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** |
-||||-||
-| Bot authentication | This sample shows how to get started with authentication in a bot for Teams. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation-sso-quickstart/js) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/python) |
-| Tab, Bot and Message Extension (ME) SSO | This sample shows SSO for Tab, Bot and ME - search, action, linkunfurl. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/nodejs) | Not available |
+| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** | **Manifest**
+||||-|||
+| Bot authentication | This sample shows how to get started with authentication in a bot for Teams. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation-sso-quickstart/js) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp/demo-manifest/bot-teams-authentication.zip)
+| Tab, Bot and Message Extension (ME) SSO | This sample shows SSO for Tab, Bot and ME - search, action, linkunfurl. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/nodejs) | Not available | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/csharp/demo-manifest/App-SSO.zip)
## See also -- [Add authentication through Azure Bot Service](/azure/bot-service/bot-builder-authentication?view=azure-bot-service-4.0&tabs=userassigned%2Caadv2%2Ccsharp&preserve-view=true)
+- [Add authentication through Azure Bot Service](https://aka.ms/azure-bot-add-authentication)
- [Get access on behalf of a user](/graph/auth-v2-user) <!-- Footnote-style links -->
platform Bot Sso Code https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/authentication/bot-sso-code.md
To update your app's code:
``` # [JavaScript](#tab/js1)-
+
Add the following code snippet to `index.js` (or the equivalent class in your app's code):-
+
```JavaScript const {TeamsSSOTokenExchangeMiddleware} = require('botbuilder'); const tokenExchangeMiddleware = new TeamsSSOTokenExchangeMiddleware(memoryStorage, env.connectionName); adapter.use(tokenExchangeMiddleware); ```-
+
>[!NOTE]
To update your app's code:
1. Use the following code snippet for requesting a token. # [csharp](#tab/cs2)-
+
After you add the `AdapterWithErrorHandler.cs`, your code should be as shown below:-
+
```csharp public class AdapterWithErrorHandler : CloudAdapter {
To update your app's code:
{ // Log any leaked exception from the application. // NOTE: In production environment, you should consider logging this to
- // Azure Application Insights. Visit https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-telemetry?view=azure-bot-service-4.0&tabs=csharp to see how
+ // Azure Application Insights. Visit https://aka.ms/bottelemetry to see how
// to add telemetry capture to your bot. logger.LogError(exception, $"[OnTurnError] unhandled error : {exception.Message}");
To update your app's code:
} } ```-
+
# [JavaScript](#tab/js2)-
+
After you add the code snippet for `TeamsSSOTokenExchangeMiddleware`, your code should be as shown below:-
+
```JavaScript // index.js is used to setup and configure your bot.
To update your app's code:
const restify = require('restify'); // Import required bot services.
- // See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the different parts of a bot.
+ // See https://aka.ms/bot-services to learn more about the different parts of a bot.
const { CloudAdapter, ConversationState,
To update your app's code:
console.log(`\n${ conname } is the con name`); // Create adapter.
- // See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about how bots work.
+ // See https://learn.microsoft.com/javascript/api/botbuilder-core/botadapter?view=botbuilder-ts-latest to learn more about how bot adapter.
const adapter = new CloudAdapter(botFrameworkAuthentication); const memoryStorage = new MemoryStorage(); const tokenExchangeMiddleware = new TeamsSSOTokenExchangeMiddleware(memoryStorage, env.connectionName);
To update your app's code:
adapter.onTurnError = async (context, error) => { // This check writes out errors to console log .vs. app insights. // NOTE: In production environment, you should consider logging this to Azure
- // application insights. See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-telemetry?view=azure-bot-service-4.0&tabs=csharp for telemetry
+ // application insights. See https://aka.ms/bottelemetry for telemetry
// configuration instructions. console.error(`\n [onTurnError] unhandled error: ${ error }`);
To update your app's code:
await adapter.process(req, res, (context) => bot.run(context)); }); ```-
+
### Consent dialog for getting access token
private async Task<DialogTurnResult> LoginStepAsync(WaterfallStepContext stepCon
# [JavaScript](#tab/js3) ```JavaScript
-class MainDailog {
+class MainDialog {
this.addDialog(new OAuthPrompt(OAUTH_PROMPT, { connectionName: process.env.connectionName,
async loginStep(stepContext) {
return await stepContext.endDialog(); } ```- > [!NOTE]
platform Bots Filesv4 https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/bots-filesv4.md
private async Task SendFileCardAsync(ITurnContext turnContext, string filename,
The following code sample demonstrates how to obtain file consent and upload files to Teams from a bot:
-|**Sample name** | **Description** | **.NET** | **Node.js** | **Python**|
-|-|--|--|-|--|
-| File upload | Demonstrates how to obtain file consent and upload files to Teams from a bot. Also, how to receive a file sent to a bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/python) |
+|**Sample name** | **Description** | **.NET** | **Node.js** | **Python**| **Manifest**
+|-|--|--|-|--|--|
+| File upload | Demonstrates how to obtain file consent and upload files to Teams from a bot. Also, how to receive a file sent to a bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/python) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/csharp/demo-manifest/bot-file-upload.zip)
## Step-by-step guide
platform Channel And Group Conversations https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/channel-and-group-conversations.md
To install the Microsoft Teams bot in a team or group chat, add the `teams` or `
Bots in a group or channel only receive messages when they're mentioned @botname. They don't receive any other messages sent to the conversation. The bot must be @mentioned directly. Your bot doesn't receive a message when the team or channel is mentioned, or when someone replies to a message from your bot without @mentioning it. > [!NOTE]
->
-> * RSC for all *chat* messages is available only in [public developer preview](../../../resources/dev-preview/developer-preview-intro.md).
+> This feature is currently available in [public developer preview](../../../resources/dev-preview/developer-preview-intro.md) only.
>
-> * Using resource-specific consent (RSC), bots can receive all channel messages in teams that it's installed in without being @mentioned. For more information, see [receive all channel messages with RSC](channel-messages-with-rsc.md).
+> Using resource-specific consent (RSC), bots can receive all channel messages in teams that it's installed in without being @mentioned. For more information, see [receive all channel messages with RSC](channel-messages-with-rsc.md).
>
-> * Posting a message or Adaptive Card to a private channel is currently not supported.
+> Posting a message or Adaptive Card to a private channel is currently not supported.
See the following video to learn about channel and group chat conversations with a bot: <br>
platform Channel Messages With Rsc https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/channel-messages-with-rsc.md
Title: Receive all conversation messages with RSC
-description: Enable bots to receive all conversation messages without being @mentioned using RSC permissions. Read on webApplicationInfo or authorization section in manifest.
+description: Enable bots to receive all channel messages without being @mentioned using RSC permissions. Read on webApplicationInfo or authorization section in manifest.
ms.localizationpriority: medium
The resource-specific consent (RSC) permissions model, originally developed for
## Enable bots to receive all channel or chat messages
+> [!NOTE]
+>
+> The ability for bots to receive all messages in chats using `ChatMessage.Read.Chat` is available only in [public developer preview for Teams](../../../resources/dev-preview/developer-preview-intro.md).
+ The `ChannelMessage.Read.Group` and `ChatMessage.Read.Chat` RSC permissions are being extended to bots. With user consent and app installation, these permissions: * Allow a specified graph application to get all messages in channels and chats, respectively. * Enable a bot defined in the app manifest to receive all conversations messages without being @mentioned in relevant contexts where the permissions apply.
-### Filtering at mention messages
-
-```csharp
-
-// When ChannelMessage.Read.Group or ChatMessage.Read.Chat RSC is in the app manifest, this method is called even when bot is not @mentioned.
-// This code snippet allows the bot to ignore all messages that do not @mention the bot.
-protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
-{
- // Ignore the message if bot was not mentioned.
- // Remove this if block to process all messages received by the bot.
- if (!turnContext.Activity.GetMentions().Any(mention => mention.Mentioned.Id.Equals(turnContext.Activity.Recipient.Id, StringComparison.OrdinalIgnoreCase)))
- {
- return;
- }
-
- // Sends an activity to the sender of the incoming activity.
- await turnContext.SendActivityAsync(MessageFactory.Text("Using RSC the bot can receive messages across channels or chats in team without being @mentioned."));
-}
-
-```
- > [!IMPORTANT] > > * Services that need access to all Teams message data must use the Graph APIs that provide access to archived data in channels and chats. > * Bots must use the `ChannelMessage.Read.Group` and `ChatMessage.Read.Chat` RSC permission appropriately to build and enhance engaging experience for users to pass the store approval. The app description must include how the bot uses the data it reads. > * The `ChannelMessage.Read.Group` and `ChatMessage.Read.Chat` RSC permission may not be used by bots to extract large amounts of customer data.
-> * The ability for bots to receive all messages in chats using `ChatMessage.Read.Chat` is available only in [public developer preview for Teams](../../../resources/dev-preview/developer-preview-intro.md) and is only enabled after a re-installation or new installation into a chat.
-> * After the RSC permissions are enabled, the bot continues to receive all messages even when the client switches out of public developer preview.
-> * If you have an app that's using the `ChatMessage.Read.Chat` RSC permission for Graph scenarios, then test the app following the steps in [sideload in a conversation](channel-messages-with-rsc.md?tabs=chat%2Cdotnet#sideload-in-a-conversation) and modify the app before the feature is [generally available](https://www.microsoft.com/en-us/microsoft-365/roadmap?filters=&searchterms=receive%2Call%2Cgroup%2Cchat%2Cmessages). If you don't want your bot to receive all chat messages, implement the following [code snippet](#filtering-at-mention-messages). If no action is taken, your bot will receive all messages after new installations.
## Update app manifest
The following steps guide you to sideload and validate bot that receives all cha
# [Chat messages](#tab/chat)
-The following steps guide you to sideload and validate bot that receives all chat messages in [public developer preview](../../../resources/dev-preview/developer-preview-intro.md) without being @mentioned in a chat:
+The following steps guide you to sideload and validate bot that receives all chat messages without being @mentioned in a chat:
-1. Switch the client to public developer preview (select **About** > **Developer preview**).
1. Select or create a group chat. 1. Select the ellipses &#x25CF;&#x25CF;&#x25CF; from the group chat. The dropdown menu appears. 1. Select **Manage apps** from the dropdown menu.
platform Notification Bot In Teams https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/notification-bot-in-teams.md
You need to create `ConversationBot` to send notification.
/** Javascript/Typescript: bot/src/internal/initialize.*s **/ const bot = new ConversationBot({ // The bot id and password to create BotFrameworkAdapter.
- // See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about adapters.
+ // See https://aka.ms/about-bot-adapter to learn more about adapters.
adapterConfig: { appId: process.env.BOT_ID, appPassword: process.env.BOT_PASSWORD,
const myStorage = new MyStorage(...);
// initialize ConversationBot with notification enabled and customized storage const bot = new ConversationBot({ // The bot id and password to create BotFrameworkAdapter.
- // See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about adapters.
+ // See https://aka.ms/about-bot-adapter to learn more about adapters.
adapterConfig: { appId: process.env.BOT_ID, appPassword: process.env.BOT_PASSWORD,
platform Send Proactive Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/send-proactive-messages.md
public class NotifyController : ControllerBase
private async Task BotCallback(ITurnContext turnContext, CancellationToken cancellationToken) { // If you encounter permission-related errors when sending this message, see
- // https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-howto-proactive-message?view=azure-bot-service-4.0&tabs=csharp#avoiding-401-unauthorized-errors
+ // https://aka.ms/BotTrustServiceUrl
// Sends an activity to the sender of the incoming activity. await turnContext.SendActivityAsync("proactive hello"); }
Example of a code snippet to demonstrate creating conversation reference.
``` # [TypeScript](#tab/typescript)- * [SDK reference](/javascript/api/botbuilder-core/turncontext?view=botbuilder-ts-latest#botbuilder-core-turncontext-getconversationreference&preserve-view=true) * [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/graph-proactive-installation/nodejs/bots/proactiveBot.js#L59)
async messageAllMembersAsync(context) {
``` # [Python](#tab/python)- * [SDK reference](/python/api/botbuilder-core/botbuilder.core.botframeworkadapter?view=botbuilder-py-latest#botbuilder-core-botframeworkadapter-create-conversation&preserve-view=true) * [Sample code reference](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/bot-conversation/python/bots/teams_conversation_bot.py#L200)
platform Get Teams Context https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/get-teams-context.md
export class MyBot extends TeamsActivityHandler {
constructor() { super();
- // See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the message and other activity types.
+ // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onMessage(async (turnContext, next) => { var continuationToken; var members = [];
export class MyBot extends TeamsActivityHandler {
constructor() { super();
- // See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the message and other activity types.
+ // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onMessage(async (turnContext, next) => { const member = await TeamsInfo.getMember(turnContext, encodeURI('someone@somecompany.com'));
export class MyBot extends TeamsActivityHandler {
constructor() { super();
- // See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the message and other activity types.
+ // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onMessage(async (turnContext, next) => { // Gets the details for the given team id.
export class MyBot extends TeamsActivityHandler {
constructor() { super();
- // See https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0 to learn more about the message and other activity types.
+ // See https://aka.ms/about-bot-activity-message to learn more about the message and other activity types.
this.onMessage(async (turnContext, next) => { // Supports retrieving channels hosted by a team.
platform Update And Delete Bot Messages https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/update-and-delete-bot-messages.md
DELETE /v3/conversations/{conversationId}/activities/{activityId}
The following code sample demonstrates basics of conversations:
-| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** |
-|-|--|--|-|--|
-| Teams Conversation Basics | Demonstrates basics of conversations in Teams including message update and delete. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/python) |
+| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** | **Manifest**
+|-|--|--|-|--|--|
+| Teams Conversation Basics | Demonstrates basics of conversations in Teams including message update and delete. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/python) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp/demo-manifest/bot-conversation.zip) |
## Next step
platform Share In Meeting https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-in-meeting.md
keywords: Share in Meeting
Share in meeting allows users to share documents or third-party web apps to the meeting stage. The meeting participants can collaborate and interact with the third-party web apps or edit the documents together.
+> [!NOTE]
+> Share in meeting is currently available in [public developer preview](~/resources/dev-preview/developer-preview-intro.md).
+ The following image shows the **Share in meeting** button on the web app: :::image type="content" source="../../assets/images/share-in-teams-meeting/web-app.png" alt-text="Screenshot shows share in meeting button on the web app.":::
A deep link can be launched either from the Teams web or from the Teams desktop
|Deep link|Format|Example| ||||
- |To share the app and open Teams calendar, when `UseMeetNow` is **false**, default.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Afalse%257D`|
- |To share the app and initiate instant meeting, when `UseMeetNow` is **true**.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`|
+ |To share the app and open Teams calendar, when `UseMeeetNow` is **false**, default.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Afalse%257D`|
+ |To share the app and initiate instant meeting, when `UseMeeetNow` is **true**.|`https://teams.microsoft.com/l/meeting-share?deeplinkId={deeplinkid}&fqdn={fqdn}}&lm=deeplink%22&appContext={encoded app context}`|`https://teams.microsoft.com/l/meeting-share?deeplinkId={sampleid}&fqdn=teams.microsoft.com&lm=deeplink%22&appContext=%257B%2522appSharingUrl%2522%253A%2522https%253A%252F%252Fteams.microsoft.com%252Fextensibility-apps%252Fmeetingapis%252Fview%2522%252C%2522appId%2522%253A%25229cc80a93-1d41-4bcb-8170-4b9ec9e29fbb%2522%252C%2522useMeetNow%2522%253Atrue%257D`|
* **Team desktop client**: Use the following format to launch a deep link from the Teams desktop client to share content on stage:
To share the entire app to stage, in the app manifest, you must configure `meeti
> [!NOTE] > For your app to pass validation, when you create a deep link from your website, web app, or Adaptive Card, use **Share in meeting** as the string or copy.
+## Code sample
+
+| **Sample name** | **Description** | **.NET** |**Node.js** |
+|--|--|-|-|
+| Meeting stage view | This app helps to enable and configure your apps for Teams meetings. It also demonstrates use of share in meeting feature.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs)|
+ ## See also * [Apps for Teams meetings and calls](../../apps-in-teams-meetings/teams-apps-in-meetings.md)
platform Share To Teams From Personal App Or Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-to-teams-from-personal-app-or-tab.md
The following table provides the response codes:
## Limitations
-The limitations to add Share to Teams button:
-
+* Share to Teams is supported for desktop and web clients but isn't supported for mobile client.
* The Share to Teams button can be hosted or embedded in an app running inside Teams. * You can add Share to Teams button to the app created by using **Teams Javascript client library**.
platform Apps Publish Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/apps-publish-overview.md
For more information, see [publish to the Teams store](~/concepts/deploy-and-pub
* [Microsoft 365 App Compliance Program](/microsoft-365-app-certification/overview) * [Create Teams app package](../build-and-test/apps-package.md) * [Publish to org](/microsoftteams/upload-custom-apps)
+* [Growth lifecycle for your app](appsource/post-publish/app-growth/app-growth-lifecycle.md)
platform App Growth Lifecycle https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/app-growth-lifecycle.md
Title: Growth lifecycle for your app
-description: Learn to plan growth lifecycle for your Teams app
+description: Learn to plan growth lifecycle for your Teams app.
ms.localizationpriority: high
You can plan your app's growth through the app lifecycle:
- [Succeed with your collaborative app](succeed.md) -->
+[Back to top](#growth-lifecycle-for-your-app)
+ ## Next step > [!div class="nextstepaction"] > [Building your collaborative app](build-app.md)
+## See also
+
+[Strategize and execute growth for your app](overview-app-growth.md)
+ <!-- ### Building your collaborative app
platform Build App https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/build-app.md
Title: The build stage for your collaborative app
-description: Learn what you can do during the build stage of your app to grow your app
+description: Learn what you can do during the build stage of your app to grow your app.
ms.localizationpriority: high
LetΓÇÖs briefly go over what initiatives are the most impactful during the build
> [!div class="nextstepaction"] > [Launching your collaborative app](launch-app.md)+
+## See also
+
+[Strategize and execute growth for your app](overview-app-growth.md)
platform Gain Traction https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/gain-traction.md
Contact the Microsoft field, account, or engineering representatives to feature
</details>
+[Back to top](#gain-traction-for-your-collaborative-app-in-the-market)
+ ## Next step > [!div class="nextstepaction"] > [Scaling your collaborative app](scale-app.md)+
+## See also
+
+[Strategize and execute growth for your app](overview-app-growth.md)
+
platform Launch App https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/launch-app.md
Title: The launch stage for your collaborative app
-description: Learn what you can do during the launch stage of your app to grow your app
+description: Learn what you can do during the launch stage of your app to grow your app.
ms.localizationpriority: high
Contact your Microsoft field, account, or engineering representatives to request
</details>
+[Back to top](#launch-your-collaborative-app)
+ ## Next step > [!div class="nextstepaction"] > [Gaining traction for your collaborative app in the market](gain-traction.md)+
+## See also
+
+[Strategize and execute growth for your app](overview-app-growth.md)
platform Overview App Growth https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/overview-app-growth.md
Title: Overview for planning, strategizing, and executing growth for your app
-description: Learn to plan, strategize and execute growth for your app
+description: Learn to plan, strategize and execute growth for your app.
ms.localizationpriority: high
It also includes some proven best practices from the team that crafted the Teams
:::column:::
- > [!div class="nextstepaction"]
- > [How much can your app grow?](#putting-your-apps-growth-potential-into-perspective-how-much-can-your-app-grow)
:::column-end::: :::column:::
- > [!div class="nextstepaction"]
- > [Understanding growth models](#options-for-growing-your-app-understanding-growth-models)
+ :::image type="icon" source="../../../../../assets/icons/understanding-growth-models.png" link="#options-for-growing-your-app-understanding-growth-models" :::
:::column-end::: :::column:::
- > [!div class="nextstepaction"]
- > [WhatΓÇÖs needed to grow and succeed on Teams marketplace?](#whats-needed-to-grow-and-succeed-on-teams-marketplace)
+ :::image type="icon" source="../../../../../assets/icons/grow-succeed-teams-marketplace.png" link="#whats-needed-to-grow-and-succeed-on-teams-marketplace" border="false":::
:::column-end:::
You aren't necessarily constrained by picking only one out of the above approach
Using the guidance in this document, you can grow your collaborative app on Teams and expand differentiated scenarios further. You can also incorporate Teams-first or Teams-only use cases, and devise a go-to-market model that is led by your Teams collaborative app - consequently building a growth flywheel for your business.
+[Back to top](#strategize-and-execute-growth-for-your-app)
+ ## Options for growing your app: Understanding growth models You can use one or all the three predominant types of SaaS business growth models:
As a developer of a collaborative app, you'll benefit from devising a well-round
More than point solutions (that is, *add-ins* and *integrations*), Teams collaborative apps offer you an opportunity to apply a solid growth strategy to a product line. It's just as you'd do for your core SaaS product for the web browser or native mobile apps.
+[Back to top](#strategize-and-execute-growth-for-your-app)
+ ## WhatΓÇÖs needed to grow and succeed on Teams marketplace? As noted earlier, your Teams collaborative app requires sustained and continuous investments on multiple fronts:
Monetization investments encompass defining role of Teams app in your business a
:::column-end::: :::row-end:::
+[Back to top](#strategize-and-execute-growth-for-your-app)
+ <!-- | Investment type | Why should you do this? What impact will this have? | How will you do this? What resources are required? | | | | |
Monetization investments encompass defining role of Teams app in your business a
> [!div class="nextstepaction"] > [Growth lifecycle for your app](app-growth-lifecycle.md)+
+## See also
+
+- [Distribute your Microsoft Teams app](../../../apps-publish-overview.md)
+- [Monetize your app](../../prepare/monetize-overview.md)
+- [Build your collaborative app](build-app.md)
+- [Gain traction for your collaborative app in the market](gain-traction.md)
+- [Launch your collaborative app](launch-app.md)
+- [Scale your collaborative app](scale-app.md)
+- [Succeed with your collaborative app](succeed.md)
platform Scale App https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/scale-app.md
Title: The scale stage for your collaborative app
-description: Learn what you can do during the scale stage of your app to grow your app
+description: Learn what you can do during the scale stage of your app to grow your app.
ms.localizationpriority: high
Participate in a customer roundtable session with Microsoft to highlight the val
</details>
+[Back to top](#scale-your-collaborative-app)
+ ## Next step > [!div class="nextstepaction"] > [Succeeding with your collaborative app](succeed.md)+
+## See also
+
+[Strategize and execute growth for your app](overview-app-growth.md)
platform Succeed https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/post-publish/app-growth/succeed.md
Title: The succeed stage for your collaborative app
-description: Learn what you can do during the final stage of your app to grow your app
+description: Learn what you can do during the final stage of your app to grow your app.
ms.localizationpriority: high
Strategic developers, who are part of the invite-only Teams engineeringΓÇÖs buil
<details> <summary>Case Study on MicrosoftΓÇÖs public customers portal</summary>
-Impactful case studies of how investing in a collaborative app resulted in growth for your SaaS business and how customers using your app got impacted can be published on the following customer-facing sites: [Microsoft 365 ISV Benefits Program Success Stories](https://cloudpartners.transform.microsoft.com/practices/modernworkisv?tab=success-stories) and [Customer Stories](https://customers.microsoft.com/search?sq=&ff=story_industry_friendlyname%26%3EPartner%20Professional%20Services%26%26story_product_categories%26%3EMicrosoft%20Teams&p=5&so=cam_rank%20desc) on Microsoft.com. Connect with your Teams engineering representatives or the [ISV Marketplace Success Rewards Program team](mailto:rewards@microsoft.com) to check eligibility, seek guidance, and execute this motion.
+Impactful case studies of how investing in a collaborative app resulted in growth for your SaaS business and how customers using your app got impacted can be published on the following customer-facing sites: [Microsoft 365 ISV Benefits Program Success Stories](https://cloudpartners.transform.microsoft.com/practices/modernworkisv?tab=success-stories) and [Customer Stories](https://customers.microsoft.com/home?sq=&ff=&p=0) on Microsoft.com. Connect with your Teams engineering representatives or the [ISV Marketplace Success Rewards Program team](mailto:rewards@microsoft.com) to check eligibility, seek guidance, and execute this motion.
</details> <br>
Strategic developers, who are part of the invite-only Teams engineeringΓÇÖs buil
Each app in the Teams ecosystem undertakes this journey, in all likelihood, starting from a point solution to becoming a full-fledged collaborative app on Teams. Building, launching, gaining traction, achieving scale, and finally succeeding are phases that help you plan and execute your appΓÇÖs go-to-market journey resulting in robust growth for your SaaS business on the commercial marketplace.
+[Back to top](#succeed-with-your-collaborative-app)
+ ## See also - [Plan, strategize and execute growth for your app](overview-app-growth.md)
platform In App Purchase Flow https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/in-app-purchase-flow.md
To enable in-app purchase experience, update your Teams app `manifest.json` file
To trigger in-app purchase for the app, invoke the `openPurchaseExperience` API from your web app.
-Following code snippet is an example of calling the API from the Teams app built using Microsoft Teams JavaScript client library:
+Following code snippet is an example of calling the API from the Teams app built using Teams JavaScript client library:
+
+# [TeamsJS v1](#tab/jsonV11)
```json <div>
Following code snippet is an example of calling the API from the Teams app built
</script> ```
+# [TeamsJS V2](#tab/jsonV2)
+
+```json
+<div>
+<div class="sectionTitle">openPurchaseExperience</div>
+<button onclick="openPurchaseExperience()">openPurchaseExperience</button>
+</div>
+</body>
+<script>
+ function openPurchaseExperience() {
+ micorosftTeams.app.initialize();
+ var planInfo = {
+ planId: "<Plan id>", // Plan Id of the published SAAS Offer
+ term: "<Plan Term>" // Term of the plan.
+ }
+ monetization.openPurchaseExperience(planInfo);
+ }
+</script>
+```
+++ ## End-user in-app purchasing experience The following example shows the users to purchase subscription plans for a fictional Teams app called *Contoso Tasks for Teams*:
platform Include Saas Offer https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/include-saas-offer.md
If you unlink a SaaS offer included in your Teams store listing, you must republ
1. Select **Distribute > Publish to the Teams store**. 1. Select **Open Partner Center** to begin the process of republishing your app without the offer.
+## Code sample
+
+| **Sample name** | **Description** | **Node.js** | **Manifest**
+|--|--|-|-|-|
+| Meeting stage view | This app helps to enable and configure your apps for Teams meetings. It also demonstrates use of share in meeting feature.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-app-monetization/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-app-monetization/nodejs/demo-manifest/tab-app-monetization.zip)|
+ ## See also * [Monetize your app](monetize-overview.md)
platform Teams Store Validation Guidelines https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md
After an internal Microsoft review, if the compliance demonstration is satisfact
* [Distribute your app](~/concepts/deploy-and-publish/apps-publish-overview.md) * [Prepare your store submission](~/concepts/deploy-and-publish/appsource/prepare/submission-checklist.md) * [Include a SaaS offer with your Teams app](include-saas-offer.md)
+* [Strategize and execute growth for your app](../post-publish/app-growth/overview-app-growth.md)
platform Personal Apps https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/design/personal-apps.md
Unless you created your app specifically for Teams, you probably have features t
:::image type="content" source="../../assets/images/personal-apps/personal-tab-feature-dont.png" alt-text="Example shows how not to handle complex app features with a personal app.":::
+## Code sample
+
+|Sample name | Description | Typescript
+|-|--|--|
+| Meeting app | Sample to show navbar-menu in personal tab app. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-navbar-menu/ts) |
+ ## See also These other design guidelines may help depending on the scope of your personal app:
platform Device Capabilities Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/device-capabilities/device-capabilities-overview.md
Also, you can integrate the Teams native [people picker control](people-picker-c
## Code sample
-| Sample Name | Description | Node.js |
-|:|:--|:|
-|Device permissions | Describes how to demonstrate Teams tab sample app for device permissions. |[View](<https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-device-permissions/nodejs>)|
+| Sample name | Description | Node.js | Manifest
+|:|:--|:|:|
+|Device permissions | Describes how to demonstrate Teams tab sample app for device permissions. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-device-permissions/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-device-permissions/nodejs/demo-manifest/tab-device-permissions.zip)
platform Native Device Permissions https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/device-capabilities/native-device-permissions.md
By accessing the device capabilities, you can build richer experiences on the Te
> [!NOTE] >
+> * Currently, Teams doesn't support device permissions for multi-window apps, tabs, and the meeting side panel.
> * Device permissions are different in the browser. For more information, see [browser device permissions](browser-device-permissions.md).
-> * Teams support for QR barcode scanner capability is only available for mobile clients.
+> * Currently, Teams supports for QR barcode scanner capability, that is only available for mobile clients.
## Access device permissions
platform People Picker Capability https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/device-capabilities/people-picker-capability.md
The following table lists the error codes and their descriptions:
| **8000** | USER_ABORT |User canceled the operation.| | **9000** | OLD_PLATFORM | User is on an old platform build where implementation of the API is unavailable. Upgrade to the latest version of the build to resolve the issue.|
+## Code sample
+
+| Sample name | Description | .NET |Node.js | Manifest
+|:|:--|:|:|:|
+|Tab people picker | This sample shows tab capability with the feature of client sdk people picker. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-people-picker/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-people-picker/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-people-picker/csharp/demo-manifest/Tab-People-Picker.zip)
+ ## See also * [Integrate web apps](../../samples/integrate-web-apps-overview.md)
platform Qr Barcode Scanner Capability https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/device-capabilities/qr-barcode-scanner-capability.md
microsoftTeams.media.scanBarCode((error: microsoftTeams.SdkError, decodedText: s
}, config); ```
+## Code sample
+
+| Sample name | Description | .NET |Node.js | Manifest
+|:|:--|:|:|:|
+|Bot join team by QR | This sample demos a feature where user can join a team using QR code containing the team's id. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-join-team-using-qr-code/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-join-team-using-qr-code/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-join-team-using-qr-code/csharp/demo-manifest/Bot-Join-Team-By-QR.zip)
+|Tab product inspection | This sample app demonstrate a feature where user can scan a product, capture a image, and mark it as approved/rejected. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-product-inspection/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-product-inspection/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-product-inspection/csharp/demo-manifest/Tab-Product-Inspection.zip)
+ ## See also * [Device capabilities](device-capabilities-overview.md)
platform Resource Specific Consent https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/graph-api/rsc/resource-specific-consent.md
For more information on how to get details of apps installed in a specific chat,
## Code sample
-| **Sample name** | **Description** | **.NET** |**Node.js** |
-|--|--|-|-|
-| Resource-Specific Consent (RSC) | Use RSC to call Graph APIs. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-rsc/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-rsc/nodeJs)|
+| **Sample name** | **Description** | **.NET** |**Node.js** | **Manifest**|
+|--|--|-|-|-|
+| Resource-Specific Consent (RSC) | Use RSC to call Graph APIs. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-rsc/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-rsc/nodeJs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-rsc/csharp/demo-manifest/graph-rsc.zip)
## See also
platform Teams Bot Samples https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/bots/teams-bot-samples.md
For complete working samples demonstrating the functionality, see the following Teams samples for Bot Framework:
-| **Sample** | **Description** | **.NET** | **Node.js* | **Python** |
-|--|- ||||
-| Teams conversation bot | Messaging and conversation event handling. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/python) |
-| Authentication with OAuthPrompt| Authentication and basic messaging in Bot Framework v4. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation-sso-quickstart/js)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/python) |
-|Teams file upload | Exchanging files with a bot in a one-to-one conversation. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/python) |
-| Task module | Retrieving a task module and values from cards in it for a message extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/python) |
-| Start new thread in a channel | Creating a new thread in a channel. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/python) |
-| Teams app localization | Teams app localization using bot and tab. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-localization/csharp) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-localization/nodejs) | NA |
+| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** | **Manifest**
+|--|- |||||
+| Teams conversation bot | Messaging and conversation event handling. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/nodejs)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation/csharp/demo-manifest/bot-conversation.zip) |
+| Authentication with OAuthPrompt| Authentication and basic messaging in Bot Framework v4. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation-sso-quickstart/js)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp/demo-manifest/bot-teams-authentication.zip) |
+|Teams file upload | Exchanging files with a bot in a one-to-one conversation. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-file-upload/csharp/demo-manifest/bot-file-upload.zip) |
+| Task module | Retrieving a task module and values from cards in it for a message extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) |
+| Start new thread in a channel | Creating a new thread in a channel. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-initiate-thread-in-channel/csharp/demo-manifest/bot-initiate-thread-in-channel.zip) |
+| Teams app localization | Teams app localization using bot and tab. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-localization/csharp) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-localization/nodejs) | NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-localization/csharp/demo-manifest/app-localization.zip)
platform Learn More https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/messaging-extensions/learn-more.md
Try it out in a quickstart:
- | **Sample name** | **Description** | **.NET** | **Node.js** | **Python** |
- |||--|-|
- | Message extension with action-based commands | This sample illustrates how to build an Action-based Message Extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) | [View]( https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/python) |
- | Message extension with search-based commands | This sample illustrates how to build a Search-based Message Extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python) |
+ | **Sample name** | **Description** | **.NET** | **Node.js** | **Python** | **Manifest** |
+ |||--|-|-|-|
+ | Message extension with action-based commands | This sample illustrates how to build an Action-based Message Extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) | [View]( https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip)
+ | Message extension with search-based commands | This sample illustrates how to build a Search-based Message Extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)
platform Msgex Sso Code https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/messaging-extensions/msgex-sso-code.md
Use the following code snippet to handle the access token in case the app user l
## Code sample
-This section provides bot authentication v3 SDK sample.
+This section provides bot authentication v4 SDK sample.
-| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** |
-||||-||
-| Bot authentication | This sample shows how to get started with authentication in a bot for Teams. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation-sso-quickstart/js) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/python) |
-| Tab, bot, and Message extension (ME) SSO | This sample shows SSO for tab, bot, and message extension - search, action, link unfurl. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/nodejs) | NA |
-|Tab, bot, and Message extension | This sample shows how to check authentication in bot, tab, and message extension with SSO | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-complete-auth/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-complete-auth/nodejs) | NA |
+| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** | **Manifest** |
+||||-|||
+| Bot authentication | This sample shows how to get started with authentication in a bot for Teams. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-conversation-sso-quickstart/js) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-authentication/csharp/demo-manifest/bot-teams-authentication.zip)
+| Tab, bot, and Message extension (ME) SSO | This sample shows SSO for tab, bot, and message extension - search, action, link unfurl. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/nodejs) | NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-sso/csharp/demo-manifest/App-SSO.zip)
+|Tab, bot, and Message extension | This sample shows how to check authentication in bot, tab, and message extension with SSO | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-complete-auth/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-complete-auth/nodejs) | NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-complete-auth/csharp/demo-manifest/App-Complete-Auth.zip)
platform Create Task Module https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/action-commands/create-task-module.md
private static Attachment GetAdaptiveCardAttachmentFromFile(string fileName)
## Code sample
-| Sample Name | Description | .NET | Node.js | Python |
-|:|:--|:|:--|
-|Teams message extension action| Describes how to define action commands, create task module, and respond to task module submit action. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/python) |
-|Teams message extension search | Describes how to define search commands and respond to searches. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python)|
+| Sample name | Description | .NET | Node.js | Python | Manifest|
+|:|:--|:|:--|:--|:--|
+|Teams message extension action| Describes how to define action commands, create task module, and respond to task module submit action. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip)
+|Teams message extension search | Describes how to define search commands and respond to searches. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)
## Next step
platform Define Action Command https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/action-commands/define-action-command.md
This section isn't an example of the complete manifest. For the complete app man
## Code sample
-| Sample Name | Description | .NET | Node.js |
-|:|:--|:|:--|
-|Teams message extension action| Describes how to define action commands, create task module, and respond to task module submit action. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) |
+| Sample name | Description | .NET | Node.js | Manifest
+|:|:--|:|:--|:--|
+|Teams message extension action| Describes how to define action commands, create task module, and respond to task module submit action. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip)
## Step-by-step guide
platform Respond To Task Module Submit https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/action-commands/respond-to-task-module-submit.md
The following section is a description of the entities in the `OnBehalfOf` Array
## Code sample
-| Sample Name | Description | .NET | Node.js |
-|:|:--|:|:--|
-|Teams message extension action| Describes how to define action commands, create task module, and respond to task module submit action. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) |
-|Teams message extension search | Describes how to define search commands and respond to searches. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|
+| Sample name | Description | .NET | Node.js | Manifest
+|:|:--|:|:--|:--|
+|Teams message extension action| Describes how to define action commands, create task module, and respond to task module submit action. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip)
+|Teams message extension search | Describes how to define search commands and respond to searches. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)
## Next Step
platform Add Authentication https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/add-authentication.md
At this point, the window closes and the control is passed to the Teams client.
## Code sample
-|**Sample name** | **Description** |**.NET** | **Node.js**|
-|-|--|--|-|
-|Message extensions - auth and config | A Message Extension that has a configuration page, accepts search requests, and returns results after the user has signed in. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-sso-config/nodejs)|
+|**Sample name** | **Description** |**.NET** | **Node.js**| **Manifest**
+|-|--|--|-|-|
+|Message extensions - auth and config | A message extension that has a configuration page, accepts search requests, and returns results after the user has signed in. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-sso-config/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp/demo-manifest/msgext-search-auth-config.zip)
## See also
platform Define Search Command https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/search-commands/define-search-command.md
For the complete app manifest, see [App manifest schema](~/resources/schema/mani
## Code sample
-| Sample Name | Description | .NET | Node.js |
-|:|:--|:|:--|
-|Teams message extension search | Describes how to define search commands and respond to searches. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|
+| Sample name | Description | .NET | Node.js | Manifest
+|:|:--|:|:--|:--|
+|Teams message extension search | Describes how to define search commands and respond to searches. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)
## Step-by-step guide
platform Respond To Search https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/search-commands/respond-to-search.md
The default query has the same structure as any regular user query, with the `na
## Code sample
-| Sample Name | Description | .NET | Node.js |
-|:|:--|:|:--|
-|Teams message extension action| Describes how to define action commands, create task module, and respond to task module submit action. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) |
-|Teams message extension search | Describes how to define search commands and respond to searches. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|
+| Sample name | Description | .NET | Node.js | Manifest
+|:|:--|:|:--|:--|
+|Teams message extension search | Describes how to define search commands and respond to searches. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)
+|Teams Message extension auth and config | A Message Extension that has a configuration page, accepts search requests, and returns results after the user has signed in. It also showcase zero app install link unfurling along with normal link unfurling |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-sso-config/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search-auth-config/csharp/demo-manifest/msgext-search-auth-config.zip)
## Next step
platform What Are Messaging Extensions https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/what-are-messaging-extensions.md
async handleTeamsMessagingExtensionQuery(context, query) {
## Code sample
-| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** |
-||-|-|||
-| Message extension with action-based commands | This sample illustrates how to build an action-based message extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/python) |
-| Message extension with search-based commands | This sample illustrates how to build a Search-based Message Extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python) |
-|Message extension action for task scheduling|This sample illustrates how to schedule a task from message extension action command and get a reminder card at a scheduled date and time.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-message-reminder/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-message-reminder/nodejs)| NA |
+| **Sample name** | **Description** | **.NET** | **Node.js** | **Python** | **Manifest**|
+||-|-||||
+| Message extension with action-based commands | This sample illustrates how to build an action-based message extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action/csharp/demo-manifest/msgext-action.zip)
+| Message extension with search-based commands | This sample illustrates how to build a Search-based Message Extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip)
+|Message extension action for task scheduling|This sample illustrates how to schedule a task from message extension action command and get a reminder card at a scheduled date and time.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-message-reminder/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-message-reminder/nodejs)| NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-message-reminder/csharp/demo-manifest/msgext-message-reminder.zip)
## Next step
platform Access Teams Context https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/access-teams-context.md
You can register your app to be informed if the theme changes by calling `micros
The `theme` argument in the function is a string with a value of `default`, `dark`, or `contrast`.
+## Code sample
+
+| Sample name | Description | Javascript
+:|:--|:|
+|Tab channel context|This sample shows the contents of tab context object in a private and shared channel. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-channel-context/nodejs)
+ ## Next step > [!div class="nextstepaction"]
platform Tab Sso Graph Api https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/authentication/tab-sso-graph-api.md
Title: Extend tab app with Microsoft Graph permissions
-description: Configure additional permissions and scopes, get access token with Microsoft Graph to enable single sign-on (SSO).
+description: Learn to configure additional permissions and scopes with Microsoft Graph for enabling single sign-on (SSO).
ms.localizationpriority: high
+keywords: teams authentication tabs Microsoft Azure Active Directory (Azure AD) Graph API Delegated permission access token scope
# Extend tab app with Microsoft Graph permissions and scopes
You can configure additional Graph scopes in Azure AD for your app. These are de
2. Select **Manage** > **API permissions** from the left pane.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/api-permission-menu.png" alt-text="The screenshot shows the app permissions menu option.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/api-permission-menu.png" alt-text="App permissions menu option.":::
The **API permissions** page appears. 3. Select **+ Add a permission** to add Microsoft Graph API permissions.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/app-permission.png" alt-text="The screenshot shows the app permissions page.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/app-permission.png" alt-text="App permissions page.":::
The **Request API permissions** page appears. 4. Select **Microsoft Graph**.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/request-api-permission.png" alt-text="The screenshot shows shows the request API permissions page.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/request-api-permission.png" alt-text="Request API permissions page.":::
The options for Graph permissions display. 5. Select **Delegated permissions** to view the list of permissions.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/delegated-permission.png" alt-text="The screenshot shows the delegated permissions.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/delegated-permission.png" alt-text="Delegated permissions.":::
6. Select relevant permissions for your app, and then select **Add permissions**.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/select-permission.png" alt-text="The screenshot shows the add permissions option.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/select-permission.png" alt-text="Select permissions.":::
You can also enter the permission name in the search box to find it.
- A message appears on the browser stating that the permissions were updated.
+ A message pops up on the browser stating that the permissions were updated.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/updated-permission-msg.png" alt-text="The screenshot shows the message that appears for the updated permissions.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/updated-permission-msg.png" alt-text="Permissions updated message.":::
The added permissions are displayed in the **API permissions** page.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/configured-permissions.png" alt-text="The screenshot shows an example of the API permissions, which are configured.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/configured-permissions.png" alt-text="API permissions are configured.":::
You've configured your app with Microsoft Graph permissions.
Depending on the platform or device where you want to target your app, additiona
> [!NOTE] > > - If your tab app hasn't been granted IT admin consent, app users have to provide consent the first time they use your app on a different platform.
-> - Implicit grant isn't required if SSO is enabled on a tab app.
+> - Implicit grant is not required if SSO is enabled on a tab app.
You can configure authentication for multiple platforms as long as the URL is unique.
You can configure authentication for multiple platforms as long as the URL is un
1. Select **Manage** > **Authentication** from the left pane.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/azure-portal-platform.png" alt-text="The screenshot for authenticating platforms.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/azure-portal-platform.png" alt-text="Authenticate for platforms":::
The **Platform configurations** page appears. 1. Select **+ Add a platform**.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/add-platform.png" alt-text="The screenshot shows the options to add add a platform.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/add-platform.png" alt-text="Add a platforms":::
The **Configure platforms** page appears.
-1. Select the platform that you want to configure for your tab app. You can choose the platform type from **web** or **Single-page application**.
+1. Select the platform that you want to configure for your tab app. You can choose the platform type from web or SPA.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/configure-platform.png" alt-text="The screenshot for selecting web platform.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/configure-platform.png" alt-text="Select web platform":::
You can configure multiple platforms for a particular platform type. Ensure that the redirect URI is unique for every platform you configure.
You can configure authentication for multiple platforms as long as the URL is un
1. Enter the configuration details for the platform.
- :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/config-web-platform.png" alt-text="The screenshot for configuring web platform.":::
+ :::image type="content" source="../../../assets/images/authentication/teams-sso-tabs/config-web-platform.png" alt-text="Configure web platform":::
1. Enter the redirect URI. The URI should be unique. 2. Enter the front-channel logout URL.
You can configure authentication for multiple platforms as long as the URL is un
## Acquire access token for MS Graph
-You'll need to acquire access token for Microsoft Graph. You can do so by using Azure AD on-behalf-of (OBO) flow.
+You'll need to acquire access token for Microsoft Graph. You can do so by using Azure AD OBO flow.
-The current implementation for SSO grants consent for only user-level permissions that aren't usable for making Graph calls. To get the permissions (scopes) needed to make a Graph call, SSO apps must implement a custom web service to exchange the token received from the Teams JavaScript library for a token that includes the needed scopes. You can use Microsoft Authentication Library (MSAL) for fetching the token from the client side.
+The current implementation for SSO grants consent for only user-level permissions that are not usable for making Graph calls. To get the permissions (scopes) needed to make a Graph call, SSO apps must implement a custom web service to exchange the token received from the Teams JavaScript library for a token that includes the needed scopes. You can use Microsoft Authentication Library (MSAL) for fetching the token from the client side.
After you've configured Graph permissions in Azure AD:
-1. [Get the token ID from Teams client](#get-the-token-id-from-teams-client)
-1. [Exchange the token ID with the server-side token](#exchange-the-token-id-with-the-server-side-token)
+- [Configure your client-side code to fetch access token using MSAL](#configure-code-to-fetch-access-token-using-msal)
+- [Pass the access token to server-side code](#pass-the-access-token-to-server-side-code)
-### Get the token ID from Teams client
+### Configure code to fetch access token using MSAL
-The following is an example for calling token ID from Teams client:
-
-```csharp
-microsoftTeams.authentication.getAuthToken().then((result) => {
- //result contains the id token
- console.log(result);
- })
-```
-
-### Exchange the token ID with the server-side token
-
-The following is an example of OBO flow to fetch access token from the Teams client using MSAL:
+The following code provides an example of OBO flow to fetch access token from the Teams client using MSAL.
### [C#](#tab/dotnet)
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create
+### Pass the access token to server-side code
+ If you need to access Microsoft Graph data, configure your server-side code to: 1. Validate the access token. For more information, see [Validate the access token](tab-sso-code.md#validate-the-access-token).
If you need to access Microsoft Graph data, configure your server-side code to:
> [!IMPORTANT] > As a best practice for security, always use the server-side code to make Microsoft Graph calls, or other calls that require passing an access token. Never return the OBO token to the client to enable the client to make direct calls to Microsoft Graph. This helps protect the token from being intercepted or leaked.
-## Code sample
-
-| **Sample name** | **Description** | **C#** | **Node.js** |
-| | | | |
-| Tabs Azure AD SSO | Microsoft Teams sample app for tabs Azure AD SSO, which uses OBO flow to call Graph APIs. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/69c76fded29d7ae0fde49841d4ec9af7597ceedd/samples/tab-sso/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/69c76fded29d7ae0fde49841d4ec9af7597ceedd/samples/tab-sso/nodejs)|
- ## Known limitations Tenant admin consent: A simple way of [consenting on behalf of an organization as a tenant admin](/azure/active-directory/manage-apps/consent-and-permissions-overview#admin-consent) is by getting [consent from admin](/azure/active-directory/manage-apps/grant-admin-consent).
platform Build Adaptive Card Tabs https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/build-adaptive-card-tabs.md
The following code shows a reissued request example:
## Code sample
-|**Sample name** | **Description** |**.NET** | **Node.js** |
-|-|--|--|--|
-| Show Adaptive Cards in Teams tab | Microsoft Teams tab sample code, which demonstrates how to show Adaptive Cards in Teams. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-adaptive-cards/csharp)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-adaptive-cards/nodejs) |
+|**Sample name** | **Description** |**.NET** | **Node.js** | **Manifest**
+|-|--|--|--|--|
+| Show Adaptive Cards in Teams tab | Microsoft Teams tab sample code, which demonstrates how to show Adaptive Cards in Teams. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-adaptive-cards/csharp)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-adaptive-cards/nodejs) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-adaptive-cards/csharp/demo-manifest/tab-adaptive-card.zip)
## Next step
platform Conversational Tabs https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/conversational-tabs.md
You can also listen for an event when the users selects **Close (X)** in the con
## Code sample
-| Sample name | Description | .NET |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) |
+| Sample name | Description | .NET |Node.js|Manifest
+|-|-||-|-|
+|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) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-conversations/csharp/demo-manifest/tab-conversations.zip)
## Next step
platform Create Personal Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/create-personal-tab.md
If you create a bot with a **personal** scope, it appears in the first tab posit
```
+## Code sample
+
+| Sample name | Description | .NET |Node.js|Manifest
+|-|-||-|-|
+|Tab personal|Sample app which showcases creating a custom channel/group tab with ASP.Net Core and MVC. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-personal/mvc-csharp) | NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-personal/mvc-csharp/demo-manifest/tab-personal.zip)
+ ## Next step > [!div class="nextstepaction"]
platform Using Fluid Msteam https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/using-fluid-msteam.md
tokenProvider: new InsecureTokenProvider(JSON.parse(process.env.REACT_APP_TENANT
- [Azure Fluid Relay documentation](/azure/azure-fluid-relay) - [Fluid Framework documentation](https://fluidframework.com/docs/)-- [Fluid examples GitHub Repo](https://github.com/microsoft/FluidExamples)
+- [Fluid examples GitHub Repo](https://github.com/microsoft/FluidExamples)
platform Tabs Link Unfurling https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/tabs-link-unfurling.md
Encoded
## Code sample
-| Sample name | Description | .NET |Node.js|
-|-|-||-|
-|Tab in stage view |Microsoft Teams tab sample app for demonstrating tab in stage view.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-stage-view/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-stage-view/nodejs)|
+| Sample name | Description | .NET |Node.js| Manifest|
+|-|-||-|-|
+|Tab in stage view |Microsoft Teams tab sample app for demonstrating tab in stage view.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-stage-view/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-stage-view/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-stage-view/csharp/demo-manifest/tab-stage-view.zip)
## Next step
platform Cards Actions https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/cards/cards-actions.md
The following code shows an example of Adaptive Cards with `invoke` action with
## Code samples
-|S.no|Card| description|.NET|Node.js|Python|Java|
+|S.No.|Card| Description|.NET|Node.js|Python|Java|
|:--|:--|:--|--||--|-|
-|1|Using cards|Introduces all card types including thumbnail, audio, media etc. Builds on Welcoming user + multi-prompt bot by presenting a card with buttons in welcome message that route to appropriate dialog.|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/csharp_dotnetcore/06.using-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/javascript_nodejs/06.using-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/python/06.using-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/java_springboot/06.using-cards)|
-|2|Adaptive cards|Demonstrates how the multi-turn dialog can use a card to get user input for name and age.|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/csharp_dotnetcore/07.using-adaptive-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/javascript_nodejs/07.using-adaptive-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/python/07.using-adaptive-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/java_springboot/07.using-adaptive-cards)|
+|1|Adaptive card actions|This sample showscases different actions supported in adaptive cards.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-adaptive-card-actions/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-adaptive-card-actions/nodejs)|NA|NA
+|2|Using cards|Introduces all card types including thumbnail, audio, media etc. Builds on Welcoming user + multi-prompt bot by presenting a card with buttons in welcome message that route to appropriate dialog.|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/csharp_dotnetcore/06.using-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/javascript_nodejs/06.using-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/python/06.using-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/java_springboot/06.using-cards)|
+|3|Adaptive cards|Demonstrates how the multi-turn dialog can use a card to get user input for name and age.|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/csharp_dotnetcore/07.using-adaptive-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/javascript_nodejs/07.using-adaptive-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/python/07.using-adaptive-cards)|[View](https://github.com/microsoft/BotBuilder-Samples/blob/main/samples/java_springboot/07.using-adaptive-cards)|
> [!NOTE] > Media elements are not supported for adaptive card in Teams
platform Cards Format https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/cards/cards-format.md
You can test formatting in your own cards by modifying this code.
+## Code samples
+
+|S.No.| Description|.NET|Node.js|
+|:--|:--|:--|--|
+|1|Sample which showcase different card formatting used.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-formatting-cards/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-formatting-cards/nodejs)
+ ## See also * [Cards and task modules](../cards-and-task-modules.md)
platform Cards Reference https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/cards/cards-reference.md
The following cards are implemented by the Bot Framework, but aren't supported b
* Audio cards * Video cards
+## Code samples
+
+|S.No.| Description|.NET|Node.js|
+|:--|:--|:--|--|
+|1|Sample which demonstrates the feature where user can send different types of cards using bot which are supported in teams.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-all-cards/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-all-cards/nodejs)
+ ## See also * [Cards and task modules](../cards-and-task-modules.md)
platform Invoking Task Modules https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/invoking-task-modules.md
Microsoft Teams ensures that keyboard navigation works properly from the task mo
## Code sample
-|Sample name | Description | .NET | Node.js|
-|-|--|--|-|
-|Task module sample bots-V4 | Samples for creating task modules. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|
-|Task module sample tabs and bots-V3 | Samples for creating task modules. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-task-module/nodejs)|
+|Sample name | Description | .NET | Node.js | Manifest
+|-|--|--|-|-|
+|Task module sample bots-V4 | Samples for creating task modules. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip)
## Next step
platform Task Modules Bots https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/task-modules-bots.md
The schema for Bot Framework card actions is different from Adaptive Card `Actio
## Code sample
-|Sample name | Description | .NET | Node.js|
-|-|--|--|-|
-|Task module sample bots-V4 | Samples for creating task modules. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|
+|Sample name | Description | .NET | Node.js | Manifest
+|-|--|--|-|-|
+|Task module sample bots-V4 | Samples for creating task modules. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip)
## Step-by-step guide
platform Task Modules Tabs https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/task-modules-tabs.md
The following table provides the possible values of `err` that can be received b
## Code sample
-|Sample name | Description | .NET | Node.js|
-|-|--|--|-|
-|Task module sample tabs and bots-V3 | Samples for creating task modules. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/app-task-module/nodejs)|
+|Sample name | Description | .NET | Node.js|Manifest
+|-|--|--|-|-|
+|Task module sample using bot and tab | Samples for creating task modules. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip)
## Next step
platform Build Environments https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/build-environments.md
Title: Prepare to build apps with Teams Toolkit description: Learn about build environments such as SPFx of Teams Toolkit in Visual Studio Code. Toolkit integrates Azure Functions capabilities for building apps.-+ ms.localizationpriority: medium Last updated 11/29/2021
Last updated 11/29/2021
# Prepare to build apps using Teams Toolkit
-Teams Toolkit supports different environments for creating apps. Teams Toolkit helps to integrate Azure Functions capabilities and cloud services in the Teams app that you've built.
+Teams Toolkit supports different build environments for creating apps. It helps to integrate Azure Functions capabilities and cloud services in the Teams app that you've built.
:::image type="content" source="../assets/images/buildapps-TTK_1.png" alt-text="Prepare to build apps using Teams Toolkit" lightbox="../assets/images/buildapps-TTK_1.png"::: ## Build environments
-Teams Toolkit in Visual Studio Code offers set of environments to build your Teams app. You can choose any of the following environments:
+Teams Toolkit in Visual Studio Code offers a set of environments to build your Teams app. You can choose any of the following environments:
* JavaScript or TypeScript * SharePoint Framework (SPFx)
+* C# using Blazor framework
### Create your Teams app using JavaScript or TypeScript
The apps built with JavaScript or TypeScript have the following advantages:
Teams Toolkit in Visual Studio Code supports building the following apps using JavaScript or TypeScript: * Tab app: Your tab app can have web-based content. You can have a custom tab for your web content in Teams or add Teams-specific functionality to your web content.
-* Bot app: Bot can be chatbot or conversational bot that allows you to do simple and repetitive tasks such as customer service or support staff.
+* Bot app: A bot can be chatbot or conversational bot that allows you to do simple and repetitive tasks, such as customer service or support staff.
* Notification bot: You can send messages in Teams channel or group or personal chat by notification bots with HTTP request. * Command bot: You can automate repetitive tasks using a command bot. Command bot helps you to respond simple queries or commands sent in chats. * Workflow bot: You can interact with an Adaptive Card enabled by the Adaptive Card action handler feature in the workflow bot app.
Teams Toolkit in Visual Studio Code allows you to create tab apps using SPFx. Th
* Integrates with other Microsoft 365 workloads easily. * Delivers flexibility to host applications wherever needed.
+### Create your Teams app using C# and Blazor
+
+* Teams Toolkit in Visual Studio allows you to create a Teams app using C# using the Blazor framework. You can create tab app, bot app, and message extension app in a C# build environment.
+ ## Support for Azure Functions
-You can use Teams Toolkit to integrate [Azure Functions](/azure/azure-functions/functions-overview) capabilities into building apps. You can focus on the pieces of code that matter, and Azure Functions handles the rest.
+You can use Teams Toolkit to integrate [Azure Functions](/azure/azure-functions/functions-overview) capabilities while building apps. You can focus on the pieces of code that matter, and Azure Functions handles the rest.
Azure Functions provides "compute on-demand" in two significant ways:
-1. Allows to implement system's logic into your readily available blocks of code. These blocks are called functions.
+1. Allows implementing system's logic into your readily available blocks of code. These blocks are called functions.
1. Meets the requirement with as many resources and function instances as necessary as the requests increase. Azure Functions integrates with an array of [cloud services](add-resource.md#types-of-cloud-resources) to provide feature-rich implementations. The following are the common scenarios for Azure Functions:
platform Create New Project https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/create-new-project.md
You can build a new Teams project by selecting **Create a new Teams app** in Tea
| App Types | Definition | | | |
-| **Basic Teams apps** | Basic Teams apps are tab, bot, or message extension that you can create and customize based on your needs. |
+| **Basic Teams apps** | Basic Teams apps are tab, bot, or message extension that you can create and customize based on your requirement. |
| **Scenario-based Teams apps** | Scenario-based Teams apps are notification bot, command bot, workflow bot, SSO-enabled tab, or SPFx tab app and these are suitable for one particular scenario. For example, a notification bot is suitable to send notifications and not used for chat. | ## Create a new Teams app
-The steps to create a new Teams app is similar for all types of apps except SPFx tab app, workflow bot, and notification bot. The following steps help you to build a new tab app:
+The process to create a new Teams app is similar for all types of apps except SPFx tab app, workflow bot, and notification bot.
-**To create an app**
+**To create a basic Teams app**:
1. Open **Visual Studio Code**. 1. Select the **Teams Toolkit** > **Create a new Teams app**.
- :::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/create-project_1.png" alt-text="Location of the Create New Project link in the Teams Toolkit sidebar.":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/create-project.png" alt-text="screenshot shows the Create New Project button in the Teams Toolkit sidebar.":::
-1. Ensure that **Tab** is selected as your app capability.
+1. Select **Start with a Teams capability**.
+
+ :::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/select-app-type.png" alt-text="Screenshot shows the option to select app type." lightbox="../assets/images/teams-toolkit-v2/first-tab/select-app-type.png":::
+
+1. Ensure that **Tab** is selected as app capability.
:::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/select-capabilities-tabapp_1.png" alt-text="Select App Capability":::
The steps to create a new Teams app is similar for all types of apps except SPFx
:::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/select-language-tab_1.png" alt-text="Screenshot showing how to select the programming language.":::
-1. Select **Default folder** to store your project root folder in default location.
+1. Select **Default folder** to store your project root folder in the default location.
:::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/select-default-location.png" alt-text="Select default location":::
- The following steps guide you to change the default location:
+ <details>
+ <summary>Learn to change the default folder:</summary>
- 1. Select **Browse**.
+ 1. Select **Browse**.
- :::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/select-browse_1.png" alt-text="Select browse for storage":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/select-browse_1.png" alt-text="Select browse for storage":::
- 1. Select the location for project workspace.
+ 1. Select the location for project workspace.
- 1. Select the **Select Folder**.
+ :::image type="content" source="../assets/images/teams-toolkit-v2/select-folder_1.png" alt-text="select-folder for storage":::
- :::image type="content" source="../assets/images/teams-toolkit-v2/select-folder_1.png" alt-text="select-folder for storage":::
+ The folder you select is the location for your project workspace.
+ </details>
-1. Enter a suitable name for your app, such as helloworld as the application name. Ensure that you use only alphanumeric characters. Press **Enter**.
+1. Enter a suitable name for your app, such as helloworld, as the application name. Ensure that you use only alphanumeric characters. Press **Enter**.
:::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/enter-name-tab1.png" alt-text="Screenshot showing where to enter the app name.":::
-1. By default, project opens in new window after 10 seconds. If you want to open in current window, select **Open in current window**.
+ By default, your app project opens in a new window . You can open your app project in the current window as well.
:::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/new-window-notification.png" alt-text="New window notification"::: The Teams tab app is created in a few seconds.
- :::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/tap-app-created1.png" alt-text="Screenshot showing the app created.":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/first-tab/tab-app-created.png" alt-text="Screenshot showing the app created." lightbox="../assets/images/teams-toolkit-v2/first-tab/tab-app-created.png":::
### Directory structure for different app types
-Teams Toolkit provides all components for building an app. After creating the project, you can view the project folders and files under **EXPLORER**.
+Teams Toolkit provides all components for building an app. After creating the project, you can view the project folders and files under **EXPLORER** section.
<br> <details> <summary><b>Directory structure for basic Teams app</b></summary>
-You have three different types of basic Teams apps and the directory structure looks similar for all types of apps. The following example shows a basic Teams tab app directory structure:
+The following example shows a basic Teams tab app directory structure:
| Folder name | Contents | | | |
To learn more about the directory structure of different types of basic Teams ap
<details> <summary><b>Directory structure for scenario-based Teams app</b></summary>
-You have five different types of scenario-based Teams apps and the directory structure looks similar for all types of apps. The following example shows a scenario-based notification bot Teams app directory structure:
+The following example shows a scenario-based notification bot Teams app directory structure:
The new project folder contains the following content:
The new project folder contains the following content:
| `bot` | The bot source code. | | `templates` | Templates for Teams app manifest and corresponding Azure resources. |
-The core notification implementation in **bot** folder and it contains:
+The core notification implementation is stored in the **bot** folder and it contains:
| File name | Contents | | | |
To learn more about the directory structure of different types of scenario-based
You can add more features to your existing Teams app by using **Add features**. For example, if you add a bot app to the existing tab app, Teams Toolkit adds the bot folder with relevant files and code.
-The following image shows the directory structure of tab app:
+The following image shows the directory structure of a tab app:
:::image type="content" source="../assets/images/teams-toolkit-v2/tabapp-directory.png" alt-text="Tab app directory structure":::
The following image shows the directory structure of tab app with bot feature:
## Create new Teams app in Visual Studio
-Teams Toolkit provides Microsoft Teams app templates in Visual Studio to create Teams apps. You can search and select the Teams app template that you require when you create a new project. You can have Teams app templates for creating:
+Teams Toolkit provides Microsoft Teams app templates in Visual Studio to create Teams apps. You can search and select the Teams app template that you require when you create a new project. Teams Toolkit for Visual Studio provides Teams app templates for creating:
* Tab app * Command bot
Teams Toolkit provides Microsoft Teams app templates in Visual Studio to create
| &nbsp; | Install | For using... | | | | | | &nbsp; | **Required** | &nbsp; |
-| &nbsp; | Visual Studio latest version | You can install the enterprise edition of Visual Studio, and install the **ASP.NET and web development** workload and **Microsoft Teams Development Tools**. |
-| &nbsp; | Teams Toolkit | A Visual Studio extension that creates a project scaffolding for your app. Use latest version. |
-| &nbsp; | [Microsoft Teams](https://www.microsoft.com/microsoft-teams/download-app) | Microsoft Teams to collaborate with everyone you work with through apps for chat, meetings, call - all in one place. |
- | &nbsp; | [Prepare your Microsoft 365 tenant](../concepts/build-and-test/prepare-your-o365-tenant.md) | Access to Teams account with the appropriate permissions to install an app. |
+| &nbsp; | Visual Studio latest version | You can install the enterprise edition of Visual Studio, and then select the **ASP.NET and web development** workload and **Microsoft Teams Development Tools** for installing.|
+| &nbsp; | Teams Toolkit | A Visual Studio workload that creates a project scaffolding for your app. Use latest version. |
+| &nbsp; | [Microsoft Teams](https://www.microsoft.com/microsoft-teams/download-app) | Microsoft Teams to sideload your Teams app into local Teams environment for testing app behavior. |
+ | &nbsp; | [Prepare your Microsoft 365 tenant](../concepts/build-and-test/prepare-your-o365-tenant.md) | Access to Microsoft 365 account with the appropriate permissions to install an app. |
## Create a new Teams app
The steps to create a new Teams app are similar for all types of apps except not
1. Open Visual Studio. 1. Create a new project by using one of the following two options:
- * Select **Create a new project** under **Get started** helps you to select a project template with code scaffolding.
+ * Select **Create a new project** under **Get started** to select a project template.
+ * Select **Continue without Code** to open Visual Studio without selecting a Teams Toolkit template.
:::image type="content" source="../assets/images/Tools-and-SDK-revamp/Create-new-app-VS/vs-create-new-project1_1_2.png" alt-text="Create new project with code from get started":::
- * Select **Continue without Code** to create project without code scaffolding. Select **File** > **New** > **Project** in Visual Studio.
+ * If your open Visual Studio code without selecting a Teams Toolkit template, select **File > New > Project** in Visual Studio to create a Teams app.
:::image type="content" source="../assets/images/Tools-and-SDK-revamp/Create-new-app-VS/vs-create-new-project2_1_2.png" alt-text="Create new project from file menu":::
- The **Create a new project** window appears.
+ * The **Create a new project** window appears.
-1. Enter **teams** in the search box and from the list, select **Microsoft Teams App**.
+1. Enter **teams** in the search box and then list, select **Microsoft Teams App** from the search results.
:::image type="content" source="../assets/images/Tools-and-SDK-revamp/Create-new-app-VS/visual-studio.png" alt-text="Search and choose microsoft teams app":::
The steps to create a new Teams app are similar for all types of apps except not
1. Enter a suitable name for your project. > [!NOTE]
- > The project name you are entering is automatically filled in the **Solution name**. If you want, you can change the solution name with no affect on the project name.
+ > The project name you are entering is automatically filled in the **Solution name**. If you want, you can change the solution name with no effect on the project name.
1. Select the folder location where you want to create the project workspace. 1. Enter a different solution name, if you want.
- 1. If required, check the checkbox to save the project and solution in the same folder. For this tutorial, you don't need this option.
+ 1. If required, select the checkbox to save the project and solution in the same folder. For this tutorial, you don't need this option.
1. Select **Create**. The **Create a new Teams application** window appears. 1. Ensure **Tab** is selected, then select **Create**.
+ > [!NOTE]
+ > If you want to add single sign-on capability to your Teams app, select the Configure with single sign-on checkbox. For more information on single sign-in in Teams app created using Teams Toolkit, see [Add single sign-on to your Teams apps](/microsoftteams/platform/toolkit/add-single-sign-on?pivots=visual-studio).
+ :::image type="content" source="../assets/images/Tools-and-SDK-revamp/Create-new-app-VS/vs-ms-teams-app-type_3_1.png" alt-text="Select the teams app type"::: > [!NOTE]
- > You can select the required type of Teams app for your project.
+ > You can select any type of Teams app for your project.
- The **GettingStarted** with **Welcome to Teams Toolkit** window appears.
+ The **GettingStarted .txt** window appears.
:::image type="content" source="../assets/images/Tools-and-SDK-revamp/Create-new-app-VS/vs-getting-started-page_1.png" alt-text="Select the Getting Started teams toolkit":::
+You have created the app project scaffolding for your Teams app using Teams Toolkit template.
+ ### Directory Structure Teams Toolkit provides all components for building an app. After creating the project, you can view the project folders and files under **Solution Explorer**.
platform Install Teams Toolkit https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/install-Teams-Toolkit.md
Title: Install Teams Toolkit
-description: Learn about installation of Teams Toolkit of different versions in Visual Studio code, Visual Studio, and marketplace.
+description: Learn about installation of Teams Toolkit of different versions in Visual Studio Code, Visual Studio, and marketplace.
ms.localizationpriority: medium
You can install Teams Toolkit using **Extensions** in Visual Studio Code, or ins
# [Visual Studio Code](#tab/vscode)
-1. Launch **Visual Studio Code**.
-1. Select **View > Extensions** or **Ctrl+Shift+X**. The extensions marketplace pane appears.
+1. Launch Visual Studio Code.
+1. Select **View > Extensions** or **Ctrl+Shift+X**. You can also open extensions by selecting the extensions :::image type="icon" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/vsc-ext-icon.png" border="false"::: icon from the Visual Studio Code activity bar.
:::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/install toolkit-1_2.png" alt-text="Screenshot shows how to install.":::
- You can also open extensions by selecting the extensions :::image type="icon" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/vsc-ext-icon.png" border="false"::: icon from the Visual Studio Code activity bar.
+ The extensions marketplace pane appears.
1. Enter **Teams Toolkit** in the search box.
You can install Teams Toolkit using **Extensions** in Visual Studio Code, or ins
1. In the pop-up window that appears, select **Open**.
- :::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/select-open_1.png" alt-text="Screenshot shows to select the open.":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/select-open_1.png" alt-text="Screenshot shows a pop-up window to open Visual Studio Code.":::
Visual Studio Code opens with the Teams Toolkit extension page.
You can install Teams Toolkit using **Extensions** in Visual Studio Code, or ins
:::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/select-install-ttk_2.png" alt-text="Screenshot shows how to select Install TTK in VSC.":::
- After successful installation of Teams Toolkit in Visual Studio Code, a Teams Toolkit icon appears in the Visual Studio Code activity bar.
+ After successful installation of Teams Toolkit in Visual Studio Code, the Teams Toolkit icon appears in the Visual Studio Code activity bar.
:::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/after-install_2.png" alt-text="Screenshot shows the after installation view.":::
You can install Teams Toolkit using **Extensions** in Visual Studio Code, or ins
By default, Visual Studio Code automatically keeps Teams Toolkit up-to-date. If you want to install a different release version, follow these steps:
-1. Select **Extensions** :::image type="icon" source="../assets/images/teams-toolkit-v2/extension icon.png" border="false"::: from from the Visual Studio Code activity bar.
+1. Select **Extensions** :::image type="icon" source="../assets/images/teams-toolkit-v2/extension icon.png" border="false"::: from the Visual Studio Code activity bar.
1. Enter **Teams Toolkit** in the search box.
By default, Visual Studio Code automatically keeps Teams Toolkit up-to-date. If
1. Select **Install Another Version...** from the dropdown.
- :::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/InstallAnotherVersion.png" alt-text="Select other version of VS Code.":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/InstallAnotherVersion.png" alt-text="Select other version of Visual Studio Code.":::
1. Select the required version to install.
- :::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/Olderversions of VS Code.png" alt-text="Other then the latest version of VS code.":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/teams toolkit fundamentals/Olderversions of VS Code.png" alt-text="Screenshot shows versions other than the latest version of Visual Studio Code.":::
Teams Toolkit installs the version youΓÇÖve selected.
The Teams Toolkit for Visual Studio Code extension is available in a pre-release
## Install Teams Toolkit for Visual Studio > [!IMPORTANT]
- > We recommend you to use Visual Studio 2022 version 17.4.1 or later for Teams Toolkit, which is the latest release to fix several known issues in previous versions of Visual Studio.
+ > It's recommend you use Visual Studio 2022 version 17.4.1 or later for Teams Toolkit. It is the latest release to fix several known issues in previous versions of Visual Studio.
1. Download the [Visual Studio installer](https://aka.ms/VSDownload), or open it if already installed.
-1. Select **Install** or select **Modify** if Visual Studio is already installed.
+1. Select **Install** or select **Modify** if you've already installed Visual Studio.
Visual Studio installer shows all workloads, whether installed or available for installation.
platform Tools Prerequisites https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/tools-prerequisites.md
Last updated 03/14/2022
# Prerequisites for creating your Teams app
-The following are the prerequisites to create your Teams app:
+Before you create your Teams app project, ensure that the prerequisites are in place. You must:
-* [Basic requirements to build your Teams app](#basic-requirements-to-build-your-teams-app)
+* [Install required tools to build your Teams app](#install-required-tools-to-build-your-teams-app)
* [Prepare Accounts to build your Teams app](#accounts-to-build-your-teams-app)
-* [Sideload permission](#sideload-permission)
-
-## Basic requirements to build your Teams app
-
-Ensure the following requirements are met before you start building your Teams app:
-
-| &nbsp; | Basic requirements | For using| For environment type|
- | | | |
- | **Required** | &nbsp; | &nbsp; | &nbsp; |
- | &nbsp; | Teams Toolkit| A Microsoft Visual Studio Code extension that creates a project scaffolding for your app. Use the latest version. | JavaScript and SharePoint Framework (SPFx)|
- | &nbsp; | [Microsoft Teams](https://www.microsoft.com/microsoft-teams/download-app) | Collaborate with everyone you work with through apps for chat, meetings, and call - all in one place.| JavaScript and SPFx|
- | &nbsp; | [Node.js](https://nodejs.org/en/download/) | Back-end JavaScript runtime environment. Use the latest v16 LTS release.| JavaScript and SPFx|
- | &nbsp; |[Node Package Manager (NPM)](https://www.npmjs.com/package/@microsoft/teamsfx) | Install and manage packages for use in both Node.js and ASP.NET Core applications.| JavaScript and SPFx|
- | &nbsp; | [Microsoft&nbsp;Edge](https://www.microsoft.com/edge) (recommended) or [Google Chrome](https://www.google.com/chrome/) | A browser with developer tools. | JavaScript and SPFx|
- | &nbsp; | [Microsoft Visual Studio Code](https://code.visualstudio.com/download) | JavaScript, TypeScript, or SPFx build environments. Use version 1.55 or later. | JavaScript and SPFx|
- | **Optional** | &nbsp; | &nbsp; | &nbsp; |
- | &nbsp; | [Azure Tools for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) and [Azure CLI](/cli/azure/install-azure-cli) | Access stored data or deploy a cloud-based back-end for your Teams app in Azure. | JavaScript|
- | &nbsp; | [React Developer Tools for Chrome](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi) or [React Developer Tools for Microsoft&nbsp;Edge](https://microsoftedge.microsoft.com/addons/detail/react-developer-tools/gpphkfbcpidddadnkolkpfckpihlkkil) | A browser DevTools extension for the open-source React JavaScript library. | JavaScript|
- | &nbsp; | [Microsoft Graph Explorer](https://developer.microsoft.com/graph/graph-explorer) | A browser-based tool that lets you run a query from Microsoft Graph data. | JavaScript and SPFx|
- | &nbsp; | [Developer Portal for Teams](https://dev.teams.microsoft.com/) | A web-based portal to configure, manage, and distribute your Teams app including to your organization or the Teams store.| JavaScript and SPFx|
+* [Verify sideloading permission](#verify-sideloading-permission)
+
+## Install required tools to build your Teams app
+
+Ensure that the following tools are installed on the device where youΓÇÖll create your app project before you start building your Teams app:
+
+| Tools | For using | For environment type |
+| | | |
+| **Required** | &nbsp; | &nbsp; |
+| Microsoft Visual Studio Code | JavaScript, TypeScript, or SPFx build environments to build your Teams app. Use version 1.55 or later. | JavaScript, TypeScript, and SPFx. |
+| Teams Toolkit | The Microsoft Visual Studio Code extension to create a Teams app project. Use the latest version. | JavaScript, TypeScript, and (SPFx) |
+| [Microsoft Teams](https://www.microsoft.com/microsoft-teams/download-app) | Sideloading feature to test your app behavior within your local Teams environment.| JavaScript, TypeScript, and SPFx. |
+| [Node.js](https://nodejs.org/en/download/) | Back-end JavaScript runtime environment. Use the latest v16 LTS release.| JavaScript, TypeScript, and SPFx. |
+| [Node Package Manager (NPM)](https://www.npmjs.com/package/@microsoft/teamsfx) | Installing and managing packages for use in both Node.js and ASP.NET core applications.| JavaScript, TypeScript, and SPFx. |
+| [Microsoft&nbsp;Edge](https://www.microsoft.com/edge) (recommended) or [Google Chrome](https://www.google.com/chrome/) | A browser with developer tools. | JavaScript and SPFx |
+| **Optional** | &nbsp; | &nbsp; |
+| [Azure Tools for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack) and [Azure CLI](/cli/azure/install-azure-cli) | Stored data or deploy a cloud-based back-end for your Teams app in Azure. | JavaScript |
+| [React Developer Tools for Chrome](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi) or [React Developer Tools for Microsoft&nbsp;Edge](https://microsoftedge.microsoft.com/addons/detail/react-developer-tools/gpphkfbcpidddadnkolkpfckpihlkkil) | The browser based DevTools extension for the open-source React JavaScript library. | JavaScript |
+| [Microsoft Graph Explorer](https://developer.microsoft.com/graph/graph-explorer) | The browser-based tool that lets you run a query from Microsoft Graph data. | JavaScript, TypeScript and SPFx |
+| [Developer Portal for Teams](https://dev.teams.microsoft.com/) | The web-based portal to configure, manage, and distribute your Teams app including to your organization or the Teams store.| JavaScript, TypeScript and SPFx. |
> [!NOTE] > > * The document is tested with Teams Toolkit version 4.1.3 and Node.js version 16.
- > * Bookmark the Microsoft Graph Explorer, to learn about Microsoft Graph services. This browser-based tool allows you to run a query and access the Microsoft Graph API.
+ > * Bookmark the Microsoft Graph Explorer to learn about Microsoft Graph services. This browser-based tool allows you to run a query and access the Microsoft Graph API.
## Accounts to build your Teams app Ensure that you have the following accounts before you start building your Teams app: | Accounts | For using| For environment type|
-| | |
+| | | |
|[Microsoft 365 account with a valid subscription](#microsoft-365-developer-program)|Teams developer account while developing an app.| JavaScript and SPFx| |[Azure account](#azure-account)|Back-end resources on Azure.| JavaScript and SPFx| |[SharePoint collection site administrator account](#sharepoint-collection-site-administrator-account) |Deployment for hosting.| SPFx|
To create a Microsoft 365 account, sign up for a Microsoft 365 developer program
If you have a Visual Studio Enterprise or Professional subscription, both programs include a free Microsoft 365 [developer subscription](https://aka.ms/MyVisualStudioBenefits). It's active as long as your Visual Studio subscription is active. For more information, see [Microsoft 365 developer subscription](https://developer.microsoft.com/microsoft-365/dev-program).
-You can sign up for the developer program by using one of the following account types:
+You can sign up for the developer program using one of the following account types:
* **Microsoft account for personal use**
You can sign up for the developer program by using one of the following account
:::column span="3":::
- The account provides access to the Microsoft products and the cloud services, such as Outlook, Messenger, OneDrive, MSN, Xbox Live, or Microsoft 365.
+ The Microsoft account provides access to the Microsoft products and cloud services, such as Outlook, Messenger, OneDrive, MSN, Xbox Live, or Microsoft 365.
- You can sign up for an Outlook.com mailbox to create a Microsoft account, which can be used to access consumer-related Microsoft cloud services or Azure.
+ Sign up for an Outlook.com mailbox to create a Microsoft 365 account. Use it to access consumer-related Microsoft cloud services or Azure.
:::column-end::: :::column span="1":::
You can sign up for the developer program by using one of the following account
:::column span="3":::
- The account provides access to all small, medium, and enterprise business-level Microsoft cloud services. The services include Azure, Microsoft Intune, or Microsoft 365.
+ This account provides access to all small, medium, and enterprise business-level Microsoft cloud services. The services include Azure, Microsoft Intune, and Microsoft 365.
When you sign up to one of these services as an organization, a cloud-based directory is automatically provisioned in Microsoft Azure Active Directory (Azure AD) to represent your organization.
You can sign up for the developer program by using one of the following account
#### Create a free Microsoft 365 developer account
-To create a free Microsoft 365 developer account, join the Microsoft 365 developer program and perform the following steps:
+To create a free Microsoft 365 developer account:
1. Go to the [Microsoft 365 developer program](https://developer.microsoft.com/microsoft-365/dev-program). 1. Select **Join Now**.
-1. Set up your administrator account.
+1. Set up your administrator account subscription.
After the completion of the subscription, the following information appears:
To create a free Microsoft 365 developer account, join the Microsoft 365 develop
### Azure account
-You need an Azure account to host a Teams app or the back-end resources for your Teams app using Teams Toolkit in Visual Studio Code. You must need Azure subscription in the following scenarios:
+An Azure account allows you to host a Teams app or the back-end resources for your Teams app to Azure. You can do this using Teams Toolkit in Visual Studio Code. You must have an Azure subscription in the following scenarios:
-* If you already have an existing app on a different cloud provider other than Azure, and you want to integrate the app on Teams platform, you must have an Azure subscription.
-* If you want to host your back-end resources using another cloud provider, or on your own servers if they're available in the public domain, you must have an Azure subscription.
+* If you already have an existing app on a different cloud provider other than Azure, and you want to integrate the app on Teams platform.
+* If you want to host the back-end resources for your app using another cloud provider, or on your own servers if they're available in the public domain.
> [!NOTE]
-> You need to [create a free account](https://azure.microsoft.com/free/) before you begin.
+> You must [create a free account](https://azure.microsoft.com/free/) before you begin.
### SharePoint collection site administrator account
-While creating Teams app using SPFx environment, you need a SharePoint collection site administrator account at deployment for hosting. If you're using a Microsoft 365 developer program tenant, you can use the administrator account you created at the time.
+While creating Teams app using SPFx environment, you must have a SharePoint collection site administrator account. ItΓÇÖs required for deploying and hosting your app on SharePoint site. If you're using a Microsoft 365 developer program tenant, you can use the administrator account you created at the time.
-## Sideload permission
+## Verify sideloading permission
After creating the app, you must load your app in Teams without distributing it. This process is known as sideloading. Sign in to your Microsoft 365 account to view this option.
You can verify if the sideloading permission is enabled using either Visual Stud
<details> <summary><b>Verify sideloading permission using Visual Studio Code</b></summary>
+You can use this method to verify sideloading permission only after you have created an app project using Teams Toolkit. If you haven't created an app project, you can verify sideloading permission using Teams client.
+ 1. Open **Visual Studio Code**.
-1. Select the **Teams Toolkit** from the Visual Studio Code activity bar.
+1. Select **Teams Toolkit** from the Visual Studio Code activity bar.
> [!NOTE] > If you're unable to see the option, see [install Teams Toolkit](install-Teams-Toolkit.md) to install Teams Toolkit extension in Visual Studio Code.
-1. Select **Sign in to Microsoft 365** under **ACCOUNTS** and sign in to your Microsoft 365 account.
+
+1. Create a new Teams Toolkit app project or open an existing app project.
+
+1. Select **Sign in to Microsoft 365** under **ACCOUNTS**.
:::image type="content" source="../assets/images/teams-toolkit-v2/accounts1_1.png" alt-text="accounts details":::
-1. Check if you can see the option **Sideloading enabled** as you can see in the following image:
+1. Verify if you can see the option **Sideloading enabled** as shown in the following image:
:::image type="content" source="../assets/images/teams-toolkit-v2/sideloading_1.png" alt-text="Enable sideloading":::
You can verify if the sideloading permission is enabled using either Visual Stud
### Enable sideloading using admin center
-If you're unable to see the option **Upload a custom app,** then it indicates that you don't have the required permission for sideloading.
+If sideloading option isnΓÇÖt visible in Teams Toolkit extension in Visual Studio Code or if the option to upload a custom app isnΓÇÖt available in Teams, it indicates that you don't have the required permission for sideloading.
+
+You must enable sideloading for your app in Teams:
* If you're a tenant admin, enable the sideloading setting for your tenant or organization in the Teams admin center.
-* If you aren't a tenant admin, you need to contact your tenant admin to enable sideloading.
+* If you aren't a tenant admin, contact your tenant admin to enable sideloading.
-If you have admin rights, perform the following steps to upload the custom app using admin center:
+If you have admin rights, you can enable sideloading:
1. Sign in to [Microsoft 365 admin center](https://admin.microsoft.com/Adminportal/Home?source=applauncher#/homepage#/) with your admin credentials.
If you have admin rights, perform the following steps to upload the custom app u
> [!Note] > It can take up to 24 hours for sideloading to become active. In the meantime, you can use **upload for your tenant** to test your app. To upload the .zip package file of the app, see [upload custom apps](/microsoftteams/teams-app-setup-policies).
- Ensure that you have the sideloading permission using the steps mentioned in [verify sideloading permission using Visual Studio Code or Teams client](#sideload-permission).
+ Ensure that you have the sideloading permission using the steps mentioned in [verify sideloading permission using Visual Studio Code or Teams client](#verify-sideloading-permission).
</details>