Updates from: 12/25/2020 04:05:51
Service Microsoft Docs article Related commit history on GitHub Change details
platform https://docs.microsoft.com/en-us/microsoftteams/platform/bots/bot-basics https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/bots/bot-basics.md
@@ -9,7 +9,7 @@ ms.author: anclear
This is an introduction that builds on the article [How bots work](https://aka.ms/how-bots-work) in the core [Bot Framework documentation](https://aka.ms/azure-bot-service-docs). You may find that article, and the other articles in the *Concepts* section, useful.
-The primary difference in bots developed for Microsoft Teams is in how activities are handled. The Microsoft Teams activity handler derives from the Bot Framework's activity handler to route all Teams activities before allowing any non-Teams specific activities to be handled.
+The primary difference in bots developed for Microsoft Teams is in how the activities are handled. The Microsoft Teams activity handler derives from the Bot Framework's activity handler to route all Teams activities before allowing any non-Teams specific activities to be handled.
## Teams Activity handlers
@@ -17,7 +17,7 @@ When a bot for Microsoft Teams receives an activity, it passes it on to its *act
# [C#](#tab/csharp)
-As with any bot created using the Microsoft Bot Framework, if the bot receives a message activity, the turn handler sees that incoming activity and sends it to the `OnMessageActivityAsync` activity handler. In Teams, this functionality remains the same. If the bot receives a conversation update activity, the turn handler sees that incoming activity and sends it to the `OnConversationUpdateActivityAsync` *Teams* activity handler that will first check for any Teams specific events and pass it along to the Bot Framework's activity handler if none are found.
+As with any bot created using the Microsoft Bot Framework, if the bot receives a message activity, the turn handler sees that incoming activity and sends it to the `OnMessageActivityAsync` activity handler. In Teams, this functionality remains the same. If the bot receives a conversation update activity, the turn handler sees that incoming activity and sends it to the `OnConversationUpdateActivityAsync`. *Teams* activity handler that will first check for any Teams specific events and pass it along to the Bot Framework's activity handler if none are found.
In the Teams activity handler class, there are two primary Teams activity handlers, `OnConversationUpdateActivityAsync` that routes all conversation update activities, and `OnInvokeActivityAsync` that routes all Teams invoke activities.
@@ -25,11 +25,19 @@ To implement your logic for Teams specific activity handlers, you'll override th
# [JavaScript](#tab/javascript)
-As with any bot created using the Microsoft Bot Framework, if the bot receives a message activity, the turn handler sees that incoming activity and sends it to the `onMessage` activity handler. In Teams, this functionality remains the same. If the bot receives a conversation update activity, the turn handler sees that incoming activity and sends it to the `dispatchConversationUpdateActivity` *Teams* activity handler that will first check for any Teams specific events and pass it along to the bot frameworks activity handler if none are found.
+As with any bot created using the Microsoft Bot Framework, if the bot receives a message activity, the turn handler sees that incoming activity and sends it to the `onMessage` activity handler. In Teams, this functionality remains the same. If the bot receives a conversation update activity, the turn handler sees that incoming activity and sends it to the `dispatchConversationUpdateActivity`. *Teams* activity handler that will first check for any Teams specific events and pass it along to the bot frameworks activity handler if none are found.
In the Teams activity handler class, there are two primary Teams activity handlers, `dispatchConversationUpdateActivity` that routes all conversation update Activities, and `onInvokeActivity` that routes all Teams invoke activities.
-To implement your logic for Teams specific activity handlers, you'll override these methods in your bot as seen in the [Bot logic](#bot-logic) section below. For each of these handlers, define your bot logic, then **be sure to call `next()` at the end**. By calling `next()` you ensure that the next handler runs.
+To implement your logic for Teams specific activity handlers, you'll override these methods in your bot as seen in the [Bot logic](#bot-logic) section. For each of these handlers, define your bot logic, then **be sure to call `next()` at the end**. By calling `next()` you ensure that the next handler runs.
+
+# [Python](#tab/python)
+
+Bots are created using the Microsoft Bot Framework, if these bot 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 will first check for any Teams specific events. If no events are found, it will then pass 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 invoke activities.
+
+To implement your logic for Teams specific activity handlers, you need to override these methods in your bot as shown in the [Bot logic](#bot-logic) section. There is no base implementation for these handlers, therefore, you need to add the logic that you want in your override.
---
@@ -43,7 +51,7 @@ The bot logic processes incoming activities from one or more of your bot channel
All of the activity handlers described below will continue to work as they do with a non-Teams bot, with the exception of handling members *added* and members *removed* activities, these will be different in the context of a team, where the new member is added to the team as opposed to a message thread.
-The handlers defined in `ActivityHandler` are outlined below.
+The handlers defined in `ActivityHandler` are outlined below:
| Event | Handler | Description | | :-- | :-- | :-- |
@@ -67,10 +75,10 @@ The `TeamsActivityHandler` extends the list of handlers above to include the fol
| channelDeleted | `OnTeamsChannelDeletedAsync` | Override this 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` | Override this 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;` Override this 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` | Calls the `OnMembersAddedAsync` method in `ActivityHandler`. Override this to handle members joining a team. For more information see [Team member added](https://aka.ms/azure-bot-subscribe-to-conversation-events#Team-Member-Added) in [Conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
-| MembersRemoved | `OnTeamsMembersRemovedAsync` | Calls the `OnMembersRemovedAsync` method in `ActivityHandler`. Override this to handle members leaving a team. For more information see [Team member removed](https://aka.ms/azure-bot-subscribe-to-conversation-events#Team-Member-Removed) in [Conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events).|
+| MembersAdded | `OnTeamsMembersAddedAsync` | Calls the `OnMembersAddedAsync` method in `ActivityHandler`. Override this 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` | Calls the `OnMembersRemovedAsync` method in `ActivityHandler`. Override this 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).|
-#### Teams invoke activities
+#### Teams invoke activities
Here is a list of all of the Teams activity handlers called from the `OnInvokeActivityAsync` _Teams_ activity handler:
@@ -80,7 +88,7 @@ Here is a list of all of the Teams activity handlers called from the `OnInvokeAc
| fileConsent/invoke | `OnTeamsFileConsentAcceptAsync` | Teams File Consent Accept. | | fileConsent/invoke | `OnTeamsFileConsentAsync` | Teams File Consent. | | fileConsent/invoke | `OnTeamsFileConsentDeclineAsync` | Teams File Consent. |
-| actionableMessage/executeAction | `OnTeamsO365ConnectorCardActionAsync` | Teams O365 Connector Card Action. |
+| actionableMessage/executeAction | `OnTeamsO365ConnectorCardActionAsync` | Teams O365 connector Card Action. |
| signin/verifyState | `OnTeamsSigninVerifyStateAsync` | Teams Sign in Verify State. | | task/fetch | `OnTeamsTaskModuleFetchAsync` | Teams Task Module Fetch. | | task/submit | `OnTeamsTaskModuleSubmitAsync` | Teams Task Module Submit. |
@@ -105,36 +113,89 @@ The handlers defined in `ActivityHandler` are outlined below.
| Event activity received | `onEvent` | On an `Event` activity, calls a handler specific to the event type. | | Token-response event activity received | `onTokenResponseEvent` | Provide a function for this to handle token response events. | | Other activity type received | `onUnrecognizedActivityType` | Provide a function for this to handle any activity type otherwise unhandled. |
-| Activity handlers have completed | `onDialog` | Provide a function for this to handle any processing that should be done at the end of a turn, after the rest of your activity handlers have completed. |
+| Activity handlers have completed | `onDialog` | Provide a function for this to handle any processing that should be done at the end of a turn after the rest of your activity handlers have completed. |
#### Teams-specific handlers
-The `TeamsActivityHandler` extends the list of handlers above to include the following:
+The `TeamsActivityHandler` extends the list of handlers in the Core Bot Framework handlers section to include the following:
| Event | Handler | Description | | :-- | :-- | :-- | | channelCreated | `OnTeamsChannelCreatedAsync` | Override this 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` | Override this 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` | Override this 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;` Override this 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` | Calls the `OnMembersAddedAsync` method in `ActivityHandler`. Override this to handle members joining a team. For more information see [Team member added](https://aka.ms/azure-bot-subscribe-to-conversation-events#Team-Member-Added) in [Conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
-| MembersRemoved | `OnTeamsMembersRemovedAsync` | Calls the `OnMembersRemovedAsync` method in `ActivityHandler`. Override this to handle members leaving a team. For more information see [Team member removed](https://aka.ms/azure-bot-subscribe-to-conversation-events#Team-Member-Removed) in [Conversation update events](https://aka.ms/azure-bot-subscribe-to-conversation-events). |
+| teamRenamed | `OnTeamsTeamRenamedAsync` | `return Task.CompletedTask;` Override this 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` | Calls the `OnMembersAddedAsync` method in `ActivityHandler`. Override this 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` | Calls the `OnMembersRemovedAsync` method in `ActivityHandler`. Override this 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). |
+
+#### Teams invoke activities
+
+Here is a list of all of the Teams activity handlers called from the `onInvokeActivity` Teams activity handler:
+
+| Invoke types | Handler | Description |
+| :----------------------------- | :----------------------------------- | :----------------------------------------------------------- |
+| CardAction.Invoke | `handleTeamsCardActionInvoke` | Teams card action invoke. |
+| fileConsent/invoke | `handleTeamsFileConsentAccept` | Teams file consent accept. |
+| fileConsent/invoke | `handleTeamsFileConsent` | Teams file consent. |
+| fileConsent/invoke | `handleTeamsFileConsentDecline` | Teams file consent. |
+| actionableMessage/executeAction | `handleTeamsO365ConnectorCardAction` | Teams O365 connector card action. |
+| signin/verifyState | `handleTeamsSigninVerifyState` | Teams sign in verify state. |
+| task/fetch | `handleTeamsTaskModuleFetch` | Teams task module fetch. |
+| task/submit | `handleTeamsTaskModuleSubmit` | Teams task module submit. |
+
+The invoke activities listed in the Teams invoke activities section are for conversational bots in Teams. The Bot Framework SDK also supports invoke activities specific to messaging extensions. For more information, see [What are messaging extensions](https://aka.ms/azure-bot-what-are-messaging-extensions).
+
+# [Python](#tab/python)
+
+#### Core Bot Framework handlers
+
+>[!NOTE]
+> Except for the added and removed members' activities, all of the activity handlers described in this section continue to work as they do with a non-Teams bot.
+
+Activity handlers are different in context of a team, where the new member is added to the team instead of a message thread.
+
+The list of handlers defined in `ActivityHandler` include the following:
+
+| Event | Handler | Description |
+| :-- | :-- | :-- |
+| Any activity type received | `on_turn` | Calls one of the other handlers, based on the type of activity received. |
+| Message activity received | `on_message_activity` | Overrides this to handle a `Message` activity. |
+| Conversation update activity received | `on_conversation_update_activity` | Calls a handler if members other than the bot join or leave the conversation. |
+| Non-bot members joined the conversation | `on_members_added_activity` | Overrides this to handle members joining a conversation. |
+| Non-bot members left the conversation | `on_members_removed_activity` | Overrides this to handle members leaving a conversation. |
+| Event activity received | `on_event_activity` | Calls a handler specific to the type of event. |
+| Token-response event activity received | `on_token_response_event` | Overrides this to handle token response events. |
+| Non-token-response event activity received | `on_event` | Overrides this to handle other types of events. |
+| Other activity types received | `on_unrecognized_activity_type` | Overrides this to handle any type of activity that is not handled. |
+
+#### Teams-specific handlers
+
+The `TeamsActivityHandler` extends the list of handlers from the Core Bot Framework handlers section to include the following:
+
+| Event | Handler | Description |
+| :-- | :-- | :-- |
+| channelCreated | `on_teams_channel_created` | Overrides this 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` | Overrides this 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` | Overrides this 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;` Overrides this 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` | Calls the `OnMembersAddedAsync` method in `ActivityHandler`. Overrides this 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` | Calls the `OnMembersRemovedAsync` method in `ActivityHandler`. Overrides this 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).|
#### Teams invoke activities
-Here is a list of all of the Teams activity handlers called from the `onInvokeActivity` _Teams_ activity handler:
+The list of Teams activity handlers called from the `on_invoke_activity` Teams activity handler include the following:
| Invoke types | Handler | Description | | :----------------------------- | :----------------------------------- | :----------------------------------------------------------- |
-| CardAction.Invoke | `handleTeamsCardActionInvoke` | Teams Card Action Invoke. |
-| fileConsent/invoke | `handleTeamsFileConsentAccept` | Teams File Consent Accept. |
-| fileConsent/invoke | `handleTeamsFileConsent` | Teams File Consent. |
-| fileConsent/invoke | `handleTeamsFileConsentDecline` | Teams File Consent. |
-| actionableMessage/executeAction | `handleTeamsO365ConnectorCardAction` | Teams O365 Connector Card Action. |
-| signin/verifyState | `handleTeamsSigninVerifyState` | Teams Sign in Verify State. |
-| task/fetch | `handleTeamsTaskModuleFetch` | Teams Task Module Fetch. |
-| task/submit | `handleTeamsTaskModuleSubmit` | Teams Task Module Submit. |
-
-The invoke activities listed above are for conversational bots in Teams. The Bot Framework SDK also supports invocations specific to messaging extensions. For more information see [What are messaging extensions](https://aka.ms/azure-bot-what-are-messaging-extensions)
+| CardAction.Invoke | `on_teams_card_action_invoke` | Teams card action invoke. |
+| fileConsent/invoke | `on_teams_file_consent_accept` | Teams file consent accept. |
+| fileConsent/invoke | `on_teams_file_consent` | Teams file consent. |
+| fileConsent/invoke | `on_teams_file_consent_decline` | Teams file consent decline. |
+| actionableMessage/executeAction | `on_teams_o365_connector_card_action` | Teams O365 connector card action. |
+| signin/verifyState | `on_teams_signin_verify_state` | Teams sign in verify state. |
+| task/fetch | `on_teams_task_module_fetch` | Teams task module fetch. |
+| task/submit | `on_teams_task_module_submit` | Teams task module submit. |
+
+The invoke activities listed in the Teams invoke activities section are for conversational bots in Teams. The Bot Framework SDK also supports invoke activities specific to messaging extensions. For more information, see [What are messaging extensions](https://aka.ms/azure-bot-what-are-messaging-extensions).
---
platform https://docs.microsoft.com/en-us/microsoftteams/platform/concepts/device-capabilities/native-device-permissions https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/device-capabilities/native-device-permissions.md
@@ -15,7 +15,7 @@ You might want to enrich your tab with features that require access to native de
> * Location > * Notifications
-[!Note] To integrate camera and image capabilities within your Microsoft Teams mobile app, refer [Camera and image capabilities in Teams.](/concepts/device-capabilities/mobile-camera-image-permissions.md&preserve-view=true)
+[!Note] To integrate camera and image capabilities within your Microsoft Teams mobile app, refer [Camera and image capabilities in Teams.](../../concepts/device-capabilities/mobile-camera-image-permissions.md)
> [!IMPORTANT] >
platform https://docs.microsoft.com/en-us/microsoftteams/platform/graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages.md
@@ -21,7 +21,7 @@ Proactive messages are initiated by bots to start conversations with a user. The
|Ad-hoc proactive message| The bot interjects a message without interrupting the conversation flow.| |Dialog-based proactive message | The bot creates a new dialog thread, takes control of a conversation, delivers the proactive message, closes, and returns control to the previous dialog.|
-*See*, [Send proactive notifications to users SDK v4](/azure/bot-service/bot-builder-howto-proactive-message?view=azure-bot-service-4.0&tabs=csharp)
+*See*, [Send proactive notifications to users SDK v4](/azure/bot-service/bot-builder-howto-proactive-message?view=azure-bot-service-4.0&tabs=csharp&preserve-view=true)
## Proactive app installation in Teams
@@ -29,7 +29,7 @@ Before your bot can proactively message a user, it needs to be installed either
## Permissions
-Microsoft Graph [teamsAppInstallation resource type](/graph/api/resources/teamsappinstallation?view=graph-rest-1.0) permissions allow you to manage your app's installation lifecycle for all user (personal) or team (channel) scopes within the Microsoft Teams platform:
+Microsoft Graph [teamsAppInstallation resource type](/graph/api/resources/teamsappinstallation?view=graph-rest-1.0&preserve-view=true) permissions allow you to manage your app's installation lifecycle for all user (personal) or team (channel) scopes within the Microsoft Teams platform:
|Application permission | Description| |------------------|---------------------|
@@ -68,7 +68,7 @@ To get started, you will need a [bot for Teams](../../bots/how-to/create-a-bot-f
The `teamsAppId` can be retrieved from your organization's app catalog:
-**Microsoft Graph page reference:** [teamsApp resource type](/graph/api/resources/teamsapp?view=graph-rest-1.0)
+**Microsoft Graph page reference:** [teamsApp resource type](/graph/api/resources/teamsapp?view=graph-rest-1.0&preserve-view=true)
**HTTP GET** request:
@@ -94,7 +94,7 @@ The request will return a `teamsApp` object. The returned object's `id` is the
**2.** If your app has already been uploaded/sideloaded for a user in the personal scope, you can retrieve the `teamsAppId` as follows:
-**Microsoft Graph page reference:** [List apps installed for user](/graph/api/user-list-teamsappinstallation?view=graph-rest-beta&tabs=http)
+**Microsoft Graph page reference:** [List apps installed for user](/graph/api/userteamwork-list-installedapps?view=graph-rest-beta&tabs=http&preserve-view=true)
**HTTP GET** request:
@@ -104,7 +104,7 @@ GET https://graph.microsoft.com/beta/users/{user-id}/teamwork/installedApps?$exp
**3.** If your app has already been uploaded/sideloaded for a channel in the team scope, you can retrieve the `teamsAppId` as follows:
-**Microsoft Graph page reference:** [List apps in team](/graph/api/teamsappinstallation-list?view=graph-rest-beta&tabs=http)
+**Microsoft Graph page reference:** [List apps in team](/graph/api/team-list-installedapps?view=graph-rest-beta&tabs=http&preserve-view=true)
**HTTP GET** request:
@@ -113,11 +113,11 @@ GET https://graph.microsoft.com/beta/teams/{team-id}/installedApps?$expand=teams
``` >[!TIP]
-> You can filter on any of the fields of the [**teamsApp**](/graph/api/resources/teamsapp?view=graph-rest-1.0) object to narrow the list of results.
+> You can filter on any of the fields of the [**teamsApp**](/graph/api/resources/teamsapp?view=graph-rest-1.0&preserve-view=true) object to narrow the list of results.
### Γ£ö Determine whether your bot is currently installed for a message recipient
-**Microsoft Graph page reference:** [List apps installed for user](/graph/api/user-list-teamsappinstallation?view=graph-rest-beta&tabs=http)
+**Microsoft Graph page reference:** [List apps installed for user](/graph/api/userteamwork-list-installedapps?view=graph-rest-beta&tabs=http&preserve-view=true)
**HTTP GET** request:
@@ -125,11 +125,11 @@ GET https://graph.microsoft.com/beta/teams/{team-id}/installedApps?$expand=teams
GET https://graph.microsoft.com/beta/users/{user-id}/teamwork/installedApps?$expand=teamsApp&$filter=teamsApp/id eq '{teamsAppId}' ```
-This request will return an empty array if the app is not installed, or an array with a single [teamsAppInstallation](/graph/api/resources/teamsappinstallation?view=graph-rest-beta) object if it has been installed.
+This request will return an empty array if the app is not installed, or an array with a single [teamsAppInstallation](/graph/api/resources/teamsappinstallation?view=graph-rest-beta&preserve-view=true) object if it has been installed.
### Γ£ö Install your app
-**Microsoft Graph reference:** [Install app for user](/graph/api/user-add-teamsappinstallation?view=graph-rest-beta&tabs=http)
+**Microsoft Graph page reference:** [Install app for user](/graph/api/userteamwork-post-installedapps?view=graph-rest-beta&tabs=http&preserve-view=true)
**HTTP POST** request:
@@ -148,7 +148,7 @@ When your app is installed for the user, the bot will receive a `conversationUpd
The `chatId` can also be retrieved as follows:
-**Microsoft Graph reference:** [Get chat](/graph/api/chat-get?view=graph-rest-beta&tabs=http)
+**Microsoft Graph page reference:** [Get chat](/graph/api/chat-get?view=graph-rest-beta&tabs=http&preserve-view=true)
**1.** You will need your app's `{teamsAppInstallationId}`. If you don't have it, use the following:
@@ -180,7 +180,7 @@ GET https://graph.microsoft.com/beta/users/{user-id}/chats?$filter=installedApps
### Γ£ö Send proactive messages
-Once your bot has been added for a user or team and has acquired the necessary user information, it can begin to [send proactive messages](/azure/bot-service/bot-builder-howto-proactive-message?view=azure-bot-service-4.0&tabs=csharp).
+Once your bot has been added for a user or team and has acquired the necessary user information, it can begin to [send proactive messages](/azure/bot-service/bot-builder-howto-proactive-message?view=azure-bot-service-4.0&tabs=csharp&preserve-view=true).
# [C# / .NET](#tab/csharp)
platform https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/authentication/auth-aad-sso https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/tabs/how-to/authentication/auth-aad-sso.md
@@ -163,7 +163,7 @@ Once you've received the access token in the success callback you can decode the
## Sample code
-Visit our sample application: [MSTeams Tabs SSO Sample - Nodejs](https://github.com/OfficeDev/msteams-tabs-sso-sample-nodejs)
+Visit our sample application: [MSTeams PnP SSO Sample](https://github.com/pnp/teams-dev-samples/tree/master/samples/tab-sso)
The README explains how to set up your development environment and how to configure your application in Azure AD. You can also find further information on how the sample is structured in the [app structure section](https://github.com/OfficeDev/msteams-tabs-sso-sample-nodejs#app-structure) to help familiarize yourself with the codebase.
platform https://docs.microsoft.com/en-us/microsoftteams/platform/tabs/how-to/create-tab-pages/configuration-page https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/tabs/how-to/create-tab-pages/configuration-page.md
@@ -79,7 +79,7 @@ Here, the user is presented with two option buttons, **Select Gray** or **Select
1. The `microsoftTeams.settings.registerOnSaveHandler()` event handler is triggered. 1. The **Save** button on the app's configuration page, uploaded in Teams, is enabled.
-This code lets Teams know that the configuration requirements have been satisfied and the installation can proceed. On **Save**, the parameters of `settings.setSettings()` are set, as defined by the `Settings` interface, for the current instance (See [Settings interface](/javascript/api/@microsoft/teams-js/microsoftteams.settings.settings?view=msteams-client-js-latest&preserve-view=true) ). Finally, `saveEvent.notifySuccess()` is called to indicate that the content URL has successfully resolved.
+This code lets Teams know that the configuration requirements have been satisfied and the installation can proceed. On **Save**, the parameters of `settings.setSettings()` are set, as defined by the `Settings` interface, for the current instance. For more information, see [Settings interface](/javascript/api/@microsoft/teams-js/_settings?view=msteams-client-js-latest&preserve-view=true). Finally, `saveEvent.notifySuccess()` is called to indicate that the content URL has successfully resolved.
>[!NOTE] >