Updates from: 07/29/2023 04:01:27
Service Microsoft Docs article Related commit history on GitHub Change details
platform Build Apps For Anonymous User https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/build-apps-for-anonymous-user.md
The [get members](/microsoftteams/platform/bots/how-to/get-teams-context#fetch-t
| | | | `id` | Unique generated value for the anonymous user. | | `name` | Name provided by the anonymous user when joining the meeting. |
-| `userRole` | `Anonymous` represents anonymous user. |
| `tenantId` | Tenant ID of the meeting organizer. | | `userRole` | `anonymous`, represents anonymous user. |
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
The following table provides the user types and lists the features that each use
## Code sample
-|Sample name | Description | .NET| Node.js |
-|-|--|--|-|
-|Meeting stage sample | This sample app shows a tab in meeting stage for collaboration. This sample also uses live share sdk for collaborative Stage View. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs) |
-| In-meeting notification | Demonstrates how to implement in-meeting notifications using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/nodejs) |
-| In-meeting document signing | This sample app shows 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 stage sample | This sample app shows a tab in meeting stage for collaboration. This sample also uses live share sdk for collaborative Stage View. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp/demo-manifest) |
+| In-meeting notification | Demonstrates how to implement in-meeting notifications using bot. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-notification/csharp/demo-manifest) |
+| In-meeting document signing | This sample app shows how to implement a document signing Teams app. Includes sharing specific app content to stage, Teams SSO, and user specific Stage View. | [View](https://github.com/officedev/microsoft-teams-samples/tree/main/samples/meetings-share-to-stage-signing/csharp) | NA | NA |
## Step-by-step guide
platform Share In Meeting https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-in-meeting.md
To share the entire app to stage, in the app manifest, you must configure `meeti
## 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)|
+| **Sample name** | **Description** | **.NET** |**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/meetings-stage-view/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/meetings-stage-view/csharp/demo-manifest)|
## See also
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
If your app authenticates users with an external service, follow these guideline
* Apps that depend on external accounts or services must provide a way forward for new users to sign up or contact the app publisher to learn more about the services and get access to the services. Way forward must be available in the appΓÇÖs manifest, AppSource long description, and app first run experience (bot welcome message, tab setup, or config page). [*Mandatory Fix*] * Apps that require tenant admin to complete one-time setup must call out dependency on tenant admin to configure the app (before any other tenant user can install and use the app).
- Dependency must be called out in the appΓÇÖs manifest, AppSource long description, all first run experience touchpoints (bot welcome message, tab setup, or config page), help text as considered necessary as part of bot response, compose extension, or static tab content. [*Mandatory Fix*]
+ Dependency must be called out in the appΓÇÖs manifest, AppSource long description, all first run experience touchpoints (bot welcome message, tab setup, or config page), help text as considered necessary as part of bot response, compose extensions, or static tab content. [*Mandatory Fix*]
* **Content sharing experiences**: Apps that require authentication with an external service to share content in Teams channels must clearly state in the help documentation (or similar resources) on how to disconnect or unshare content if that feature is supported on the external service. This doesn't mean the ability to unshare content must be present in your Teams app.
platform Glossary https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/get-started/glossary.md
Common terms and definitions used in Microsoft Teams developer documentation.
| [Client secret](../bots/how-to/authentication/bot-sso-register-aad.md) | A secret string that an app uses to prove its identity when requesting a token. Also, it can be referred to as application password. <br> **See also**: [Microsoft app password](#m) | | [Cloud resources](../toolkit/add-resource.md) | A service that is available on cloud through internet that your Teams app can use. It could be storage accounts, web apps, databases, and more. | | [Collaboration app](../concepts/extensibility-points.md) | An app with capabilities for a user to work in a collaborative workspace with other users. <br> **See also**: [Standalone app](#s) |
-| [Compose Extension](../resources/schem#composeextensions) | A property in app manifest (`composeExtensions`) that refers to message extension capability. It's used when your extension needs to either authenticate or configure to continue. <br>**See also**: [App manifest](#a); [Message extension](#m) |
+| [Compose Extensions](../resources/schem#composeextensions) | A property in app manifest (`composeExtensions`) that refers to message extension capability. It's used when your extension needs to either authenticate or configure to continue. <br>**See also**: [App manifest](#a); [Message extension](#m) |
| [CommandBox](../resources/schem) | A type of context in app manifest (`commandBox`) that you can configure to invoke a message extension from Teams command box. | | Connection Name | The name of OAuth connection that you configure for enabling SSO connection for your bot resource. <br> **See also**: [OAuth connection](#o) | | [Connector](../webhooks-and-connectors/what-are-webhooks-and-connectors.md) | It lets users subscribe to receive notifications and messages from the web services. Connectors expose the HTTPS endpoint for the service to post messages to Teams channels, typically in the form of cards. <br> **See also**: [Webhook](#w) |
platform Create Task Module https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/action-commands/create-task-module.md
the initial invoke request, payload activity properties when a task module is in
## The initial invoke request
-In the process of the initial invoke request, your service receives an `Activity` object of type `composeExtension/fetchTask`, and you must respond with a `task` object containing either an Adaptive Card or a URL to the embedded web view. Along with the standard bot activity properties, the initial invoke payload contains the following request metadata:
+In the process of the initial invoke request, your service receives an `Activity` object of type `composeExtensions/fetchTask`, and you must respond with a `task` object containing either an Adaptive Card or a URL to the embedded web view. Along with the standard bot activity properties, the initial invoke payload contains the following request metadata:
|Property name|Purpose| |||
class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler {
If the app contains a conversational bot, install the bot in the conversation and then load the task module. The bot is useful to get additional context for the task module. An example for this scenario is to fetch the roster to populate a people picker control or the list of channels in a team.
-When the message extension receives the `composeExtension/fetchTask` invoke, check if the bot is installed in the current context to facilitate the flow. For example, check the flow with a get roster call. If the bot is not installed, return an Adaptive Card with an action that requests the user to install the bot. The user must have the permission to install the apps in that location for checking. If the app installation is unsuccessful, the user receives a message to contact the administrator.
+When the message extension receives the `composeExtensions/fetchTask` invoke, check if the bot is installed in the current context to facilitate the flow. For example, check the flow with a get roster call. If the bot is not installed, return an Adaptive Card with an action that requests the user to install the bot. The user must have the permission to install the apps in that location for checking. If the app installation is unsuccessful, the user receives a message to contact the administrator.
#### Example
The following code section is an example of the response:
} ```
-After the installation of conversational bot, it receives another invoke message with `name = composeExtension/submitAction`, and `value.data.msteams.justInTimeInstall = true`.
+After the installation of conversational bot, it receives another invoke message with `name = composeExtensions/submitAction`, and `value.data.msteams.justInTimeInstall = true`.
#### Example
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
[!include[v4-to-v3-SDK-pointer](~/includes/v4-to-v3-pointer-me.md)] This document guides you on how your app responds to the action commands, such as user's task module submit action.
-After a user submits the task module, your web service receives a `composeExtension/submitAction` invoke message with the command ID and parameter values. Your app has five seconds to respond to the invoke.
+After a user submits the task module, your web service receives a `composeExtensions/submitAction` invoke message with the command ID and parameter values. Your app has five seconds to respond to the invoke.
You have the following options to respond:
You have the following options to respond:
* [Request the user to authenticate](~/messaging-extensions/how-to/add-authentication.md). * [Request the user to provide additional configuration](~/get-started/first-message-extension.md).
-If the app doesn't respond within five seconds, the Teams client will retry the request twice before it sends an error message **Unable to reach the app**. If the bot replies after the timeout, the response is ignored.
+If the app doesn't respond within five seconds, the Teams client retries the request twice before it sends an error message **Unable to reach the app**. If the bot replies after the timeout, the response is ignored.
> [!NOTE] >
For authentication or configuration, after the user completes the process, the o
> [!NOTE] >
-> * When you select **Action.Submit** through ME cards, it sends invoke activity with the name **composeExtension**, where the value is equal to the usual payload.
+> * When you select **Action.Submit** through ME cards, it sends invoke activity with the name **composeExtensions**, where the value is equal to the usual payload.
> * When you select **Action.Submit** through conversation, you receive message activity with the name **onCardButtonClicked**, where the value is equal to the usual payload. If the app contains a conversational bot, install the bot in the conversation, and then load the task module. The bot is useful to get additional context for the task module. To install conversational bot, see [Request to install your conversational bot](create-task-module.md#request-to-install-your-conversational-bot).
The following example is a JSON object that you receive. The `commandContext` pa
## Respond with a card inserted into the compose message area
-The most common way to respond to the `composeExtension/submitAction` request is with a card inserted into the compose message area. The user submits the card to the conversation. For more information on using cards, see [cards and card actions](~/task-modules-and-cards/cards/cards-actions.md).
+The most common way to respond to the `composeExtensions/submitAction` request is with a card inserted into the compose message area. The user submits the card to the conversation. For more information on using cards, see [cards and card actions](~/task-modules-and-cards/cards/cards-actions.md).
# [C#/.NET](#tab/dotnet)
To configure the poll:
## Respond to initial submit action
-Your task module must respond to the initial `composeExtension/submitAction` message with a preview of the card that the bot sends to the channel. The user can verify the card before sending, and try to install your bot in the conversation if the bot is already installed.
+Your task module must respond to the initial `composeExtensions/submitAction` message with a preview of the card that the bot sends to the channel. The user can verify the card before sending, and try to install your bot in the conversation if the bot is already installed.
# [C#/.NET](#tab/dotnet)
class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler {
### The botMessagePreview send and edit events
-Your message extension must respond to two new types of the `composeExtension/submitAction` invoke, where `value.botMessagePreviewAction = "send"`and `value.botMessagePreviewAction = "edit"`.
+Your message extension must respond to two new types of the `composeExtensions/submitAction` invoke, where `value.botMessagePreviewAction = "send"`and `value.botMessagePreviewAction = "edit"`.
# [C#/.NET](#tab/dotnet)
class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler {
### Respond to botMessagePreview edit
-If the user edits the card before sending, by selecting **Edit**, you receive a `composeExtension/submitAction` invoke with `value.botMessagePreviewAction = edit`. Respond by returning the task module you sent, in response to the initial `composeExtension/fetchTask` invoke that began the interaction. The user can start the process by reentering the original information. Use the available information to update the task module so that the user doesn't need to fill out all information from scratch.
+If the user edits the card before sending, by selecting **Edit**, you receive a `composeExtensions/submitAction` invoke with `value.botMessagePreviewAction = edit`. Respond by returning the task module you sent, in response to the initial `composeExtensions/fetchTask` invoke that began the interaction. The user can start the process by reentering the original information. Use the available information to update the task module so that the user doesn't need to fill out all information from scratch.
For more information on responding to the initial `fetchTask` event, see [responding to the initial `fetchTask` event](~/messaging-extensions/how-to/action-commands/create-task-module.md). ### Respond to botMessagePreview send
-After the user selects the **Send**, you receive a `composeExtension/submitAction` invoke with `value.botMessagePreviewAction = send`. Your web service must create and send a proactive message with the Adaptive Card to the conversation, and also reply to the invoke.
+After the user selects the **Send**, you receive a `composeExtensions/submitAction` invoke with `value.botMessagePreviewAction = send`. Your web service must create and send a proactive message with the Adaptive Card to the conversation, and also reply to the invoke.
# [C#/.NET](#tab/dotnet)
class TeamsMessagingExtensionsActionPreview extends TeamsActivityHandler {
# [JSON](#tab/json)
-You receive a new `composeExtension/submitAction` message similar to the following:
+You receive a new `composeExtensions/submitAction` message similar to the following json:
```json {
You receive a new `composeExtension/submitAction` message similar to the followi
In scenarios where a bot sends messages on behalf of a user, attributing the message to that user helps with engagement and showcase a more natural interaction flow. This feature allows you to attribute a message from your bot to a user on whose behalf it was sent.
-In the following image, on the left is a card message sent by a bot without user attribution and on the right is a card sent by a bot with user attribution.
+In the following image, left side of the image is a card message sent by a bot without user attribution and right side of the image is a card sent by a bot with user attribution.
:::image type="content" source="../../../assets/images/messaging-extension/user-attribution-bots.png" alt-text="User attribution bots":::
The following section is a description of the entities in the `OnBehalfOf` Array
|Field|Type|Description| |:|:|:| |`itemId`|Integer|Describes identification of the item. Its value must be `0`.|
-|`mentionType`|String|Describes the mention of a "person".|
-|`mri`|String|Message resource identifierΓÇï (MRI) of the person on whose behalf the message is sent. Message sender name would appear as "\<user\> through \<bot name\>".|
+|`mentionType`|String|Describes the mention of a "person". |
+|`mri`|String|Message resource identifierΓÇï (MRI) of the person on whose behalf the message is sent. Message sender name would appear as "\<user\> through \<bot name\>". |
|`displayName`|String|Name of the person. Used as fallback in case name resolution is unavailable.| ## Code sample
platform Link Unfurling https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/link-unfurling.md
First, you must add the `messageHandlers` array to your app manifest and enable
For a complete manifest example, see [manifest reference](~/resources/schem).
-## Handle the `composeExtension/queryLink` invoke
+## Handle the `composeExtensions/queryLink` invoke
After adding the domain to the app manifest, you must update your web service code to handle the invoke request. Use the received URL to search your service and create a card response. If you respond with more than one card, only the first card response is used.
To get your app ready for zero install link unfurling, follow these steps:
1. Set the property `supportsAnonymizedPayloads` to true in the [manifest schema](../../resources/schem#composeextensions).
-1. Set your app to handle the new invoke request `composeExtension/anonymousQueryLink`.
+1. Set your app to handle the new invoke request `composeExtensions/anonymousQueryLink`.
Example of the new invoke request:
- :::image type="content" source="../../assets/images/tdp/link-unfurl_1.png" alt-text="Screenshot of the invoke request `composeExtension/anonymousQueryLink` declaration in the manifest." lightbox="../../assets/images/tdp/link-unfurl_1.png":::
+ :::image type="content" source="../../assets/images/tdp/link-unfurl_1.png" alt-text="Screenshot of the invoke request `composeExtensions/anonymousQueryLink` declaration in the manifest." lightbox="../../assets/images/tdp/link-unfurl_1.png":::
Example of the invoke request payload:
To get your app ready for zero install link unfurling, follow these steps:
} ```
-1. Respond to the `composeExtension/anonymousQueryLink` payload.
+1. Respond to the `composeExtensions/anonymousQueryLink` payload.
1. For non-auth scenarios: You must send back a response with the `type` as `result` and a card. Use the following template:
Zero install link unfurling helps you provide enhanced experience to the users,
The following are the limitations:
-* The bot can only send back a response as `result` or `auth` as the value for the `type` property in response to the `composeExtension/anonymousQueryLink` invoke request. The user can log an error for all other response types, such as, *silentAuth* and *config*.
+* The bot can only send back a response as `result` or `auth` as the value for the `type` property in response to the `composeExtensions/anonymousQueryLink` invoke request. The user can log an error for all other response types, such as, *silentAuth* and *config*.
-* The bot can't send back an acv2 card in response to the `composeExtension/anonymousQueryLink` invoke request, either as a result or as a pre-auth card in auth.
+* The bot can't send back an acv2 card in response to the `composeExtensions/anonymousQueryLink` invoke request, either as a result or as a pre-auth card in auth.
* If the bot selects to send back the `"type": "auth"` with a pre-auth card, the Teams client strips away any action buttons from the card, and adds a sign in action button to get users to authenticate into your app.
-* The bot can't send back an acv2 card in response to the `composeExtension/anonymousQueryLink` invoke request, either as a result or as a pre-auth card in auth.
+* The bot can't send back an acv2 card in response to the `composeExtensions/anonymousQueryLink` invoke request, either as a result or as a pre-auth card in auth.
* If the bot selects to send back the `"type": "auth"` with a pre-auth card, the Teams client strips away any action buttons from the card, and adds a sign in action button to get users to authenticate into your app.
platform Respond To Search https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/search-commands/respond-to-search.md
ms.localizationpriority: medium
[!include[v4-to-v3-SDK-pointer](~/includes/v4-to-v3-pointer-me.md)]
-After the user submits the search command, your web service receives a `composeExtension/query` invoke message that contains a `value` object with the search parameters. The invoke is triggered with the following conditions:
+After the user submits the search command, your web service receives a `composeExtensions/query` invoke message that contains a `value` object with the search parameters. The invoke is triggered with the following conditions:
* As characters are entered into the search box. * `initialRun` is set to true in your [app manifest](../../../resources/schem#composeextensions), you receive the invoke message as soon as the search command is invoked. For more information, see [default query](#default-query).
platform Create Extensions https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/messaging-extension-v3/create-extensions.md
Action-based message extensions allow your users to trigger actions in external
## Action type message extensions
-To initiate actions from a message extension, set the `type` parameter to `action`. Below is an example of a manifest with a search and a create command. A single message extension can have up to 10 different commands and include multiple search-based and action-based commands.
+To initiate actions from a message extension, set the `type` parameter to `action`. A single message extension can have up to 10 different commands and include multiple search-based and action-based commands.
> [!NOTE] >`justInTimeInstall` functions when you upload an app to the app catalog but fails when you sideload an app. ### Complete app manifest example
+The following code is an example of a manifest with a search and a create command:
+ ```json { "$schema": "https://developer.microsoft.com/json-schemas/teams/v1.8/MicrosoftTeams.schema.json",
To enable your message extension to work from a message, add the `context` param
```
-Below is an example of the `value` object containing the message details that will be sent as part of the `composeExtension` request to your bot.
+The following code is an example of the `value` object containing the message details that is sent as part of the `composeExtensions` request to your bot:
```json {
There are three ways to collect information from a user in Teams.
In this method, all you need to do is define a static list of parameters in the manifest as shown above in the "Create To Do" command. To use this method, ensure `fetchTask` is set to `false` and that you define your parameters in the manifest.
-When a user chooses a command with static parameters, Teams will generate a form in a task module with the defined parameters in the manifest. On hitting Submit, a `composeExtension/submitAction` is sent to the bot. For more information on the expected set of responses, see [Responding to submit](#responding-to-submit).
+When a user chooses a command with static parameters, Teams generates a form in a task module with the defined parameters in the manifest. On hitting Submit, a `composeExtensions/submitAction` is sent to the bot. For more information on the expected set of responses, see [Responding to submit](#responding-to-submit).
### Dynamic input using an adaptive card In this method, your service can define a custom adaptive card to collect the user input. For this approach, set the `fetchTask` parameter to `true` in the manifest. If you set `fetchTask` to `true`, any static parameters defined for the command will be ignored.
-In this method, your service receives a `composeExtension/fetchTask` event and responds with an adaptive card based [task module response](~/task-modules-and-cards/task-modules/invoking-task-modules.md#the-taskinfo-object). Following is a sample response with an adaptive card:
+In this method, your service receives a `composeExtensions/fetchTask` event and responds with an adaptive card based [task module response](~/task-modules-and-cards/task-modules/invoking-task-modules.md#the-taskinfo-object). Following is a sample response with an adaptive card:
```json {
Just like in the adaptive card flow, your service sends a `fetchTask` event and
If your app contains a conversation bot, ensure it's installed in the conversation before loading your task module to get more context for your task module. For example, you may need to fetch the roster to populate a people picker control, or the list of channels in a team.
-To facilitate this flow, when your message extension first receives the `composeExtension/fetchTask` invoke, check to see if your bot is installed in the current context. You can get this, by attempting the get roster call. For example, if your bot isn't installed, you return an Adaptive Card with an action that requests the user to install your bot. The user needs to have permission to install apps in that location. If they canΓÇÖt install, the message prompts to contact the administrator.
+To facilitate this flow, when your message extension first receives the `composeExtensions/fetchTask` invoke, check to see if your bot is installed in the current context. You can get this, by attempting the get roster call. For example, if your bot isn't installed, you return an Adaptive Card with an action that requests the user to install your bot. The user needs to have permission to install apps in that location. If they canΓÇÖt install, the message prompts to contact the administrator.
Here's an example of the response:
Here's an example of the response:
} ```
-Once the user completes the installation, your bot will receive another invoke message with `name = composeExtension/submitAction` and `value.data.msteams.justInTimeInstall = true`.
+Once the user completes the installation, your bot receives another invoke message with `name = composeExtensions/submitAction` and `value.data.msteams.justInTimeInstall = true`.
Here's an example of the invoke:
Respond to the invoke with the same task response you would have responded with
## Responding to submit
-Once a user completes entering their input, bot will receive a `composeExtension/submitAction` event with the command ID and parameter values set.
+Once a user completes entering their input, bot receives a `composeExtensions/submitAction` event with the command ID and parameter values set.
These are the different expected responses to a `submitAction`.
These are the different expected responses to a `submitAction`.
Task module response is used when your extension needs to chain dialogs together to get more information. The response is same as `fetchTask` mentioned earlier.
-### Compose extension auth/config response
+### Compose extensions auth/config response
-Compose extension auth/config response is used when your extension needs to either authenticate or configure to continue. For more information, see [authentication section](~/resources/messaging-extension-v3/search-extensions.md#authentication) in the search section.
+Compose extensions auth/config response is used when your extension needs to either authenticate or configure to continue. For more information, see [authentication section](~/resources/messaging-extension-v3/search-extensions.md#authentication) in the search section.
-### Compose extension result response
+### Compose extensions result response
-Compose extension result response is used to insert a card into the compose box as a result of the command. It's the same response that's used in the search command, but it's limited to one card or one result in the array.
+Compose extensions result response is used to insert a card into the compose box as a result of the command. It's the same response that's used in the search command, but it's limited to one card or one result in the array.
```json {
Respond to the submit action by inserting a message with an Adaptive Card into t
1. The user selects the message extension to trigger the task module. 1. The user uses the task module to configure the poll. 1. After submitting the configuration task module, the app uses the information provided in the task module to craft an adaptive card and sends it as a `botMessagePreview` response to the client.
-1. The user can then preview the adaptive card message before the bot inserts it into the channel. If the bot isn't already a member of the channel, clicking `Send` will add the bot.
-1. Interacting with the adaptive card will change the message before sending it.
+1. The user can then preview the adaptive card message before the bot inserts it into the channel. If the bot isn't already a member of the channel, clicking `Send` adds the bot.
+1. Interacting with the adaptive card changes the message before sending it.
1. Once the user selects `Send`, the bot will post the message to the channel.
-To enable this flow your task module should respond as in the example below, which will present the preview message to the user.
> [!NOTE] > The `activityPreview` must contain a `message` activity with exactly one adaptive card attachment.
+To enable this flow your task module should respond as in the following example, which presents the preview message to the user:
+ ```json { "composeExtension": {
To enable this flow your task module should respond as in the example below, whi
} ```
-Your message extension will now need to respond to two new types of interactions, `value.botMessagePreviewAction = "send"` and `value.botMessagePreviewAction = "edit"`. Below is an example of the `value` object you'll need to process:
+Your message extension will now need to respond to two new types of interactions, `value.botMessagePreviewAction = "send"` and `value.botMessagePreviewAction = "edit"`. The following code is an example of the `value` object you need to process:
```json {
platform Search Extensions https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/messaging-extension-v3/search-extensions.md
Every request to your message extension is done via an `Activity` object that is
### Receive user requests
-When a user performs a query, Microsoft Teams sends your service a standard Bot Framework `Activity` object. Your service should perform its logic for an `Activity` that has `type` set to `invoke` and `name` set to a supported `composeExtension` type, as shown in the following table.
+When a user performs a query, Microsoft Teams sends your service a standard Bot Framework `Activity` object. Your service should perform its logic for an `Activity` that has `type` set to `invoke` and `name` set to a supported `composeExtensions` type, as shown in the following table.
In addition to the standard bot activity properties, the payload contains the following request metadata:
platform App Templates https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/app-templates.md
It provides a foundation to build custom targeted communication capabilities suc
[Get it on GitHub](https://github.com/OfficeDev/microsoft-teams-company-communicator-app) -
-## FAQ Plus
-
-Conversational Q&A bots are an easy way to provide answers to frequently asked questions by users. But, most bots fail to engage with users in meaningful way because there's no human in the loop when the bot fails. FAQ bot is a friendly Q&A bot that brings a human in the loop when it's unable to help. One can ask the bot a question and the bot responds with an answer if it's contained in the knowledge base. If not, the bot allows the user to submit a query, which then gets posted to a pre-configured team of experts who help to provide support by acting upon the notifications from within the team itself.
-
-> [!NOTE]
-> The latest release of **FAQ Plus** supports improved Q&A resolutions by enabling a team of experts to complete the following:
->
-> &#x2714; Add new Q&As directly to the knowledge base using message extensions.
->
-> &#x2714; Edit and delete Q&A pairs added by a bot.
->
-> &#x2714; Track the revision history of Q&As.
->
-> &#x2714; Configure an answer with additional details to display as an [Adaptive Card](../task-modules-and-cards/cards/cards-reference.md#adaptive-card).
->
-[Get it on GitHub](https://github.com/OfficeDev/microsoft-teams-apps-faqplusv2)
-
-![FAQ Plus gif](../assets/images/FAQPlusEndUser.gif)
-
-## Icebreaker
-
-Icebreaker is a [Microsoft Teams bot](../bots/what-are-bots.md) that helps your team get closer by pairing two random team members up every week to meet. The bot makes scheduling easy by automatically suggesting free times that work for both members. Strengthen personal connections and build a tightly knit community with this app.
-
-In addition to encouraging personal connections across your entire team, the Icebreaker app can help cultivate interest-based communities within your organization. For example, you can use this app for a DevOps interest group to help ideas and best practices organically spread across your organization.
-
-[Get it on GitHub](https://github.com/OfficeDev/microsoft-teams-icebreaker-app)
-- ## Microsoft 365 Learning Pathways (Get Started) The Get Started app template allows you to bring the power of Microsoft 365 learning pathways inside of Teams. This app template allows you to grant easy access to specific training pages or other intranet assets and load the content directly within Teams. You can also change the app name or logo to match your company branding.
The Microsoft Teams Emergency Operations Center (TEOC) solution template uses th
[Get it on GitHub](https://github.com/OfficeDev/microsoft-teams-emergency-operations-center/)
-## Tournament of Teams
-
-Champions are critical in helping drive adoption and developing new tournaments, helping in your business goals. Ensure that you're using your Champions to help identify and build new adoption-themed tournaments, and inspire your organization to learn and participate.
-
-[Get it on GitHub](https://github.com/OfficeDev/microsoft-teams-apps-tournament-of-teams)
- ## App Template Code Samples App template code samples are a collection of sample apps for Microsoft Teams platform capabilities.
The following table describes App template code samples:
|E-Prescriptions| E-Prescriptions is a [Power Apps](/powerapps/maker/canvas-apps/embed-teams-app) based app that enhances telemedicine and virtual care by automating the process of issuing e-prescriptions to patients. Medical professionals can quickly review appointments, generate e-prescriptions, and send emails with e-prescription attachments to patients directly within the Teams platform.|[E-Prescriptions](https://github.com/OfficeDev/microsoft-teams-apps-eprescription)| | Employee Training | Employee training is a Microsoft Teams app that enables organizers to easily publish, track, and promote learning and training events for your organization. With the app, event planners can send reminders and notifications to event registrants and employees can indicate interest in upcoming events, stay updated on current events, and share event details with colleagues through the Teams message extension.|[Employee Training](https://github.com/OfficeDev/microsoft-teams-apps-employeetraining)| | Expert Finder| Expert Finder is a [Microsoft Teams bot](../bots/what-are-bots.md) that identifies specific organization members based on their skills, interests, and education attributes. Members find experts within an organization that match a keyword search of Microsoft Azure Active Directory (Azure AD) user profiles.| [Expert Finder](https://github.com/OfficeDev/microsoft-teams-apps-expertfinder)|
+| FAQ Plus App | Conversational Q&A bots are an easy way to provide answers to frequently asked questions by users. But, most bots fail to engage with users in meaningful way because there's no human in the loop when the bot fails. FAQ bot is a friendly Q&A bot that brings a human in the loop when it's unable to help. One can ask the bot a question and the bot responds with an answer if it's contained in the knowledge base. If not, the bot allows the user to submit a query, which then gets posted to a pre-configured team of experts who help to provide support by acting upon the notifications from within the team itself.|[FAQ Plus App](https://github.com/OfficeDev/microsoft-teams-apps-faqplusv2) |
| Get Support App| The Get Support app is used by organizations that are using Teams, to enable any set of users to request assistance from supervisors. This app includes the following features: <br/>Requesting assistance on different categories from a Power App.<br/>Notifications sent to requestors informing them of who is assigned.<br/> Notifications sent to assigned supervisors informing them of who needs assistance. <br/>Analyzing escalations and patterns in SharePoint and Power BI.|[Get Support App](https://github.com/OfficeDev/microsoft-teams-app-get-support/) | | Goal Tracker|The Goal Tracker app is a comprehensive solution for your organization to support establishing goals, observing progress, and acknowledging success within Microsoft Teams. The app enables users to set, track, and update objectives on a professional, personal, and team level. Team members also receive timely reminders and status updates to remain focused and stay on track. |[Goal Tracker](https://github.com/OfficeDev/microsoft-teams-app-goaltracker) | | Great Ideas|The Great Ideas app supports and empowers innovation and creativity within your organization. The app enables your employees to share ideas with colleagues and leadership, discover new submissions, spotlight contributions for peer consideration, and cast their vote for the best proposals within Microsoft Teams. |[Great Ideas](https://github.com/OfficeDev/microsoft-teams-apps-greatideas) |
The following table describes App template code samples:
|Group Connect |Group Connect is a Microsoft Teams app that helps organization members discover employee groups and find information relevant to employee groups. The app comes built-in with rich capabilities for organization leaders to communicate with their employees regarding groups, events, and resources. The Group Connect app also matches group members with each other at their desired frequency to encourage networking and cohesion within a group. For more information on how you can use the Group Connect app to help employee groups foster within your organization, see the app on GitHub. |[Group Connect](https://github.com/OfficeDev/microsoft-teams-apps-groupconnect) | |Grow Your Skills | The Grow Your Skills app supports professional growth and development by enabling employees to contribute to supplemental projects for your organization while simultaneously learning new skills. Employees can use the app to locate opportunities that meet their interests, enjoy meaningful collaboration with peers, and acquire new levels of expertise and capabilities, all within the Teams environment.|[Grow Your Skills](https://github.com/OfficeDev/microsoft-teams-apps-growyourskills) | | HR Support|HR Support bot is a friendly Q&A bot that brings a support professional or expert from the HR team in the loop when it's unable to help. One can ask the bot a question and the bot responds with an answer if it's contained in the knowledge base. If not, the bot allows the user to submit a query, which then gets posted in a pre-configured team of experts who are help to provide support by acting upon the notifications from within their team itself. Additionally, the bot suggests links to recommended HR policies or questions by searching for pre-configured tags in the question. These tiles are found in the associated tab as a quick reference. HR Support works well for light weight Q&A and to provide quick support when launching new projects or initiatives in the organization. |[HR Support](https://github.com/OfficeDev/microsoft-teams-hrsupport-app) |
+| Icebreaker | Icebreaker is a [Microsoft Teams bot](../bots/what-are-bots.md) that helps your team get closer by pairing two random team members up every week to meet. The bot makes scheduling easy by automatically suggesting free times that work for both members. Strengthen personal connections and build a tightly knit community with this app. In addition to encouraging personal connections across your entire team, the Icebreaker app can help cultivate interest-based communities within your organization. For example, you can use this app for a DevOps interest group to help ideas and best practices organically spread across your organization.|[Icebreaker](https://github.com/OfficeDev/microsoft-teams-icebreaker-app) |
|Incentives | Incentives is a [Power Apps](/powerapps/maker/canvas-apps/embed-teams-app) template that manages and tracks incentivized employee participation in designated activities, such as trainings and change management initiatives. Admins use the app to establish designated activities, assign points for completion, and specify required eligibility point levels for rewards. Employees use the app to view their accumulated points and, upon reaching eligibility, request and claim redeemable rewards.|[Incentives](https://github.com/OfficeDev/microsoft-teams-apps-incentives) | |Incident Reporter | Incident Reporter is a [Microsoft Teams bot](../bots/what-are-bots.md) that optimizes the management of incidents in your organization. The bot facilitates automated incident data collection, customized incident reports, relevant stakeholder notifications, and end-to-end incident tracking.|[Incident Reporter](https://github.com/OfficeDev/microsoft-teams-apps-incidentreport) | | Inspection|Inspection is a Teams app that enables front line workers to inspect anything from locations to assets and equipments. For example, a retail store, manufacturing plant, or vehicles and machines. There are two apps in this solution, each intended for different types of users. The app empowers the front line workers to inspect an asset or area, to manage quality of products and services, or maintain safety at workplace. It facilitates communication between team members to address issues found during inspection. The app provides simple reports for managers to expedite issue resolution and highlight trends. |[Inspection](https://github.com/OfficeDev/microsoft-teams-apps-inspection) |
The following table describes App template code samples:
|SharePoint List Search |Collaboration in Teams often references information contained within items in a SharePoint list. Paste a link to the item in question forces everyone to switch context away from the conversation, find the needed information, then return to Teams to continue the conversation. As the conversation continues people have to switch back to the reference item multiple times to verify new comments and refresh their memories of the information contained within the item. This context switching creates a barrier to smooth collaboration. To resolve this problem, the List Search app template is used. Many users use SharePoint to power some of the core workflows in their organizations. However, collaborating around lists is difficult. Using the List Search app template in Teams, users can insert information from SharePoint list items directly within a chat conversation to alleviate the context-switching caused when simply inserting a link into a chat. The information is inserted as an easy-to-read autoformatted card, helping the users stay engaged in the conversation. |[SharePoint List Search](https://github.com/OfficeDev/microsoft-teams-list-search-app) | |Staff Check-ins | Staff Check-ins is a [Power Apps](/powerapps/powerapps-overview) based app that enables oversight communication between your business and field personnel. Staff can easily provide time-critical information and status updates on either a scheduled or ad-hoc basis directly from Teams. The app supports real-time location, photos, notes, reminder notifications, and automated workflows.|[Staff Check-ins](https://github.com/OfficeDev/microsoft-teams-apps-staffcheckins) | |Time Tally |A project can include multiple tasks, and various projects can be assigned to employees. Managers are required to understand the project progress through the time spent by the employees on these tasks. This can be a cumbersome activity, as the employees need to fill in the timesheets. Time Tally app enables employees to fill their timesheets quickly, using the mobile device, and managers don't have to follow up with employees on the timesheet entry. Managers get to view the project utilization based on resources, and they can approve or reject the entries. Reminder notifications are sent to ensure timesheet compliance. Also, historical data and utilizations are available for analytics. |[Time Tally](https://github.com/OfficeDev/microsoft-teams-apps-timetally) |
+| Tournament of Teams | Champions are critical in helping drive adoption and developing new tournaments, helping in your business goals. Ensure that you're using your Champions to help identify and build new adoption-themed tournaments, and inspire your organization to learn and participate.|[Tournament of Teams](https://github.com/OfficeDev/microsoft-teams-apps-tournament-of-teams) |
|Virtual Rounding | Hospital and emergency room providers make many **rounds** per day. These quick check-ins on patients are intended to provide a status check on how the patient is doing and ensure that the patientΓÇÖs concerns are addressed. While rounding is an essential practice to ensure patients are being monitored by multiple types of providers, they represent a huge drain on PPE, because for each visit, from each provider, a new mask, and new set of gloves are used. With this app templates, medical workers can easily conduct rounds virtually, through a Teams meeting between the provider and the patient. The Virtual Rounding solution is also referenced in the Microsoft Health and Life Sciences [blog post](https://aka.ms/teamsvirtualrounding).|[Virtual Rounding](https://github.com/SmartterHealth/Virtual-Rounding) | |Visitor Management | The Visitor Management app enables your organization and employees to easily and efficiently manage the on-site visitor process, directly from Teams. The app enables employees to create visitor requests, centrally track a request status through the visitor dashboard, and receive real-time notifications when a visitor arrives.|[Visitor Management](https://github.com/OfficeDev/microsoft-teams-app-visitormanagement) | |Water Cooler |Water Cooler is a custom Teams app that enables corporate teams to create, invite, and join casual conversations among teammates, such as those that take place by the Water Cooler or break room. Use this template for multiple scenarios, such as new non project related announcements, topics of interest, current events, or conversations about hobbies. The app provides an easy interface for anyone to find an existing conversation or start a new one. It's a foundation for building custom targeted communication capabilities, promoting interaction amongst coworkers who may otherwise not get a chance to socialize during breaks. Key features are: <br/> **Water Cooler Home Page**: You can browse existing rooms where team members are interacting in existing conversations with certain people or topics of interest. Active conversations on the **Home Page** show a room name, short description, call duration, and room image. <br/>**Join room**: Use the **Join room** feature to join an ongoing conversation immediately. Select **Join** from active conversations to join the room.<br/>**Room creation**: Use the **Room creation** feature to create a Teams call or chat for all attendees to interact. Create rooms easily by specifying the room name, short description, up to five colleagues as an initial group and selecting from the provided set of room images. <br/>**Find room**: Use the **Find room** feature to search keyword, which matches with the topic or short descriptions of ongoing conversations.<br/>**Attendee invitation**: Use the **Attendee invitation** feature to invite more users after room creation. This is similar to Teams call.<br/>**App badge**: The **Water Cooler** icon on the left menu shows a badge with the number of active conversations visible from Teams while using any app. |[Water Cooler](https://github.com/microsoft/csapps-msteams-watercooler) |
platform Virtual Assistant https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/virtual-assistant.md
The following image displays the business functions of Virtual Assistant:
## Create a Teams-focused Virtual Assistant
-Microsoft has published a [Microsoft template](https://botbuilder.myget.org/feed/aitemplates/package/nuget/Microsoft.Bot.Solutions.VirtualAssistantTemplate) for building Virtual Assistants and skills. With the template, you can create a Virtual Assistant, powered by a text based experience with support for limited rich cards with actions. We've enhanced template to include Microsoft Teams platform capabilities and power great Teams app experiences. A few of the capabilities include support for rich Adaptive Cards, task modules, teams or group chats, and message extensions. For more information on extending Virtual Assistant to Microsoft Teams, see [Tutorial: Extend Your Virtual Assistant to Microsoft Teams](https://microsoft.github.io/botframework-solutions/clients-and-channels/tutorials/enable-teams/1-intro/).
+Microsoft has published a [Microsoft template](https://microsoft.github.io/botframework-solutions/overview/virtual-assistant-template/) for building Virtual Assistants and skills. With the template, you can create a Virtual Assistant, powered by a text based experience with support for limited rich cards with actions. We've enhanced template to include Microsoft Teams platform capabilities and power great Teams app experiences. A few of the capabilities include support for rich Adaptive Cards, task modules, teams or group chats, and message extensions. For more information on extending Virtual Assistant to Microsoft Teams, see [Tutorial: Extend Your Virtual Assistant to Microsoft Teams](https://microsoft.github.io/botframework-solutions/clients-and-channels/tutorials/enable-teams/1-intro/).
The following image displays the high level diagram of a Virtual Assistant solution: :::image type="content" source="../assets/images/bots/virtual-assistant/high-level-diagram.png" alt-text="Diagram that shows Virtual Assistant solution.":::
Once the commands are invoked by a user, the Virtual Assistant can identify an a
} ```
-Some message extension activities don't include the command ID. For example, `composeExtension/selectItem` contains only the value of the invoke tap action. To identify the associated skill, `skillId` is attached to each item card while forming a response for `OnTeamsMessagingExtensionQueryAsync`. This is similar to the approach for [adding adaptive cards to your Virtual Assistant](#add-adaptive-cards-to-your-virtual-assistant).
+Some message extension activities don't include the command ID. For example, `composeExtensions/selectItem` contains only the value of the invoke tap action. To identify the associated skill, `skillId` is attached to each item card while forming a response for `OnTeamsMessagingExtensionQueryAsync`. This is similar to the approach for [adding adaptive cards to your Virtual Assistant](#add-adaptive-cards-to-your-virtual-assistant).
```csharp // Invoked when a 'composeExtension/selectItem' invoke activity is received for compose extension query command.
platform Access Teams Context https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/access-teams-context.md
For example, in your app manifest if you set your tab *configurationUrl* attribu
* They're a member of the Office 365 group with ID **00209384-etc**. * The user has set their Teams theme to **dark**.
-. . . then Teams will call the following URL when configuring the tab:
+Teams will call the following URL when configuring the tab:
`https://www.contoso.com/config?name=user@example.com&tenant=e2653c-etc&group=00209384-etc&theme=dark`
If your page makes use of any of these values, the value of `channel.membershipT
When the content UX is loaded in a shared channel, use the data received from `getContext` call for shared channel changes. If tab makes use of any of the following values, you must populate the `channelType` field to determine if the tab is loaded in a shared channel, and respond appropriately. For shared channels, the `groupId` value is `null`, since the host team's groupId doesn't accurately reflect the true membership of the shared channel. To address this, the `hostTeamGroupID` and `hostTenantID` properties are newly added and useful for making Microsoft Graph API calls to retrieve membership. `hostTeam` refers to the Team that created the shared channel. `currentTeam` refers to Team that the current user is accessing the shared channel from.
-For more information about these concepts, see [shared channels](~/concepts/build-and-test/shared-channels.md).
+For more information about these concepts and shared channels, see [shared channels](~/concepts/build-and-test/shared-channels.md).
Use the following `getContext` properties in shared channels:
platform Tabs Link Unfurling https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/tabs-link-unfurling.md
The following is a JSON code example to create a Collaborative Stage View button
Following is the process to invoke Collaborative Stage View:
-* When the user shares a URL in a Teams chat, the bot receives an `composeExtension/queryLink` invoke request. The bot returns an Adaptive Card with the type `tab/tabInfoAction`.
+* When the user shares a URL in a Teams chat, the bot receives an `composeExtensions/queryLink` invoke request. The bot returns an Adaptive Card with the type `tab/tabInfoAction`.
* When the user selects the action button on the Adaptive Card, Collaborative Stage View opens based on the content in the Adaptive Card. > [!NOTE] > > * Passing a Stage View deep link into an Adaptive Card doesn't open the Collaborative Stage View. A Stage View deep link always opens the Stage View Modal. > * Ensure that the URL of the content is within the list of `validDomains` in your app manifest.
-> * The invoke request type must be a `composeExtension/queryLink`.
+> * The invoke request type must be a `composeExtensions/queryLink`.
> * `invoke` workflow is similar to the `appLinking` workflow. > * To maintain consistency, it is recommended to name `Action.Submit` as `Open`. > * `websiteUrl` is a required property to be passed in the `TabInfo` object.