Updates from: 04/30/2021 03:31:41
Service Microsoft Docs article Related commit history on GitHub Change details
platform Tabs Mobile https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/tabs/design/tabs-mobile.md
Mobile clients regularly need to function with low bandwidth and intermittent co
### Testing on mobile clients
-You need to validate that your tab functions properly on mobile devices of various sizes and qualities. For Android devices, you can use the [DevTools](~/tabs/how-to/developer-tools.md) to debug your tab while it is running. We recommend that you test on both high and low performing devices, as well as on a tablet.
+You need to validate that your tab functions properly on mobile devices of various sizes and qualities. For Android devices, you can use the [DevTools](~/tabs/how-to/developer-tools.md) to debug your tab while it is running. We recommend that you test on both high- and low-performance devices, including a tablet.
### Distribution
-Apps listed on the Teams store must be approved for mobile use to function properly in the Teams mobile client. How tabs behave depends on whether your app is approved.
+Apps listed on the Teams store must be approved for mobile use to function properly in the Teams mobile client. Tab availability and behavior depends on whether your app is approved.
-#### Channel and group tab behavior
+#### Apps on Teams store approved for mobile
-* **Behavior when approved**: Opens in the Teams mobile client using your app's `contentUrl` configuration.
-* **Behavior when not approved**: Opens in the deviceΓÇÖs default browser using your app's `websiteUrl` configuration (which also must be included in your source code's `setSettings()` function). However, users can still load the tab in the Teams mobile client by selecting **More** next to the app and choosing **Open**, which triggers your appΓÇÖs `contentUrl` configuration.
+The following table describes tab availability and behavior when the app is listed on the Teams store and approved for mobile use.
-#### Personal app behavior
+|Capability |Mobile availability? |Mobile behavior|
+|-|--||
+|Channel <br /> and group tab|Yes|Tab opens in the Teams mobile client using your app's `contentUrl` configuration.|
+|Personal app|Yes|Each tab in the personal app tab opens in the Teams mobile client using its respective `contentUrl` configuration.|
-* **Behavior when approved**: Each tab in the personal app displays in the Teams mobile client using their respective `contentUrl` configuration.
-* **Behavior when not approved**: The personal app is unavailable in the Teams mobile client.
+#### Apps on Teams store not approved for mobile
-#### Non-Teams store app behavior
+The following table describes tab availability and behavior when the app is listed on the Teams store but not approved for mobile use.
+
+|Capability |Mobile availability?|Mobile behavior|
+|-|--||
+|Channel and group tab|Yes|Tab opens in the device's default browser instead of the Teams mobile client using your app's `websiteUrl` configuration (which also must be included in your source code's `setSettings()` [function](https://docs.microsoft.com/javascript/api/@microsoft/teams-js/settings?view=msteams-client-js-latest#functions)). However, users can still view the tab in the Teams mobile client by selecting **More** next to the app and choosing **Open**, which triggers your appΓÇÖs `contentUrl` configuration.|
+|Personal app|No|Not applicable|
+
+#### Apps not on Teams store
If you're sideloading your app or publishing to an org's app catalog, tab behavior will be the same as Teams store apps approved by Microsoft for mobile.
platform Overview https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/task-modules-and-cards/cards/Universal-actions-for-adaptive-cards/Overview.md
+
+ Title: Overview of Universal Actions for Adaptive Cards
+description: A quick overview of Universal Actions for Adaptive Cards.
+
+localization_priority: Normal
++
+# Universal Actions for Adaptive Cards
+
+Universal Actions for Adaptive Cards evolved from developer feedback that even though layout and rendering for Adaptive Cards was universal, action handling was not. Even if a developer wanted to send the same card to different places, they have to handle actions differently.
+
+Universal Actions for Adaptive Cards brings the bot as the common backend for handling actions and introduces a new action type, `Action.Execute`, which works across apps, such as Teams and Outlook.
+
+This document helps you to understand how you can use Universal Actions model to enhance user experience of interacting with Adaptive Cards across platforms and applications.
+
+> [!NOTE]
+> Support for Universal Actions for Adaptive Cards is only available for cards sent by bot. Support for cards sent through compose box and link unfurling cards is coming soon.
+
+## Enhance user experiences with Universal Actions for Adaptive Cards
+
+Universal Actions for Adaptive Cards enhances user experience by enabling the following scenarios:
+
+* [Universal Actions](#universal-actions)
+* [User Specific Views](#user-specific-views)
+* [Sequential Workflow support](#sequential-workflow-support)
+* [Up to date views](#up-to-date-views)
+
+### Universal Actions
+
+Before the Universal Actions for Adaptive Cards, different hosts provided different action models as follows:
+
+* Teams or bots used `Action.Submit`, an approach which defers the actual communication model to the underlying channel.
+* Outlook used `Action.Http` to communicate with the backend service explicitly specified in the Adaptive Card payload.
+
+The following image shows the current inconsistent action model:
++
+With the Universal Actions for Adaptive Cards, you can use `Action.Execute` for action handling across different platforms. `Action.Execute` works across hubs including Teams and Outlook. In addition, an Adaptive Card can be returned as response for an `Action.Execute` triggered invoke request.
+
+The following image shows the new Universal Action model:
++
+You can now send the same card to both, Teams and Outlook, and keep them in sync with each other using the underlying bot. Any action taken on either platform is reflected to the other with this *build once, deploy anywhere* (Universal Actions for Adaptive Cards) model.
+
+The following image depicts the Universal Actions for Adaptive Cards for both Teams and Outlook:
++
+### User Specific Views
+
+Today every user in the Teams chat or channel sees the exact same view and button actions on the Adaptive Card. However, in certain scenarios there is a requirement for certain users to act differently and have access to different information within the same chat or channel.
+
+For example, if you send an incident reporting card in a chat or channel, only the user who is assigned the incident must see a **Resolve** button. On the other hand, the incident creator must see an **Edit** button and all other users must only be able to view details of the incident. This is made possible by User Specific Views that is enabled by the `refresh` property.
+
+The following image shows an example of a ticketing messaging extension (ME) where different users in the chat are shown different actions based on the requirement:
++
+For more information, see [sample for User Specific Views](User-Specific-Views.md).
+
+### Sequential Workflow support
+
+With Sequential Workflow support, users can progress through a series of workflows without sending different cards separately. This is made possible by the ability of `Action.Execute` to return an Adaptive Card in response to an action. Also, any user in the chat or channel can progress through their workflow without modifying the card for other users in the chat.
+
+The following image illustrates a food ordering bot example: <br/>
+
+<img src="~/assets/images/bots/sequentialWorkflow.gif" alt="Sequential Workflow" width="400"/>
+
+The following image shows the various states for different users in the chat or channel:
++
+For more information, see [sample for Sequential Workflow](Sequential-Workflows.md).
+
+### Up to date views
+
+You can create Adaptive Cards that update automatically. For example, it can be an approval request sent by a user. After approval, the card must automatically display details about the request approval time and who approved the request. The refresh model enables you to provide such up to date views. The following image shows a multi-step approval flow and how the views for different users is shown.
++
+For more information, see [sample for up to date views](Up-To-Date-Views.md).
+
+Now, you can understand how Adaptive Cards can be transformed with the new Universal Actions model to provide a unique and enhanced user experience.
+
+## Adaptive Cards and the new Universal Actions model
+
+Adaptive Cards are a combination of content, such as text and graphics, and actions that can be performed by a user. For more information, see [Adaptive Cards](http://adaptivecards.io/). The new Universal Actions for Adaptive Cards enables a common handling of the Adaptive Card actions across platforms and applications. For more information, see [Universal Action Model](https://docs.microsoft.com/adaptive-cards/authoring-cards/universal-action-model).
+
+[Work with Universal Actions for Adaptive Cards](Work-with-universal-actions-for-adaptive-cards.md) document takes you through the steps to use the capabilities of Universal Actions for Adaptive Cards for your solution.
+
+## See also
+
+* [What are bots](~/bots/what-are-bots.md)
+* [Adaptive Cards overview](~/task-modules-and-cards/what-are-cards.md)
+* [Adaptive Cards @ Microsoft Build 2020](https://youtu.be/hEBhwB72Qn4?t=1393)
+* [Adaptive Cards @ Ignite 2020](https://techcommunity.microsoft.com/t5/video-hub/elevate-user-experiences-with-teams-and-adaptive-cards/m-p/1689460)
+
+## Next step
+
+> [!div class="nextstepaction"]
+> [Work with Universal Actions for Adaptive Cards](Work-with-universal-actions-for-adaptive-cards.md)
platform Sequential Workflows https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/task-modules-and-cards/cards/Universal-actions-for-adaptive-cards/Sequential-Workflows.md
+
+ Title: Sequential Workflows
+description: Sample for Sequential Workflows using Universal Actions
++
+localization_priority: Normal
++
+# Sequential Workflows
+
+Adaptive Cards now support Sequential Workflows that is when Adaptive Cards are updated on user action and user can progress through a series of cards that require user input. This is supported through `Action.Execute`, which allows bot developers to return Adaptive Cards in response to a user action.
+
+For example, take a scenario where the cafeteria wants to take an order for a team or channel. With `Action.Execute` the user's choice for various items, such as food, drinks, and so on can be recorded sequentially. User can also go back and forth through the cards as per the logic defined by the bot developer. <br/>
+
+The following image shows the Sequential Workflow:
+
+<img src="~/assets/images/bots/sequentialWorkflow.gif" alt="Sequential Workflow" width="400"/>
+
+A user can progress through their workflow without modifying the card for other users. This is also useful for conducting quizzes using sequential Adaptive Cards. As shown in the following image, different users can be at different stages of the workflow and they see different states of the card:
++
+> [!NOTE]
+> In order to sync the user's progress across devices, use the `refresh` property in Adaptive Card JSON.
+
+## Sequential Workflow for Adaptive Cards
+
+The following code provides an example of Adaptive Cards:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "version": "1.4",
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Select from food options"
+ },
+ {
+ "type": "ActionSet",
+ "actions": [
+ {
+ "type": "Action.Execute",
+ "title": "Chicken",
+ "verb": "food",
+ "data": {
+ "item": "chicken"
+ }
+ },
+ {
+ "type": "Action.Execute",
+ "title": "Beef",
+ "verb": "food",
+ "data": {
+ "item": "beef"
+ }
+ },
+ {
+ "type": "Action.Execute",
+ "title": "Vegan",
+ "verb": "food",
+ "data": {
+ "item": "vegan"
+ }
+ }
+ ]
+ }
+ ]
+}
+```
+
+`Action.Execute` invoking the bot can return Adaptive Cards as a response, which replaces the existing card in Teams.
+The following example provides what the bot returns on food or drink selection or order confirmation:
+
+* On food selection from Card 1, bot can return a card for selection of drinks that is Card 2.
+* On drink selection from Card 2, bot can return an order confirmation card that is Card 3.
+* On order confirmation from Card 3, bot can return an order confirmed card that is Card 4.
+
+## Invoke request received on bot side
+
+The following code provides an example of an invoke request received on bot side:
+
+```JSON
+{
+ "type": "invoke",
+  "name": "adaptiveCard/action",
+
+ // ... other properties omitted for brevity
+
+  "value": {
+    "action": {
+      "type": "Action.Execute",
+      "id": "",
+ "verb": "food",
+     "data": { 
+ "item": "vegan"
+ }
+    },
+ "trigger":ΓÇ»"manual"
+  }
+}
+```
+
+## Invoke response to return Adaptive Cards
+
+The following code provides an example of an invoke response to return Adaptive Cards:
+
+```C#
+string cardJson = "<adaptive card json>";
+var card = JsonConvert.DeserializeObject(cardJson);
+
+var adaptiveCardResponse = JObject.FromObject(new
+ {
+ statusCode = 200,
+ type = "application/vnd.microsoft.card.adaptive",
+ value = card
+ });
+```
+
+## See also
+
+* [Adaptive Card actions in Teams](~/task-modules-and-cards/cards/cards-actions.md#adaptive-cards-actions)
+* [How bots work](/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0&preserve-view=true)
+* [Work with Universal Actions for Adaptive Cards](Work-with-universal-actions-for-adaptive-cards.md)
platform Up To Date Views https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/task-modules-and-cards/cards/Universal-actions-for-adaptive-cards/Up-To-Date-Views.md
+
+ Title: Up to date views
+description: Sample for up to date views using Universal Bot
++
+localization_priority: Normal
++
+# Up to date cards
+
+You can now provide latest information to your users on Adaptive Cards with a combination of refresh and message edits in Teams. With this you are able to update the User Specific Views dynamically to its latest state as and when there is a change on your service. For example, in the case of project management or ticketing cards, you can update comments and the status of the task. In case of approvals the latest state is reflected while also providing differentiated information and actions.
+
+For example, a user can create an asset approval request in a Teams conversation. Alex creates an approval request and assigns it to Megan and Nestor. The following are the two parts to create the approval request:
+
+* User Specific Views can be leveraged using the `refresh` property of the Adaptive Cards.
+Using User Specific Views one can show a card with **Approve** or **Reject** buttons to a set of users, and show a card without these buttons to other users.
+
+* To keep the card state updated at all times, Teams message edit mechanism can be leveraged. For example, each time there is an approval, bot can trigger a message edit to all users. This bot message edit triggers an `adaptiveCard/action` invoke request for all automatic refresh users, to which the bot can respond with the updated user specific card.
+
+For more information, see [how to do a bot message edit](https://docs.microsoft.com/microsoftteams/platform/bots/how-to/update-and-delete-bot-messages?tabs=dotnet#update-cards).
+
+## Approval base card
+
+The following code provides an example of an approval base card:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "version": "1.4",
+ "refresh": {
+ "action": {
+ "type": "Action.Execute",
+ "title": "Refresh",
+ "verb": "acceptRejectView"
+ },
+ "userIds": ["<Megan's user MRI>", "<Nestor's user MRI>"]
+ },
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Asset Request B12"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Submitted by **Alex**"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Approval pending from **Megan and Nestor**"
+ }
+ ]
+}
+```
+
+## Approval card with Approve and Reject buttons
+
+The following code provides an example of an approval card with **Approve** and **Reject** buttons:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "version": "1.4",
+ "refresh": {
+ "action": {
+ "type": "Action.Execute",
+ "title": "Refresh",
+ "verb": "acceptRejectView"
+ },
+ "userIds": ["<Nestor's user MRI>", "<Megan's user MRI>"]
+ },
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Approval Request B12"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Submitted by **Alex**"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Approval pending from **Megan and Nestor**"
+ }
+ ],
+ "actions": [
+ {
+ "type": "Action.Execute",
+ "title": "Approve",
+ "verb": "approve",
+ "data": {
+ "more info": "<more info>"
+ }
+ },
+ {
+ "type": "Action.Execute",
+ "title": "Reject",
+ "verb": "reject",
+ "data": {
+ "more info": "<more info>"
+ }
+ }
+ ]
+}
+```
+
+Following are the two roles that are shown to users depending on their involvement in the approval request:
+
+* Approval base card: Shown to users who are not part of approvers list and have not yet approved or rejected the request, and are not part of `userIds` list in `refresh` property of the Adaptive Card JSON.
+* Approval card with **Approve** or **Reject** buttons: Shown to the users who are part of the approvers list and the `userIds` list in the `refresh` property of the Adaptive Card JSON.
+
+**To send the asset approval request**
+
+1. Alex raises an asset approval request in a Teams conversation and assigns it to Megan and Nestor.
+2. Bot sends the approval base card in the conversation.
+3. All other users in the conversation see the card sent by the bot. Automatic refresh is triggered for Megan and Nestor, who now see the user specific card with **Approve** or **Reject** buttons as their user MRIs are added to the `userIds` list in the `refresh` property of the Adaptive Card.
+
+ :::image type="content" source="~/assets/images/adaptive-cards/universal-bots-up-to-date-views-1.png" alt-text="User Specific Views":::
+
+4. Nestor selects the **Approve** button which is powered with `Action.Execute`. The bot gets an `adaptiveCard/action` invoke request to which it can return an Adaptive Card in response.
+5. The bot triggers a message edit with an updated card which says Nestor has approved the request while Megan's approval is pending.
+6. Bot message edit triggers an automatic refresh for Megan and she sees the updated user specific card, which says Nestor has approved the request, but also sees the **Approve** or **Reject** buttons. Nestor's user MRI is removed from the `userIds` list in `refresh` property of this Adaptive Card JSON in steps 4 and 5. Now, automatic refresh is only triggered for Megan.
+
+ :::image type="content" source="~/assets/images/adaptive-cards/universal-bots-up-to-date-views-2.png" alt-text="Up to date User Specific Views":::
+
+7. Now, Megan selects the **Approve** button, which is powered with `Action.Execute`. The bot gets an `adaptiveCard/action` invoke request to which it can return an Adaptive Card in response.
+8. The bot triggers a message edit with an updated card, which says Nestor and Megan have approved the request.
+9. Bot message edit does not trigger any automatic refresh. Megan's user MRI is also removed from the `userIds` list in `refresh` property of this Adaptive Card JSON in steps 7 and 8.
+
+ :::image type="content" source="~/assets/images/adaptive-cards/universal-bots-up-to-date-views-3.png" alt-text="Up to date views":::
+
+## Adaptive Card sent as response of `adaptiveCard/action` and `message edit`
+
+The following code provides an example of Adaptive Cards sent as response of `adaptiveCard/action` and `message edit` for steps 4 and 5:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "version": "1.4",
+ "refresh": {
+ "action": {
+ "type": "Action.Execute",
+ "title": "Refresh",
+ "verb": "acceptRejectView"
+ },
+ "userIds": ["<Megan's user MRI>"]
+ },
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Asset Request B12"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Submitted by **Alex**"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Approval pending from **Megan**"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Approved by **Nestor**"
+ }
+ ]
+}
+```
+
+The following code provides an example of Adaptive Cards sent as response of `adaptiveCard/action` invoke through automatic refresh for step 6:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "version": "1.4",
+ "refresh": {
+ "action": {
+ "type": "Action.Execute",
+ "title": "Refresh",
+ "verb": "acceptRejectView"
+ },
+ "userIds": ["<Megan's user MRI>"]
+ },
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Approval Request B12"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Submitted by **Alex**"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Approval pending from **Megan**"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Approved by **Nestor**"
+ }
+ ],
+ "actions": [
+ {
+ "type": "Action.Execute",
+ "title": "Approve",
+ "verb": "approve",
+ "data": {
+ "more info": "<more info>"
+ }
+ },
+ {
+ "type": "Action.Execute",
+ "title": "Reject",
+ "verb": "reject",
+ "data": {
+ "more info": "<more info>"
+ }
+ }
+ ]
+}
+```
+
+The following code provides an example of Adaptive Cards sent as response of `adaptiveCard/action` and `message edit` for steps 7 and 8:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "version": "1.4",
+ "refresh": {
+ "action": {
+ "type": "Action.Execute",
+ "title": "Refresh",
+ "verb": "acceptRejectView"
+ },
+ "userIds": []
+ },
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Asset Request B12"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Submitted by **Alex**"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Approved by **Nestor and Megan**"
+ }
+ ]
+}
+```
+
+## See also
+
+* [Work with Universal Actions for Adaptive Cards](Work-with-universal-actions-for-adaptive-cards.md)
+* [User Specific Views](User-Specific-Views.md)
platform User Specific Views https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/task-modules-and-cards/cards/Universal-actions-for-adaptive-cards/User-Specific-Views.md
+
+ Title: User Specific Views
+description: Sample for User Specific Views using Universal Actions
++
+localization_priority: Normal
++
+# User Specific Views
+
+Earlier if Adaptive Cards was sent in a Teams conversation, all users see the exact same card content. With the introduction of the Universal Actions model and `refresh` for Adaptive Cards, bot developers can now provide User Specific Views of Adaptive Cards to users. The same Adaptive Card can now refresh to a User Specific Adaptive Card.
+
+For example, Megan, a safety inspector at Contoso, wants to create an incident and assign it to Alex. She also wants everyone in the team to be aware about the incident. Megan uses Contoso incident reporting message extension powered by Universal Actions for Adaptive Cards.
++
+## User Specific Views for Adaptive Cards
+
+The following code provides an example of Adaptive Cards:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
+ "version": "1.4",
+ "refresh": {
+ "action": {
+ "type": "Action.Execute",
+ "title": "Refresh",
+ "verb": "editOrResolveView",
+ "data": {
+ "refresh info": "<refresh info>"
+ },
+ "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
+ },
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Incident 1234"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Incident details: <incident details>"
+ }
+ ]
+}
+```
+
+**To send Adaptive Cards, refresh User Specific Views, and invoke requests to the bot**
+
+1. When Megan creates a new incident, the bot sends the Adaptive Card or common card with incident details in the Teams conversation.
+2. Now this card automatically refreshes to User Specific View for Megan and Alex. Alex's and Megan's user MRIs are added in `userIds` property of `refresh` property of the Adaptive Card JSON. The card remains the same for other users in the conversation.
+3. For Megan, automatic refresh triggers an `adaptiveCard/action` invoke request to the bot. The bot can return an incident creator card with `Edit` button as a response to this invoke request.
+4. Similarly for Alex, automatic refresh triggers another `adaptiveCard/action` invoke request to the bot. The bot can return an incident owner card `Resolve` button as a response to this invoke request.
+
+## Invoke request sent from Teams client to the bot
+
+The following code provides an example of an invoke request sent from Alex's and Megan's Teams client to the bot:
+
+```JSON
+{
+ "type": "invoke",
+  "name": "adaptiveCard/action",
+
+ // ... other properties omitted for brevity
+
+  "value": {
+    "action": {
+      "type": "Action.Execute",
+      "id": "",
+ "verb": "editOrResolveView",
+     "data": { 
+ "refresh info": "<refresh info>"
+ }
+    },
+ "trigger":ΓÇ»"automatic"
+  }
+}
+```
+
+## adaptiveCard/action invoke response card
+
+The following code provides an example of an adaptiveCard/action invoke response card for Megan:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
+ "version": "1.4",
+ "refresh": {
+ "action": {
+ "type": "Action.Execute",
+ "title": "Refresh",
+ "verb": "editOrResolveView"
+ },
+ "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
+ },
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Incident 1234"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Incident details: <incident details>"
+ }
+ ],
+ "actions": [
+ {
+ "type": "Action.Execute",
+ "title": "Edit",
+ "verb": "edit",
+ "data": {
+ "additional info": "<additional info>",
+ ...
+ }
+ }
+ ]
+}
+```
+
+## adaptiveCard/action invoke response card for Alex
+
+The following code provides an example of an adaptiveCard/action invoke response card for Alex:
+
+```JSON
+{
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "originator":"c9b4352b-a76b-43b9-88ff-80edddaa243b",
+ "version": "1.4",
+ "refresh": {
+ "action": {
+ "type": "Action.Execute",
+ "title": "Refresh",
+ "verb": "editOrResolveView"
+ },
+ "userIds": ["<Megan's user MRI>", "<Alex's user MRI>"]
+ },
+ "body": [
+ {
+ "type": "TextBlock",
+ "text": "Incident 1234"
+ },
+ {
+ "type": "TextBlock",
+ "text": "Incident details: <incident details>"
+ }
+ ],
+ "actions": [
+ {
+ "type": "Action.Execute",
+ "title": "Resolve",
+ "verb": "resolve",
+ "data": {
+ "additional info": "<additional info>",
+ ...
+ }
+ }
+ ]
+}
+```
+
+## Invoke response to return Adaptive Cards
+
+The following code provides an example of an invoke response to return Adaptive Cards:
+
+```C#
+string cardJson = "<adaptive card json>";
+var card = JsonConvert.DeserializeObject(cardJson);
+
+var adaptiveCardResponse = JObject.FromObject(new
+ {
+ statusCode = 200,
+ type = "application/vnd.microsoft.card.adaptive",
+ value = card
+ });
+```
+
+Card design guidelines to keep in mind while designing User Specific Views:
+
+* You can create a maximum of **60 User Specific Views** for a particular card being sent to a chat or channel by specifying their `userIds` in the `refresh` section.
+* **Base Card:** The base version of the card that the bot developer sends to the chat. This is the version of the Adaptive Card for all users who are not specified in the `userIds` section.
+* A message update or edit can be used to update the base card and simultaneously refresh the User Specific Card.
+
+## See also
+
+* [Work with Universal Actions for Adaptive Cards](Work-with-universal-actions-for-adaptive-cards.md)
+* [Up to date views](Up-To-Date-Views.md)
platform Work With Universal Actions For Adaptive Cards https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/task-modules-and-cards/cards/Universal-actions-for-adaptive-cards/Work-with-Universal-Actions-for-Adaptive-Cards.md
+
+ Title: Work with Universal Actions for Adaptive Cards
+description: Work with the Universal Actions for Adaptive Cards.
+
+localization_priority: Normal
++
+# Work with Universal Actions for Adaptive Cards
+
+Universal Actions for Adaptive Cards provides a way to implement Adaptive Card based scenarios for both, Teams and Outlook. This document covers the following:
+
+* [Schema used for Universal Actions for Adaptive Cards](#schema-for-universal-actions-for-adaptive-cards)
+* [Refresh model](#refresh-model)
+* [`adaptiveCard/action` invoke activity](#adaptivecardaction-invoke-activity)
+* [Backward compatibility](#backward-compatibility)
+
+## Quick start guide to leverage Universal Actions for Adaptive Cards in Teams
+
+1. Replace all instances of `Action.Submit` with `Action.Execute` to update an existing scenario on Teams.
+2. Add a `refresh` clause to your Adaptive Card, if you want to leverage the automatic refresh model or if your scenario requires User Specific Views.
+
+ >[!NOTE]
+ > Specify the `userIds` property to identify, which users get automatic updates.
+
+3. Handle `adaptiveCard/action` invoke requests in your bot.
+4. Use the invoke request's context to respond back with cards that are specifically created for a user.
+
+ > [!NOTE]
+ > Whenever your bot returns a new card as a result of processing an `Action.Execute`, the response must conform to the response format.
+
+## Schema for Universal Actions for Adaptive Cards
+
+Universal Actions for Adaptive Cards is introduced in the Adaptive Cards schema version 1.4. To use Adaptive Card effectively, the `version` property of your Adaptive Card must be set to 1.4.
+
+> [!NOTE]
+> Setting the `version` property to 1.4 makes your Adaptive Card incompatible with older clients of the platforms or applications, such as Outlook and Teams, as they do not support the Universal Actions for Adaptive Cards.
+
+If you set the card version to less than 1.4 and use either or both, `refresh` property and `Action.Execute`, the following happens:
+
+| Client | Behavior |
+| :-- | :-- |
+| Teams | Your card stops working. Card is not refreshed and `Action.Execute` does not render depending on the version of the Teams client. To ensure maximum compatibility in Teams, define `Action.Execute` with an `Action.Submit` in the fallback property. |
+
+For more information on how to support older clients, see [backward compatibility](#backward-compatibility).
+
+### Action.Execute
+
+When authoring Adaptive Cards, replace `Action.Submit` and `Action.Http` with `Action.Execute`. The schema for `Action.Execute` is similar to that of `Action.Submit`.
+
+For more information, see [Action.Execute schema and properties](https://docs.microsoft.com/adaptive-cards/authoring-cards/universal-action-model#actionexecute).
+
+Now, you can use the refresh model to allow Adaptive Cards to update automatically.
+
+## Refresh model
+
+To automatically refresh your Adaptive Card, define its `refresh` property, which embeds an action of type `Action.Execute` and an `userIds` array.
+
+For more information, see [refresh schema and properties](https://docs.microsoft.com/adaptive-cards/authoring-cards/universal-action-model#refresh-mechanism).
+
+## User IDs in refresh
+
+The following are the features of UserIds in refresh:
+
+* UserIds is an array of user MRI's which is part of the `refresh` property in Adaptive Cards.
+
+* If the `userIds` list property is specified as `userIds: []` in the refresh section of the card, the card is not automatically refreshed. Instead, a **Refresh Card** option is displayed to the user in the triple dot menu in web or desktop and in the long press context menu in mobile, that is, Android or iOS to manually refresh the card.
+
+* UserIds property is added because channels in Teams can include a large number of members. If all members are viewing the channel at the same time, an unconditional automatic refresh results in many concurrent calls to the bot. To avoid this, the `userIds` property must always be included to identify which users must get an automatic refresh with a maximum of *60 (sixty) user MRIs*.
+
+* For more information on how you can fetch Teams conversation member's user MRIs to add in userIds list in refresh section of Adaptive Card, see [fetch roster or user profile](https://docs.microsoft.com/microsoftteams/platform/bots/how-to/get-teams-context?tabs=dotnet#fetch-the-roster-or-user-profile).
+
+* Sample Teams user MRI is `29:1bSnHZ7Js2STWrgk6ScEErLk1Lp2zQuD5H2qQ960rtvstKp8tKLl-3r8b6DoW0QxZimuTxk_kupZ1DBMpvIQQUAZL-PNj0EORDvRZXy8kvWk`
+
+> [!NOTE]
+> The `userIds` property is ignored in Outlook, and the `refresh` property is always automatically activated. There is no scale issue in Outlook because users view the card at different times.
+
+Next step is to use the `adaptiveCard/action` invoke activity to understand what request must be made after `Action.Execute` is executed.
+
+## `adaptiveCard/action` invoke activity
+
+When `Action.Execute` is executed in the client, a new type of Invoke activity `adaptiveCard/action` is made to your bot.
+
+For more information, see [request format and properties for a typical `adaptiveCard/action` invoke activity](https://docs.microsoft.com/adaptive-cards/authoring-cards/universal-action-model#request-format).
+
+For more information, see [response format and properties for a typical `adaptiveCard/action` invoke activity with supported response types](https://docs.microsoft.com/adaptive-cards/authoring-cards/universal-action-model#response-format).
+
+Next, you can apply backward compatibility to older clients across different platforms and make your Adaptive Card compatible.
+
+## Backward compatibility
+
+Universal Actions for Adaptive Cards allows you to set properties that enable backward compatibility with older versions of Outlook and Teams.
+
+### Teams
+
+To ensure backward compatibility of your Adaptive Cards with older versions of Teams, you must include the `fallback` property and set its value to `Action.Submit`. Also, your bot code must process both `Action.Execute` and `Action.Submit`.
+
+For more information, see [backward compatibility on Teams](https://docs.microsoft.com/adaptive-cards/authoring-cards/universal-action-model#teams).
+
+## See also
+
+* [Adaptive Card actions in Teams](~/task-modules-and-cards/cards/cards-actions.md#adaptive-cards-actions)
+* [How bots work](/azure/bot-service/bot-builder-basics?view=azure-bot-service-4.0&preserve-view=true)
platform Cards Actions https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/task-modules-and-cards/cards/cards-actions.md
Initiates an OAuth flow, allowing bots to connect with secure services, as descr
## Adaptive Cards actions
-Adaptive Cards support three action types:
+Adaptive Cards support four action types:
* [Action.OpenUrl](http://adaptivecards.io/explorer/Action.OpenUrl.html) * [Action.Submit](http://adaptivecards.io/explorer/Action.Submit.html) * [Action.ShowCard](http://adaptivecards.io/explorer/Action.ShowCard.html)
+* [Action.Execute](https://docs.microsoft.com/adaptive-cards/authoring-cards/universal-action-model#actionexecute)
In addition to the actions mentioned above, you can modify the Adaptive Card `Action.Submit` payload to support existing Bot Framework actions using a `msteams` property in the `data` object of `Action.Submit`. The below sections detail how to use existing Bot Framework actions with Adaptive Cards.
platform What Are Cards https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/task-modules-and-cards/what-are-cards.md
Teams uses cards in three different places:
> > Γ£ö All native adaptive card schema elements, except `Action.Submit`, are fully supported. >
-> Γ£ö The supported actions are [**Action.OpenURL**](https://adaptivecards.io/explorer/Action.OpenUrl.html), [**Action.ShowCard**](https://adaptivecards.io/explorer/Action.ShowCard.html), and [**Action.ToggleVisibility**](https://adaptivecards.io/explorer/Action.ToggleVisibility.html).
+> Γ£ö The supported actions are [**Action.OpenURL**](https://adaptivecards.io/explorer/Action.OpenUrl.html), [**Action.ShowCard**](https://adaptivecards.io/explorer/Action.ShowCard.html), [**Action.ToggleVisibility**](https://adaptivecards.io/explorer/Action.ToggleVisibility.html) and [**Action.Execute**](https://docs.microsoft.com/adaptive-cards/authoring-cards/universal-action-model#actionexecute).
## Cards in Connectors
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/whats-new.md
The change log lists changes to the Microsoft Teams platform and this document s
| **Date** | **Notes** | **Changed topics** | | -- | | |
+| 04/29/2021 | New: Universal Actions for Adaptive Cards. | [Universal Actions for Adaptive Cards](task-modules-and-cards/cards/universal-actions-for-adaptive-cards/overview.md) |
|04/08/2021| App customization feature is now available in developer preview.|[Design teams app overview](concepts/design/design-teams-app-overview.md#app-customization), [App studio overview](concepts/build-and-test/app-studio-overview.md#connectors), and [Manifest schema](resources/schem) | |03/18/2021|Notice: Update to version 4.10 or above of the Bot Framework SDK, as we've started with the deprecation process for `TeamsInfo.getMembers` and `TeamsInfo.GetMembersAsync`. | [Bot API Changes for Team/Chat Members](resources/team-chat-member-api-changes.md) | |03/05/2021|Notice: Tabs will no longer have margins surrounding their experiences. Tab developers should review and update their apps. | [Removing tab margins](resources/removing-tab-margins.md) |