Updates from: 07/27/2021 03:11:40
Service Microsoft Docs article Related commit history on GitHub Change details
platform Real Time Media Concepts https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/bots/calls-and-meetings/real-time-media-concepts.md
keywords: audio stream video stream audio/video calling meeting real-time media
# Real-time media calls and meetings with Microsoft Teams
-The Real-time Media Platform enables bots to interact with Microsoft Teams calls and meetings using real-time voice, video, and screen sharing. This is an advanced capability that allows the bot to send and receive voice and video content frame by frame. The bot has raw access to the voice, video, and screen sharing media streams. There are simpler service-hosted media bots that rely on the Real-time Media Platform for all media processing. Bots that process media themselves are called application-hosted media bots.
+The Real-time Media Platform enables bots to interact with Microsoft Teams calls and meetings using real-time voice, video, and screen sharing. The Real-time Media Platform is an advanced capability that allows the bot to send and receive voice and video content frame by frame. The bot has raw access to the voice, video, and screen sharing media streams. There are simpler service-hosted media bots that rely on the Real-time Media Platform for all media processing. Bots that process media themselves are called application-hosted media bots.
-For example, in a 1:1 call with a bot, as the user speaks, the bot receives 50 audio frames per second, with each frame containing 20 milliseconds (ms) of audio. An application-hosted media bot can perform real-time speech recognition as the audio frames are received, rather than having to wait for a recording after the user has stopped speaking. The bot can also send and receive high-definition-resolution video, including video-based screen sharing content.
+For example, in a 1:1 call with a bot, as the user speaks, the bot receives 50 audio frames per second. The bot receives audio frames with each frame of 20 milliseconds (ms) of audio. An application-hosted media bot can do real-time speech recognition as the audio frames are received. No need to wait for a recording after the user has stopped speaking. The bot can also send and receive high-definition-resolution video, including video-based screen sharing content.
-The platform provides a simple socket-like API for the bot to send and receive media. It handles the real-time encoding and decoding of audio or video packets using codecs such as SILK and G.722 for audio and H.264 for video. The platform also handles all media packet encryption or decryption and packet network transmission automatically. The bot is only concerned with the actual audio or video content. A real-time media bot participates in 1:1 calls as well as meetings with multiple participants.
+The platform provides a simple socket-like API for the bot to send and receive media. It handles the real-time encoding and decoding of audio or video packets. It uses codecs such as SILK and G.722 for audio and H.264 for video. The platform also handles all media packet encryption or decryption and packet network transmission. The bot is only concerned with the actual audio or video content. A real-time media bot participates in 1:1 calls and meetings with multiple participants.
## Media session
-When a real-time media bot answers an incoming call or joins a Teams meeting, it must declare what modalities it must support. For each supported modality, the bot declares whether it can send and receive media, receive only, or send only. For example, a bot designed to handle 1:1 Teams calls, requires to both send and receive audio, but only send video as it does not require to receive the video of the caller. The set of audio and video modalities established between the bot and the Teams caller or meeting is called the media session.
+A real-time media bot must declare what modalities it must support. The real-time media bot must declare support when it answers an incoming call or joins a Teams meeting. For each supported modality, the bot declares whether it can send and receive media, receive only, or send only. For example, a bot designed to handle 1:1 Teams calls, requires to both send and receive audio. But the bot needs to only send video as it need not receive the video of the caller. The set of audio and video modalities established between the bot and the Teams caller or meeting is called the media session.
-Two types of video modalities are supported, main video and video-based screen sharing. The main video is used to transport the video from a user's webcam. The video-based screen sharing allows a user to share his or her screen as a video stream. The platform allows a bot to send and receive both video types.
+Two types of video modalities are supported, main video and video-based screen sharing. The main video is used to transport the video from a user's webcam. The video-based screen sharing allows a user to share the screen. The platform allows a bot to send and receive both video types.
-When joined to a Teams meeting, a bot can receive multiple main video streams simultaneously up to ten per media session. This allows the bot to see more than one participant in the meeting.
+When joined to a Teams meeting, a bot can receive multiple main videos streams simultaneously up to 10 per media session. The bot can see more than one participant in the meeting.
The next section provides details about the bot sending and receiving media as a sequence of frames. ## Frames and frame rate
-A real-time media bot interacts directly with the audio and video modalities of a media session. This means the bot is sending and receiving media as a sequence of frames, where each frame represents a unit of content. One second of audio is transmitted as a sequence of 50 frames, with each frame containing 20 ms that is 1/50th of a second of speech content. One second of video is transmitted as a sequence of 30 still images, each intended to be viewed for just 33.3 ms that is 1/30th of a second before the next video frame is displayed. The number of frames transmitted or rendered per second is called the frame rate.
+A real-time media bot interacts directly with the audio and video modalities of a media session. The bot is sending and receiving media as a sequence of frames and each frame is a content unit. One second of audio is transmitted as a sequence of 50 frames. Each frame contains 20 ms that is 1/50th of a second of speech content. One second of video is transmitted as a sequence of 30 still images. Each image is intended to be viewed for just 33.3 ms that is 1/30th of a second before the next video frame. The number of frames transmitted or rendered per second is called the frame rate.
The next section provides details about the audio and video format used in real-time media calls and meetings. ## Audio and video format
-In audio format, each second of audio is represented as 16,000 samples, with each sample containing 16-bits of data. A 20 ms audio frame contains 320 samples that is 640 bytes of data.
+In audio format, each second of audio is represented as 16,000 samples, with each sample containing 16 bits of data. A 20-ms audio frame contains 320 samples that are 640 bytes of data.
In video format, several formats are supported. Two key properties of a video format are its frame size and color format. Supported frame sizes include 640x360 that is 360 pixels, 1280x720 that is 720 pixels, and 1920x1080 that is 1080 pixels. Supported color formats include NV12 that is 12 bits per pixel and RGB24 that is 24 bits per pixel.
-A 720p video frame contains 921,600 pixels that is 1280 times 720. In the RGB24 color format, each pixel is represented as 3 bytes that is 24-bits comprised of one byte each of red, green, and blue color components. Therefore, a single 720p RGB24 video frame requires 2,764,800 bytes of data that is 921,600 pixels times 3 bytes per pixel. At a frame rate of 30 fps, sending 720p RGB24 video frames means processing approximately 80 megabytes per second of content, which is substantially compressed by the H.264 video codec before network transmission.
+A 720-p video frame contains 921,600 pixels that is 1280 times 720. In the RGB24 color format, each pixel is represented as 3 bytes that is 24 bits including 1 byte each of red, green, and blue color components. A single 720p RGB24 video frame requires 2,764,800 bytes of data that is 921,600 pixels times 3 bytes per pixel. At a variable frame rate, sending 720p RGB24 video frames means processing approximately 80 megabytes per second of content. 80 megabytes is substantially compressed by the H.264 video codec before network transmission.
-An advanced capability of the platform allows a bot to send or receive video as encoded H.264 frames. This supports bots which provide their own H.264 encoder or decoder, or do not require the video stream decoded into raw RGB24 or NV12 bitmaps.
+An advanced capability of the platform allows a bot to send or receive video as encoded H.264 frames. Bots that provide their own H.264 encoder or decoder are supported, or the video stream decoded into raw RGB24 or NV12 bitmaps is not required.
The next section provides details about which meeting participants are speaking that is which are active and dominant speakers. ## Active and dominant speakers
-When joined to a Teams meeting consisting of multiple participants, a bot can identify which meeting participants are currently speaking. Active speakers identify which participants are being heard in each received audio frame. Dominant speakers identify which participants are currently most active or dominant in the group conversation, even though their voice is not heard in every audio frame. The set of dominant speakers can change as different participants take turns speaking.
+When joined to a Teams meeting consisting of multiple participants, a bot can identify which meeting participants are currently speaking. Active speakers identify which participants are being heard in each received audio frame. Dominant speakers identify which participants are currently most active or dominant in the group conversation, though their voice is not heard in every audio frame. The set of dominant speakers can change as different participants take turns speaking.
The next section provides details about video subscription requests made by a bot. ## Video subscription
-In a 1:1 call, the bot automatically receives the video of the caller if the bot is enabled to receive the video. In a Teams meeting, the bot must indicate to the platform which participants it wants to see. A video subscription is a request by the bot to receive a participantΓÇÖs main video or screen-sharing content. As the participants in the meeting conduct their conversation, the bot modifies its desired video subscriptions based on updates of the dominant speaker set or notifications indicating which participant is currently screen sharing.
+In a 1:1 call, the bot automatically receives the video of the caller if the bot is enabled to receive the video. In a Teams meeting, the bot must indicate to the platform which participants it wants to see. A video subscription is a request by the bot to receive a participantΓÇÖs main video or screen-sharing content. As the participants in the meeting conduct their conversation, the bot modifies its required video subscriptions. The bot modifies video subscriptions based on updates of the dominant speaker set or notifications that indicate which participant is currently screen sharing.
The next section provides details about what you must install and the requirements to develop an application-hosted media bot.
platform App Fundamentals Overview https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/app-fundamentals-overview.md
You can recognize user issues and identify the answers to some common problems t
## See also * [Integrate web apps with Teams](../samples/integrating-web-apps.md)
-* [Build your first Microsoft Teams app](../build-your-first-app/build-first-app-overview.md)
+* [Build your first Microsoft Teams app](../build-your-first-app/build-first-app-overview.md)
## Next step
platform Capabilities Overview https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/capabilities-overview.md
For example, you can collect user input in a form built as a tab in the app. You
## See also [Build apps for Teams](../overview.md)
+[Build your first Microsoft Teams app](../build-your-first-app/build-first-app-overview.md)
## Next step
platform Map Use Cases https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/design/map-use-cases.md
That being said, the best apps usually combine multiple features, creating an ap
## See also
-[Build apps for Microsoft Teams](../../overview.md)
+[Build your first Microsoft Teams app](../build-your-first-app/build-first-app-overview.md)
platform Understand Use Cases https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/design/understand-use-cases.md
Identify which new features the user will prefer to have in the current solution
* [Choose how to distribute your app](../deploy-and-publish/apps-publish-overview.md) * [Design tabs](../../tabs/design/tabs.md) * [Design bots](../../bots/design/bots.md)
+* [Build your first Microsoft Teams app](../build-your-first-app/build-first-app-overview.md)
## Next step
platform Extensibility Points https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/concepts/extensibility-points.md
The following list shows how Teams capabilities are commonly used in personal co
## See also
-[Teams app design guidelines](../concepts/design/design-teams-app-overview.md)
+[Teams app design guidelines](../concepts/design/design-teams-app-overview.md) <br>
+[Build your first Microsoft Teams app](../build-your-first-app/build-first-app-overview.md)
## Next step
platform Prerequisites https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/get-started/prerequisites.md
Some of the tools you need depend on how you prefer to build your Teams app:
## Install the Teams Toolkit
-The Teams Toolkit helps simplify the development process with tools to provision and deploy cloud resources for your app, publish to the Teams store, and more. You can use the toolkit with Visual Studio Code, Visual Studio, or as a CLI (called `teamsfx`).
+The Teams Toolkit helps simplify the development process with tools to provision and deploy cloud resources for your app, publish to the Teams store, and more. You can use the toolkit with Visual Studio Code, Visual Studio, or as a CLI (called `teamsfx`). For more information, see [Teams Toolkit for Visual Studio Code](../toolkit/visual-studio-code-overview.md), [Teams Toolkit for Visual Studio](../toolkit/visual-studio-overview.md) and [Teamsfx CLI Tool](https://github.com/OfficeDev/TeamsFx/tree/dev/packages/cli).
# [Visual Studio Code](#tab/vscode)
platform Graph Proactive Bots And Messages https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/graph-api/proactive-bots-and-messages/graph-proactive-bots-and-messages.md
Your bot can [send proactive messages](/azure/bot-service/bot-builder-howto-proa
## Code sample | **Sample Name** | **Description** | **.NET** | **Node.js** |
-||--|--|-|--|
+||--|--|-|
| Proactive installation of app and sending proactive notifications | This sample shows how you can use proactive installation of app for users and send proactive notifications by calling Microsoft Graph APIs. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-proactive-installation/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/graph-proactive-installation/nodejs) |- ## See also * [**Manage app setup policies in Microsoft Teams**](/MicrosoftTeams/teams-app-setup-policies#create-a-custom-app-setup-policy)
platform Manifest Schema https://github.com/MicrosoftDocs/msteams-docs/commits/master/msteams-platform/resources/schema/manifest-schema.md
keywords: teams manifest schema
# Reference: Manifest schema for Microsoft Teams
-The Teams manifest describes how the app integrates into the Microsoft Teams product. Your manifest must conform to the schema hosted at [`https://developer.microsoft.com/json-schemas/teams/v1.10/MicrosoftTeams.schema.json`]( https://developer.microsoft.com/json-schemas/teams/v1.10/MicrosoftTeams.schema.json). Previous versions 1.0, 1.1,..., 1.6, and so on are also supported (using "v1.x" in the URL).
+The Teams manifest describes how the app integrates into the Microsoft Teams product. Your manifest must conform to the schema hosted at [`https://developer.microsoft.com/json-schemas/teams/v1.10/MicrosoftTeams.schema.json`]( https://developer.microsoft.com/json-schemas/teams/v1.10/MicrosoftTeams.schema.json). Previous versions 1.0, 1.1,..., and 1.6 are also supported (using "v1.x" in the URL).
For more information on the changes made in each version, see [manifest change log](https://github.com/OfficeDev/microsoft-teams-app-schema/releases). The following schema sample shows all extensibility options:
The schema defines the following properties:
## $schema
-Optional, but recommended ΓÇö string
+Optional, but recommendedΓÇöstring
The https:// URL referencing the JSON Schema for the manifest. ## manifestVersion
-**Required** ΓÇö string
+**Required**ΓÇöstring
The version of manifest schema this manifest is using. It must be 1.10. ## version
-**Required** ΓÇö string
+**Required**ΓÇöstring
-The version of a specific app. If you update something in your manifest, the version must be incremented too. This way, when the new manifest is installed, it overwrites the existing one and the user receives the new functionality. If this app was submitted to the store, the new manifest must be re-submitted and re-validated. The app users receive the new updated manifest automatically within few hours after the manifest is approved.
+The version of a specific app. When you update something in your manifest, the version must be incremented too. This way, when the new manifest is installed, it overwrites the existing one and the user receives the new functionality. When this app was submitted to the store, the new manifest must be resubmitted and revalidated. The app users receive the new updated manifest automatically within few hours after the manifest is approved.
-If the app requests for permissions change, the users are prompted to upgrade and re-consent to the app.
+If the app requests for permissions change, the users are prompted to upgrade and reconsent to the app.
This version string must follow the [semver](http://semver.org/) standard (MAJOR.MINOR.PATCH). ## id
-**Required** ΓÇö Microsoft app ID
+**Required**ΓÇöMicrosoft app ID
-The ID is a unique Microsoft-generated identifier for the app. You have an ID if your bot is registered through the Microsoft Bot Framework or your tab's web app already signs in with Microsoft. You must enter the ID here. Otherwise, you must generate a new ID at the [Microsoft Application Registration Portal](https://aka.ms/appregistrations). Use the same ID if you add a bot.
+The ID is a unique Microsoft-generated identifier for the app. You have an ID if your bot is registered through the Microsoft Bot Framework. You have an ID if your tab's web app already signs in with Microsoft. You must enter the ID here. Otherwise, you must generate a new ID at the [Microsoft Application Registration Portal](https://aka.ms/appregistrations). Use the same ID if you add a bot.
> [!NOTE] > If you are submitting an update to your existing app in AppSource, the ID in your manifest must not be modified. ## developer
-**Required** ΓÇö object
+**Required**ΓÇöobject
Specifies information about your company. For apps submitted to the Teams store, these values must match the information in your store listing. For more information, see the [Teams store publishing guidelines](~/concepts/deploy-and-publish/appsource/publish.md).
Specifies information about your company. For apps submitted to the Teams store,
## name
-**Required** ΓÇö object
+**Required**ΓÇöobject
The name of your app experience, displayed to users in the Teams experience. For apps submitted to AppSource, these values must match the information in your AppSource entry. The values of `short` and `full` must be different.
The name of your app experience, displayed to users in the Teams experience. For
## description
-**Required** ΓÇö object
+**Required**ΓÇöobject
Describes your app to users. For apps submitted to AppSource, these values must match the information in your AppSource entry.
-Ensure that your description accurately describes your experience and provides information to help potential customers understand what your experience does. You must note in the full description, if an external account is required for use. The values of `short` and `full` must be different. Your short description must not be repeated within the long description and must not include any other app name.
+Ensure that your description describes your experience and helps potential customers understand what your experience does. You must note in the full description, if an external account is required for use. The values of `short` and `full` must be different. Your short description cannot be repeated within the long description and must not include any other app name.
|Name| Maximum size | Required | Description| |||||
Ensure that your description accurately describes your experience and provides i
## packageName
-**Optional** ΓÇö string
+**Optional**ΓÇöstring
A unique identifier for the app in reverse domain notation; for example, com.example.myapp. Maximum length: 64 characters. ## localizationInfo
-**Optional** ΓÇö object
+**Optional**ΓÇöobject
-Allows the specification of a default language, as well as pointers to additional language files. For more information, see [localization](~/concepts/build-and-test/apps-localization.md).
+Allows the specification of a default language and provides pointers to more language files. For more information, see [localization](~/concepts/build-and-test/apps-localization.md).
|Name| Maximum size | Required | Description| |||||
-|`defaultLanguageTag`||Γ£ö|The language tag of the strings in this top level manifest file.|
+|`defaultLanguageTag`||Γ£ö|The language tag of the strings in this top-level manifest file.|
### localizationInfo.additionalLanguages
-An array of objects specifying additional language translations.
+An array of objects specifying more language translations.
|Name| Maximum size | Required | Description| ||||| |`languageTag`||Γ£ö|The language tag of the strings in the provided file.|
-|`file`||Γ£ö|A relative file path to a the .json file containing the translated strings.|
+|`file`||Γ£ö|A relative file path to the .json file containing the translated strings.|
## icons
-**Required** ΓÇö object
+**Required**ΓÇöobject
-Icons used within the Teams app. The icon files must be included as part of the upload package. See [Icons](../../concepts/build-and-test/apps-package.md#app-icons) for more information.
+Icons used within the Teams app. The icon files must be included as part of the upload package. For more information, see [Icons](../../concepts/build-and-test/apps-package.md#app-icons).
|Name| Maximum size | Required | Description| |||||
Icons used within the Teams app. The icon files must be included as part of the
## accentColor
-**Optional** ΓÇö HTML Hex color code
+**Optional**ΓÇöHTML Hex color code
-A color to use in conjunction with and as a background for your outline icons.
+A color to use and as a background for your outline icons.
The value must be a valid HTML color code starting with '#', for example `#4464ee`. ## configurableTabs
-**Optional** ΓÇö array
+**Optional**ΓÇöarray
-Used when your app experience has a team channel tab experience that requires extra configuration before it is added. Configurable tabs are supported only in the teams scope and you can configure the same tabs multiple times. However, you can define it in the manifest only once.
+Used when your app experience has a team channel tab experience that requires extra configuration before it is added. Configurable tabs are supported only in the `team` and `groupchat` scopes and you can configure the same tabs multiple times. However, you can define it in the manifest only once.
|Name| Type| Maximum size | Required | Description| ||||||
Used when your app experience has a team channel tab experience that requires ex
## staticTabs
-**Optional** ΓÇö array
+**Optional**ΓÇöarray
Defines a set of tabs that can be "pinned" by default, without the user adding them manually. Static tabs declared in `personal` scope are always pinned to the app's personal experience. Static tabs declared in the `team` scope are currently not supported.
This item is an array (maximum of 16 elements) with all elements of the type `ob
## bots
-**Optional** ΓÇö array
+**Optional**ΓÇöarray
Defines a bot solution, along with optional information such as default command properties.
-The item is an array (maximum of only 1 element&mdash;currently only one bot is allowed per app) with all elements of the type `object`. This block is required only for solutions that provide a bot experience.
+The item is an array (maximum of only one element&mdash;currently only one bot is allowed per app) with all elements of the type `object`. This block is required only for solutions that provide a bot experience.
|Name| Type| Maximum size | Required | Description| ||||||
-|`botId`|string|64 characters|Γ£ö|The unique Microsoft app ID for the bot as registered with the Bot Framework. This may well be the same as the overall [app ID](#id).|
+|`botId`|string|64 characters|Γ£ö|The unique Microsoft app ID for the bot as registered with the Bot Framework. The ID can be the same as the overall [app ID](#id).|
|`scopes`|array of enums|3|Γ£ö|Specifies whether the bot offers an experience in the context of a channel in a `team`, in a group chat (`groupchat`), or an experience scoped to an individual user alone (`personal`). These options are non-exclusive.|
-|`needsChannelSelector`|boolean|||Describes whether or not the bot utilizes a user hint to add the bot to a specific channel. Default: **`false`**|
+|`needsChannelSelector`|boolean|||Describes whether or not the bot uses a user hint to add the bot to a specific channel. Default: **`false`**|
|`isNotificationOnly`|boolean|||Indicates whether a bot is a one-way, notification-only bot, as opposed to a conversational bot. Default: **`false`**| |`supportsFiles`|boolean|||Indicates whether the bot supports the ability to upload/download files in personal chat. Default: **`false`**|
-|`supportsCalling`|boolean|||A value indicating where a bot supports audio calling. **IMPORTANT**: This property is currently experimental. Experimental properties may not be complete, and may undergo changes before becoming fully available. It is provided for testing and exploration purposes only and must not be used in production applications. Default: **`false`**|
-|`supportsVideo`|boolean|||A value indicating where a bot supports video calling. **IMPORTANT**: This property is currently experimental. Experimental properties may not be complete, and may undergo changes before becoming fully available. It is provided for testing and exploration purposes only and must not be used in production applications. Default: **`false`**|
+|`supportsCalling`|boolean|||A value indicating where a bot supports audio calling. **IMPORTANT**: This property is currently experimental. Experimental properties may not be complete, and may undergo changes before becoming fully available. The property is provided for testing and exploration purposes only and must not be used in production applications. Default: **`false`**|
+|`supportsVideo`|boolean|||A value indicating where a bot supports video calling. **IMPORTANT**: This property is currently experimental. Experimental properties may not be complete, and may undergo changes before becoming fully available. The property is provided for testing and exploration purposes only and must not be used in production applications. Default: **`false`**|
### bots.commandLists
-An optional list of commands that your bot can recommend to users. The object is an array (maximum of 2 elements) with all elements of type `object`; you must define a separate command list for each scope that your bot supports. See [Bot menus](~/bots/how-to/create-a-bot-commands-menu.md) for more information.
+An optional list of commands that your bot can recommend to users. The object is an array (maximum of two elements) with all elements of type `object`; you must define a separate command list for each scope that your bot supports. For more information,see [Bot menus](~/bots/how-to/create-a-bot-commands-menu.md).
|Name| Type| Maximum size | Required | Description| ||||||
An optional list of commands that your bot can recommend to users. The object is
## connectors
-**Optional** ΓÇö array
+**Optional**ΓÇöarray
The `connectors` block defines an Office 365 Connector for the app.
-The object is an array (maximum of 1 element) with all elements of type `object`. This block is required only for solutions that provide a Connector.
+The object is an array (maximum of one element) with all elements of type `object`. This block is required only for solutions that provide a Connector.
|Name| Type| Maximum size | Required | Description| ||||||
The object is an array (maximum of 1 element) with all elements of type `object`
## composeExtensions
-**Optional** ΓÇö array
+**Optional**ΓÇöarray
Defines a messaging extension for the app. > [!NOTE] > The name of the feature was changed from "compose extension" to "messaging extension" in November, 2017, but the manifest name remains the same so that existing extensions continue to function.
-The item is an array (maximum of 1 element) with all elements of type `object`. This block is required only for solutions that provide a messaging extension.
+The item is an array (maximum of one element) with all elements of type `object`. This block is required only for solutions that provide a messaging extension.
|Name| Type | Maximum Size | Required | Description| ||||||
-|`botId`|string|64|Γ£ö|The unique Microsoft app ID for the bot that backs the messaging extension, as registered with the Bot Framework. This may well be the same as the overall App ID.|
+|`botId`|string|64|Γ£ö|The unique Microsoft app ID for the bot that backs the messaging extension, as registered with the Bot Framework. The ID can be the same as the overall App ID.|
|`commands`|array of objects|10|Γ£ö|Array of commands the messaging extension supports.| |`canUpdateConfiguration`|boolean|||A value indicating whether the configuration of a messaging extension can be updated by the user. Default: **false**.| |`messageHandlers`|array of Objects|5||A list of handlers that allow apps to be invoked when certain conditions are met.|
The item is an array (maximum of 1 element) with all elements of type `object`.
### composeExtensions.commands
-Your messaging extension must declare one or more commands. Each command appears in Microsoft Teams as a potential interaction from the UI-based entry point. There is a maximum of 10 commands.
+Your messaging extension must declare one or more commands with a maximum of 10 commands. Each command appears in Microsoft Teams as a potential interaction from the UI-based entry point.
Each command item is an object with the following structure:
Each command item is an object with the following structure:
|`taskInfo.height`|string|||Dialog height - either a number in pixels or default layout such as 'large', 'medium', or 'small'.| |`taskInfo.url`|string|||Initial webview URL.| |`parameters`|array of object|5 items|Γ£ö|The list of parameters the command takes. Minimum: 1; maximum: 5.|
-|`parameters.name`|string|64 characters|Γ£ö|The name of the parameter as it appears in the client. This is included in the user request.|
+|`parameters.name`|string|64 characters|Γ£ö|The name of the parameter as it appears in the client. The parameter name is included in the user request.|
|`parameters.title`|string|32 characters|Γ£ö|User-friendly title for the parameter.| |`parameters.description`|string|128 characters||User-friendly string that describes this parameterΓÇÖs purpose.| |`parameters.value`|string|512 characters||Initial value for the parameter.|
Each command item is an object with the following structure:
## permissions
-**Optional** ΓÇö array of strings
+**Optional**ΓÇöarray of strings
-An array of `string` which specifies which permissions the app requests, which lets end users know how the extension performs. The following options are non-exclusive:
+An array of `string`, which specifies which permissions the app requests, which let end users know how the extension does. The following options are non-exclusive:
* `identity` &emsp; Requires user identity information. * `messageTeamMembers` &emsp; Requires permission to send direct messages to team members.
-Changing these permissions during app update, causes your users to repeat the consent process after they run the updated app. See [Updating your app](~/concepts/deploy-and-publish/appsource/post-publish/overview.md) for more information.
+Changing these permissions during app update, causes your users to repeat the consent process after they run the updated app. For more information, see [Updating your app](~/concepts/deploy-and-publish/appsource/post-publish/overview.md).
## devicePermissions
-**Optional** ΓÇö array of strings
+**Optional**ΓÇöarray of strings
Provides the native features on a user's device that your app requests access to. Options are:
Provides the native features on a user's device that your app requests access to
**Optional**, except **Required** where noted.
-A list of valid domains for websites the app expects to load within the Teams client. Domain listings can include wildcards, for example, `*.example.com`. This matches exactly one segment of the domain; if you need to match `a.b.example.com` then use `*.*.example.com`. If your tab configuration or content UI needs to navigate to any other domain besides the one use for tab configuration, that domain must be specified here.
+A list of valid domains for websites the app expects to load within the Teams client. Domain listings can include wildcards, for example, `*.example.com`. The valid domain matches exactly one segment of the domain; if you need to match `a.b.example.com` then use `*.*.example.com`. If your tab configuration or content UI navigates to any other domain other than tab configuration, that domain must be specified here.
-It is **not** necessary to include the domains of identity providers you want to support in your app. For example, to authenticate using a Google ID, it is required to redirect to accounts.google.com, however, you must not include accounts.google.com in `validDomains[]`.
+Do **not** include the domains of identity providers you want to support in your app. For example, to authenticate using a Google ID, it is required to redirect to accounts.google.com, however, you must not include accounts.google.com in `validDomains[]`.
Teams apps that require their own sharepoint URLs to function well, includes "{teamsitedomain}" in their valid domain list.
The object is an array with all elements of the type `string`.
## webApplicationInfo
-**Optional** ΓÇö object
+**Optional**ΓÇöobject
-Provide your Azure Active Directory (AAD) App ID and Microsoft Graph information to help users seamlessly sign into your app. If your app is registered in AAD, you must provide the App ID, so that administrators can easily review permissions and grant consent in Teams admin center.
+Provide your Azure Active Directory (AAD) App ID and Microsoft Graph information to help users seamlessly sign into your app. If your app is registered in AAD, you must provide the App ID. Administrators can easily review permissions and grant consent in Teams admin center.
|Name| Type| Maximum size | Required | Description| ||||||
-|`id`|string|36 characters|Γ£ö|AAD application id of the app. This id must be a GUID.|
+|`id`|string|36 characters|Γ£ö|AAD application ID of the app. This ID must be a GUID.|
|`resource`|string|2048 characters|Γ£ö|Resource URL of app for acquiring auth token for SSO. </br> **NOTE:** If you are not using SSO, ensure that you enter a dummy string value in this field to your app manifest, for example, https://notapplicable to avoid an error response. | |`applicationPermissions`|array of strings|128 characters||Specify granular [resource specific consent](../../graph-api/rsc/resource-specific-consent.md#resource-specific-permissions).| ## showLoadingIndicator
-**Optional** ΓÇö boolean
+**Optional**ΓÇöboolean
-Indicates whether or not to show the loading indicator when an app or tab is loading. Default is **false**.
+Indicates if or not to show the loading indicator when an app or tab is loading. Default is **false**.
>[!NOTE] >If you select`showLoadingIndicator` as true in your app manifest, to load the page correctly, modify the content pages of your tabs and task modules as described in [Show a native loading indicator](../../tabs/how-to/create-tab-pages/content-page.md#show-a-native-loading-indicator) document. ## isFullScreen
- **Optional** ΓÇö boolean
+ **Optional**ΓÇöboolean
Indicate where a personal app is rendered with or without a tab header bar. Default is **false**. ## activities
-**Optional** ΓÇö object
+**Optional**ΓÇöobject
Define the properties your app uses to post a user activity feed.
You can define any of the following properties:
* `longDescription`: The app's detailed description. * `smallImageUrl`: The app's outline icon. * `largeImageUrl`: The app's color icon.
-* `accentColor`: The color to use in conjunction with and as a background for your outline icons.
+* `accentColor`: The color to use and a background for your outline icons.
* `developerUrl`: The HTTPS URL of the developer's website. * `privacyUrl`: The HTTPS URL of the developer's privacy policy. * `termsOfUseUrl`: The HTTPS URL of the developer's terms of use.
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
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.
+Adaptive Cards now support Sequential Workflows that are updated on user action. Using Sequential Workflows, Adaptive Cards are updated on user action and user can progress through a series of cards that require user input. `Action.Execute` supports Sequential Workflows, 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/>
+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 and drinks 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:
+A user can progress through their workflow without modifying the card for other users. The workflow is also useful for conducting quizzes using sequential Adaptive Cards. The following image shows different users can be at different stages of the workflow and states of the card:
:::image type="content" source="~/assets/images/adaptive-cards/universal-bots-catering-bot.png" alt-text="Catering bot states":::
var adaptiveCardResponse = JObject.FromObject(new
}); ```
-## Code sample
+## Code samples
+
+|Sample name | Description | .NETCore | Node.js |
+|-|--|--|--|
+| Teams catering bot | Create a bot that accepts food order using Adaptive Cards. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-catering/csharp)| Not yet available |
+| Sequential Workflows Adaptive Cards | Demonstrate how to implement Sequential Workflows, User Specific Views, and up to date Adaptive Cards in bots. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-sequential-flow-adaptive-cards/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-sequential-flow-adaptive-cards/nodejs) |
-|Sample name | Description | .NETCore |
-|-|--|--|
-| Teams catering bot | Create a simple bot that accepts food order using Adaptive Cards. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-catering/csharp)|
## See also
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
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.
+You can now provide latest information to your users on Adaptive Cards. Include a combination of refresh and message edits in Teams. Update the User Specific Views dynamically to its latest state as and when there is a change on your service. For example, for project management or ticketing cards, update comments and the task status. For 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.
+* User Specific Views can be applied 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.
+* To keep the card state always updated, Teams message edit mechanism can be used. For example, for every 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).
+For more information, see [how to do a bot message edit](/bots/how-to/update-and-delete-bot-messages?tabs=dotnet#update-cards).
## Approval base card
The following code provides an example of an approval card with **Approve** and
} ```
-Following are the two roles that are shown to users depending on their involvement in the approval request:
+Following are the two roles that are shown to users depending on 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 base card: Shown to users not part of approvers list and the request is not yet approved or rejected, and 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**
Following are the two roles that are shown to users depending on their involveme
:::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.
+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":::
The following code provides an example of Adaptive Cards sent as response of `ad
} ```
+## Code sample
+
+|Sample name | Description | .NETCore | Node.js |
+|-|--|--|--|
+| Sequential Workflows Adaptive Cards | Demonstrate how to implement Sequential Workflows, User Specific Views, and up to date Adaptive Cards in bots. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-sequential-flow-adaptive-cards/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-sequential-flow-adaptive-cards/nodejs) |
+ ## See also * [Work with Universal Actions for Adaptive Cards](Work-with-universal-actions-for-adaptive-cards.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
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. Maximum 60 different users can see a different version of the card with additional information or actions. This provides powerful scenarios like approvals, poll creator controls, ticketing, incident management, and project management cards.
+Earlier if Adaptive Cards were 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. Maximum 60 different users can see a different version of the card with additional information or actions. The Adaptive Card provides powerful scenarios like approvals, poll creator controls, ticketing, incident management, and project management cards.
-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.
+For example, Megan, a safety inspector at Contoso, wants to create an incident and assign it to Alex. Megan 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.
# [Mobile](#tab/mobile)
var adaptiveCardResponse = JObject.FromObject(new
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 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.
+* **Base Card:** The base version of the card that the bot developer sends to the chat. The base version is the version of the Adaptive Card for all users who are not specified in the `userIds` section.
* A message update can be used to update the base card and simultaneously refresh the User Specific Card. Opening the chat or channel also refreshes the card for users with refresh enabled. * For scenarios with larger groups where users switch to a view on action, which needs dynamic updates for responders, you can keep adding up to 60 users to the `userIds` list. You can remove the first responder from the list when the 61st user responds. For the users who get removed from the `userIds` list, you can provide a manual refresh button or use the refresh button in the message options menu to get the latest result. * Give a prompt to users to get a User Specific View, where they see only a particular view of the card or some actions.
+## Code sample
+
+|Sample name | Description | .NETCore | Node.js |
+|-|--|--|--|
+| Sequential Workflows Adaptive Cards | Demonstrate how to implement Sequential Workflows, User Specific Views, and up to date Adaptive Cards in bots. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-sequential-flow-adaptive-cards/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-sequential-flow-adaptive-cards/nodejs) |
+ ## See also * [Work with Universal Actions for Adaptive Cards](Work-with-universal-actions-for-adaptive-cards.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
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:
+Universal Actions for Adaptive Cards provide a way to implement Adaptive Card based scenarios for both, Teams and Outlook. This document covers the following topics:
* [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
+## Quick start guide to use 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.
+2. Add a `refresh` clause to your Adaptive Card, if you want to use 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.
+4. Use the invoke request's context to respond back with cards that are 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.
+Universal Actions for Adaptive Cards are 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.
For more information, see [refresh schema and properties](/adaptive-cards/author
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.
+* UserIds is an array of user MRIs, 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*.
+* 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. 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](/microsoftteams/platform/bots/how-to/get-teams-context?tabs=dotnet#fetch-the-roster-or-user-profile).
+* You can fetch Teams conversation member's user MRIs. For more information on how to add in userIds list in refresh section of Adaptive Card, see [fetch roster or user profile](/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`
Next, you can apply backward compatibility to older clients across different pla
## Backward compatibility
-Universal Actions for Adaptive Cards allows you to set properties that enable backward compatibility with older versions of Outlook and Teams.
+Universal Actions for Adaptive Cards allow 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 T
For more information, see [backward compatibility on Teams](/adaptive-cards/authoring-cards/universal-action-model#teams).
-## Code sample
+## Code samples
-|Sample name | Description | .NETCore |
-|-|--|--|
-| Teams catering bot | Create a simple bot that accepts food order using Adaptive Cards. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-catering/csharp)|
+|Sample name | Description | .NETCore | Node.js |
+|-|--|--|--|
+| Teams catering bot | Create a bot that accepts food order using Adaptive Cards. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-teams-catering/csharp)| Not yet available |
+| Sequential Workflows Adaptive Cards | Demonstrate how to implement Sequential Workflows, User Specific Views, and up to date Adaptive Cards in bots. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-sequential-flow-adaptive-cards/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-sequential-flow-adaptive-cards/nodejs) |
## See also