Updates from: 04/30/2022 01:26:42
Service Microsoft Docs article Related commit history on GitHub Change details
platform Calls Meetings Bots Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/calls-and-meetings/calls-meetings-bots-overview.md
Real-time media refers to scenarios where media must be processed in real-time,
* [Technical information on handling incoming call notifications](./call-notifications.md) * [Set up an auto attendant](/microsoftteams/create-a-phone-system-auto-attendant) * [Set up auto answer for Microsoft Teams Rooms on Android and Teams video phone devices](/microsoftteams/set-up-auto-answer-on-teams-android)
-* [Teams recording policy](/MicrosoftTeams/teams-recording-policy)
+* [Teams recording policy](/MicrosoftTeams/teams-recording-policy)
+* [Work with communications API in Microsoft Graph](/graph/api/resources/communications-api-overview?view=graph-rest-beta&preserve-view=true)
platform Create A Bot Commands Menu https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/create-a-bot-commands-menu.md
A prerequisite to create a command menu for your bot is that you must edit an ex
1. Open Teams and select **Apps** from the left pane. In the **Apps** page, search for **App Studio**, and select **Open**. > [!NOTE]
- > If you do not have **App Studio**, you can download it. For more information, see [installing App Studio](~/concepts/build-and-test/app-studio-overview.md#installing-app-studio).
+ > If you don't have **App Studio**, you can download it. For more information, see [installing App Studio](~/concepts/build-and-test/app-studio-overview.md#installing-app-studio).
- :::image type="content" source="/media/AppStudio.png" alt-text="Installing app studio"lightbox="media/AppStudio.png"border="true":::
+ > If you have been using App Studio, we recommend that you'd try the Developer Portal to configure, distribute, and manage your Teams apps. App Studio will be deprecated by June 30, 2022
+
+ :::image type="content" source="/media/AppStudio.png" alt-text="Installing app studio"lightbox="media/AppStudio.png"border="true":::
2. In **App Studio**, select the **Manifest editor** tab. If you do not have an existing app package, you can create or import an existing app. For more information, see [update an app package](~/get-started/deploy-csharp-app-studio.md).
platform App Studio Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/app-studio-overview.md
# Manage your apps with App Studio for Microsoft Teams > [!TIP]
-> **Try the Developer Portal**: App Studio has evolved. Configure, distribute, and manage your Teams apps with the new [Developer Portal](https://dev.teams.microsoft.com/).
+> **Try the Developer Portal**: App Studio has evolved. Configure, distribute, and manage your Teams apps with the new [Developer Portal](https://dev.teams.microsoft.com/). <br> App Studio will be deprecated by June 30, 2022.
App Studio makes it easy to start creating or integrating your own Microsoft Teams apps, whether you develop custom apps for your enterprise or SaaS applications for teams around the world by streamlining the creation of the manifest and package for your app and providing useful tools like the Card Editor and a React control library.
platform Debug https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/debug.md
To use ngrok in your project based on the capabilities you are using, you must r
For bots registered in the Microsoft Bot Framework, update the bot's messaging endpoint to use this new ngrok endpoint. For example, `https://2d1224fb.ngrok.io/api/messages`. You can validate that ngrok is working by testing the bot response in the Bot Framework portal's Test chat window. Again, like the emulator, this test does not permit you to access Teams-specific functionality. > [!NOTE]
-> To update the messaging endpoint for a bot, you must use the Bot Framework. Select your bot in [your list of bots in Bot Framework](https://dev.botframework.com/bots). You do not need to migrate your bot to Microsoft Azure. You can also update your messaging endpoint through [App Studio](~/concepts/build-and-test/app-studio-overview.md).
+> * To update the messaging endpoint for a bot, you must use the Bot Framework. Select your bot in [your list of bots in Bot Framework](https://dev.botframework.com/bots). You do not need to migrate your bot to Microsoft Azure. You can also update your messaging endpoint through [App Studio](~/concepts/build-and-test/app-studio-overview.md).
+> * If you have been using App Studio, we recommend that you'd try the Developer Portal to configure, distribute, and manage your Teams apps. App Studio will be deprecated by June 30, 2022
## Cloud-hosted
platform Deep Links https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-links.md
Title: Create deep links
-description: Describes deep links and how to use them in your apps
+description: Learn how to describe Teams deep links and how to use them in your apps.
ms.localizationpriority: high
-keywords: teams deep link deeplink
# Create deep links
Use the following format for a deep link that you can use in a bot, connector, o
> [!NOTE] > If the bot sends a message containing a `TextBlock` with a deep link, then a new browser tab is opened when the user selects the link. This happens in Chrome and in the Microsoft Teams desktop app, both running on Linux.
-> If the bot sends the same deep link URL into an `Action.OpenUrl`, then the Teams tab is opened in the current browser tab when the user selects the link. A new browser tab is not opened.
+> If the bot sends the same deep link URL into an `Action.OpenUrl`, then the Teams tab is opened in the current browser tab when the user selects the link. A new browser tab isn't opened.
<! TBD: Edit this article. * Admonitions/alerts seem to be overused.
Use the following format for a deep link that you can use in a bot, connector, o
* Example values and some URLs should be in backticks and not emphasized. * Codeblock are missing language. * Check for markdownlint errors.
-* Table with just a row is not really needed. Provide the content without tabulating it.
+* Table with just a row isn't really needed. Provide the content without tabulating it.
> The query parameters are:
The query parameters are:
| `entityWebUrl` or `subEntityWebUrl`&emsp; | An optional field with a fallback URL to use if the client doesn't support rendering the tab. | `https://tasklist.example.com/123` or `https://tasklist.example.com/list123/task456` | | `entityLabel` or `subEntityLabel`&emsp; | A label for the item in your tab, to use when displaying the deep link. | Task List 123 or "Task 456 | | `context.subEntityId`&emsp; | An ID for the item within the tab. |Task456 |
-| `context.channelId`&emsp; | Microsoft Teams channel ID that is available from the tab [context](~/tabs/how-to/access-teams-context.md). This property is only available in configurable tabs with a scope of **team**. It is not available in static tabs, which have a scope of **personal**.| 19:cbe3683f25094106b826c9cada3afbe0@thread.skype |
+| `context.channelId`&emsp; | Microsoft Teams channel ID that is available from the tab [context](~/tabs/how-to/access-teams-context.md). This property is only available in configurable tabs with a scope of **team**. It isn't available in static tabs, which have a scope of **personal**.| 19:cbe3683f25094106b826c9cada3afbe0@thread.skype |
| `chatId`&emsp; | ChatId that is available from the tab [context](~/tabs/how-to/access-teams-context.md) for group and meeting chat | 17:b42de192376346a7906a7dd5cb84b673@thread.v2 | | `contextType`&emsp; | Chat is the only supported contextType for meetings | chat |
Example: `https://teams.microsoft.com/l/chat/0/0?users=joe@contoso.com,bob@conto
The query parameters are: * `users`: The comma-separated list of user IDs representing the participants of the chat. The user that performs the action is always included as a participant. Currently, the User ID field supports the Microsoft Azure Active Directory (Azure AD) UserPrincipalName, such as an email address only.
-* `topicName`: An optional field for chat's display name, in the case of a chat with 3 or more users. If this field is not specified, the chat's display name is based on the names of the participants.
+* `topicName`: An optional field for chat's display name, in the case of a chat with three or more users. If this field isn't specified, the chat's display name is based on the names of the participants.
* `message`: An optional field for the message text that you want to insert into the current user's compose box while the chat is in a draft state. To use this deep link with your bot, specify this as the URL target in your card's button or tap action through the `openUrl` action type.
+## Generate deep links to channel conversation
+
+Use this deep link format to navigate to a particular conversation within channel thread:
+
+`https://teams.microsoft.com/l/message/<channelId>/<parentMessageId>?tenantId=<tenantId>&groupId=<groupId>&parentMessageId=<parentMessageId>&teamName=<teamName>&channelName=<channelName>&createdTime=<createdTime>`
+
+Example: `https://teams.microsoft.com/l/message/<channelId>/1648741500652?tenantId=<tenantId>&groupId=<groupId>&parentMessageId=1648741500652&teamName=<teamName>&channelName=<channelName>&createdTime=1648741500652`
+
+The query parameters are:
+
+* `channelId`: Channel ID of the conversation. For example `19:3997a8734ee5432bb9cdedb7c432ae7d@thread.tacv2`.
+* `tenantId`: Tenant ID such as `0d9b645f-597b-41f0-a2a3-ef103fbd91bb`.
+* `groupId`: Group ID of the file. For example `3606f714-ec2e-41b3-9ad1-6afb331bd35d`.
+* `parentMessageId`: Parent message Id of the conversation.
+* `teamName`: Name of the team.
+* `channelName`: Name of the team's channel.
+
+> [!NOTE]
+> You can see `channelId` and `groupId` in the URL from the channel.
+ ## Generate deep links to file in channel The following deep link format can be used in a bot, connector, or message extension card:
The following deep link format is used in a bot, connector, or message extension
`https://teams.microsoft.com/l/file/<fileId>?tenantId=<tenantId>&fileType=<fileType>&objectURL=<objectURL>&baseUrl=<baseURL>&serviceName=<Name>&threadId=<threadId>&groupId=<groupId>`
-The following example format illustrates the deeplink to files:
+The following example format illustrates the deep link to files:
`https://teams.microsoft.com/l/file/5E0154FC-F2B4-4DA5-8CDA-F096E72C0A80?tenantId=0d9b645f-597b-41f0-a2a3-ef103fbd91bb&fileType=pptx&objectUrl=https%3A%2F%2Fmicrosoft.sharepoint.com%2Fteams%2FActionPlatform%2FShared%20Documents%2FFC7-%20Bot%20and%20Action%20Infra%2FKaizala%20Actions%20in%20Adaptive%20Cards%20-%20Deck.pptx&baseUrl=https%3A%2F%2Fmicrosoft.sharepoint.com%2Fteams%2FActionPlatform&serviceName=teams&threadId=19:f8fbfc4d89e24ef5b3b8692538cebeb7@thread.skype&groupId=ae063b79-5315-4ddb-ba70-27328ba6c31e`
The query parameters are:
* `appID`: Your manifest ID, for example `fe4a8eba-2a31-4737-8e33-e5fae6fee194`. * `entityID`: The item ID that you provided when [configuring the tab](~/tabs/how-to/create-tab-pages/configuration-page.md). For example, `tasklist123`.
-* `entityWebUrl`: An optional field with a fallback URL to use if the client does not support rendering of the tab - `https://tasklist.example.com/123` or `https://tasklist.example.com/list123/task456`.
+* `entityWebUrl`: An optional field with a fallback URL to use if the client doesn't support rendering of the tab - `https://tasklist.example.com/123` or `https://tasklist.example.com/list123/task456`.
* `entityName`: A label for the item in your tab, to use when displaying the deep link, Task List 123 or Task 456. Example: `https://teams.microsoft.com/l/entity/fe4a8eba-2a31-4737-8e33-e5fae6fee194/tasklist123?webUrl=https://tasklist.example.com/123&TaskList`
The query parameters are:
* `content`: An optional field for the meeting details field. > [!NOTE]
-> Currently, specifying the location is not supported. You must specify the UTC offset, it means time zones when generating your start and end times.
+> Currently, specifying the location isn't supported. You must specify the UTC offset, it means time zones when generating your start and end times.
To use this deep link with your bot, you can specify this as the URL target in your card's button or tap action through the `openUrl` action type.
platform Submission Checklist https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/submission-checklist.md
Before you submit your app to [Partner Center](/office/dev/store/use-partner-cen
While your app may be working in a test environment, you should check your app package to avoid running into issues during the submission process. > [!NOTE]
-> App Studio will soon be deprecated. Configure, distribute, and manage your Teams apps with the new [Developer Portal](https://dev.teams.microsoft.com/)
+ > If you have been using App Studio, we recommend that you'd try the Developer Portal[Developer Portal](https://dev.teams.microsoft.com/) to configure, distribute, and manage your Teams apps. App Studio will be deprecated by June 30, 2022.
The Microsoft Teams app validation tool helps you identify and fix issues before submitting to Partner Center. The tool automatically checks your app's configurations against the same test cases used during store validation.
platform Teams Store Validation Guidelines https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md
Following these guidelines increases the chances of your app to pass the Microso
> * Certain guidelines are marked as *Mandatory Fix*. If your app submission doesn't meet these mandatory guidelines, you'll receive a failure report from us with steps to mitigate. Your app submission will pass Microsoft Teams store Validation only after you have fixed the issues. > * Other guidelines are marked as *Suggested Fix*. For an ideal user experience, we suggest that you fix the issues, however, your app submission will not be blocked from publishing on the Teams store, if you choose not to fix the issues.
+ :::column:::
+ :::image type="content" source="../../../../assets/icons/value-proposition.png" alt-text="value-proposition-teams" link="#value-proposition" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/security.png" alt-text="security-store" link="#security" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/function.png" alt-text="functionality" link="#general-functionality-and-performance" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/package.png" alt-text="app-package" link="#app-package-and-store-listing" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/saas-offer.PNG" alt-text="saas" link="#apps-linked-to-saas-offer" border="false":::
+ :::column-end:::
+
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/tab.png" alt-text="tab-teams" link="#tabs" border="false":::
+ :::column-end:::
+ :::column:::
+ :::image type="content" source="../../../../assets/icons/bot.png" alt-text="bot-teams" link="#bots-1" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/messaging-extension.png" alt-text="messaging" link="#message-extensions" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/task-module.png" alt-text="task-module-teams" link="#task-modules" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/meeting.png" alt-text="meeting-extension" link="#meeting-extensions" border="false":::
+ :::column-end:::
+
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/empty.png" alt-text="empty-2" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/notifications.png" alt-text="teams-notification" link="#notifications" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/microsoft-365.png" alt-text="microsoft" link="#microsoft-365-app-compliance-program" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/advertising.png" alt-text="advertising-teams" link="#advertising" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="content" source="../../../../assets/icons/empty.png" alt-text="empty-1" border="false":::
+ :::column-end:::
+ ## Value proposition :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial certification policy number 1140.1](/legal/marketplace/certification-policies#11401-value-proposition-and-offer-requirements) and provides additional guidance to developers of Microsoft Teams apps on their offerΓÇÖs value proposition.
Following these guidelines increases the chances of your app to pass the Microso
[*Mandatory Fix*] :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with Microsoft [commercial certification policy number 1140.1.1](/legal/marketplace/certification-policies#114011-app-name) and provides additional guidance to developers on naming their apps.
+<br></br>
+<details><summary>Expand to know more</summary>
An app's name plays a critical role in how users discover it in the store. Use the following guidelines to name an app:
An app's name plays a critical role in how users discover it in the store. Use t
> [!TIP] > Your appΓÇÖs branding on the Microsoft Teams store and Microsoft AppSource including your app name, developer name, app icon, Microsoft AppSource screenshots, video, short description and website either separately or taken together must not impersonate an official Microsoft offering unless your app is an official Microsoft 1P offering.
+</details>
+ ### Suitable for workplace consumption [*Mandatory Fix*] :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with Microsoft commercial certification policy number [1140.1.2](/legal/marketplace/certification-policies#114012-workplace-appropriateness), [100.8](/legal/marketplace/certification-policies#1008-significant-value), and [100.10](/legal/marketplace/certification-policies#10010-inappropriate-content) and provides additional guidance to developers on building workplace appropriate apps.
+<br></br>
+<details><summary>Expand to know more</summary>
App content must be suitable for general workplace consumption and follow all restrictions listed in the commercial marketplace certification policies. Content related to religion, politics, gambling, and prolonged entertainment is prohibited. Your app must enable group collaboration, improve an individual's productivity, or both. Apps intended for team bonding and socializing must be collaborative and designed for multiple participants. The apps must not require a substantial time investment of over 60 mins per session or affect productivity.
+</details>
+ ### Similar platforms and services [*Mandatory Fix*]
App feature names in buttons and other UI text must not duplicate with terminolo
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial certification policy number 1140.1.4](/legal/marketplace/certification-policies#114014-access-to-services) and provides guidance to developers on authenticating their apps with external services. For more information on how to implement app authentication, see [authentication in Teams](~/concepts/authentication/authentication.md).
+<br></br>
+<details><summary>Expand to know more</summary>
#### Authenticating with external services
If your app authenticates users with an external service, follow these guideline
* **Content sharing experiences**: Apps that require authentication with an external service to share content in Teams channels must clearly state in the help documentation (or similar resources) on how to disconnect or unshare content if that feature is supported on the external service. This doesn't mean the ability to un share content must be present in your Teams app.
-## Security
+</details>
+## Security
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial certification policy number 1140.3](/legal/marketplace/certification-policies#11403-security).
If your app authenticates users with an external service, follow these guideline
[*Mandatory Fix*] :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial certification policy number 1140.3.1](/legal/marketplace/certification-policies#114031-financial-transactions) and provides guidance on transmission of financial information within the Teams interface and notifies developers of restricted payment scenarios on the mobile (Android and iOS) version of their Teams app.
+<br></br>
+<details><summary>Expand to know more</summary>
-Apps must not ask users to make payments within the Teams interface and transmit financial information to users through a bot interface.
+Apps must not ask users to make payments within the Teams interface and transmit financial information to users through a bot interface.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![In App Payments](~/assets/images/submission/validation-financial-information-1.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
You may provide link to secure external payment services only if you disclose it in your terms of use, privacy policy, profile page, or website before the user agrees to use the app.
Apps running on the iOS or Android version of Teams must adhere to the following
* Apps must not include in-app purchases, trial offers, or UI that aims to upsell users to paid versions or online stores to purchase other content, apps, or add-ins.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![In-app Purchases](~/assets/images/submission/validation-financial-information-in-app-purchase.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-financial-information-in-app-purchase.png" alt-text="validation-financial-info-in-app-purchase":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Online Stores](~/assets/images/submission/validation-financial-information-online-stores.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-financial-information-online-stores.png" alt-text="validation-online-store":::
* If your app requires an account, users can sign up for an account at no charge. The use of the term **free** or **free account** is prohibited. * You can determine whether an account is active indefinitely or for a limited time. When the account expires the app must not show UI, text, or links indicating the need to pay. * Your app's privacy policy and terms of use must be free of any commerce-related UI or links.
+</details>
+ ### Bots [*Mandatory Fix*] :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.3.2](/legal/marketplace/certification-policies#114032-bots-and-messaging-extension).
+<br></br>
+<details><summary>Expand to know more</summary>
For apps that use the Microsoft Azure Bot Service (such as bots and message extensions), you must follow all requirements defined in the Microsoft [Online Services Terms](https://www.microsoftvolumelicensing.com/DocumentSearch.aspx?Mode=3&DocumentTypeId=46). Bots must always ask permission to upload a file and display a confirmation message.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Confirmation Message](~/assets/images/submission/validation-bot-confirmation-message.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+
+</details>
### External domains [*Mandatory Fix*] :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.3.3](/legal/marketplace/certification-policies#114033-external-domains) and provides developer guidance on usage of restricted domains in the `validDomains` manifest property.
+<br></br>
+<details><summary>Expand to know more</summary>
Don't include domains outside of your organization's control (including wildcards) and tunneling services in your app's domain configurations. The following exceptions include:
Don't include domains outside of your organization's control (including wildcard
To distribute your app to Government Community Cloud (GCC) users, the authentication process must identify and route users to a GCC-specific or expected URL while avoiding duplicate listings in the Teams store.
+</details>
+ ### Sensitive content [*Mandatory Fix*]
App must warn users before downloading any files or executables (.exe) into the
[*Mandatory Fix*] Apps must not take users out of Teams for core user scenarios. App content and interactions must occur within Teams capabilities, such as bots, Adaptive Cards, tabs, and task modules.
+<br></br>
+<details><summary>Expand to know more</summary>
Link users within Teams app and not to an external site or app. For scenarios that require external functionality, your app must take explicit user permission to launch the functionality. Button UI text that launches external functionality must include content to indicate the user is taken out of the Teams instance. For example, include text such as **This way to Contoso.com** or **View in Contoso.com**.
+</details>
+ ### Compatibility [*Mandatory Fix*]
The Teams app manifest defines your app's configuration.
[*Mandatory Fix*]
-Icons are one of the main elements people see when browsing the Teams store. Your icons must communicate your app's brand and purpose while adhering to the following requirements:
+Icons are one of the main elements people see when browsing the Teams store.
+<br></br>
+<details><summary>Expand to know more</summary>
+
+Your icons must communicate your app's brand and purpose while adhering to the following requirements:
* Your app package must include two .png versions of your app icon: A color icon and an outline icon. * The color version of your icon must be 192x192 pixels. Your icon symbol can be any color or colors, but it must sit on a solid or fully transparent square background.
Icons are one of the main elements people see when browsing the Teams store. You
For more information, see [icon guidelines](~/concepts/build-and-test/apps-package.md#app-icons).
+</details>
+ ### App descriptions You must have a short and long description of your app. The descriptions in your app configurations and Partner Center must be the same.
+<br></br>
+<details><summary>Expand to know more</summary>
Descriptions must not directly or through insinuation disparage another brand (Microsoft owned or otherwise). Ensure your description doesn't include claims that can't be substantiated. For example, **Guaranteed 200 percent increase in efficiency**.
The long description can provide an engaging narrative that highlights your app'
* Make unverified claims. For example, best, top, and ranked, unless it comes with the source of the claim. * Compare your offer with other marketplace offers.
+</details>
+ ### Screenshots
-Screenshots provide a prominent visual preview of your app to complement your app name, icon, and descriptions. Remember the following:
+Screenshots provide a prominent visual preview of your app to complement your app name, icon, and descriptions.
+<br></br>
+<details><summary>Expand to know more</summary>
+
+Remember the following:
* You can have up to five screenshots per listing. * Supported file types include PNG, JPEG, and GIF.
Screenshots provide a prominent visual preview of your app to complement your ap
> [!TIP] > A video can be the most effective way to communicate why people must use your app. A video also is the first thing users see in your listing. For more information, see [create a video for your store listing](~/concepts/deploy-and-publish/appsource/prepare/submission-checklist.md#create-a-video).
+</details>
+ ### Privacy policy [*Mandatory Fix*]
Use the following guidelines to write the Terms of use:
### Support links
+[*Mandatory Fix*]
+ Your app's support URLs must not require authentication. For example, users must not login to contact you.
+<br></br>
+<details><summary>Expand to know more</summary>
+
+Support URLs must include your contact details or a way forward for users to raise a support ticket. For example, if your support URL is hosted on GitHub, the GitHub page must be under your ownership and must include your contact details or a way forward for users to raise a support ticket.
-Support URLs must include your contact details or a way forward for users to raise a support ticket. For example, if your support URL is hosted on GitHub, the GitHub page must be under your ownership and must include your contact details or a way forward for users to raise a support ticket. [*Mandatory Fix*]
- ![Support URL](~/assets/images/submission/validation-supportlinks-authentication.png)
+</details>
### Localization
If your app supports localization, your app package must include a file with lan
## Apps linked to SaaS offer
+<br></br>
+<details><summary>General</summary>
+ * ISVs must support the ability for multiple users (Subscribers) in the same tenant to manage their own subscription and assign licenses to users in the tenant.
-*
- The offer must meet all the [technical requirements](/microsoftteams/platform/concepts/deploy-and-publish/appsource/prepare/include-saas-offer) for Teams apps linked to a SaaS offer.
+* The offer must meet all the [technical requirements](/microsoftteams/platform/concepts/deploy-and-publish/appsource/prepare/include-saas-offer) for Teams apps linked to a SaaS offer.
* The Teams apps linked to SaaS offer must meet all the requirements defined in [1000 Software as a Service (SaaS)](/legal/marketplace/certification-policies#1000-software-as-a-service-saas). * `subscriptionOffer` details mentioned in the manifest file must be correct. In your app manifest, add or update node `subscriptionOffer` with value `publisherId.offerId`. For example, if your publisher ID is `contoso1234` and your offer ID is `offer01`, the value that you specify in your app manifest must be `contoso1234.offer01`. * Linked SaaS offer to the Teams app must be live in AppSource and preview offers aren't accepted for store approval.
-### Offer metadata
+</details>
+
+</br>
+<details><summary>Offer metadata</summary>
* Offer metadata must match across the Teams manifest, the Teams app listing in AppSource, and the SaaS offer in AppSource. * Teams app and SaaS offer must be from the same publisher or developer. The SaaS offer referenced in the App manifest must belong to the same publisher as the Teams app is submitted to the commercial marketplace.
If your app supports localization, your app package must include a file with lan
* The Teams apps linked to SaaS offer are designed to support licenses assigned on a named, per-user basis. Sometimes, the SaaS offer is built with other method or has specialized purchase flows. You must clearly mention in the app metadata and subscription plan details about the method and purchase flows. * SaaS offer must provide messages and guidance to all users in all applicable states of purchase flow.
-### SaaS offer home page and license management
+</details>
+</br>
+
+<details><summary>SaaS offer home page and license management</summary>
* Provide introduction to subscribers on how to use the product. * Allow the subscriber to assign licenses.
If your app supports localization, your app package must include a file with lan
* Notify users after license assignment. * Guide users through Teams chat bot or email, on how to add the app to Teams and get started.
-### Usability and functionality
+</details>
+</br>
+
+<details><summary>Usability and functionality</summary>
* After successful purchase and assignment of licenses, you must provide the following: * Access to users for subscribed plan features. * Value addition and significant benefits of subscription plan to users. * From your Teams app, provide link to the SaaS application home page for subscribers to manage the licenses in the future.
-### Configure and test SaaS application
+</details>
+</br>
+
+<details><summary>Configure and test SaaS application</summary>
If setup of your app for testing purposes is complex, provide an end-to-end functional document, linked SaaS offer configuration steps, and instructions for license and user management as part of your "Notes for Certification". > [!TIP] > You can add a video on how your app and license management works to assist the team for testing.
+</details>
+ ## Tabs :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.4.2](/legal/marketplace/certification-policies#114042-tabs).
If your app includes a tab, ensure it adheres to these guidelines.
> [!TIP] > For more information on creating a high-quality app experience, see [Teams tab design guidelines](~/tabs/design/tabs.md).
-### Setup
+</br>
+<details><summary>Setup</summary>
* Tab setup **must not dead-end** a new user. Provide a message on how to complete the action or workflow. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Create new account](~/assets/images/submission/validation-tabs-setup-create-new-account.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-create-new-account.png" alt-text="validation-tabs-setup-create-new-acc":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Missing Forward Guidance](~/assets/images/submission/validation-tabs-missing-forward-guidance.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-tabs-missing-forward-guidance.png" alt-text="validation-tabs-missing-fwd-guidance":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![New User Signup](~/assets/images/submission/validation-tabs-setup-new-user.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-new-user.png" alt-text="validation-tabs-set-up-new-user":::
* For the best first run experience, authenticate your users during the tab setup and not after. Authentication can happen outside the tab configuration window. [*Suggested Fix*] * The user must not leave the tab configuration experience inside Teams to create content outside of Teams and then return to Teams to pin it. Tab configuration screen must explain the value of configuration and how to configure. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Acquire Profile Name](~/assets/images/submission/validation-tabs-setup-profile-name.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-profile-name.png" alt-text="validation-tabs-set-up-profile-name":::
* Tab configuration screen must not embed an entire website. Keep your configuration experience focused. For example, if you're building a project management app that lets users configure a project in a channel, keep the tab configuration screen focused on allowing the user to select a project from your app to configure in the channel. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Configuration Experience](~/assets/images/submission/validation-tabs-setup-configuration-experience.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-configuration-experience.png" alt-text="validation-tabs-setup-configuration-exp":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Configuration Screen](~/assets/images/submission/validation-tabs-setup-configuration-screen.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-configuration-screen.png" alt-text="validation-tabs-set-up-configuration-screen":::
* Tab configuration screen must not ask users to embed a URL. Asking users to configure a URL during tab setup is a broken UX, user leaves tab configuration screen, acquires URL, returns to the configuration screen and inputs the URL. A preexisting Teams feature already allows users to pin a website link in the channel. If your app asks user to embed a website URL during tab configuration and the app is limited to display the entire website content in the channel tab, your app doesn't offer significant value to the user. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Configured URL](~/assets/images/submission/validation-tabs-setup-configured-url.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-configured-url.png" alt-text="validation-tabs-set-up-configured-url":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Configured URL limited](~/assets/images/submission/validation-tabs-setup-configured-url-two.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-configured-url-two.png" alt-text="validation-tabs-set-up-configured-url-two":::
-### Views
+</details>
+</br>
+
+<details><summary>Views</summary>
* The sign in screen area must not use large logos. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![View large logo](~\assets\images\submission\validation-views-applogin.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-views-applogin.png" alt-text="validation-views-app-login":::
* Content can be simplified by breaking down across multiple tabs. [*Suggested Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Multiple Tabs](~/assets/images/submission/validation-views-multiple-tabs.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-views-multiple-tabs.png" alt-text="val-views-multiple-tabs":::
* Tabs shouldn't have a duplicate header. Remove the duplicate logo from the iframe since the tab framework already displays the app icon and name. [*Suggested Fix*]
- :::row:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Duplicate Header Logo](~/assets/images/submission/validation-views-duplicate-header-logo.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-views-duplicate-header-logo.png" alt-text="validation-views-duplicate-head-logo":::
-### Navigation
+</details>
+</br>
+
+<details><summary>Navigation</summary>
The following are the navigation guidelines:
The following are the navigation guidelines:
Design your app with [basic](~/concepts/design/design-teams-app-basic-ui-components.md) and [advanced](~\concepts\design\design-teams-app-advanced-ui-components.md) Fluent UI components.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Left navigation](~/assets/images/submission/validation-navigation-left-navigation.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Icon and Text](~/assets/images/submission/validation-navigation-icon-text.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Collapsible Left Rail](~/assets/images/submission/validation-navigation-collapsable-left-rail.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Static Tab](~/assets/images/submission/validation-navigation-static-tab.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Horizontal Rail](~/assets/images/submission/validation-navigation-horizontal-rail.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
* Tabs with toolbar in left rail must leave 20px spacing from Teams left navigation. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Spacing between Toolbar](~/assets/images/submission/validation-navigation-spacing-between-toolbar.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-navigation-spacing-between-toolbar.png" alt-text="validation-nav-spacing-between-toolbar":::
* The secondary and third pages in a tab must be opened in a level two (L2) and level three (L3) view in the main tab area, which is navigated via breadcrumbs or left navigation. You can also include the following components to aid tab navigation: [*Mandatory Fix*] * Back buttons
Design your app with [basic](~/concepts/design/design-teams-app-basic-ui-compone
* Deep links in tabs must not link to an external webpage but within Teams. For example, task modules or other tabs. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![View Button not Linked](~/assets/images/submission/validation-navigation-view-button-not-linked-static-tab.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-navigation-view-button-not-linked-static-tab.png" alt-text="validation-nav-view-button-not-linked-static-tab":::
* Tabs must not allow users to navigate outside Teams for the core app experience. Tabs can redirect outside Teams for non-core workflows. For example, to raise a support ticket. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Core Workflow within Configuration Tab](~/assets/images/submission/validation-navigation-core-workflow-within-configuration.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-navigation-core-workflow-within-configuration.png" alt-text="validation-nav-core-workflow-within-configuration":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![App Core Workflow Redirects Outside](~/assets/images/submission/validation-navigation-core-workflow-redirects-outside.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-navigation-core-workflow-redirects-outside.png" alt-text="validation-nav-core-workflow-redirects-outside":::
-### Usability
+</details>
+</br>
+
+<details><summary>Usability</summary>
* Tabs must provide value beyond hosting an existing website. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability App Provides Workflows](~/assets/images/submission/validation-usability-app-provides-workflows.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-app-provides-workflows.png" alt-text="validation-usability-app-provides-work-flows":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability Website I-Frame](~/assets/images/submission/validation-usability-website-i-framed.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-website-i-framed.png" alt-text="validation-usability-website-i-frame":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability Teams app identical](~/assets/images/submission/validation-usability-teams-app-identical-website.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-teams-app-identical-website.png" alt-text="validation-usability-teams-app-identical-websites":::
* Content must not truncate or overlap within the tab.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability Content Truncation](~/assets/images/submission/validation-usability-content-truncation.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-content-truncation.png" alt-text="validation-usability-content-truncations":::
* Users must be able to undo their last action in the tab.
Design your app with [basic](~/concepts/design/design-teams-app-basic-ui-compone
* Tabs must be responsive to Teams themes. When a user changes the theme, the app's theme must reflect the selection.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability Responsive tabs](~/assets/images/submission/validation-usability-responsive-tabs.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-responsive-tabs.png" alt-text="validation-usability-responsive-tab":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability unresponsive tabs](~/assets/images/submission/validation-usability-unresponsive-tabs.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-unresponsive-tabs.png" alt-text="validation-usability-unresponsive-tab":::
* Tabs must use Teams-styled components such as, Teams fonts, type ramps, color palettes, grid system, motion, tone of voice, and so on, whenever possible. For more information, see [tab design guidelines](/microsoftteams/platform/tabs/design/tabs). [*Suggested Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability different font](~/assets/images/submission/validation-usability-app-uses-diff-font.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-app-uses-diff-font.png" alt-text="validation-usability-app-uses-font":::
* If your app functionality requires changes in settings, include a **Settings** tab. [*Suggested Fix*] * Tabs must follow Teams interaction design such as, in-page navigation, position and use of dialogs, information hierarchies, and so on. For more information, see [Microsoft Teams Fluent UI kit](~/concepts/design/design-teams-app-basic-ui-components.md)
Design your app with [basic](~/concepts/design/design-teams-app-basic-ui-compone
* If your app requires provision of a personal scope view for the user to enhance efficiency or workplace productivity, use filtered views, deep links to personal apps, or navigate to L2 or L3 views within the configurable tab and keep the landing page contextually the same for all the users.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability Configurable tab personal Info](~/assets/images/submission/validation-usability-configurable-tab-personal-info.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-configurable-tab-personal-info.png" alt-text="validation-usability-configurable-tab-pers-info":::
* Configurable tabs must have focused functionality.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Usability Configurable Nested tabs](~/assets/images/submission/validation-usability-configurable-nested-tabs.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-usability-configurable-nested-tabs.png" alt-text="validation-usability-configurable-nested-tab":::
* Tab experiences must be fully responsive on mobile (Android and iOS).
Design your app with [basic](~/concepts/design/design-teams-app-basic-ui-compone
> * Include a personal bot alongside a personal tab. > * Allow users to share content from their personal tab.
+</details>
+ ## Bots :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.4.3](/legal/marketplace/certification-policies#114043-bots).
If your app includes a bot, ensure it adheres to these guidelines.
> [!TIP] > For more information on creating a high-quality app experience, see [Teams bot design guidelines](~/bots/design/bots.md).
-### Bot commands
+</br>
+<details><summary>Bot commands</summary>
Analyzing user input and predicting user intent is difficult. Bot commands provide users a set of words or phrases for your bot to understand. * Listing supported bot commands in your app configurations is highly recommended. These commands display in the compose box when a user tries to message your bot.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Commands Listed](~/assets/images/submission/validation-bot-commands-listed.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
-
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Commands not Listed](~/assets/images/submission/validation-bot-commands-not-listed.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-commands-listed.png" alt-text="validation-bot-commands-list":::
+
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-commands-not-listed.png" alt-text="validation-bot-commands-not-list":::
* All commands that your bot supports must work correctly, including generic commands such as **Hi**, **Hello**, and **Help**.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Help Command](~/assets/images/submission/validation-bot-help-command.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-help-command.png" alt-text="validation-bots-help-command":::
* Bot commands must not lead a user to a dead end, the commands must always provide a way forward.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Command Dead](~/assets/images/submission/validation-bot-commands-deadend.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-commands-deadend.png" alt-text="validation-bot-commands-dead-end":::
> [!TIP] > For personal bots, include a **Help** tab that further describes what your bot can do.
-### Bot welcome messages
+</details>
+</br>
-* If the app has a complex configuration flow (requires an enterprise license or lacks an intuitive sign up flow), then bots in such apps must always send a welcome message during the first run. For best experience, the welcome message must include the value offered by the bot to users, who installed the bot in channel, how to configure the bot and briefly describe all supported bot commands. You can display the welcome message using an Adaptive Card with buttons for better usability. For more information, see [how to trigger a bot welcome message](~/bots/how-to/conversations/send-proactive-messages.md). For apps without a complex configuration flow, you can choose to trigger a welcome message during the bot first run experience. However, if a welcome message is triggered, it must follow the welcome message guidelines.
+<details><summary>Bot welcome messages</summary>
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Welcome Message](~/assets/images/submission/validation-bot-welcome-message.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+* If the app has a complex configuration flow (requires an enterprise license or lacks an intuitive sign up flow), then bots in such apps must always send a welcome message during the first run.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot No Welcome Message](~/assets/images/submission/validation-bot-no-welcome-message.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+For best experience, the welcome message must include the value offered by the bot to users, who installed the bot in channel, how to configure the bot and briefly describe all supported bot commands. You can display the welcome message using an Adaptive Card with buttons for better usability. For more information, see [how to trigger a bot welcome message](~/bots/how-to/conversations/send-proactive-messages.md). For apps without a complex configuration flow, you can choose to trigger a welcome message during the bot first run experience. However, if a welcome message is triggered, it must follow the welcome message guidelines.
-* Bot welcome messages in channels and chats are optional during first run, especially if the bot is available for personal use and performs similar actions. Your bot must not send welcome messages to users individually (it's considered [spamming](#bot-message-spamming)). The message must also mention the person who added the bot.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Welcome Message Not Triggered](~/assets/images/submission/validation-bot-welcome-message-not-triggered.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Welcome Message Triggered](~/assets/images/submission/validation-bot-welcome-message-triggered.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+* Bot welcome messages in channels and chats are optional during first run, especially if the bot is available for personal use and performs similar actions. Your bot must not send welcome messages to users individually (it's considered [spamming](#botmessagespamming)). The message must also mention the person who added the bot.
+
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-welcome-message-not-triggered.png" alt-text="validation-bot-welcome-message-not-trigger":::
+
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-welcome-message-triggered.png" alt-text="validation-bot-wel-message-trigger":::
> [!TIP] > In welcome messages to individual users, a carousel tour can provide an effective overview of your bot and any other app features to encourage users to try bot commands. For example, **Create a task**.
-### Bot message spamming
+</details>
+</br>
+
+<details><summary><a id="botmessagespamming">Bot message spamming</a></summary>
Bots must not spam users by sending multiple messages in short duration. * **Bot messages in channels and chats**: Don't spam users by creating separate posts. Create a single post with replies in the same thread.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Spamming One Message](~/assets/images/submission/validation-bot-message-spamming-one-message.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-message-spamming-one-message.png" alt-text="validation-bot-message-spam-one-message":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Spamming Multiple Message](~/assets/images/submission/validation-bot-message-spamming-multiple-messages.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-message-spamming-multiple-messages.png" alt-text="validation-bot-message-spam-multiple-message":::
* **Bot messages in personal apps**: * Don't send multiple messages in quick duration.
Bots must not spam users by sending multiple messages in short duration.
* Use a form (or task module) to collect all inputs from a user at one time. * NLP based conversational chatbots can use multi turn conversation to make the discussion more engaging and complete a workflow.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Using task Module](~/assets/images/submission/validation-bot-messages-using-task-module.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-messages-using-task-module.png" alt-text="validation-bot-message-using-task-module":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Using Multiple Conversation](~/assets/images/submission/validation-bot-messages-using-mutliple-conversation.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-bot-messages-using-mutliple-conversation.png" alt-text="validation-bot-messages-using-mutliple-conversations":::
* **Welcome messages**: Don't repeat the same welcome message over regular intervals. For example, when a new member is added to a team, don't spam the other members with a welcome message. Message the new member personally.
-### Bot notifications
+</details>
+</br>
+
+<details><summary>Bot notifications</summary>
Bot notifications must include content relevant for the scope you define for the bot (team, chat, or personal).
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Notification Relevant](~/assets/images/submission/validation-bot-notifications-relevant.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Notification not relevant](~/assets/images/submission/validation-bot-notifications-not-relevant.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
-### Bots and Adaptive Cards
+</details>
+</br>
+<details><summary>Bots and Adaptive Cards</summary>
Adaptive Cards are a highly recommended way to display bot messages. The cards must be lightweight and only include up to six actions. To display more content, consider using a task module or tab.
For more information about cards, see:
Bot experience must be fully responsive on mobile. Bot responses must provide a way forward where applicable. Bot musts be responsive and fail with a graceful error message for failures. Bot messages sent in the personal scope to user's base on triggers in a collaborative scope must provide contextual information (including the messageΓÇÖs origin).
-### Notification only bots
+</details>
+</br>
+
+<details><summary>Notification only bots</summary>
Apps that consist of notification only bots provide user value by triggering user notifications based on certain triggers or events in the core app or backend. For example, a new sales lead or prospect is added for the sales team to follow up on. A high-quality notification only bot notifies the users regularly on certain event completions such as workflow completions or alerts.
A notification provides value in Teams if:
Apps that provide only notifications with content such as **You have a new notification, click to view**, and require user to navigate outside of Teams for everything else don't provide significant value within Teams.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot inadequete information](~/assets/images/submission/validation-bot-notification-only-inadequete-info.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Bot Adequete information](~/assets/images/submission/validation-bot-notification-only-adequete-info.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ > [!TIP] > Preview information and provide basic inline user actions in the posted card so that the user is not required to navigate outside Teams for all actions (irrespective of complexity).
+</details>
+ ## Message extensions :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.4.4](/legal/marketplace/certification-policies#114044-messaging-extensions).
If your app includes a message extension, ensure it adheres to these guidelines.
> [!TIP] > For more information on creating a high-quality app experience, see the [Teams message extension design guidelines](~/messaging-extensions/design/messaging-extension-design.md).
-### Action commands
+</br>
+<details><summary>Action commands</summary>
Action-based message extensions must do the following: * Allow users to trigger actions on a message without completing intermediate steps, such as sign in.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![No Intermediate Step ](~/assets/images/submission/validation-messaging-extension-no-intermediate-step.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-no-intermediate-step.png" alt-text="validation-messaging-extension-no-intermediate-steps":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Intermediate Step Available](~/assets/images/submission/validation-messaging-extension-intermediate-step-available.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-intermediate-step-available.png" alt-text="validation-messaging-extension-intermediate-steps-available":::
* Pass the message context to the next work state. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![App Passes Message](~/assets/images/submission/validation-messaging-extension-app-passes-message.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-app-passes-message.png" alt-text="validation-messaging-extension-app-passes-messages":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![App doesn't Pass Message](~/assets/images/submission/validation-messaging-extension-app-doesnot-pass-message.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-app-doesnot-pass-message.png" alt-text="validation-messaging-extension-app-doesnot-pass-messages":::
* Incorporate the host app name instead of a generic verb for action commands triggered from a chat message, channel post, or call to action within apps. For example, use **Start a Skype Meeting** for **Start Meeting**, **Upload file to DocuSign** for **Upload file**, and so on. [*Suggested Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Action Command Host name](~/assets/images/submission/validation-messaging-extension-action-command-host-name.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-action-command-host-name.png" alt-text="validation-messaging-extension-action-command-host-names":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Action Command verb](~/assets/images/submission/validation-messaging-extension-action-command-verb.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-action-command-verb.png" alt-text="validation-messaging-extension-action-commands-verb":::
+
+</details>
+</br>
-### Preview links (link unfurling)
+<details><summary>Preview links (link unfurling)</summary>
+
+[*Mandatory Fix*]
Message extensions must preview recognized links in the Teams compose box. Don't add domains that are outside your control (either absolute URLs or wildcards). For example, `yourapp.onmicrosoft.com` is valid but `*.onmicrosoft.com` isn't valid. Top-level domains also are prohibited. For example, `*.com` or `*.org`. [*Mandatory Fix*]
-### Search commands
+</details>
+</br>
+
+<details><summary>Search commands</summary>
* Search based message extensions must provide text that helps the users to search effectively. [*Mandatory Fix*]
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Help Text available](~/assets/images/submission/validation-search-commands-text-available.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-search-commands-text-available.png" alt-text="validation-search-command-text-available":::
* @mention executables must be clear, easy to understand, and readable.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Search Command Unclear Excecutable](~/assets/images/submission/validation-search-command-unclear-executable.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-search-command-unclear-executable.png" alt-text="validation-search-commands-unclear-executable":::
-### Search based message extension only apps
+</details>
+</br>
+
+<details><summary>Action commands</summary>Search based message extension only apps
[*Mandatory Fix*]
To pass validation for a search-based message extension only app, the following
1. Posted card provides adequate details requiring no further user action. 1. Posted card provides adequate preview information for a user to take action or decide to view further details in a link opening outside Teams.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Search based messaging inadequate](~/assets/images/submission/validation-search-based-messaging-ext-inadequete-info.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-search-based-messaging-ext-adequete-info.png" alt-text="validation-search-base-messaging-ext-adequete-info":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Search based messaging adequete](~/assets/images/submission/validation-search-based-messaging-ext-adequete-info.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-search-based-messaging-ext-inadequete-info.png" alt-text="validation-search-base-messaging-ext-inadequete-info":::
Link unfurling only apps don't provide significant value within Teams. Consider building additional workflows in your app, if your app only supports link unfurling and has no other functionality.
+</details>
+ ## Task modules
+[*Mandatory Fix*]
+ :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.4.5](/legal/marketplace/certification-policies#114045-task-modules).
+<br></br>
+<details><summary>Expand to know more</summary>
-A task module must include an icon and the short name of the app it's associated with. Task modules must not embed an entire app and only display the components required to complete a specific action. [*Mandatory Fix*]
+A task module must include an icon and the short name of the app it's associated with. Task modules must not embed an entire app and only display the components required to complete a specific action.
For more information, see [Teams task module design guidelines](~\task-modules-and-cards\task-modules\design-teams-task-modules.md).
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Task module Displays Components](~/assets/images/submission/validation-task-module-displays-components.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Task Module Embeds app](~/assets/images/submission/validation-task-module-embeds-app.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
> [!TIP] > For more information on creating a high-quality app experience, see [Teams task module design guidelines](~/task-modules-and-cards/task-modules/design-teams-task-modules.md).
+</details>
+ ## Meeting extensions :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.4.6](/legal/marketplace/certification-policies#114046-meeting-extensions). > [!TIP] > For more information on creating a high-quality app experience, see the [Teams meeting extension design guidelines](~/apps-in-teams-meetings/design/designing-apps-in-meetings.md).
+</br>
+<details><summary>General</summary>
+ Use the following guidelines for meeting extensions: * Meeting extensibility apps must offer a responsive in-meeting experience and aligned to the Teams meeting experience. In-meeting experience is mandatory, pre and post-meeting experiences aren't mandatory.
Use the following guidelines for meeting extensions:
> [!TIP] > You must declare `groupchat` as a scope under `configurableTabs` and `meetingDetailsTab`, or `meetingChatTab` and `meetingSidePanel` as a context property in the manifest to enable your app for meetings on Teams mobile.
-### Pre and post meeting experience
+</details>
+
+</br>
+<details><summary>Pre and post meeting experience</summary>
* Pre and post meeting screens must adhere to general tab design guidelines. For more information, see [Teams design guidelines](~/tabs/design/tabs.md). * Tabs must not have horizontal scrolling. * Tabs must have an organized layout when displaying multiple items. For example, more than 10 polls or surveys, see [example layout](~/apps-in-teams-meetings/design/designing-apps-in-meetings.md#after-a-meeting). * Your app must notify users when the results of a survey or poll are exported by stating, **Results successfully downloaded**.
-### In-meeting experience
+</details>
+
+</br>
+<details><summary>In-meeting experience</summary>
* Apps must only use a dark theme during meetings. For more information, see [Teams design guidelines](~/apps-in-teams-meetings/design/designing-apps-in-meetings.md#theming). * A tooltip must display the app name when hovering over the app icon during meetings.
- :::row:::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Tooltip Display app name](~/assets/images/submission/validation-in-meeting-exp-display-app-name.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-in-meeting-exp-display-app-name.png" alt-text="validation-in-meeting-exp-display-app-names":::
* Message extensions must function the same during meetings as they do outside meetings.
-### In-meeting tabs
+</details>
+
+</br>
+<details><summary>In-meeting tabs</summary>
* Must be responsive. * Must maintain padding and component sizes. * Must have a back button if there's more than one layer of navigation.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![In-meeting Back Button Available](~/assets/images/submission/validation-in-meeting-exp-back-button.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-in-meeting-exp-back-button.png" alt-text="validation-in-meeting-exp-back-buttons":::
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![In-meeting Back Button Absent](~/assets/images/submission/validation-in-meeting-exp-back-button-absent.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-in-meeting-exp-back-button-absent.png" alt-text="validation-in-meeting-exp-back-buttons-absent":::
* Must not include more than one close button. It may confuse users since there's already a built-in header button to dismiss the tab. * Must not have horizontal scrolling.
-### In-meeting dialogs
+</details>
+
+</br>
+<details><summary>In-meeting dialogs</summary>
* Must be used sparingly and for scenarios that are light and task oriented. * Must display content in a single column and not have multiple navigation levels. * Must not use task modules. * Must align with the center of the meeting stage.
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![In-meeting dialog not aligned](~/assets/images/submission/validation-in-meeting-dialog-not-aligned.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-in-meeting-dialog-not-aligned.png" alt-text="validation-in-meeting-dialog-not-align":::
* Must be dismissed after a user selects a button or performs an action.
Use the following guidelines for meeting extensions:
* The maximum size of each image is 5 MB. A scene is a collection of multiple images. The limit is for each individual image. * Select **Transparent** as required. This checkbox is available on the right panel when an image is selected. The overlapping images must be marked as Transparent to indicate that they're overlapping images in the scene.
+</details>
+ ## Notifications :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.4.7](/legal/marketplace/certification-policies#114047-notification-apis). If your app uses the [activity feed APIs provided by Microsoft Graph](/graph/teams-send-activityfeednotifications), ensure it adheres to the following guidelines.-
-### General
+<br></br>
+<details><summary>General</summary>
* All the notification triggers specified in your app configuration must work. * Notifications must be localized per the supported languages configured for your app. * Notifications must display within five seconds of user action.
-### Avatars
+</details>
+</br>
+<details><summary>Avatars</summary>
* The notification avatar must match your app's color icon. * Notifications triggered by a user must include the user's avatar.
-### Spamming
+</details>
+</br>
+<details><summary>Spamming</summary>
* Apps must not send more than 10 notifications per minute to a user. * Bots and the activity feed must not trigger duplicate notifications. * Notifications must provide some value to users and not be used for trivial or irrelevant events.
-### Navigation and layout
+</details>
+</br>
+<details><summary>Navigation and layout</summary>
* Notifications must adhere to the Teams activity feed layout and experience. * When selecting a notification, the user must be directed to relevant content within Teams.
+</details>
+ ## Microsoft 365 App Compliance Program :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is inline with [Microsoft commercial marketplace policy number 1140.6](/legal/marketplace/certification-policies#11406-publisher-attestation).
+<br></br>
+<details><summary>Expand to know more</summary>
The Microsoft 365 App Compliance Program is intended to help organizations assess and manage risk by evaluating security and compliance information about your app. If you're publishing an app to the Teams store, you must complete the following tiers of the program:
-* **Publisher Verification**: Helps admins and end users understand the authenticity of app developers integrating with the Microsoft identity platform. When completed, a blue **verified** badge displays on the Azure Active Directory consent dialog and other screens. For more information, see [Mark your app as publisher verified](/azure/active-directory/develop/mark-app-as-publisher-verified).
+* **Publisher Verification**: Helps admins and end users understand the authenticity of app developers integrating with the Microsoft identity platform. When completed, a blue **verified** badge displays on the Azure Active Directory consent dialog and other screens. For more information, see [Mark your app as publisher verified](/azure/active-directory/develop/mark-app-as-publisher-verified).
- :::column span="":::
- :::column-end:::
- :::column span="3":::
- ![Publisher Verification](~/assets/images/submission/validation-365-compliance-publisher-verification.png)
- :::column-end:::
- :::column span="":::
- :::column-end:::
+ :::image type="content" source="../../../../assets/images/submission/validation-365-compliance-publisher-verification.png" alt-text="validation-365-compliance-publisher-verifications":::
* **Publisher Attestation**: A process in which you share general, data handling, and security and compliance information to help potential customers make informed decisions about using your app. :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: If you're submitting an app that hasn't been listed previously, you can't officially complete Publisher Attestation until your app is in the Teams store. If you're updating a listed app, complete Publisher Attestation before you submit the latest version of the app.
+</details>
+ ## Advertising :::image type="icon" source="../../../../assets/icons/certificate-icon-16.png" border="false"::: This section is in line with [Microsoft commercial marketplace policy number 1140.7](/legal/marketplace/certification-policies#11407-advertising).
platform Get Started Overview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/get-started/get-started-overview.md
Depending on the capabilities you want for your app, choose an appropriate devel
If you are already familiar with Yeoman workflow, you may prefer using [YoTeams Yeoman Generator](https://github.com/pnp/generator-teams/blob/master/docs/docs/tutorials/build-your-first-microsoft-teams-app.md) to build your apps. > [!NOTE]
-> If you have been using App Studio, we recommend that you'd try the Developer Portal to configure, distribute, and manage your Teams apps.
+> If you have been using App Studio, we recommend that you'd try the Developer Portal to configure, distribute, and manage your Teams apps. <br> App studio will be deprecated by June 30, 2022.
## Build your first Teams app
platform Glossary https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/get-started/glossary.md
Common terms and definitions used in Teams Developer Documentation.
| [App package](../concepts/build-and-test/apps-package.md) | A Teams app package is a zip file that contains the App manifest file, color icon, and outline icon. | | [App permission](../concepts/device-capabilities/browser-device-permissions.md#enable-apps-device-permissions) | An option in a Teams app to enable device permissions. It's available only when the manifest file of the app declares that the app needs device permissions. <br> **See also**: Device permissions | | [App scope](../concepts/design/app-structure.md) | An area in Teams where people can use your app. Apps can have one or many scopes, including personal, channels, chats, and meetings. A Teams app can exist across scopes. |
-| [App Studio](../concepts/build-and-test/app-studio-overview.md) | An app to start creating or integrating your own Microsoft Teams apps. It has now evolved to Developer Portal. <br> **See also**: [Developer Portal](#d) |
+| [App Studio](../concepts/build-and-test/app-studio-overview.md) | An app to start creating or integrating your own Microsoft Teams apps. It has now evolved to Developer Portal. <br> > If you have been using App Studio, we recommend that you'd try the Developer Portal to configure, distribute, and manage your Teams apps. App Studio will be deprecated by June 30, 2022 <br> **See also**: [Developer Portal](#d) |
| App tray | An application tray located on the bottom bar of a Teams mobile app. It collects all apps that are open but not currently used or active. <br>**See also**: [Teams Mobile](#t) | | [Azure resource](../toolkit/provision.md) | A service that is available through Azure that your Teams app can use for Azure deployment. It could be storage accounts, web apps, databases, and more. | | [Azure Active Directory](../tabs/how-to/authentication/auth-tab-aad.md) | MicrosoftΓÇÖs cloud-based identity and access management service. It helps authenticated users access internal and external Azure resources. |
platform Define Action Command https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/action-commands/define-action-command.md
First, you must decide the location from where your action command must be invok
The following image displays the locations from where action command is invoked:
-![action command invoke locations](~/assets/images/messaging-extension-invoke-locations.png)
## Select how to create your task module
To add the action command to the app manifest, you must add a new `composeExtens
You can create an action command using **App Studio** or **Developer Portal**. > [!NOTE]
-> App Studio will soon be deprecated. Configure, distribute, and manage your Teams apps with the new [Developer Portal](https://dev.teams.microsoft.com/).
+ > If you have been using App Studio, we recommend that you'd try the Developer Portal [Developer Portal](https://dev.teams.microsoft.com/) to configure, distribute, and manage your Teams apps. App Studio will be deprecated by June 30, 2022.
# [App Studio](#tab/AS)
You can create an action command using **App Studio** or **Developer Portal**.
1. After importing an app package, select **Message extensions** under **Capabilities**. You get a pop-up window to set up the message extension. 1. Select **Set up** in the window to include the message extension in your app experience. The following image displays the message extension set up window:
- <img src="~/assets/images/messaging-extension/messaging-extension-set-up.png" alt="messaging extension set up" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/messaging-extension-set-up.png" alt-text="Messaging extension set up":::
1. To create a message extension, you need a Microsoft registered bot. You can either use an existing bot or create a new bot. Select **Create new bot** option, give a name for the new bot, and select **Create**. The following image displays bot creation for message extension:
- <img src="~/assets/images/messaging-extension/create-bot-for-messaging-extension.png" alt="create bot for messaging extension" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/create-bot-for-messaging-extension.png" alt-text="Create bot for messaging extension":::
+
+1. To use an existing bot, select **Use existing bot** and select **Select from one of my existing bots** to choose the existing bots from the dropdown, give a **Bot name** and select **Save** or select **Connect to a different bot id** if you have a bot id created already, give a **Bot name** and select **Save**.
+
+ :::image type="content" source="~/assets/images/messaging-extension/use-existing-bot.png" alt-text="Use existing bot for messaging extension":::
1. Select **Add** in the **Command section** of the message extensions page to include the commands which decides the behaviour of message extension. The following image displays command addition for message extension:
- <img src="~/assets/images/messaging-extension/include-command.png" alt="include command" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/include-command.png" alt-text="Include command":::
1. Select **Allow users to trigger actions in external services while inside of Teams**. The following image displays the action command selection:
- <img src="~/assets/images/messaging-extension/action-command-selection.png" alt="action command selection" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/action-command-selection.png" alt-text="Action command selection":::
1. To use a static set of parameters to create your task module, select **Define a set of static parameters for the command**. The following image displays the action command static parameter selection:
- <img src="~/assets/images/messaging-extension/action-command-static-parameter-selection.png" alt="action command static parameter selection" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/action-command-static-parameter-selection.png" alt-text="Action command static parameter selection":::
- The following image displays an example static parameter set-up:
+ The following image displays an example for static parameter set-up:
- <img src="~/assets/images/messaging-extension/setting-up-of-static-parameter.png" alt="action command static parameter set-up" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/setting-up-of-static-parameter.png" alt-text="Action command static parameter set-up":::
- The following image displays an example static parameter testing:
+ The following image displays an example for static parameter testing:
- <img src="~/assets/images/messaging-extension/static-parameter-testing.png" alt="action command static parameter testing" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/static-parameter-testing.png" alt-text="Action command static parameter testing":::
1. To use dynamic parameters, select to **Fetch a dynamic set of parameters from your bot**. The following image displays the action command parameter selection:
- <img src="~/assets/images/messaging-extension/action-command-dynamic-parameter-selection.png" alt="action command dynamic parameter selection" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/action-command-dynamic-parameter-selection.png" alt-text="Action command dynamic parameter selection":::
1. Add a **Command Id** and a **Title**. 1. Select the location from where you want to invoke the action command. The following image displays the action command invoke location:
- <img src="~/assets/images/messaging-extension/action-command-invoke-location.png" alt="action command invoke location" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/action-command-invoke-location.png" alt-text="Action command invoke location":::
1. Select **Save**. 1. To add more parameters, select the **Add** button in the **Parameters** section.
platform Respond To Task Module Submit https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/action-commands/respond-to-task-module-submit.md
In scenarios where a bot sends messages on behalf of a user, attributing the mes
In the following image, on the left is a card message sent by a bot without user attribution and on the right is a card sent by a bot with user attribution.
-![user attribution bots](../../../assets/images/messaging-extension/user-attribution-bots.png)
To use the user attribution in teams, you must add the `OnBehalfOf` mention entity to `ChannelData` in your `Activity` payload that is sent to Teams.
platform Add Authentication https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/add-authentication.md
To prompt an unauthenticated user to sign in, respond with a suggested action of
> [!NOTE] > > * For the sign in experience to be hosted in a Teams pop-up window, the domain portion of the URL must be in your appΓÇÖs list of valid domains. For more information, see [validDomains](~/resources/schem#validdomains) in the manifest schema.
-> * The size of the authentication pop-up can be defined by including query string parameters of width and height, `Value = $"{_siteUrl}/searchSettings.html?settings={escapedSettings}",`.
+> * The size of the authentication pop-up can be defined by including query string parameters of width and height, `Value = $"{_siteUrl}/searchSettings.html?height=600&width=600"`.
### Start the sign in flow
platform Link Unfurling https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/link-unfurling.md
This document guides you on how to add link unfurling to your app manifest using
The Azure DevOps message extension uses link unfurling to look for URLs pasted into the compose message area pointing to a work item. In the following image, a user has pasted a URL for a work item in Azure DevOps, which the message extension has resolved into a card:
-![Example of link unfurling](~/assets/images/compose-extensions/messagingextensions_linkunfurling.png)
## Add link unfurling to your app manifest
To add link unfurling to your app manifest, add a new `messageHandlers` array to
1. Load your app manifest. 1. On the **Message Extension** page, add the domain that you want to look for in the **Message handlers** section. The following image explains the process:
- ![message handlers section in App Studio](~/assets/images/link-unfurling.png)
+ :::image type="content" source="~/assets/images/link-unfurling.png" alt-text="Message handlers section in App Studio":::
### Add link unfurling manually
platform Define Search Command https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/search-commands/define-search-command.md
The search command is invoked from any one or both of the following locations:
The following image displays the invoke locations of the search command:
-![search command invoke locations](~/assets/images/messaging-extension/search-command-invoke-locations.png)
## Add the search command to your app manifest
To create a search command:
1. After importing app package, select **Message extensions** under **Capabilities**. You get a pop-up window to set up the message extension. 1. Select **Set up** in the window to include the message extension in your app experience. The following image displays the message extension set up page:
- <img src="~/assets/images/messaging-extension/messaging-extension-set-up.png" alt="messaging extension set up" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/messaging-extension-set-up.png" alt-text="Messaging extension set up":::
1. To create the message extension, you need a Microsoft registered bot. You can either use an existing bot or create a new bot. Select **Create new bot** option, give a name for the new bot, and select **Create**. The following image displays bot creation for message extension:
- <img src="~/assets/images/messaging-extension/create-bot-for-messaging-extension.png" alt="create bot for messaging extension" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/create-bot-for-messaging-extension.png" alt-text="Create bot for messaging extension":::
+
+1. To use an existing bot, select **Use existing bot** and select **Select from one of my existing bots** to choose the existing bots from the dropdown, give a **Bot name** and select **Save** or select **Connect to a different bot id** if you have a bot id created already, give a **Bot name** and select **Save**.
+
+ :::image type="content" source="~/assets/images/messaging-extension/use-existing-bot.png" alt-text="Use existing bot for messaging extension":::
1. Select **Add** in the **Command section** of the message extensions page to include the commands which decides the behaviour of message extension. The following image displays command addition for message extension:
- <img src="~/assets/images/messaging-extension/include-command.png" alt="include command" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/include-command.png" alt-text="Include command":::
+ 1. Select **Allow users to query your service for information and insert that into a message**. The following image displays the search command parameter selection:
- <img src="~/assets/images/messaging-extension/search-command-parameter-selection.png" alt="search command parameter selection" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/search-command-parameter-selection.png" alt-text="Search command parameter selection":::
1. Add a **Command Id** and a **Title**. 1. Select the location from where your search command must be invoked. The following image displays the search command invoke location:
- <img src="~/assets/images/messaging-extension/search-command-invoke-location-selection.png" alt="search command invoke location selection]" width="500"/>
+ :::image type="content" source="~/assets/images/messaging-extension/search-command-invoke-location-selection.png" alt-text="Search command invoke location selection":::
1. Add your search parameter and select **Save**.
platform What Are Messaging Extensions https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/what-are-messaging-extensions.md
# Message extensions
-Message extensions allow the users to interact with your web service through buttons and forms in the Microsoft Teams client. They can search or initiate actions in an external system from the compose message area, the command box, or directly from a message. You can send back the results of that interaction to the Microsoft Teams client in the form of a richly formatted card. This document gives an overview of the message extension, tasks performed under different scenarios, working of message extension, action and search commands, and link unfurling.
+Message extensions allow the users to interact with your web service through buttons and forms in the Microsoft Teams client. They can search or initiate actions in an external system from the compose message area, the command box, or directly from a message. You can send back the results of that interaction to the Microsoft Teams client in the form of a richly formatted card.
+
+This document gives an overview of the message extension, tasks performed under different scenarios, working of message extension, action and search commands, and link unfurling.
The following image displays the locations from where message extensions are invoked:
-![message extension invoke locations](~/assets/images/messaging-extension-invoke-locations.png)
> [!NOTE] > @mentioning message extensions is no longer supported in the compose box.
There are two types of message extension commands, action command and search com
Action commands are used to present the users with a modal popup to collect or display information. When the user submits the form, your web service responds by inserting a message into the conversation directly or by inserting a message into the compose message area. After that the user can submit the message. You can chain multiple forms together for more complex workflows. The action commands are triggered from the compose message area, the command box, or from a message. When the command is invoked from a message, the initial JSON payload sent to your bot includes the entire message it was invoked from. The following image displays the message extension action command task module:
-![message extension action command task module](~/assets/images/task-module.png)
+ ### Search commands
-Search commands allow the users to search an external system for information either manually through a search box, or by pasting a link to a monitored domain into the compose message area, and insert the results of the search into a message. In the most basic search command flow, the initial invoke message includes the search string that the user submitted. You respond with a list of cards and card previews. The Teams client renders a list of card previews for the user. When the user selects a card from the list, the full-size card is inserted into the compose message area.
+Search commands allow the users to search an external system for information either manually through a search box, or by pasting a link to a monitored domain into the compose message area and insert the results of the search into a message. In the most basic search command flow, the initial invoke message includes the search string that the user submitted. You respond with a list of cards and card previews. The Teams client renders a list of card previews for the user. When the user selects a card from the list, the full-size card is inserted into the compose message area.
-The cards are triggered from the compose message area or the command box and not triggered from a message. They can not be triggered from a message.
+The cards are triggered from the compose message area or the command box and not triggered from a message. They cannot be triggered from a message.
The following image displays the message extension search command task module:
-![message extension search command](~/assets/images/search-extension.png)
> [!NOTE] > For more information on cards, see [what are cards](../task-modules-and-cards/what-are-cards.md).
The following image displays the message extension search command task module:
A web service is invoked when a URL is pasted in the compose message area. This functionality is known as link unfurling. You can subscribe to receive an invoke when URLs containing a particular domain are pasted into the compose message area. Your web service can "unfurl" the URL into a detailed card, providing more information than the standard website preview card. You can add buttons to allow the users to immediately take action without leaving the Microsoft Teams client. The following images display link unfurling feature when a link is pasted in message extension:
-![unfurl link](../assets/images/messaging-extension/unfurl-link.png)
![link unfurling](../assets/images/messaging-extension/link-unfurl.gif)
platform Bots Create https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/bot-v3/bots-create.md
For more information, see [Bot Framework Documentation](/azure/bot-service/?view
> * If you register your bot using Microsoft Azure, your bot code does not need to be *hosted* on Microsoft Azure. > * If you do register a bot using Azure portal, you must have a Microsoft Azure account. You can [create one for free](https://azure.microsoft.com/free/). To verify your identity when you create one, you must provide a credit card, but it won't be charged; it's always free to create and use bots with Microsoft Teams. > * You can now use App Studio to register/update app and bot information directly within Microsoft Teams. You'll only have to use the Azure portal for adding or configuring other Bot Framework channels such as Direct Line, Web Chat, Skype, and Facebook Messenger.
+>* If you have been using App Studio, we recommend that you'd try the Developer Portal to configure, distribute, and manage your Teams apps. App Studio will be deprecated by June 30, 2022
## See also
platform Connectors Creating https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/webhooks-and-connectors/how-to/connectors-creating.md
The following manifest.json file contains the elements needed to test and submit
} ```
-## Enable or disable connectors in Teams
-
-The Exchange Online PowerShell V2 module uses modern authentication and works with multi factor authentication, called MFA for connecting to all Exchange related PowerShell environments in Microsoft 365. Admins can use Exchange Online PowerShell to disable connectors for an entire tenant or a specific group mailbox, affecting all users in that tenant or mailbox. It is not possible to disable for some and not others. Also, connectors are disabled by default for Government Community Cloud, called GCC tenants.
-
-The tenant level setting overrides the group level setting. For example, if an admin enables connectors for the group and disables them on the tenant, connectors for the group is disabled. To enable a connector in Teams, [connect to Exchange Online PowerShell](/powershell/exchange/connect-to-exchange-online-powershell?view=exchange-ps#connect-to-exchange-online-powershell-using-modern-authentication-with-or-without-mfa&preserve-view=true) using modern authentication with or without MFA.
-
-### Commands to enable or disable connectors
-
-Run the following commands in Exchange Online PowerShell:
-
-* To disable connectors for the tenant: `Set-OrganizationConfig -ConnectorsEnabled:$false`.
-* To disable actionable messages for the tenant: `Set-OrganizationConfig -ConnectorsActionableMessagesEnabled:$false`.
-* To enable connectors for Teams, run the following commands:
- * `Set-OrganizationConfig -ConnectorsEnabled:$true`
- * `Set-OrganizationConfig -ConnectorsEnabledForTeams:$true`
- * `Set-OrganizationConfig -ConnectorsActionableMessagesEnabled:$true`
-
-For more information on PowerShell module exchange, see [Set-OrganizationConfig](/powershell/module/exchange/Set-OrganizationConfig?view=exchange-ps&preserve-view=true). To enable or disable Outlook connectors, [connect apps to your groups in Outlook](https://support.microsoft.com/topic/connect-apps-to-your-groups-in-outlook-ed0ce547-038f-4902-b9b3-9e518ae6fbab).
- ## Test your connector To test your connector, upload it to a team with any other app. You can create a .zip package using the manifest file from the two icon files and connectors Developer Dashboard, modified as directed in [Include the connector in your Manifest](#include-the-connector-in-your-manifest).
To verify that `HttpPOST` action is working correctly, [send messages to your co
Follow the [step-by-step guide](../../sbs-teams-connectors.yml) to create and test the connectors in your Microsoft Teams.
-## Publish connectors for the organization
-
-If you want the connector to be available only to the users in your organization, you can upload your custom connector app to your [organization's app catalog](~/concepts/deploy-and-publish/apps-publish.md).
-
-After uploading the app package to configure and use the connector in a team, install the connector from the organization's app catalog.
-
-To set up a connector:
-
-1. Select **Apps** from the left navigation bar.
-1. In the **Apps** section, select **Connectors**.
-1. Select the connector that you want to add. A pop up dialog window appears.
-1. From the dropdown menu, select **Add to a team**.
-1. In the search box, type a team or channel name.
-1. Select **Set up a Connector** from the dropdown menu in the bottom right corner of the dialog window.
-
-> [!IMPORTANT]
-> Currently, custom connectors are not available in Government Community Cloud (GCC), GCC-High, and Department of Defense (DOD).
-
-The connector is available in the section &#9679;&#9679;&#9679; > **More options** > **Connectors** > **All** > **Connectors for your team** for that team. You can navigate by scrolling to this section or search for the connector app. To configure or modify the connector, select **Configure**.
- ## Distribute webhook and connector 1. [Set up an Incoming Webhook](~/webhooks-and-connectors/how-to/add-incoming-webhook.md#create-an-incoming-webhook) directly for your team.
Follow the [step-by-step guide](../../sbs-teams-connectors.yml) to build and tes
* [Create and send messages](~/webhooks-and-connectors/how-to/connectors-using.md) * [Create an Incoming Webhook](~/webhooks-and-connectors/how-to/add-incoming-webhook.md) * [Create an Office 365 Connector](~/webhooks-and-connectors/how-to/connectors-creating.md)
+* [How admins can enable or disable connectors](/MicrosoftTeams/office-365-custom-connectors#enable-or-disable-connectors-in-teams)
+* [How admins can publish custom connectors within their org](/MicrosoftTeams/office-365-custom-connectors)