Updates from: 09/17/2024 01:11:29
Service Microsoft Docs article Related commit history on GitHub Change details
platform Bot Copilot Handoff https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/bots/how-to/conversations/bot-copilot-handoff.md
Title: Copilot Handoffs for Bots
-description: Learn how to allow users to continue their conversation with custom engine copilot from the copilot for Microsoft 365 to your bot service.
Previously updated : 05/07/2024
+description: Learn how to allow users to continue their conversation with custom engine agent from Microsoft 365 Copilot to your bot service.
Last updated : 09/16/2024
> * Copilot handoff is only available in [public developer preview](../../../resources/dev-preview/developer-preview-intro.md). > * Copilot handoff is only supported in one-on-one chat with bot.
-Copilot handoffs are plugin-provided deep links that carry over chat context, enabling users to seamlessly transition their chat with Copilot for Microsoft 365 to your bot service. You can enhance your Copilot message extension plugin to hand off a conversation to your custom engine copilot to handle scenarios where specialized knowledge or actions are required, such as
-complex IT support queries, detailed product inquiries, or interactive order management.
+Copilot handoffs are plugin-provided deep links that carry over chat context, enabling users to seamlessly transition their chat with Microsoft 365 Copilot to your bot service. You can enhance your Copilot message extension plugin to hand off a conversation to your custom engine agent to handle scenarios where specialized knowledge or actions are required, such as complex IT support queries, detailed product inquiries, or interactive order management.
-In the following graphic, a user looks for help on tech issues using Copilot and receives results from the enterprise dataset. The user finds the available information insufficient and wants to continue the interaction with a Contoso bot plugin.ΓÇï When the user selects the Contoso bot, a new chat starts and the conversation continues in the Contoso bot. This seamless switch from Copilot to the Contoso bot, without losing the conversation context is called a copilot handoff.
+In the following graphic, a user looks for help on tech issues using Microsoft 365 Copilot and receives results from the enterprise dataset. The user finds the available information insufficient and wants to continue the interaction with a Contoso bot plugin.ΓÇï When the user selects the Contoso bot, a new chat starts and the conversation continues in the Contoso bot. This seamless switch from Microsoft 365 Copilot to the Contoso bot without losing the conversation context is called a copilot handoff.
## How copilot handoff works
-A [custom engine copilot](/microsoft-365-copilot/extensibility/overview-custom-engine-copilot) sends a deep link with a continuation token to Copilot for Microsoft 365. The deep link query parameter with a continuation token ensures that any information from your plugin invocation parameters is referenced. When the user selects the deep link, Copilot sends an invoke call to the bot with the continuation token, and the bot then resumes the conversation based on the context. This process enables a seamless transition from Copilot for Microsoft 365 to your custom engine copilot, maintaining the conversationΓÇÖs continuity and context, which optimizes the user experience.
+A [custom engine agent](/microsoft-365-copilot/extensibility/overview-custom-engine-agent) sends a deep link with a continuation token to Microsoft 365 Copilot. The deep link query parameter with a continuation token ensures that any information from your plugin invocation parameters is referenced. When the user selects the deep link, Microsoft 365 Copilot sends an invoke call to the bot with the continuation token, and the bot then resumes the conversation based on the context. This process enables a seamless transition from Microsoft 365 Copilot to your custom engine agent, maintaining the conversationΓÇÖs continuity and context, which optimizes the user experience.
You must create a deep link URL with a `continuation` query parameter for the action button and assign a continuation token to the parameter to facilitate the handoff process. When the user selects the action button, Microsoft Teams reads the continuation token from the URL and initiates an invoke call to the bot. The bot or plugin uses the continuation token to create a response, which is then displayed to the user in the plugin chat window.
To enable copilot handoff in Teams, follow these steps:
The `handoff/action` invoke type allows the bot to transfer control of the conversation to another service or initiate a specific action that requires further processing. When the bot receives the `handoff/action` invoke activity, it uses the continuation token to look up any necessary information to continue the conversation seamlessly. This involves retrieving conversation history, user preferences, or any other context needed to provide a consistent experience.
-1. **Handle the invoke type**: In your bot code, manage the `handoff/action` invoke using the `onInvokeActivity` handler. In your bot code, manage the `handoff/action` invoke using the `onInvokeActivity` handler. You must override the `onInvokeActivity` method to handle the invoke call. If the invoke call is successful, the bot must return an HTTP status code of **200**. If there's an error, the bot must respond with an appropriate HTTP status code in the range of **400- or 500-**. If the user receives an error, they must wait and retry while the errors are logged in the backend service.
+1. **Handle the invoke type**: In your bot code, manage the `handoff/action` invoke using the `onInvokeActivity` handler. You must override the `onInvokeActivity` method to handle the invoke call. If the invoke call is successful, the bot must return an HTTP status code of **200**. If there's an error, the bot must respond with an appropriate HTTP status code in the range of **400- or 500-**. If the user receives an error, they must wait and retry while the errors are logged in the backend service.
> [!NOTE] > Don't send any payload with this response as it doesn't render in the chat window. The responses based on the continuation token must be sent to the user separately.
To enable copilot handoff in Teams, follow these steps:
|Sample name | Description | Node.js| | -| | -- |
-| Northwind inventory message extension | This sample is a Teams message extension that works as a plugin for Microsoft 365 Copilot. It features copilot handoff and enables users to transition their chat from Copilot for Microsoft 365 to Northwind Database. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-copilot-handoff/ts) |
+| Northwind inventory message extension | This sample is a Teams message extension that works as a plugin for Microsoft 365 Copilot. It features copilot handoff and enables users to transition their chat from Microsoft 365 Copilot to Northwind Database. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-copilot-handoff/ts) |
platform Review Copilot Validation Guidelines https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/prepare/review-copilot-validation-guidelines.md
+
+ Title: Guidelines to validate Copilot agents
+description: Learn how to increase the chances of your message extension as a Copilot agent or plugin for Microsoft 365 to pass the Teams Store submission process.
+++
+ms.localizationpriority: high
Last updated : 09/16/2024+++
+# Validation guidelines for Copilot agents
+
+> [!IMPORTANT]
+>
+> * Plugins for Microsoft 365 Copilot are in preview and work only in Microsoft 365 Copilot.
+> * Message extensions plugins in Microsoft 365 Copilot are in public preview for Microsoft Word and Microsoft PowerPoint.
+> * Support for Excel and OneNote client applications to be available soon.
+> * Ensure that Microsoft 365 Copilot is available for your organization. You have two ways to get a developer environment for Microsoft 365 Copilot:
+> * A sandbox Microsoft 365 tenant with Microsoft 365 Copilot (available in limited preview through [TAP membership](https://developer.microsoft.com/microsoft-365/tap)).
+> * An enterprise customer production environment with Microsoft 365 Copilot licenses.
+> * If you want to configure a custom Graph connector for Microsoft 365 Copilot, ensure that you adhere to theΓÇ»[guidelines to create or upgrade Graph connectors](/graph/connecting-external-content-deploy-teams?branch=main#make-your-microsoft-graph-connector-available-for-other-organizations-in-the-teams-admin-center).
+
+This section is in line with [Microsoft commercial marketplace policy number 1140.9](/legal/marketplace/certification-policies#11409-copilot-extensions-for-copilot-for-microsoft-365).
+
+Apps must be consistent with responsible [AI checks](teams-store-validation-guidelines.md#apps-with-ai-generated-content).
+
+ :::column:::
+ :::image type="icon" source="../../../../assets/icons/description.png" link="#description" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/screenshots.png" link="#screenshots" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/copilot-agent-name.png" link="#copilot-agent-name" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/compound-utterances.png" link="#compound-utterances" border="false":::
+ :::column-end:::
+
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/prompts.png" link="#prompts" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/adaptive-card-response.png" link="#adaptive-card-response" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/compatibility.png" link="#compatibility" border="false":::
+ :::column-end:::
+ :::column:::
+ :::image type="icon" source="../../../../assets/icons/technical-requirements.png" link="#technical-requirements" border="false":::
+ :::column-end:::
+
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/action-scenarios.png" link="#user-disclosure-and-confirmation-for-action-scenarios" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/action-knowledge-source.png" link="#copilot-agent-must-have-action-or-knowledge-source" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/graceful-error-handling.png" link="#graceful-error-handling" border="false":::
+ :::column-end:::
+ :::column span="":::
+ :::image type="icon" source="../../../../assets/icons/security-openapi.png" link="#security-requirements-for-openapi-spec-url" border="false":::
+ :::column-end:::
+
+## Description
+
+A good description offers a clear and concise summary of the Copilot agent's features. It enhances user awareness and allows Microsoft 365 Copilot to efficiently discover and execute search operations.
+
+You must ensure to meet the following guidelines for Copilot agents:
+
+* The Teams Store validation guidelines related to app description for Microsoft 365 apps are applicable. For more information, see [app descriptions](teams-store-validation-guidelines.md#app-descriptions).
+* Short description of Copilot agent, parameter, command description, semantic description, and operation ID mustn't include:
+ * Instructional phrases, for example, ΓÇ£if the user says XΓÇ¥, ΓÇ£ignoreΓÇ¥, ΓÇ£deleteΓÇ¥, ΓÇ£resetΓÇ¥, ΓÇ£new instructionsΓÇ¥, ΓÇ£Answer in BoldΓÇ¥ or ΓÇ£Do not print anythingΓÇ¥. [*Must fix*]
+ * URLs, emojis, or hidden characters such as hexadecimal, binary, or unconventional symbols. [*Must fix*]
+ * Grammar and punctuation errors. [*Must fix*]
+ * Overly verbose, flowery, or marketing language. [*Good-to-fix*]
+ * Superlative claims such as ΓÇ£#1,ΓÇ¥ ΓÇ£amazing,ΓÇ¥ or ΓÇ£bestΓÇ¥. [*Good-to-fix*]
+
+ > [!NOTE]
+ > * In case of declarative agents, the short description guidelines apply to the `instructions` and `conversation_starters` fields also.
+ > * For API based plugins, these guidelines apply to `description_for_human`, `description_for_model`, `capabilities`, `conversation_starters` (both the title and and text), `states\reasoning\description` in `functions` fields, if provided. [*Must fix*]
+ > * When utilizing Swagger or OpenAPI file formats, adhere to these guidelines for the 'path' content associated with keys and the 'description' field for GET, POST, PUT, or DELETE APIs. [*Must fix*]
+
+* App long description must clearly call out that the Copilot agent works in Microsoft 365 Copilot. For example, use Contoso in Microsoft 365 Copilot to search and summarize your tasks. ΓÇï[*Must fix*]
+
+ :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-plugin-prompt-pass.png" alt-text="Screenshot shows a pass scenario with an example of a sample prompt for message extension plugin in Microsoft 365 Copilot.":::
+
+ :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-plugin-prompt-fail.png" alt-text="Screenshot shows a fail scenario without an example of sample prompt for message extension as a plugin in Microsoft 365 Copilot.":::
+
+* TheΓÇ»`semanticDescription` property isn't a mandatory field. However, if you addΓÇ»`semanticDescription` in app manifest, the existing validation checks for short, parameter, and command descriptions are also applicable for semantic descriptions.
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Screenshots
+
+You must ensure to meet the following guidelines for Copilot agents:
+
+* The Teams Store validation guidelines related to screenshots for Microsoft 365 apps are applicable. For more information, see [screenshots](teams-store-validation-guidelines.md#screenshots).
+* Apps with Copilot agent functionality must have atleast one screenshot related to Microsoft 365 Copilot functionality. [*Must fix*]
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Copilot agent name
+
+You must ensure to meet the following guidelines for Copilot agents:
+
+* The Teams Store validation guidelines related to app name for Microsoft 365 apps are applicable. For more information, see [app name](teams-store-validation-guidelines.md#app-name).
+* For declarative agent, ensure that the following parameters are identical: [*Must fix*]
+ * `name` in the app manifest
+ * `name` in declarativeAgent1.json
+ * `name_for_human` in plugin.json files
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Compound utterances
+
+Copilot agents must support atleast three unique compound utterances by handling three or more parameters.
++
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Prompts
+
+You must ensure the following guidelines for sample prompts and prompt starters.
+
+### Sample prompts
+
+The [`samplePrompts`](../../../../resources/schem#composeextensionscommands) property provides guidance to users on utilizing the various plugins in Microsoft 365 Copilot.
++
+Sample prompts are specified using `samplePrompts` property in the app manifest. These prompts must meet the following requirements:
+
+* A plugin must have at least three prompts and maximum of five prompts for each command. [*Must Fix*]
+* Each prompt must not exceed 128 characters. [*Must Fix*]
+* Two commands within the same plugin must not have identical prompts. [*Must Fix*]
+* Sample prompts must be generic in nature and not include custom references. For example, project names and task name. [*Must Fix*]
+* All sample prompts must be functional and return responses. [*Must Fix*]
+* Prompt must be relevant to the commands. [*Must Fix*]
+
+### Prompt starters
+
+Prompt starters guide users on how to start using declarative agents. You must ensure the following guidelines for prompt starters:
+
+* A declarative agent must have at least three prompts and maximum of six prompts. [*Must Fix*]
+* All prompt starters must be functional and return responses. [*Must Fix*]
+* It must be generic in nature and not include custom references, for example, project names and task name. [*Must Fix*]
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Adaptive Card response
+
+Copilot agent responses provided as an Adaptive Card must meet the following requirements:
+
+* Adaptive Card response must include Adaptive Card content and preview card information as part of the same template. [*Must fix*]
+
+ :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-app-response-copilot.png" alt-text="Screenshot shows an example of a sample app showing Microsoft 365 Copilot app response contains preview and content in the same response.":::
+
+* Apart from the Copilot agent logo, title, thumbnail, and title of the information, the data in the Adaptive Card must represent at least two pieces of information. You can identify the fields from the most frequently searched attributes such as, data modified, author, status, and flags. [*Must fix*]
+
+ :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-plugin-functional-action.png" alt-text="Screenshot shows an example of information title, additional user fields, and action button in an Adaptive Card response.":::
+
+* Adaptive Card must be well-formatted to suit the desktop, web, and mobile (iOS and Android) clients. [*Must fix*]
+* Adaptive Cards must include a URL as part of the [metadata](https://adaptivecards.io/explorer/Metadata.html), which allows cards to be easily copied from one hub to another. [*Must fix*]
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Compatibility
+
+Copilot agents must be fully responsive and functional on the latest versions of these clients: [*Must fix*]
+
+* Microsoft Teams on Desktop and Web
+* copilot.microsoft.com on web
+* Microsoft 365 Copilot in Word
+
+### Ensure your Copilot plugins work in Teams meetings
+
+You must implement the following:
+
+* Adaptive Cards must not display a horizontal scroll. To avoid horizontal scrolls, donΓÇÖt specify a fixed width: [*Must fix*]
+
+ * **ColumnSets**
+
+ * Don't define `ColumnSets` with more than three columns.
+ * DonΓÇÖt use explicit pixel width on more than one column in the set.
+ * Ensure the column doesn't exceed one-quarter of the narrowest card width, such as in a meeting chat or Microsoft 365 Copilot.
+ * Generally, an explicit width must not exceed 48 pixels, though some scenarios might allow for exceptions.
+
+ * **Sizing images**
+
+ * When using an image inside a `ColumnSet` with more than one column, specify the size of the column containing an image rather than the image itself.
+ * If the image isnΓÇÖt in a `ColumnSet`, we recommend you to set its size to `auto` or `stretch`.
+ * If you want to define explicit width in pixels, ensure that they don't exceed 3/4th of the narrowest card width.
+ * If you want to define explicit size in pixels, define it for the width or height. Setting explicit size for any one parameter preserves the image's aspect ratio.
+ * We recommend that you must set the width of the image, though some scenarios might allow for exceptions.
+
+For more information to create plugins for teams meetings, see [enable message extension as a plugin for Copilot for meetings](../../../../messaging-extensions/build-bot-based-plugin.md#enable-message-extension-as-a-plugin-for-copilot-for-meetings).
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+### Ensure your Copilot agents work with Microsoft 365 - Word, Excel, PowerPoint, OneNote, Office, and Outlook Copilots
+
+You must ensure to meet the following guidelines for Copilot agents:
+
+1. **If using SSO-enabled app, update Microsoft Azure Active Directory (Azure AD) app registration**: [*Must fix*]
+
+ Azure AD single sign-on (SSO) for message extension works in the same way as it does in Teams or Outlook. If you've enabled SSO for your app, add the Office app Copilot’s client application identifier to the Azure AD app registration of your bot in your tenant's App registrations portal.
+
+ 1. Sign in to [Azure portal](https://portal.azure.com/)  with your sandbox tenant account.
+ 1. Open **App registrations**.
+ 1. Select the name of your application to open its app registration.
+ 1. From the **Manage** section, select **Expose an API**.
+ 1. In the **Authorized client applications** section, ensure that the following client ID values are listed:
+
+ | Microsoft 365 client application | Client ID |
+ | | |
+ | Word, PowerPoint, Excel (web, desktop) | 3068386c-7a16-4f6a-a664-043b6b232816 |
+ | Teams desktop, mobile | 1fec8e78-bce4-4aaf-ab1b-5451cc387264 |
+ | Teams web | 5e3ce6c0-2b1f-4285-8d4b-75ee78787346 |
+ | Microsoft 365 web | 4765445b-32c6-49b0-83e6-1d93765276ca |
+ | Microsoft 365 desktop | 0ec893e0-5785-4de6-99da-4ed124e5296c |
+ | Microsoft 365 mobile | d3590ed6-52b3-4102-aeff-aad2292ab01c |
+ | Outlook desktop | d3590ed6-52b3-4102-aeff-aad2292ab01c |
+ | Outlook web | bc59ab01-8403-45c6-8796-ac3ef710b3e3 |
+ | Outlook mobile | 27922004-5251-4030-b22d-91ecd9a37ea4 |
+ | Bing | 9ea1ad79-fdb6-4f9a-8bc3-2b70f96e34c7 |
+
+ > [!NOTE]
+ > For more information about how SSO works for message extensions, see [enable SSO for your app](../../../../bots/how-to/authentication/bot-sso-overview.md).
+
+1. **Ensure your registered bot is connected to Microsoft 365 and Microsoft Teams channel**: [*Must fix*]
+
+ 1. Sign in to [Azure portal](https://portal.azure.com/) with your sandbox tenant account.
+ 1. Open **Bot Services**.
+ 1. Select the name of your bot to update its channels.
+ 1. From the **Settings** section, select **Channels**.
+ 1. From **Available channels**, select **Microsoft 365 & Microsoft Teams**, and then select **Apply**.
+
+1. **Configure Content-Security-Policy headers** [*Must fix*]
+
+ If your Copilot agent makes use of [Content-Security-Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy) (CSP) headers, ensure that all the following [frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) are included in your CSP headers:
+
+ | Microsoft 365 App | frame-ancestor permission |
+ | | |
+ | All hosts (New) | `*.cloud.microsoft` |
+ | Word | fa000000125.resources.office.net |
+ | PowerPoint | fa000000129.resources.office.net |
+ | Excel | fa000000124.resources.office.net |
+ | OneNote | fa000000128.resources.office.net |
+ | Microsoft 365 Copilot and Bing | `edgeservices.bing.com`, `www.bing.com`, `copilot.microsoft.com` |
+ | Microsoft 365 app | `*.microsoft365.com`, `*.office.com` |
+ | Outlook | `outlook.office.com`, `outlook.office365.com`, `outlook-sdf.office.com`, `outlook-sdf.office365.com` |
+
+1. **Upgrade Teams JS version to the 2.22.0 build** [*Must fix*]
+
+ If you're using Teams JS version 2.22 or earlier, update it to version 2.22 or higher.ΓÇ»
+
+ For more information, see Teams JS Repository [@microsoft/teams-js - npm (npmjs.com)](https://www.npmjs.com/package/@microsoft/teams-js).
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Technical requirements
+
+For a Copilot agent to be validated, invoked, and to work seamlessly, ensure that it meets the following criteria: [*Must fix*]
+
+| Criteria | Fulfillment |
+|||
+| Manifest version | *App manifest version must be 1.13 or later. [*Must fix*] <br>* If you're using declarative agent, you must use [public developer preview app manifest schema](../../../../resources/schem). [*Must fix*] |
+| Response Time | Response time must not exceed nine seconds for 99 percent, five Seconds for 75 percent and two Seconds for 50 percent. [*Must fix*] |
+| Reliability | Apps must maintain 99.9% availability. For instance, if Microsoft 365 Copilot calls a plugin 1,000 times, it must provide a meaningful response 999 times. [*Must fix*] |
+| Zero Regressions | If you need to resubmit your Copilot agent for validation, the existing message extension functionality that was working earlier mustn't break. This requirement is only applicable to independent software vendor (ISV) apps and not apps built for your organization. [*Must fix*] |
+| Microsoft 365 Channel | For users to interact with your message extension from Outlook, you need to add Microsoft 365 channel to your bot. For more information, see [add Microsoft 365 channel for your app](../../../../m365-apps/extend-m365-teams-message-extension.md#add-microsoft-365-channel-for-your-app). [*Must fix*]|
+| Single sign-on (SSO) | If applicable, update your Microsoft Entra ID app registration for SSO. [*Must fix*] |
+| Content-Security-Policy | If applicable, modify your Content-Security-Policy headers and X-Frame-Options in accordance with [configure Content-Security-Policy headers](/microsoftteams/platform/m365-apps/extend-m365-teams-personal-tab?tabs=manifest-teams-toolkit#configure-content-security-policy-headers). [*Must fix*] |
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## User disclosure and confirmation for action scenarios
++
+For action scenarios, Copilot agents must share user disclosure and seek user confirmation:
+
+* Data shown in third-party service (through dialogue) must be reflective of confirmation provided by the user. [*Must Fix*]
+* A confirmation of the completion of the action must be shared by the plugin in the form of a card. [*Must Fix*]
+* Action taken by a user must be correctly reflected in third-party service. [*Must Fix*]
+* Modification requests by the user prior to confirmation of the action must be honored. [*Must Fix*]
+* Highly consequential tasks such as bulk delete must not be supported. [*Good-to-fix*]
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Copilot agent must have Action or knowledge source
+
+Your Copilot agent must have nodes defined as actions or Graph connectors in the app manifest. This ensures that the Copilot agent's responses are grounded in a data source. [*Must fix*]
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Graceful error handling
+
+All Copilot agents must handle the following scenarios gracefully, that is, the agent must reject the user request and provide a way forward: [*Must fix*]
+
+* For incorrect search parameters
+* For misuse or inappropriate language
+* For topics in which the Copilot agent doesnΓÇÖt specialize
+
+ For example, graceful error message with way forward for declarative agent:
+
+ :::image type="content" source="../../../../assets/images/Copilot/graceful-error-handling.png" alt-text="The screenshot shows how to incorporate graceful error handling." lightbox="../../../../assets/images/Copilot/graceful-error-handling.png":::
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## Security requirements for OpenAPI spec URL
+
+Copilot agents that use OpenAPI specs must ensure the following security standards:
+
+* All API calls must use HTTPS with TLS 1.2 or higher. [*Must fix*]
+* API calls mustn't lead to any URL redirection. Actual API calls must be served from the same domain or subdomain as the root domain verified for the developer. [*Must fix*]
+
+[Back to top](#validation-guidelines-for-copilot-agents)
+
+## See also
+
+* [Teams Store validation guidelines](teams-store-validation-guidelines.md)
+* [Guidelines to create and upgrade Copilot agents](../../../../messaging-extensions/dev-guidelines-copilot-agents.md)
+* [Extend bot-based message extension as plugin for Microsoft 365 Copilot](../../../../messaging-extensions/build-bot-based-plugin.md)
+* [Extend Microsoft 365 Copilot](/microsoft-365-copilot/extensibility/)
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
Title: Teams Store Validation Guidelines
-description: Learn to increase the chances of your app to pass the Teams Store submission process. Understand the mandatory and suggested fixes, and validation guidelines.
+description: Learn to increase the chances of your app to pass the Teams Store submission process. Understand the must fix and good-to-fix validation guidelines.
ms.localizationpriority: high Previously updated : 03/21/2023 Last updated : 09/16/2024 # Teams Store validation guidelines
Following these guidelines increases the chances of your app to pass the Microso
> > * Some guidelines may not be applicable to your app. For example, if your app doesn't include a bot, you can ignore bot-related guidelines. > * We've cross-referenced these guidelines to the Microsoft commercial certification policies and added DoΓÇÖs and DonΓÇÖts with examples from pass or fail scenarios encountered in our validation process.
-> * 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 passes Teams Store validation only after you've fixed the issues.
-> * Other guidelines are marked as *Suggested Fix*. For an ideal user experience, we recommend that you fix the issues, however, your app submission isn't blocked from publishing on the Teams Store, if you choose not to fix the issues.
+> * Certain guidelines are marked as *Must 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 passes Teams Store validation only after you've fixed the issues.
+> * Other guidelines are marked as [*Good-to-fix*]. For an ideal user experience, we recommend that you fix the issues, however, your app submission isn't blocked from publishing on the Teams Store, if you choose not to fix the issues.
:::row::: :::column:::
Apps must provide value to the users by enabling them to complete functional wor
<details><summary>Tabs</summary>
-Tabs must provide value beyond hosting an existing website. [*Mandatory Fix*]
+Tabs must provide value beyond hosting an existing website. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-usability-app-provides-workflows.png" alt-text="Graphic shows an example of an app with a workflow valuable to channel members within a team.":::
Apps that provide only notifications with content such as, **You have a new noti
<details><summary>Message extensions</summary>
-[*Mandatory Fix*]
+[*Must fix*]
Apps that consist of search-based message extension provide user value by sharing cards that allow for contextual conversations without context switching.
Link unfurling only apps don't provide significant value within Teams. Consider
### App Name
-[*Mandatory Fix*]
+[*Must fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line with Microsoft [commercial certification policy number 1140.1.1](/legal/marketplace/certification-policies#114011-app-name) and provides more guidance to developers on naming their apps. <br></br>
Link unfurling only apps don't provide significant value within Teams. Consider
An app's name plays a critical role in how users discover it in the Teams Store. Use the following guidelines to name an app:
-* The name must include terms relevant to your users. [*Mandatory Fix*]
-* Prefix or suffix common nouns with the developer's name. For example, **Contoso Tasks** instead of **Tasks**. [*Mandatory Fix*]
-* Must not use **Teams** or other Microsoft product names such as Excel, PowerPoint, Word, OneDrive, SharePoint, OneNote, Azure, Surface, and Xbox that could falsely indicate co-branding or co-selling. For more information about referencing Microsoft software products and services, see [Microsoft Trademark and Brand Guidelines](https://www.microsoft.com/legal/intellectualproperty/trademarks/usage/general). [*Mandatory Fix*]
-* Must not copy the name of an app listed in the Teams Store or other offer in the commercial marketplace. [*Mandatory Fix*]
-* Must not contain profane or derogatory terms. The name also mustn't include racially or culturally insensitive language. [*Mandatory Fix*]
+* The name must include terms relevant to your users. [*Must fix*]
+* Prefix or suffix common nouns with the developer's name. For example, **Contoso Tasks** instead of **Tasks**. [*Must fix*]
+* Must not use **Teams** or other Microsoft product names such as Excel, PowerPoint, Word, OneDrive, SharePoint, OneNote, Azure, Surface, and Xbox that could falsely indicate co-branding or co-selling. For more information about referencing Microsoft software products and services, see [Microsoft Trademark and Brand Guidelines](https://www.microsoft.com/legal/intellectualproperty/trademarks/usage/general). [*Must fix*]
+* Must not copy the name of an app listed in the Teams Store or other offer in the commercial marketplace. [*Must fix*]
+* Must not contain profane or derogatory terms. The name also mustn't include racially or culturally insensitive language. [*Must fix*]
* Must be unique. If your app (Contoso) is listed in the Teams Store and Microsoft AppSource and you want to list another app specific to a geography such as Contoso Mexico, your submission must meet the following criteria:
- * Call out the app's region-specific functionality in the title, metadata, first response app experience, and help sections. For example, title must be Contoso Mexico. App title must clearly differentiate an existing app from the same developer to avoid end-user confusion. [*Mandatory Fix*]
- * When uploading the app package in Partner Center, select the right **Markets** where the app is available in the **Availability** section. [*Mandatory Fix*]
+ * Call out the app's region-specific functionality in the title, metadata, first response app experience, and help sections. For example, title must be Contoso Mexico. App title must clearly differentiate an existing app from the same developer to avoid end-user confusion. [*Must fix*]
+ * When uploading the app package in Partner Center, select the right **Markets** where the app is available in the **Availability** section. [*Must fix*]
-* App name mustn't lead with a core Teams feature such as Chat, Contacts, Calendar, Calls, Files, Activity, Teams, and Help. The app name doesn't shortens to either Chat, Contacts, Calendar, Calls, Files, Activity, Teams, and Help on install in the left navigation. [*Mandatory Fix*]
+* App name mustn't lead with a core Teams feature such as Chat, Contacts, Calendar, Calls, Files, Activity, Teams, and Help. The app name doesn't shortens to either Chat, Contacts, Calendar, Calls, Files, Activity, Teams, and Help on install in the left navigation. [*Must fix*]
* If your app is part of an official partnership with Microsoft, the name of your app must come first. For example, **Contoso connector for Microsoft Teams**.
-* The app name mustn't have any reference to Microsoft or Microsoft products. DonΓÇÖt use **Teams** or **Microsoft**, in the app name unless your app is in official partnership with Microsoft. In such an instance, the app name must come first before any reference to Microsoft. For example, **Contoso connector for Microsoft Teams**. [*Mandatory Fix*]
+* The app name mustn't have any reference to Microsoft or Microsoft products. DonΓÇÖt use **Teams** or **Microsoft**, in the app name unless your app is in official partnership with Microsoft. In such an instance, the app name must come first before any reference to Microsoft. For example, **Contoso connector for Microsoft Teams**. [*Must fix*]
-* DonΓÇÖt use parenthesis in naming to include Microsoft products. [*Mandatory Fix*]
+* DonΓÇÖt use parenthesis in naming to include Microsoft products. [*Must fix*]
-* Developer name must be the same in the app manifest (previously called Teams app manifest) and AppSource. [*Mandatory Fix*]
+* Developer name must be the same in the app manifest (previously called Teams app manifest) and AppSource. [*Must fix*]
-* App manifests submitted must be production manifests. Accordingly, app name mustn't indicate that the app is a preproduction app. For example, app name mustn't contain words such as Beta, Dev, Preview, and UAT. [*Mandatory Fix*]
+* App manifests submitted must be production manifests. Accordingly, app name mustn't indicate that the app is a preproduction app. For example, app name mustn't contain words such as Beta, Dev, Preview, and UAT. [*Must fix*]
-* The app name in the app manifest and AppSource must match. [*Mandatory Fix*]
+* The app name in the app manifest and AppSource must match. [*Must fix*]
> [!TIP] > Your appΓÇÖs branding on the Teams Store and AppSource including your app name, developer name, app icon, AppSource screenshots, video, short description, and website either separately or taken together mustn't impersonate an official Microsoft offering unless your app is an official Microsoft 1P offering.
An app's name plays a critical role in how users discover it in the Teams Store.
### Duplicate App
-* Apps from the same developer offering the same functionality must share an app listing unless privacy compliance requirements mandate separate app listings or separate app listing are required to support government cloud. You must build into your business logic and publish only one listing. [*Mandatory Fix*]
+* Apps from the same developer offering the same functionality must share an app listing unless privacy compliance requirements mandate separate app listings or separate app listing are required to support government cloud. You must build into your business logic and publish only one listing. [*Must fix*]
* To fulfill multiple regions support requirement, you must build into your business logic and publish only one listing.
An app's name plays a critical role in how users discover it in the Teams Store.
### Suitable for workplace consumption
-[*Mandatory Fix*]
+[*Must fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line 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. [Mandatory Fix]
+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. [*Must fix*]
-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 mustn't require a substantial time investment of over 60 mins per session or affect productivity. [Mandatory Fix]
+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 mustn't require a substantial time investment of over 60 mins per session or affect productivity. [*Must fix*]
-Content aggregator apps must have a mechanism for users to report an issue or inappropriate content to the app publisher. [Mandatory Fix]
+Content aggregator apps must have a mechanism for users to report an issue or inappropriate content to the app publisher. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-guidelines-content-aggregator-app.png" alt-text="Screenshot shows the passed scenario of content aggregator app to report issues.":::
Content aggregator apps must have a mechanism for users to report an issue or in
### Similar platforms and services
-[*Mandatory Fix*]
+[*Must fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line with [Microsoft commercial certification policy number 1140.1.3](/legal/marketplace/certification-policies#114013-other-platforms-and-services).
App feature names in buttons and other UI text mustn't use terminology reserved
### Authentication
-[*Mandatory Fix*]
+[*Must fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line 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
If your app authenticates users with an external service, follow these guidelines: * **Sign in, sign out, and sign up experiences**:
- * Apps that depend on external accounts or services must provide clear and simple sign in, sign out, and sign up experience. [*Mandatory Fix*]
- * When users sign out, they must sign out only from the app and remain signed in to Teams. [*Mandatory Fix*]
+ * Apps that depend on external accounts or services must provide clear and simple sign in, sign out, and sign up experience. [*Must fix*]
+ * When users sign out, they must sign out only from the app and remain signed in to Teams. [*Must fix*]
* Apps that depend on external accounts or services must provide a way forward for new users to sign up or contact the app publisher to learn more about the services and get access to the services.
- Way forward must be available in the appΓÇÖs manifest, AppSource long description, and app first run experience (bot welcome message, tab setup, or config page). [*Mandatory Fix*]
+ Way forward must be available in the appΓÇÖs manifest, AppSource long description, and app first run experience (bot welcome message, tab setup, or config page). [*Must fix*]
* Apps that require tenant admin to complete one-time setup must call out dependency on tenant admin to configure the app (before any other tenant user can install and use the app).
- Dependency must be called out in the appΓÇÖs manifest, AppSource long description, all first run experience touchpoints (bot welcome message, tab setup, or config page), help text as considered necessary as part of bot response, compose extensions, or static tab content. [*Mandatory Fix*]
+ Dependency must be called out in the appΓÇÖs manifest, AppSource long description, all first run experience touchpoints (bot welcome message, tab setup, or config page), help text as considered necessary as part of bot response, compose extensions, or static tab content. [*Must fix*]
* **Content sharing experiences**: Apps that require authentication with an external service to share content in Teams channels must clearly state in the help documentation (or similar resources) on how to disconnect or unshare content if that feature is supported on the external service. This doesn't mean the ability to unshare content must be present in your Teams app.
If your app authenticates users with an external service, follow these guideline
### Audio
-* If the primary intent of the app is to listen to music, it must support at least one collaborative scope with end-to-end workflow specific to app. For example, sharing of playlist, configuring or pinning playlist, and synchronously listening to music. [*Mandatory Fix*]
+* If the primary intent of the app is to listen to music, it must support at least one collaborative scope with end-to-end workflow specific to app. For example, sharing of playlist, configuring or pinning playlist, and synchronously listening to music. [*Must fix*]
-* Apps published with the primary intent of letting users listen to music in Teams are recommended to include collaborative co-listening experience. [*Suggested Fix*]
+* Apps published with the primary intent of letting users listen to music in Teams are recommended to include collaborative co-listening experience. [*Good-to-fix*]
## Security
If your app authenticates users with an external service, follow these guideline
### Financial information
-[*Mandatory Fix*]
+[*Must fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line 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 mustn't ask users to make payments within the Teams interface and transmit financial information to users through a bot interface. [*Mandatory Fix*]
+Apps mustn't ask users to make payments within the Teams interface and transmit financial information to users through a bot interface. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-financial-information-1.png" alt-text="validation-financial-info":::
-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. [*Mandatory Fix*]
+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. [*Must fix*]
-Don't facilitate payments through an app for goods or services prohibited by [General policy number 100.10 Inappropriate content](/legal/marketplace/certification-policies#10010-inappropriate-content). [*Mandatory Fix*]
+Don't facilitate payments through an app for goods or services prohibited by [General policy number 100.10 Inappropriate content](/legal/marketplace/certification-policies#10010-inappropriate-content). [*Must fix*]
Apps running on the iOS or Android version of Teams must adhere to the following guidelines:
-* Apps mustn't 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. [*Mandatory Fix*]
+* Apps mustn't 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. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-financial-information-in-app-purchase.png" alt-text="validation-financial-info-in-app-purchase"::: :::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. [*Mandatory Fix*]
-* You can determine whether an account is active indefinitely or for a limited time. When the account expires the app mustn't show UI, text, or links indicating the need to pay. [*Mandatory Fix*]
-* Your app's privacy policy and terms of use must be free of any commerce-related UI or links. [*Mandatory Fix*]
+* 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. [*Must fix*]
+* You can determine whether an account is active indefinitely or for a limited time. When the account expires the app mustn't show UI, text, or links indicating the need to pay. [*Must fix*]
+* Your app's privacy policy and terms of use must be free of any commerce-related UI or links. [*Must fix*]
</details> ### Bots
-[*Mandatory Fix*]
+[*Must fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line with [Microsoft commercial marketplace policy number 1140.3.2](/legal/marketplace/certification-policies#114032-bots-and-messaging-extension). <br></br>
Bots must always ask permission to upload a file and display a confirmation mess
### External domains
-[*Mandatory Fix*]
+[*Must fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line 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` app manifest property. <br></br>
Bots must always ask permission to upload a file and display a confirmation mess
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:
-* If your app relies on SharePoint, you can include the associated root SharePoint site as a valid domain using the `{teamSiteDomain}` context property. [*Mandatory Fix*]
-* Don't use top level domains such as **.com**, **.in**, and **.org** as a valid domain. [*Mandatory Fix*]
+* If your app relies on SharePoint, you can include the associated root SharePoint site as a valid domain using the `{teamSiteDomain}` context property. [*Must fix*]
+* Don't use top level domains such as **.com**, **.in**, and **.org** as a valid domain. [*Must fix*]
-* Don't use **.onmicrosoft.com or** as a valid domain where **onmicrosoft** isn't under your control. However, you can use **yoursite.com** as a valid domain where **yoursite** is under your control even though the domain includes a wildcard. [*Mandatory Fix*]
+* Don't use **.onmicrosoft.com or** as a valid domain where **onmicrosoft** isn't under your control. However, you can use **yoursite.com** as a valid domain where **yoursite** is under your control even though the domain includes a wildcard. [*Must fix*]
* If your app is a PowerApp built on the Microsoft Power Platform, you must include *apps.powerapps.com* as a valid domain to enable your app to be accessible and functional within Teams.
-* External domains declared for your submission must not contain URLs. For example, www or https. [*Mandatory Fix*]
+* External domains declared for your submission must not contain URLs. For example, www or https. [*Must fix*]
-* If your app uses the Azure Bot Service's OAuthCard, you must include *token.botframework.com* as a valid domain or else the Sign in button won't work. You mustn't declare *.botframework.com* as wildcards aren't allowed with this domain name. [*Mandatory Fix*]
+* If your app uses the Azure Bot Service's OAuthCard, you must include *token.botframework.com* as a valid domain or else the Sign in button won't work. You mustn't declare *.botframework.com* as wildcards aren't allowed with this domain name. [*Must fix*]
* OpenAPI URLs must be under partner control.
-* Following External Domains aren't allowed: [*Mandatory Fix*]
+* Following External Domains aren't allowed: [*Must fix*]
* *.azurewebsites.net * *.azureedge.com * *.microsoft.com
For example, *\*.\*.domain.com* is valid, but *foo.\*.myteam.domain.com* isn't v
### Sensitive content
-[*Mandatory Fix*]
+[*Must fix*]
Your app mustn't post sensitive data, such as credit card, financial payment details, health, contact tracing, or other personally identifiable information (PII) to an audience not intended to view the content.
App must warn users before downloading any files or executables (.exe) into the
### Launching external functionality
-[*Mandatory Fix*]
+[*Must fix*]
Apps mustn't 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 dialogs (referred as task modules in TeamsJS v1.x).
Apps mustn't take users out of Teams for core user scenarios. App content and in
<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. [*Mandatory Fix*]
+* 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. [*Must fix*]
-* 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**. [*Mandatory Fix*]
+* 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**. [*Must fix*]
-* Add **Pop-out** icon to let the users know that they're being navigated outside Teams. You can use the pop-out icon :::image type="icon" source="../../../../assets/icons/pop-out-icon.png" ::: to the right of the link. [*Mandatory Fix*]
+* Add **Pop-out** icon to let the users know that they're being navigated outside Teams. You can use the pop-out icon :::image type="icon" source="../../../../assets/icons/pop-out-icon.png" ::: to the right of the link. [*Must fix*]
-* If you're unable to add a **Pop-out** icon, you can implement any of the following options to let the user know that they're being navigated outside Teams: [*Mandatory Fix*]
+* If you're unable to add a **Pop-out** icon, you can implement any of the following options to let the user know that they're being navigated outside Teams: [*Must fix*]
* Add a note in Adaptive Card that states that when users select **Get Help using this app**, it takes the user outside Teams. * Add interstitials dialogs.
Apps mustn't take users out of Teams for core user scenarios. App content and in
### Compatibility
-[*Mandatory Fix*]
+[*Must fix*]
Apps must be fully functional on the latest versions of the following operating systems and browsers:
Your app must show a graceful failure message on unsupported browsers and operat
### Response time
-[*Mandatory Fix*]
+[*Must fix*]
Teams apps must respond within a reasonable time-frame or show a loading or typing indicator or message or warning.
-* Tabs must respond within two seconds or display a loading message or warning. [*Mandatory Fix*]
-* Bots must respond to user commands within two seconds or display a typing indicator. [*Mandatory Fix*]
-* Message extensions must respond to user commands within two seconds. [*Mandatory Fix*]
-* Notifications must display within two seconds of the user action. [*Mandatory Fix*]
+* Tabs must respond within two seconds or display a loading message or warning. [*Must fix*]
+* Bots must respond to user commands within two seconds or display a typing indicator. [*Must fix*]
+* Message extensions must respond to user commands within two seconds. [*Must fix*]
+* Notifications must display within two seconds of the user action. [*Must fix*]
### Apps powered by Artificial Intelligence
Explore resources designed to help you with responsible Artificial Intelligence
#### Apps with AI-generated content
-* App must not generate, contain, or provide access to inappropriate, harmful, or offensive AI generated content consistent with existing commercial marketplace policies outlined in [100.10](/legal/marketplace/certification-policies#10010-inappropriate-content). [*Mandatory Fix*]
+* App must not generate, contain, or provide access to inappropriate, harmful, or offensive AI generated content consistent with existing commercial marketplace policies outlined in [100.10](/legal/marketplace/certification-policies#10010-inappropriate-content). [*Must fix*]
* Consider using any of the following:
- * Use [Teams AI library](~/bots/how-to/teams-conversational-ai/teams-conversation-ai-overview.md), Teams-centric interface to GPT-based common language models and user intent engines. [*Suggested Fix*]
- * Use of moderation hooks, which can be used to regulate bot responses through moderation API. [*Suggested Fix*]
- * Add conversation sweeping capability, which helps you monitor conversations and intervene when conversations go astray. [*Suggested Fix*]
+ * Use [Teams AI library](~/bots/how-to/teams-conversational-ai/teams-conversation-ai-overview.md), Teams-centric interface to GPT-based common language models and user intent engines. [*Good-to-fix*]
+ * Use of moderation hooks, which can be used to regulate bot responses through moderation API. [*Good-to-fix*]
+ * Add conversation sweeping capability, which helps you monitor conversations and intervene when conversations go astray. [*Good-to-fix*]
-* App must provide mechanisms for app users to report inappropriate, harmful, or offensive content to the developer by any of the following mechanisms: [*Mandatory Fix*]
+* App must provide mechanisms for app users to report inappropriate, harmful, or offensive content to the developer by any of the following mechanisms: [*Must fix*]
* App description including mail ID or link to the portal to log the issue. * In app mechanism to log issue along with specific reference to the inappropriate content.
-* You must take timely action on reported concerns. [*Mandatory Fix*]
-* App must clearly describe AI functionality before the customer acquires the offer consistent with policy [100.1.3](/legal/marketplace/certification-policies#10013-description) and prompt user to review the info as a part of in-app functionality. [*Mandatory Fix*].
+* You must take timely action on reported concerns. [*Must fix*]
+* App must clearly describe AI functionality before the customer acquires the offer consistent with policy [100.1.3](/legal/marketplace/certification-policies#10013-description) and prompt user to review the info as a part of in-app functionality. [*Must fix*].
:::image type="content" source="../../../../assets/images/submission/teams-ai-library-description-guideline.png" alt-text="Screenshot shows the description for Ai functionality.":::
Explore resources designed to help you with responsible Artificial Intelligence
> [!NOTE] > Apps in this category may undergo additional review for adherence to MicrosoftΓÇÖs Responsible AI principles.
-* App must not allow use of facial recognition capabilities to identify an individual to be used by or for a police department in the United States. [*Mandatory Fix*]
-* For apps utilizing facial recognition or emotional inference technologies, you must provide a prominent tag or indication of each of these capabilities in the app description. [*Mandatory Fix*]
+* App must not allow use of facial recognition capabilities to identify an individual to be used by or for a police department in the United States. [*Must fix*]
+* For apps utilizing facial recognition or emotional inference technologies, you must provide a prominent tag or indication of each of these capabilities in the app description. [*Must fix*]
* Apps that use facial expressions or facial movements to infer emotional states, such as anger, disgust, happiness, sadness, surprise, fear, or other terms commonly used to describe the emotional state of a person can be restricted based on the review. * Use of facial expressions and movements to detect and classify only individual facial elements, such as smiles or raised eyebrows is permitted. The key distinction is between the detection of facial expressions or movements as visual signals versus the inference of an emotional state. ## App package and Teams Store listing
-[*Mandatory Fix*]
+[*Must fix*]
App packages must be correctly formatted and include all required information and components.
App packages must be correctly formatted and include all required information an
### App manifest
-[*Mandatory Fix*]
+[*Must fix*]
The app manifest defines your app's configuration.
The app manifest defines your app's configuration.
### Uses of latest app manifest schema
-* If your app uses Single sign-on (SSO), you must declare Microsoft Entra ID in the app manifest for user authentication. [*Mandatory Fix*]
+* If your app uses Single sign-on (SSO), you must declare Microsoft Entra ID in the app manifest for user authentication. [*Must fix*]
-* You must use a publicly released app manifest schema. You can update your app package to use a public version of app manifest schema 1.10 or later. [*Mandatory Fix*]
+* You must use a publicly released app manifest schema. You can update your app package to use a public version of app manifest schema 1.10 or later. [*Must fix*]
-* When you submit an app update, only increase the app version number. App ID of the updated app must match the App ID of the published app. [*Mandatory Fix*]
+* When you submit an app update, only increase the app version number. App ID of the updated app must match the App ID of the published app. [*Must fix*]
-* The presence of additional files within the app package isn't acceptable. [*Mandatory Fix*]
+* The presence of additional files within the app package isn't acceptable. [*Must fix*]
-* The version number must be the same in the app manifest file schema and additional languages app manifest schema. [*Mandatory Fix*]
+* The version number must be the same in the app manifest file schema and additional languages app manifest schema. [*Must fix*]
-* You must use the app manifest schema version 1.5 or later to localize your app. To use the app schema version 1.5 or later in your manifest.json file, update the `$schema` attribute to 1.5 or later. Update the `manifestVersion` property to `$schema` version (1.5 in this case). [*Mandatory Fix*]
+* You must use the app manifest schema version 1.5 or later to localize your app. To use the app schema version 1.5 or later in your manifest.json file, update the `$schema` attribute to 1.5 or later. Update the `manifestVersion` property to `$schema` version (1.5 in this case). [*Must fix*]
-* When you add, update, or remove an existing capability, add or remove app manifest or Partner Center metadata, you must increase the app version number and submit the new app manifest in your Partner Center account for validation. [*Mandatory Fix*]
+* When you add, update, or remove an existing capability, add or remove app manifest or Partner Center metadata, you must increase the app version number and submit the new app manifest in your Partner Center account for validation. [*Must fix*]
-* The version string must follow the Semantic Versioning Specification (SemVer) standard (MAJOR.MINOR.PATCH). [*Mandatory Fix*]
+* The version string must follow the Semantic Versioning Specification (SemVer) standard (MAJOR.MINOR.PATCH). [*Must fix*]
-* If your app requires admins to review permissions and grant consent in Teams admin center, you must declare `webapplicationinfo` in the app manifest. If `webapplicationinfo` isn't declared in the app manifest, the **Permissions** page for your app in Teams admin center is shown as **...** [*Mandatory Fix*]
+* If your app requires admins to review permissions and grant consent in Teams admin center, you must declare `webapplicationinfo` in the app manifest. If `webapplicationinfo` isn't declared in the app manifest, the **Permissions** page for your app in Teams admin center is shown as **...** [*Must fix*]
-* As part of Teams app certification, you must submit a production version of the app manifest. [*Mandatory Fix*]
+* As part of Teams app certification, you must submit a production version of the app manifest. [*Must fix*]
-* We recommend that you declare the Microsoft Cloud Partner Program ID (CCP ID), formerly known as Microsoft Partner Network (MPN ID) in the app manifest. The CCP ID helps identify the partner organization that builds the app. [*Suggested Fix*]
+* We recommend that you declare the Microsoft Cloud Partner Program ID (CCP ID), formerly known as Microsoft Partner Network (MPN ID) in the app manifest. The CCP ID helps identify the partner organization that builds the app. [*Good-to-Fix*]
-* Scopes and/or context declared in app manifest must be visible within the app. [*Mandatory Fix*]
+* Scopes and/or context declared in app manifest must be visible within the app. [*Must fix*]
### App icons
-[*Mandatory Fix*]
+[*Must fix*]
Icons are one of the main elements people see when browsing the Teams Store. <br></br>
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:
-* App's color and outline icon submitted in the app listing must match. [*Mandatory Fix*]
+* App's color and outline icon submitted in the app listing must match. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/color-outline-icon-same.png" alt-text="Screenshot shows color icon and outline icon are same."::: :::image type="content" source="../../../../assets/images/submission/color-outline-icon-not-same.png" alt-text="Screenshot shows color icon and outline icon arenΓÇÖt same.":::
-* Your app package must include two .png versions of your app icon: A color icon and an outline icon. [*Mandatory Fix*]
-* The marketplace icon uploaded as part of the app's marketplace listing in your Partner Center account must match the color icon provided in your app package. [*Mandatory Fix*]
-* 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. [*Mandatory Fix*]
+* Your app package must include two .png versions of your app icon: A color icon and an outline icon. [*Must fix*]
+* The marketplace icon uploaded as part of the app's marketplace listing in your Partner Center account must match the color icon provided in your app package. [*Must fix*]
+* 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. [*Must fix*]
* The outline version of your icon is displayed in the following scenarios: * When your app is in use and **hosted** on the app bar on the left side of Teams. * When a user pins your app's message extension.
-* The outline must be 32x32 pixels and can be white with a transparent background or transparent with a white background. The icon mustn't have any extra padding around the symbol. [*Mandatory Fix*]
+* The outline must be 32x32 pixels and can be white with a transparent background or transparent with a white background. The icon mustn't have any extra padding around the symbol. [*Must fix*]
-* Your app package must include correctly sized and formatted icons. The icons must match the information in Teams Store listing metadata. [*Mandatory Fix*]
+* Your app package must include correctly sized and formatted icons. The icons must match the information in Teams Store listing metadata. [*Must fix*]
For more information, see [icon guidelines](~/concepts/build-and-test/apps-package.md#app-icons).
You must have a short and long description for your app. App description helps i
Descriptions mustn't directly or through suggestion derogate another brand (Microsoft owned or otherwise). Ensure that your description doesnΓÇÖt include claims that canΓÇÖt be substantiated. For example, Guaranteed 200 percent increase in efficiency.
-* App description mustn't contain comparative marketing information. For example, don't use competitor logos or trademarks in the offer listing including tags or other metadata that references competing offers or marketplaces. [*Mandatory Fix*]
+* App description mustn't contain comparative marketing information. For example, don't use competitor logos or trademarks in the offer listing including tags or other metadata that references competing offers or marketplaces. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-app-description-comparitive-marketing-fail.png" alt-text="Graphic shows an example of comparative marketing information in app description.":::
-* Hyperlink contact details, get started, help, or sign up in app description. [*Suggested Fix*]
+* Hyperlink contact details, get started, help, or sign up in app description. [*Good-to-fix*]
:::image type="content" source="../../../../assets/images/submission/validation-app-description-contact-deatils-hyperlinked.png" alt-text="Graphic shows an example of contact details hyperlinked in the app descriptions."::: :::image type="content" source="../../../../assets/images/submission/validation-app-description-contact-deatils-not-hyperlinked.png" alt-text="Graphic shows an example of contact details not hyperlinked in the app descriptions.":::
-* App description must identify the intended audience, briefly and clearly explain its unique and distinct value, identify supported Microsoft products and other software, and include any prerequisites or requirements for its use. You must clearly describe any limitations, conditions, or exceptions to the functionality, features, and deliverables as described in the listing and related materials before the customer acquires your offer. The capabilities you declare must relate to the core functions and description of your offer. [*Mandatory Fix*]
+* App description must identify the intended audience, briefly and clearly explain its unique and distinct value, identify supported Microsoft products and other software, and include any prerequisites or requirements for its use. You must clearly describe any limitations, conditions, or exceptions to the functionality, features, and deliverables as described in the listing and related materials before the customer acquires your offer. The capabilities you declare must relate to the core functions and description of your offer. [*Must fix*]
-* If you update your app name, replace the old app name with new app name in the offer metadata in the app manifest, AppSource, and wherever applicable. [*Mandatory Fix*]
+* If you update your app name, replace the old app name with new app name in the offer metadata in the app manifest, AppSource, and wherever applicable. [*Must fix*]
* Limitations and account dependencies must be called out in the manifest App Description, AppSource, and Partner Center. For example: * Enterprise account
Descriptions mustn't directly or through suggestion derogate another brand (Micr
* If your app is supported for specific regions or geographical locations, you must call out that specific region dependency in the app description in app manifest, Partner Center, and AppSource for that offer.
-* If you need to reference Teams, write the first reference in the app listing as Microsoft Teams. Later references can be shortened to Teams. [*Mandatory Fix*]
+* If you need to reference Teams, write the first reference in the app listing as Microsoft Teams. Later references can be shortened to Teams. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-app-description-teams-reference-pass.png" alt-text="Graphic shows an example of correct reference to Teams in app description.":::
A short description must be a concise summary of your app that highlights its va
**Don't:**
-[*Suggested Fix*]
+[*Good-to-fix*]
Use the word **app** in the short description.
The long description must provide an engaging narrative that highlights your app
**Don'ts:**
-[*Mandatory Fix*]
+[*Must fix*]
* Exceed 500 words. * Abbreviate **Microsoft** as **MS** or **MSFT**.
Remember the following:
* Include content that accurately represents your app. * Use text judiciously. * Frame screenshots with a color that reflects your brand and include marketing content.
-* Use high-resolution screenshots that are sharp and contain legible and clearly readable text. [*Mandatory Fix*]
-* At least one screenshot must depict your appΓÇÖs functionality on mobile devices. [*Mandatory Fix*]
+* Use high-resolution screenshots that are sharp and contain legible and clearly readable text. [*Must fix*]
+* At least one screenshot must depict your appΓÇÖs functionality on mobile devices. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-guidelines-pass-app-functionality-mobile.png" alt-text="Screenshot shows the passed scenario of app functionality on mobile devices.":::
-* You can have up to five screenshots per listing. You must have a minimum of three and maximum five screenshots in your app listing. [*Mandatory Fix*]
-* Use mockups that accurately depict the appΓÇÖs actual UI for the benefit of end-users. Screenshots must accurately depict the appΓÇÖs actual UI or scenarios relevant to and related to the app. [*Mandatory Fix*]
+* You can have up to five screenshots per listing. You must have a minimum of three and maximum five screenshots in your app listing. [*Must fix*]
+* Use mockups that accurately depict the appΓÇÖs actual UI for the benefit of end-users. Screenshots must accurately depict the appΓÇÖs actual UI or scenarios relevant to and related to the app. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-guidelines-fail-suppliement-screenshot.png" alt-text="Screenshot shows the failed scenario of supplement content used in screenshot."::: :::image type="content" source="../../../../assets/images/submission/validation-guidelines-fail-actual-UI.png" alt-text="Screenshot shows the failed scenario of screenshot of app's actual UI.":::
-* Must depict app functionality or integration with Teams. [*Mandatory Fix*]
+* Must depict app functionality or integration with Teams. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-guidelines-fail-app-functionality.png" alt-text="Screenshot shows the failed scenario of app functionality or integration.":::
-* Provided screenshots mustn't incorrectly reference Microsoft Teams as MS, MSFT, or MS Teams. [*Mandatory Fix*]
+* Provided screenshots mustn't incorrectly reference Microsoft Teams as MS, MSFT, or MS Teams. [*Must fix*]
-* If your Teams app is extensible across Microsoft 365 clients (Microsoft 365, Outlook, and Microsoft Teams), the screenshots provided must depict the app functionality in other Microsoft 365 clients. [*Mandatory Fix*]
+* If your Teams app is extensible across Microsoft 365 clients (Microsoft 365, Outlook, and Microsoft Teams), the screenshots provided must depict the app functionality in other Microsoft 365 clients. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-guidelines-pass-app-functionality-MS-365.png" alt-text="Screenshot shows the passed scenario of Teams app functionality in MS 365 clients.":::
-* You must provide captions in your screenshots to let the user clearly understand the app capability. [*Mandatory Fix*]
+* You must provide captions in your screenshots to let the user clearly understand the app capability. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-guidelines-pass-app-functionality.png" alt-text="Screenshot shows the passed scenario of user attention for app functionality.":::
-* If your app supports Tabs as a capability, the screenshots showcasing the app in the context of a Teams tab, in app listing, must contain TeamΓÇÖs chrome. [*Mandatory Fix*]
+* If your app supports Tabs as a capability, the screenshots showcasing the app in the context of a Teams tab, in app listing, must contain TeamΓÇÖs chrome. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-guildelines-pass-tabs-capability.png" alt-text="Screenshot shows the passed scenario of screenshot of tab capability.":::
Remember the following:
### Videos
-A video in your app listing is one of the most effective ways to communicate why people must use your app. You can add your YouTube or Vimeo video URL that provides the value of your app. Also, as a best practice, we recommended that you add a video that provides the demo or scenario walkthrough of your app. [*Suggested fix*]
+A video in your app listing is one of the most effective ways to communicate why people must use your app. You can add your YouTube or Vimeo video URL that provides the value of your app. Also, as a best practice, we recommended that you add a video that provides the demo or scenario walkthrough of your app. [*Good-to-fix*]
If you choose to submit a video as part of your app listing in your Partner Center account, ensure that you meet the following criteria: * The video must be short, clear, engaging, and of good quality. * The video must demonstrate how to set up and use the app. * The video must be in a narrative form.
-* The duration of the video must be within 60-90 seconds for a value video and the recommended duration for a walkthrough video is 3-5 minutes. [*Suggested Fix*]
-* You must turn off advertisements from your YouTube or Vimeo account settings before submitting the video link in the app listing. [*Mandatory Fix*]
-* The video must highlight your appΓÇÖs functionalities and integration within Teams. [*Mandatory Fix*]
-* The video must be available as a functional link. [*Mandatory Fix*]
+* The duration of the video must be within 60-90 seconds for a value video and the recommended duration for a walkthrough video is 3-5 minutes. [*Good-to-fix*]
+* You must turn off advertisements from your YouTube or Vimeo account settings before submitting the video link in the app listing. [*Must fix*]
+* The video must highlight your appΓÇÖs functionalities and integration within Teams. [*Must fix*]
+* The video must be available as a functional link. [*Must fix*]
* The video must be in the format `https://www.youtube.com/watch?v=:id` or `https://youtu.be/:id` for YouTube and `https://vimeo.com/:id` for Vimeo. :::image type="content" source="../../../../assets/images/submission/video-app-listing-partner-center.png" alt-text="Screenshot shows the failed scenario of video submitted as part of app listing in partner center.":::
-* The video can be surfaced in the first position of the screenshots or videos carousel in the app details (Teams Store and Admin Center) and AppSource pages. [*Suggested Fix*]
+* The video can be surfaced in the first position of the screenshots or videos carousel in the app details (Teams Store and Admin Center) and AppSource pages. [*Good-to-fix*]
* The video on demo or scenario walkthrough must intend to educate users and not to promote your app. For more information on the criteria for creating an app value video or walkthrough video, see the [checklist to create a video](submission-checklist.md#create-a-video).
For more information on the criteria for creating an app value video or walkthro
### Privacy policy
-[*Mandatory Fix*]
+[*Must fix*]
The privacy policy can be specific to your Teams app or an overall policy for all your services.
The privacy policy can be specific to your Teams app or an overall policy for al
### Terms of use
-[*Mandatory Fix*]
+[*Must fix*]
Use the following guidelines to write the Terms of use:
Use the following guidelines to write the Terms of use:
### Support links
-[*Mandatory Fix*]
+[*Must fix*]
Your app's support URLs mustn't require authentication. For example, users must be allowed to contact you without sign in. <br></br>
Support URLs must include your contact details or a way forward for users to rai
### Localization
-[*Mandatory Fix*]
+[*Must fix*]
-* If your app supports localization, your app package must include a file with language translations that display based on the Teams language setting. The file must conform to the Teams localization schema. For more information, see [Teams localization schema](~/concepts/build-and-test/apps-localization.md). [*Mandatory Fix*]
+* If your app supports localization, your app package must include a file with language translations that display based on the Teams language setting. The file must conform to the Teams localization schema. For more information, see [Teams localization schema](~/concepts/build-and-test/apps-localization.md). [*Must fix*]
-* App metadata content must be the same in `en-us` and other localization languages. [*Mandatory Fix*]
+* App metadata content must be the same in `en-us` and other localization languages. [*Must fix*]
-* Supported languages must be displayed in the AppSource app description. For example, this app is available in X (X= localized language). [*Mandatory Fix*]
+* Supported languages must be displayed in the AppSource app description. For example, this app is available in X (X= localized language). [*Must fix*]
-* If the user's client settings don't match with any of your additional languages, the default language is used as the final fallback language. Update the `localizationInfo` property with the correct default language that your application supports. [*Mandatory Fix*]
+* If the user's client settings don't match with any of your additional languages, the default language is used as the final fallback language. Update the `localizationInfo` property with the correct default language that your application supports. [*Must fix*]
-* Update the `localizationInfo` property with the correct default language your application supports or add localized content for app manifest and Partner Center long and short description. [*Mandatory Fix*]
+* Update the `localizationInfo` property with the correct default language your application supports or add localized content for app manifest and Partner Center long and short description. [*Must fix*]
## Apps linked to SaaS offer
If your app includes a tab, ensure that it adheres to these guidelines.
</br> <details><summary>Setup</summary>
-* Tab setup **mustn't dead-end** a new user. Provide a message on how to complete the action or workflow. [*Mandatory Fix*]
+* Tab setup **mustn't dead-end** a new user. Provide a message on how to complete the action or workflow. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-new-user.png" alt-text="Graphic shows an example of Tab with a dead-end on setup.":::
-* The user mustn't leave the tab configuration experience inside Teams to create content outside Teams and then return to Teams to pin it. Tab configuration screen must explain the value of configuration and how to configure. [*Mandatory Fix*]
+* The user mustn't leave the tab configuration experience inside Teams to create content outside Teams and then return to Teams to pin it. Tab configuration screen must explain the value of configuration and how to configure. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-profile-name.png" alt-text="validation-tabs-set-up-profile-name":::
-* Tab configuration screen mustn't 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*]
+* Tab configuration screen mustn't 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. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-configuration-experience.png" alt-text="validation-tabs-setup-configuration-exp"::: :::image type="content" source="../../../../assets/images/submission/validation-tabs-setup-configuration-screen.png" alt-text="validation-tabs-set-up-configuration-screen"::: * Apps that require users to input a URL while configuring a tab must:
- * Provide an appropriate way forward guidance for the user to acquire or generate the URL. [*Mandatory Fix*]
- * Check for URL that is relevant or appropriate to the appΓÇÖs functionality as per the app description. [*Mandatory Fix*]
+ * Provide an appropriate way forward guidance for the user to acquire or generate the URL. [*Must fix*]
+ * Check for URL that is relevant or appropriate to the appΓÇÖs functionality as per the app description. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-tab-configuration-way-forward-url-pass.png" alt-text="Screenshot shows an example of tab configuration with a way forward for user to generate a URL."::: :::image type="content" source="../../../../assets/images/submission/validation-tab-configuration-way-forward-url-fail.png" alt-text="Screenshot shows an example of tab configuration without a way forward for user to generate a URL.":::
-* Hyperlink the contact us information in the configuration screen instead of plain text to help users to contact you for support requirements. [*Mandatory Fix*]
+* Hyperlink the contact us information in the configuration screen instead of plain text to help users to contact you for support requirements. [*Must fix*]
-* For a seamless first run user experience, we recommend that you hyperlink your support URL or email in the configuration screen. [*Suggested Fix*]
+* For a seamless first run user experience, we recommend that you hyperlink your support URL or email in the configuration screen. [*Good-to-fix*]
</details> </br> <details><summary>Views</summary>
-* The sign in screen area mustn't use large logos. [*Mandatory Fix*]
+* The sign in screen area mustn't use large logos. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-views-applogin.png" alt-text="validation-views-app-login":::
If your app includes a tab, ensure that it adheres to these guidelines.
:::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 duplicate logos from the I-frame since the tab framework already displays the app icon and name. [*Suggested Fix*]
+* Tabs shouldn't have a duplicate header. Remove duplicate logos from the I-frame since the tab framework already displays the app icon and name. [*Good-to-fix*]
:::image type="content" source="../../../../assets/images/submission/validation-views-no-duplicate-header-logo.png" alt-text="Graphic shows an example of a tab without duplicate headers and logos.":::
If your app includes a tab, ensure that it adheres to these guidelines.
The following are the navigation guidelines:
-* Tabs mustn't provide navigation that conflicts with the primary Teams navigation. If you provide a left navigation in your tab, it mustn't include only icons or icons with stacked text. It mustn't be a collapsible rail with the option to see icons with stacked text (mimicking the Teams navigation bar). Include icons with in line text or only text or use hamburger menus instead of tab left rail. [*Mandatory Fix*]
+* Tabs mustn't provide navigation that conflicts with the primary Teams navigation. If you provide a left navigation in your tab, it mustn't include only icons or icons with stacked text. It mustn't be a collapsible rail with the option to see icons with stacked text (mimicking the Teams navigation bar). Include icons with in line text or only text or use hamburger menus instead of tab left rail. [*Must fix*]
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.
The following are the navigation guidelines:
:::image type="content" source="../../../../assets/images/submission/validation-navigation-left-navigation.png" alt-text="Graphic shows an example of left navigation rail that conflicts with the primary Teams navigation.":::
-* If your tab has a toolbar on the left rail without any navigation component, the toolbar must leave 20 pixels spacing from Teams left navigation. [*Mandatory Fix*]
+* If your tab has a toolbar on the left rail without any navigation component, the toolbar must leave 20 pixels spacing from Teams left navigation. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-navigation-spacing-between-toolbar.png" alt-text="validation-nav-spacing-between-toolbar":::
The following are the navigation guidelines:
:::image type="content" source="../../../../assets/images/submission/validation-in-meeting-improper-navigation-leveles.png" alt-text="Screenshot that shows an example of in-meeting dialog with multiple navigation levels.":::
-* Deep links in tabs mustn't link to an external webpage but within Teams. For example, dialogs or other tabs. [*Mandatory Fix*]
+* Deep links in tabs mustn't link to an external webpage but within Teams. For example, dialogs or other tabs. [*Must fix*]
:::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 mustn't 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*]
+* Tabs mustn't 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. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-navigation-core-workflow-within-configuration.png" alt-text="validation-nav-core-workflow-within-configuration"::: :::image type="content" source="../../../../assets/images/submission/validation-navigation-core-workflow-redirects-outside.png" alt-text="validation-nav-core-workflow-redirects-outside":::
-* Horizontal scroll mustn't be present in an in-meeting tab. [*Mandatory Fix*]
+* Horizontal scroll mustn't be present in an in-meeting tab. [*Must fix*]
-* In-meeting dialogs used in your app mustn't allow horizontal scrolling. Use in-meeting dialogs sparingly and for scenarios that are light and task oriented. You can specify the width of the in-meeting dialogΓÇÖs I-frame within the supported size range to account for different scenarios. [*Mandatory Fix*]
-* Dialogs used in your app mustn't allow horizontal scrolling. Dialogs allow you to select different sizes to make the content responsive without the need of Horizontal scroll. If necessary, you can use a Stageview (a full screen UI component to surface your web content) to complete the workflow without Horizontal scroll. [*Mandatory Fix*]
+* In-meeting dialogs used in your app mustn't allow horizontal scrolling. Use in-meeting dialogs sparingly and for scenarios that are light and task oriented. You can specify the width of the in-meeting dialogΓÇÖs I-frame within the supported size range to account for different scenarios. [*Must fix*]
+* Dialogs used in your app mustn't allow horizontal scrolling. Dialogs allow you to select different sizes to make the content responsive without the need of Horizontal scroll. If necessary, you can use a Stageview (a full screen UI component to surface your web content) to complete the workflow without Horizontal scroll. [*Must fix*]
-* Horizontal scroll present in the tab in a personal chat, channel, and in-meeting details tab in any scope isn't allowed if the entire tab canvas is scrollable, unless your tab uses an infinite canvas with fixed UI elements. [*Mandatory Fix*]
+* Horizontal scroll present in the tab in a personal chat, channel, and in-meeting details tab in any scope isn't allowed if the entire tab canvas is scrollable, unless your tab uses an infinite canvas with fixed UI elements. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-horizontal-scroll-allowed-scenarios.png" alt-text="Graphic shows examples of all the scenarios in mobile where horizontal scroll is allowed.":::
The following are the navigation guidelines:
:::image type="content" source="../../../../assets/images/submission/validation-horizontal-scroll-in-list-view.png" alt-text="Graphic shows an example of horizontal scroll in list view.":::
-* The user must have an option to go to previous work state. [*Mandatory Fix*]
+* The user must have an option to go to previous work state. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/back-button-available.png" alt-text=" Screenshot shows back button option available."::: :::image type="content" source="../../../../assets/images/submission/no-back-button-available.png" alt-text="Screenshot shows failed scenario of no back button option available.":::
-* Horizontal scroll in Adaptive Cards mustn't be present in Teams. [*Mandatory Fix*]
+* Horizontal scroll in Adaptive Cards mustn't be present in Teams. [*Must fix*]
-* Bottom rail used for navigation in tabs mustn't conflict with Teams native mobile app navigation. [*Mandatory Fix*]
+* Bottom rail used for navigation in tabs mustn't conflict with Teams native mobile app navigation. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-tab-bottom-rail-conflicts-with-teams-mobile.png" alt-text="Graphic shows an example of a tab that conflicts with Teams native mobile app navigation.":::
The following are the navigation guidelines:
<details><summary>Usability</summary>
-* Content mustn't truncate or overlap within the tab. [*Mandatory Fix*]
+* Content mustn't truncate or overlap within the tab. [*Must fix*]
:::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. [*Mandatory Fix*]
+* Users must be able to undo their last action in the tab. [*Must fix*]
-* Tabs in a personal context may aggregate content from shared instances of the app. For example, a project management app with a configurable tab that lets channel members comment on the project on Kanban cards, must aggregate this content and display in the personal app. [*Suggested Fix*]
+* Tabs in a personal context may aggregate content from shared instances of the app. For example, a project management app with a configurable tab that lets channel members comment on the project on Kanban cards, must aggregate this content and display in the personal app. [*Good-to-fix*]
-* Tabs must be responsive to Teams themes. When a user changes the theme, the app's theme must reflect the selection. [*Suggested Fix*]
+* Tabs must be responsive to Teams themes. When a user changes the theme, the app's theme must reflect the selection. [*Good-to-fix*]
:::image type="content" source="../../../../assets/images/submission/validation-usability-responsive-tabs.png" alt-text="Graphic shows an example of a tab responsive to a theme in Teams."::: :::image type="content" source="../../../../assets/images/submission/validation-usability-unresponsive-tabs.png" alt-text="Graphic shows an example of a Tab not responsive to theme in Teams.":::
-* Tabs must use Teams styled components such as, Teams fonts, type ramps, color palettes, grid system, motion, tone of voice, whenever possible. For more information, see [tab design guidelines](/microsoftteams/platform/tabs/design/tabs). [*Suggested Fix*]
+* Tabs must use Teams styled components such as, Teams fonts, type ramps, color palettes, grid system, motion, tone of voice, whenever possible. For more information, see [tab design guidelines](/microsoftteams/platform/tabs/design/tabs). [*Good-to-fix*]
:::image type="content" source="../../../../assets/images/submission/validation-usability-app-uses-diff-font.png" alt-text="Screenshot shows an example of a tab with calibri font instead of native Teams 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. For more information, see [Microsoft Teams Fluent UI kit](~/concepts/design/design-teams-app-basic-ui-components.md). [*Suggested Fix*]
+* If your app functionality requires changes in settings, include a **Settings** tab. [*Good-to-fix*]
+* Tabs must follow Teams interaction design such as, in-page navigation, position and use of dialogs, information hierarchies. For more information, see [Microsoft Teams Fluent UI kit](~/concepts/design/design-teams-app-basic-ui-components.md). [*Good-to-fix*]
-* Tab experiences must be fully responsive on mobile (Android and iOS). [*Mandatory Fix*]
+* Tab experiences must be fully responsive on mobile (Android and iOS). [*Must fix*]
> [!TIP] > > * Include a personal bot alongside a personal tab. > * Allow users to share content from their personal tab.
-* Tab mustn't contain elements that completely obstruct or impede workflows within the tab. For example, bot inside a tab that can't be minimized. [*Mandatory Fix*]
+* Tab mustn't contain elements that completely obstruct or impede workflows within the tab. For example, bot inside a tab that can't be minimized. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-tab-elements-impede-workflow.png" alt-text="Graphic shows an example of tab with elements that impede workflows within the tab.":::
-* Tab mustn't have a broken functionality. Your offer must be a usable software solution and must provide the functionality, features, and deliverables as described in your listing and other related materials. [*Mandatory Fix*]
+* Tab mustn't have a broken functionality. Your offer must be a usable software solution and must provide the functionality, features, and deliverables as described in your listing and other related materials. [*Must fix*]
-* If your tabs contain a footer, ensure that you remove all links unrelated to app functionality from the footer. [*Mandatory Fix*]
+* If your tabs contain a footer, ensure that you remove all links unrelated to app functionality from the footer. [*Must fix*]
</details> </br> <details><summary>Scope selection</summary>
-* Content in the landing page of configurable tabs mustn't be scoped for individual use and not include personal content such as **My Tasks** or **My Dashboard**. [*Mandatory Fix*]
+* Content in the landing page of configurable tabs mustn't be scoped for individual use and not include personal content such as **My Tasks** or **My Dashboard**. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-configurable-tab-content-personal-scope.png" alt-text="Graphic shows an example of content in a configurable tab with personal scope such as My tasks or My dashboard.":::
-* After the configuration experience, the landing page must show a collaborative view for the entire team. [*Mandatory Fix*]
+* After the configuration experience, the landing page must show a collaborative view for the entire team. [*Must fix*]
-* 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. [*Mandatory Fix*]
+* 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. [*Must fix*]
-* Content in the landing page of the configurable tabs must be contextually same for all members of the channel. [*Mandatory Fix*]
+* Content in the landing page of the configurable tabs must be contextually same for all members of the channel. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-usability-configurable-tab-personal-info.png" alt-text="Graphic shows an example of content in the landing page of the configurable tabs contextually different for all members.":::
-* Configurable tabs must have focused functionality. [*Mandatory Fix*]
+* Configurable tabs must have focused functionality. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-usability-configurable-nested-tabs.png" alt-text="validation-usability-configurable-nested-tab":::
If your app includes a bot, ensure that it adheres to these guidelines.
* Your Teams app must follow [Teams bot design guidelines](../../../../bots/design/bots.md).
-* You must implement a dialog to avoid multi-turn bot response when the workflow involves the user performing repetitive tasks. For example, use a dialog to repetitively capture name, dob, place, and designation instead of using multi-turn conversations. [*Mandatory Fix*]
+* You must implement a dialog to avoid multi-turn bot response when the workflow involves the user performing repetitive tasks. For example, use a dialog to repetitively capture name, dob, place, and designation instead of using multi-turn conversations. [*Must fix*]
-* Any broken links, responses, or workflows in your app must be fixed. [*Mandatory Fix*]
+* Any broken links, responses, or workflows in your app must be fixed. [*Must fix*]
</details>
If your app includes a bot, ensure that it adheres to these guidelines.
Analyzing user input and predicting user intent is difficult. Bot commands provide users a set of words or phrases for your bot to understand.
-* All commands that your bot supports must work correctly, including generic commands such as **Hi**, **Hello**, and **Help**. [*Mandatory Fix*]
+* All commands that your bot supports must work correctly, including generic commands such as **Hi**, **Hello**, and **Help**. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-commands-generic-response-pass.png" alt-text="Graphic shows an example of bot responding to generic commands."::: :::image type="content" source="../../../../assets/images/submission/validation-bot-commands-generic-no-response.png" alt-text="Graphic shows an example of bot with no response to generic commands.":::
-* Bot commands mustn't lead a user to a dead end, the commands must always provide a way forward. [*Mandatory Fix*]
+* Bot commands mustn't lead a user to a dead end, the commands must always provide a way forward. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-commands-deadend.png" alt-text="validation-bot-commands-dead-end":::
-* You must list at least one valid bot command in the `items.commands.title` section of the app manifest and add a suitable description that gives clarity to the user on the bot command and its usage. Bot commands listed in the `commandLists` section of the app manifest surface as prepopulated commands in the bot command menu and provide a way forward for the new user to interact with the bot. [*Suggested Fix*]
+* You must list at least one valid bot command in the `items.commands.title` section of the app manifest and add a suitable description that gives clarity to the user on the bot command and its usage. Bot commands listed in the `commandLists` section of the app manifest surface as prepopulated commands in the bot command menu and provide a way forward for the new user to interact with the bot. [*Good-to-fix*]
-* Bot response mustn't contain any official Microsoft product images or avatars. Use your own assets in your app. Use of Microsoft product images in your app isn't allowed. You may only copy, modify, distribute, display, license, or sell Microsoft copyrighted product images if you're granted explicit permission within the End-User License Agreement (EULA), license terms that accompany the content, or in the [Microsoft Trademark and Brand guidelines](https://www.microsoft.com/legal/intellectualproperty/trademarks). [*Mandatory Fix*]
+* Bot response mustn't contain any official Microsoft product images or avatars. Use your own assets in your app. Use of Microsoft product images in your app isn't allowed. You may only copy, modify, distribute, display, license, or sell Microsoft copyrighted product images if you're granted explicit permission within the End-User License Agreement (EULA), license terms that accompany the content, or in the [Microsoft Trademark and Brand guidelines](https://www.microsoft.com/legal/intellectualproperty/trademarks). [*Must fix*]
-* Bots must respond to user commands without displaying a continuous loading indicator. [*Mandatory Fix*]
+* Bots must respond to user commands without displaying a continuous loading indicator. [*Must fix*]
-* Bot help command response mustn't redirect the user outside Teams. Bot help command response can redirect user to a canvas within the Teams app or provide a way forward response in an Adaptive Card. [*Mandatory Fix*]
+* Bot help command response mustn't redirect the user outside Teams. Bot help command response can redirect user to a canvas within the Teams app or provide a way forward response in an Adaptive Card. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-redirects-user-outside-teams.png" alt-text="Graphic shows an example of bot response redirecting user outside of Teams.":::
-* Bots must always provide a valid response to a user input even if the input is irrelevant or improper. [*Mandatory Fix*]
+* Bots must always provide a valid response to a user input even if the input is irrelevant or improper. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-response-valid-improper-input.png" alt-text="Graphic shows an example of a valid response for improper bot command."::: :::image type="content" source="../../../../assets/images/submission/validation-bot-response-improper-response-invalid-command.png" alt-text="Graphic shows an example of an invalid response for improper bot command.":::
-* Special characters such as slash (**/**), mustn't be prefixed to bot commands. [*Mandatory Fix*]
+* Special characters such as slash (**/**), mustn't be prefixed to bot commands. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-commands-special-characters.png" alt-text="Graphic shows an example of a failed scenario where special characters are prefixed to bot commands.":::
-* Bots must provide a valid response to invalid user commands. Bots mustn't dead-end the user or display an error if a user sends an invalid bot command. [*Mandatory Fix*]
+* Bots must provide a valid response to invalid user commands. Bots mustn't dead-end the user or display an error if a user sends an invalid bot command. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-way-forward-for-invalid-command.png" alt-text="Graphic shows an example of bot providing a way forward for an invalid command."::: :::image type="content" source="../../../../assets/images/submission/validation-welcome-message-bot-dead-end-invalid-command.png" alt-text="Graphic shows an example of a failed scenario where a bot sends a same response for a valid and invalid command.":::
-* Bot functionality must be relevant to the scope in which the bot is installed and the bot must provide value in the installed scope. [*Mandatory Fix*]
+* Bot functionality must be relevant to the scope in which the bot is installed and the bot must provide value in the installed scope. [*Must fix*]
-* Bots mustn't contain duplicate commands. [*Mandatory Fix*]
+* Bots mustn't contain duplicate commands. [*Must fix*]
-* Bots mustn't display a typing indicator after responding to the user command, but can display a typing indicator while responding to the user command. [*Mandatory Fix*]
+* Bots mustn't display a typing indicator after responding to the user command, but can display a typing indicator while responding to the user command. [*Must fix*]
-* Bots must provide a valid response to the **help** command typed in lowercase or uppercase that provides the user with a way forward or lets the user access the help content related to the bot usage. Bots must provide a valid response even when the user hasn't logged on to the app. [*Mandatory Fix*]
+* Bots must provide a valid response to the **help** command typed in lowercase or uppercase that provides the user with a way forward or lets the user access the help content related to the bot usage. Bots must provide a valid response even when the user hasn't logged on to the app. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-valid-response-lowercase.png" alt-text="Graphic shows an example of bot not providing a valid response for a command in lowercase or uppercase.":::
Analyzing user input and predicting user intent is difficult. Bot commands provi
:::image type="content" source="../../../../assets/images/submission/validation-bot-help-command.png" alt-text="Graphic shows an example of bot sending a valid response to help command.":::
-* Bot responses on mobile must be responsive without any data truncation that hampers the end-user's bot usage to complete desired workflows. [*Mandatory Fix*]
+* Bot responses on mobile must be responsive without any data truncation that hampers the end-user's bot usage to complete desired workflows. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-response-no-truncate-mobile.png" alt-text="Graphic shows an example of a bot message without truncating on mobile."::: :::image type="content" source="../../../../assets/images/submission/validation-bot-response-truncate-mobile.png" alt-text="Graphic shows an example of a bot message truncating on mobile.":::
-* All the links in a bot response adaptive card must be responsive. Any link that takes the user outside the Teams platform must have a clear redirect text such as, **View in..** or **This way to..**, a pop-out icon in the bot response action button, or have a suitable redirect text in the bot response message body. [*Mandatory Fix*]
+* All the links in a bot response adaptive card must be responsive. Any link that takes the user outside the Teams platform must have a clear redirect text such as, **View in..** or **This way to..**, a pop-out icon in the bot response action button, or have a suitable redirect text in the bot response message body. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-action-button-redirect-warning.png" alt-text="Graphic shows an example of bot response action button with a redirect.":::
-* By design, if your bot doesn't respond or support any user command and is a one way bot only intended to notify users. You must set `isNotificationOnly` to true in the app manifest. [*Mandatory Fix*]
+* By design, if your bot doesn't respond or support any user command and is a one way bot only intended to notify users. You must set `isNotificationOnly` to true in the app manifest. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-command-isnotification-only-true.png" alt-text="Graphic shows an example of notification only property set to true in the app manifest."::: :::image type="content" source="../../../../assets/images/submission/validation-bot-command-isnotification-only-not-true.png" alt-text="Graphic shows an example of notification only bot not responding for a user's message.":::
-* Bot user experience mustn't be broken on mobile platforms. Your bot must be fully responsive on mobile. [*Mandatory Fix*]
+* Bot user experience mustn't be broken on mobile platforms. Your bot must be fully responsive on mobile. [*Must fix*]
> [!TIP] > For personal bots, include a **Help** tab that further describes what your bot can do.
Analyzing user input and predicting user intent is difficult. Bot commands provi
:::image type="content" source="../../../../assets/images/submission/validation-bot-welcome-message-triggered.png" alt-text="validation-bot-wel-message-trigger":::
-* Notification only bots must send a welcome message that clarifies that the bot is a notification only bot and users won't be able to interact with the bot. [*Mandatory Fix*]
+* Notification only bots must send a welcome message that clarifies that the bot is a notification only bot and users won't be able to interact with the bot. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-notification-only-welcome-message-pass.png" alt-text="Graphic shows an example of bot sending a welcome message that it's a notification only bot.":::
-* Welcome message mustn't dead-end the user. Welcome message must include the value offered by the bot to the 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. [*Mandatory Fix*]
+* Welcome message mustn't dead-end the user. Welcome message must include the value offered by the bot to the 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. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-welcome-message-no-way-forward.png" alt-text="Graphic shows an example of a failed scenario where the bot has no way forward for the user in a welcome message."::: :::image type="content" source="../../../../assets/images/submission/validation-welcome-message-clear-way-forward.png" alt-text="Graphic shows an example of bot welcome message with a clear way forward for the user to complete the task.":::
-* Bot installed in a channel or group chat scope mustn't send proactive welcome message to all the team members in 1:1 chat. [*Mandatory Fix*]
+* Bot installed in a channel or group chat scope mustn't send proactive welcome message to all the team members in 1:1 chat. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-send-proactive-message-to-all-members.png" alt-text="Graphic shows an example of bot sending proactive welcome message to all the team members.":::
-* Notification only bot can send a proactive welcome message in a channel only if the message contains important information for any user to complete the configuration for the bot or clarifies the scenarios when notifications are triggered. [*Mandatory Fix*]
+* Notification only bot can send a proactive welcome message in a channel only if the message contains important information for any user to complete the configuration for the bot or clarifies the scenarios when notifications are triggered. [*Must fix*]
-* Bot installed in a channel or group chat scope mustn't send proactive messages (not just welcome message) that are irrelevant to all users in channel or group chat, instead must send proactive messages to the user over 1:1 chat. [*Mandatory Fix*]
+* Bot installed in a channel or group chat scope mustn't send proactive messages (not just welcome message) that are irrelevant to all users in channel or group chat, instead must send proactive messages to the user over 1:1 chat. [*Must fix*]
-* Bot installed in a channel or group chat scope mustn't allow users to start individual workflows. Bots must complete individual workflows in 1:1 chat with the user. [*Mandatory Fix*]
+* Bot installed in a channel or group chat scope mustn't allow users to start individual workflows. Bots must complete individual workflows in 1:1 chat with the user. [*Must fix*]
-* Bot welcome message must clearly call out the limitations related to bot usage in the installed scope. [*Mandatory Fix*]
+* Bot welcome message must clearly call out the limitations related to bot usage in the installed scope. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-welcome-messahe-with-app-limitation.png" alt-text="Graphic shows an example of app limitation in bot welcome message."::: :::image type="content" source="../../../../assets/images/submission/validation-bot-welcome-messahe-without-app-limitation.png" alt-text="Graphic shows an example of a bot without app limitation in a welcome message.":::
-* Welcome message must auto trigger on app install in a personal scope. If the bot doesn't send a welcome message in a personal scope, the user is lead to a dead-end. If the app doesn't include a complex configuration workflow, it's optional for the developer to trigger a welcome message in the channel or group chat scope. [*Mandatory Fix*]
+* Welcome message must auto trigger on app install in a personal scope. If the bot doesn't send a welcome message in a personal scope, the user is lead to a dead-end. If the app doesn't include a complex configuration workflow, it's optional for the developer to trigger a welcome message in the channel or group chat scope. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-no-welcome-message-in-personal-scope.png" alt-text="Graphic shows an example of bot not sending a welcome message automatically in personal scope.":::
-* Welcome messages must trigger only once on bot install. Welcome messages mustn't trigger every time the user invokes the help command. Help command response must be focused to include a way for the user to access help related to the bot. [*Mandatory Fix*]
+* Welcome messages must trigger only once on bot install. Welcome messages mustn't trigger every time the user invokes the help command. Help command response must be focused to include a way for the user to access help related to the bot. [*Must fix*]
-* Welcome messages mustn't trigger with every bot command. This is considered spam. [*Mandatory Fix*]
+* Welcome messages mustn't trigger with every bot command. This is considered spam. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-welcome-message-trigger-for-any-command.png" alt-text="Graphic shows an example for bot triggering a welcome message for any command.":::
-* Welcome message content must be related to the bot workflow mentioned in the appΓÇÖs long description and the installation scope. 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. [*Mandatory Fix*]
+* Welcome message content must be related to the bot workflow mentioned in the appΓÇÖs long description and the installation scope. 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. [*Must fix*]
-* Bot mustn't send multiple welcome messages when triggered on app install. [*Mandatory Fix*]
+* Bot mustn't send multiple welcome messages when triggered on app install. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-multiple-message-trigger-install.png" alt-text="Graphic shows an example of bot triggering multiple welcome messaged on app install.":::
-* App name in the welcome message must match the app name in the app manifest. [*Mandatory Fix*]
+* App name in the welcome message must match the app name in the app manifest. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-app-name-mismatch-manifeast-and-welcome-message.png" alt-text="Graphic shows an example of app name in welcome message not matching with the app name in the app manifest."::: * Welcome message mustn't display competitor chat based collaborative platform names unless the app provides specific interoperability.
-* Welcome message mustn't redirect the user to another Teams app, instead the welcome message must nudge the user to complete their first task and briefly describe all supported bot commands in the app. [*Mandatory Fix*]
+* Welcome message mustn't redirect the user to another Teams app, instead the welcome message must nudge the user to complete their first task and briefly describe all supported bot commands in the app. [*Must fix*]
-* Welcome message mustn't contain links to any app marketplace including AppSource. [*Mandatory Fix*]
+* Welcome message mustn't contain links to any app marketplace including AppSource. [*Must fix*]
-* If your app has a complex configuration workflow that requires admin led installation, doesn't have an intuitive and readily available sign up flow, or requires users to complete configuration steps outside the Teams experience and return then the bot must send a proactive welcome message in a team or group chat scope after installation. [*Mandatory Fix*]
+* If your app has a complex configuration workflow that requires admin led installation, doesn't have an intuitive and readily available sign up flow, or requires users to complete configuration steps outside the Teams experience and return then the bot must send a proactive welcome message in a team or group chat scope after installation. [*Must fix*]
-* If your bot sends a welcome message in the channel, it mustn't send it to users individually (It's considered spamming). The welcome message must also mention the person who added the bot. [*Suggested Fix*]
+* If your bot sends a welcome message in the channel, it mustn't send it to users individually (It's considered spamming). The welcome message must also mention the person who added the bot. [*Good-to-fix*]
> [!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**.
Analyzing user input and predicting user intent is difficult. Bot commands provi
Bots mustn't 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. [*Mandatory Fix*]
+* **Bot messages in channels and chats**: Don't spam users by creating separate posts. Create a single post with replies in the same thread. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-message-spamming-one-message.png" alt-text="validation-bot-message-spam-one-message"::: :::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 succession. [*Mandatory Fix*]
+ * Don't send multiple messages in quick succession. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-messages-multiple-message-quick-succession.png" alt-text="Graphic shows an example of a bot sending multiple messages in quick succession.":::
- * Send one message with complete information. [*Mandatory Fix*]
- * Avoid multi-turn conversations to complete a single repetitive workflow. [*Mandatory Fix*]
- * Use a form (or dialog) to collect all inputs from a user at one time. [*Mandatory Fix*]
+ * Send one message with complete information. [*Must fix*]
+ * Avoid multi-turn conversations to complete a single repetitive workflow. [*Must fix*]
+ * Use a form (or dialog) to collect all inputs from a user at one time. [*Must fix*]
* NLP based conversational chatbots can use multi turn conversation to make the discussion more engaging and complete a workflow. :::image type="content" source="../../../../assets/images/submission/validation-bot-messages-using-task-module.png" alt-text="validation-bot-message-using-task-module"::: :::image type="content" source="../../../../assets/images/submission/validation-bot-messages-using-mutliple-conversation.png" alt-text="Graphic shows an example bot using multi-turn messages to complete a single conversation.":::
-* **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. [*Mandatory Fix*]
+* **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. [*Must fix*]
:::image type="icon" source="../../../../assets/images/submission/validation-bot-send-proactive-message-to-all-members.png" alt-text="Graphic shows an example bot spamming users with same welcome message.":::
Bots mustn't spam users by sending multiple messages in short duration.
<details><summary>Bot notifications</summary>
-Bot notifications must include content relevant for the scope you define for the bot (team, chat, or personal). [*Mandatory Fix*]
+Bot notifications must include content relevant for the scope you define for the bot (team, chat, or personal). [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-bot-notifications-relevant.png" alt-text="validation-bot-notification-relevant":::
Apps that consist of notification only bots provide user value by triggering use
<details><summary>Bot metadata information</summary>
-* Bot information in the app manifest (bot name, logo, privacy link, and terms of service link) must be consistent with the Bot Framework metadata. [*Mandatory Fix*]
+* Bot information in the app manifest (bot name, logo, privacy link, and terms of service link) must be consistent with the Bot Framework metadata. [*Must fix*]
-* Ensure that the bot ID in the app manifest matches with bot ID in the last Teams Store published version of your app. Changing bot IDs in an app update leads to permanent loss of all user interaction history with the bot for existing users of your app and starts a new conversation chain with the new Bot ID. [*Mandatory Fix*]
+* Ensure that the bot ID in the app manifest matches with bot ID in the last Teams Store published version of your app. Changing bot IDs in an app update leads to permanent loss of all user interaction history with the bot for existing users of your app and starts a new conversation chain with the new Bot ID. [*Must fix*]
-* Any change to app name, metadata, bot welcome message, or bot responses must be updated with new name. [*Mandatory Fix*]
+* Any change to app name, metadata, bot welcome message, or bot responses must be updated with new name. [*Must fix*]
-* App name in the bot welcome message or bot responses must match the app name in the app manifest. [*Mandatory Fix*]
+* App name in the bot welcome message or bot responses must match the app name in the app manifest. [*Must fix*]
</details> <br/> <details><summary>Bot in collaborative scope</summary>
-* Bot installation in a channel or group chat scope to obtain the team roster for sending proactive notifications for users as 1:1 chats for team specific triggers isn't allowed. For example, app that pairs people for a meetup. [*Mandatory Fix*]
+* Bot installation in a channel or group chat scope to obtain the team roster for sending proactive notifications for users as 1:1 chats for team specific triggers isn't allowed. For example, app that pairs people for a meetup. [*Must fix*]
-* Bot in a channel or a group chat only used to obtain the messages or posts for sending proactive notifications for users as 1:1 chats isn't allowed. [*Mandatory Fix*]
+* Bot in a channel or a group chat only used to obtain the messages or posts for sending proactive notifications for users as 1:1 chats isn't allowed. [*Must fix*]
-* Bots installed in collaborative scope must provide a user value in the collaborative scope. [*Mandatory Fix*]
+* Bots installed in collaborative scope must provide a user value in the collaborative scope. [*Must fix*]
</details>
If your app includes a message extension, ensure that it adheres to these guidel
:::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-design-guidelines-fail.png" alt-text="Graphic shows an example of an app not meeting extension guidelines.":::
-* Messaging extensions are shortcuts for inserting app content or acting on a message without navigating away from the conversation. Keep your messaging extension simple and display only the components required to effectively complete the action. Complete website mustn't be I-framed within the messaging extension. [*Mandatory Fix*]
+* Messaging extensions are shortcuts for inserting app content or acting on a message without navigating away from the conversation. Keep your messaging extension simple and display only the components required to effectively complete the action. Complete website mustn't be I-framed within the messaging extension. [*Must fix*]
-* Preview images in Adaptive Cards in messaging extensions must load properly. [*Mandatory Fix*]
+* Preview images in Adaptive Cards in messaging extensions must load properly. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-preview-image-adaptive-card-loading.png" alt-text="Graphic shows an example of preview image loading in adaptive card."::: :::image type="content" source="../../../../assets/images/submission/validation-preview-image-adaptive-card-not-loading.png" alt-text="Graphic shows an example of preview image not loading in adaptive card.":::
-* Messaging extension response card must include the app icon to avoid end user confusion. [*Mandatory Fix*]
+* Messaging extension response card must include the app icon to avoid end user confusion. [*Must fix*]
-* Your app mustn't have any broken functionality. App mustn't dead-end or block the user from completing a workflow in a messaging extension. [*Mandatory Fix*]
+* Your app mustn't have any broken functionality. App mustn't dead-end or block the user from completing a workflow in a messaging extension. [*Must fix*]
-* Messaging extensions must respond or work as intended in group chat and channel scopes. [*Mandatory Fix*]
+* Messaging extensions must respond or work as intended in group chat and channel scopes. [*Must fix*]
-* You must include a way for the user to sign in or sign out from the messaging extension. [*Mandatory Fix*]
+* You must include a way for the user to sign in or sign out from the messaging extension. [*Must fix*]
* Message extensions that use OpenAPI urls must not provide redirection on any API call. Actual API calls must be served from the same domain or subdomain of the root domain.
Action-based message extensions must do the following:
:::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*]
+* Pass the message context to the next work state. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-app-passes-message.png" alt-text="validation-messaging-extension-app-passes-messages"::: :::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**. [*Suggested Fix*]
+* 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**. [*Good-to-fix*]
:::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-action-command-host-name.png" alt-text="Graphic shows an example of host app name for an action command."::: :::image type="content" source="../../../../assets/images/submission/validation-messaging-extension-action-command-verb.png" alt-text="Graphic shows an example of generic verb for an action command.":::
-* Invoking a message action must allow the user to complete the workflow. Errors, blank responses, or continuous loading indicators to make the message action functional as intended mustn't be present. [*Mandatory Fix*]
+* Invoking a message action must allow the user to complete the workflow. Errors, blank responses, or continuous loading indicators to make the message action functional as intended mustn't be present. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-continous-loading-indicator-action-command.png" alt-text="Graphic shows an example of continuous loading indicator when a bot invokes an action command.":::
-* Duplicate action commands mustn't be present. [*Mandatory Fix*]
+* Duplicate action commands mustn't be present. [*Must fix*]
-* Message actions must allow the user to complete the workflow as intended without an invalid response. [*Mandatory Fix*]
+* Message actions must allow the user to complete the workflow as intended without an invalid response. [*Must fix*]
* Apps with only action-based messaging extension must have the following end state:
- * Post a relevant action as a notification either in the context where message extension is invoked or in 1:1 bot chat based on user scenario. [*Mandatory Fix*]
+ * Post a relevant action as a notification either in the context where message extension is invoked or in 1:1 bot chat based on user scenario. [*Must fix*]
- * Allow users to share cards with other users based on the action taken. This is to ensure that apps don't take silent actions. For example, a ticket is created based on a message in a channel, but the app doesn't send a notification or doesn't provide a way to request the user to share ticket details after the ticket is created. [*Mandatory Fix*]
+ * Allow users to share cards with other users based on the action taken. This is to ensure that apps don't take silent actions. For example, a ticket is created based on a message in a channel, but the app doesn't send a notification or doesn't provide a way to request the user to share ticket details after the ticket is created. [*Must fix*]
</details> </br> <details><summary>Preview links (link unfurling)</summary>
-[*Mandatory Fix*]
+[*Must fix*]
-* If the app has declared the `supportsAnonymizedPayloads` property in the app manifest and the user hasn't installed the app, the app link must unfurl and show the add app dialog after the card is selected. [*Mandatory Fix*]
+* If the app has declared the `supportsAnonymizedPayloads` property in the app manifest and the user hasn't installed the app, the app link must unfurl and show the add app dialog after the card is selected. [*Must 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*]
+* 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`. [*Must fix*]
-* Apps must only declare that are under the app publisherΓÇÖs direct ownership in the `messageHandler` link unfurling section of the app manifest. It mustnΓÇÖt contain `*.botframework.com.` [*Mandatory Fix*]
+* Apps must only declare that are under the app publisherΓÇÖs direct ownership in the `messageHandler` link unfurling section of the app manifest. It mustnΓÇÖt contain `*.botframework.com.` [*Must fix*]
</details> </br> <details><summary>Search commands</summary>
-* Search based message extensions must provide text that helps the users to search effectively. [*Mandatory Fix*]
+* Search based message extensions must provide text that helps the users to search effectively. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-search-commands-text-available.png" alt-text="Graphic shows an example of a message extension with help text for users to search effectively.":::
Action-based message extensions must do the following:
## Dialogs
-[*Mandatory Fix*]
+[*Must fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line with [Microsoft commercial marketplace policy number 1140.4.5](/legal/marketplace/certification-policies#114045-task-modules). <br></br>
For more information, see [Teams dialog design guidelines](~\task-modules-and-ca
* Your Teams apps must follow [Meeting extension design guidelines](../../../../apps-in-teams-meetings/design/designing-apps-in-meetings.md).
-* With the in-meeting app experience, you can engage participants during the meeting by using in-meeting tabs, dialog box, and the in-meeting share to stage feature. If your app supports Teams meeting extension, you must provide a responsive in-meeting experience aligned with the Teams meeting experience. [*Mandatory Fix*]
+* With the in-meeting app experience, you can engage participants during the meeting by using in-meeting tabs, dialog box, and the in-meeting share to stage feature. If your app supports Teams meeting extension, you must provide a responsive in-meeting experience aligned with the Teams meeting experience. [*Must fix*]
-* Meeting extensibility apps must offer a responsive in-meeting experience aligned to the Teams meeting experience. In-meeting experience is mandatory for a Teams app that supports meeting extensibility but, pre- and post-meeting experiences aren't mandatory. [*Mandatory Fix*]
+* Meeting extensibility apps must offer a responsive in-meeting experience aligned to the Teams meeting experience. In-meeting experience is mandatory for a Teams app that supports meeting extensibility but, pre- and post-meeting experiences aren't mandatory. [*Must fix*]
* With the pre-meeting app experience, users can find and add meeting apps. Users can also perform pre-meeting tasks such as developing a poll to survey the meeting participants. If your app provides a pre-meeting experience, it must be relevant to the workflow of the meeting.
For more information, see [Teams dialog design guidelines](~\task-modules-and-ca
:::image type="content" source="../../../../assets/images/submission/validation-in-meeting-outside-teams-core-workflows.png" alt-text="Graphic shows an example of an in-meeting experience redirecting user outside Teams for completing core app functionality.":::
-* Your app must offer value beyond providing only custom Together Mode scenes in Teams. [*Mandatory Fix*]
+* Your app must offer value beyond providing only custom Together Mode scenes in Teams. [*Must fix*]
-* You must declare `groupChat` as a scope under `configurableTabs` and `meetingDetailsTab`, `meetingChatTab`, and `meetingSidePanel` as a context property in the app manifest to enable your app for meetings on Teams mobile. [*Mandatory Fix*]
+* You must declare `groupChat` as a scope under `configurableTabs` and `meetingDetailsTab`, `meetingChatTab`, and `meetingSidePanel` as a context property in the app manifest to enable your app for meetings on Teams mobile. [*Must fix*]
-* Meeting canvases mustn't dead-end a meeting attendee. Meeting canvases must show a graceful failure message for app limitations such as, region specific dependency. [*Mandatory Fix*]
+* Meeting canvases mustn't dead-end a meeting attendee. Meeting canvases must show a graceful failure message for app limitations such as, region specific dependency. [*Must fix*]
-* The meeting canvasΓÇÖ header must display the correct app name to avoid confusing the meeting attendee. [*Mandatory Fix*]
+* The meeting canvasΓÇÖ header must display the correct app name to avoid confusing the meeting attendee. [*Must fix*]
-* You must include an option for the user to sign out or log out from the meeting extension. [*Mandatory Fix*]
+* You must include an option for the user to sign out or log out from the meeting extension. [*Must fix*]
-* Meeting tabs on mobile platforms must include relevant workflows. Blank pages mustn't be present in a meeting tab. [*Mandatory Fix*]
+* Meeting tabs on mobile platforms must include relevant workflows. Blank pages mustn't be present in a meeting tab. [*Must fix*]
-* Meeting stage is a focused, intuitive, and collaborative participation canvas. Meeting stage mustn't embed the complete website experience. [*Mandatory Fix*]
+* Meeting stage is a focused, intuitive, and collaborative participation canvas. Meeting stage mustn't embed the complete website experience. [*Must fix*]
-* App mustn't show continuous loading screen, error, or broken functionality that dead-ends the user or blocks completion of a workflow in a meeting scenario. [*Mandatory Fix*]
+* App mustn't show continuous loading screen, error, or broken functionality that dead-ends the user or blocks completion of a workflow in a meeting scenario. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-app-shows-continous-loading-screen.png" alt-text="Graphic shows an example of continuous loading screen in an app.":::
-* App mustn't open a new Teams instance on starting a meeting. Meeting canvases are an extension of the Teams capabilities that promote real time collaboration and new meetings must always open within the active Teams instance. [*Mandatory Fix*]
+* App mustn't open a new Teams instance on starting a meeting. Meeting canvases are an extension of the Teams capabilities that promote real time collaboration and new meetings must always open within the active Teams instance. [*Must fix*]
-* Meeting apps must complete workflows within the Microsoft Teams platform without redirecting to competitor chat based platforms. [*Mandatory Fix*]
+* Meeting apps must complete workflows within the Microsoft Teams platform without redirecting to competitor chat based platforms. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-apps-redirecting-competitor-chat-platform.png" alt-text="Graphic shows an example of an app redirecting to competitor chat based platform.":::
-* If your app supports role based views and certain workflows are unavailable to all participants, we recommend that you implement proper messaging for participants in tab and side-panel stating that the app is for organizer's view and provide details about how the attendees receive the meeting notes, action items, and update agendas. [*Mandatory Fix*]
+* If your app supports role based views and certain workflows are unavailable to all participants, we recommend that you implement proper messaging for participants in tab and side-panel stating that the app is for organizer's view and provide details about how the attendees receive the meeting notes, action items, and update agendas. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-way-forward-not-available-for-role-based-views.png" alt-text="Graphic shows an example of an app without a way forward for participants in a role based view.":::
For more information, see [Teams dialog design guidelines](~\task-modules-and-ca
<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). [*Mandatory Fix*]
-* 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). [*Mandatory Fix*]
-* Your app must notify users when the results of a survey or poll are exported by stating, **Results successfully downloaded**. [*Mandatory Fix*]
+* Pre and post meeting screens must adhere to general tab design guidelines. For more information, see [Teams design guidelines](~/tabs/design/tabs.md). [*Must fix*]
+* 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). [*Must fix*]
+* Your app must notify users when the results of a survey or poll are exported by stating, **Results successfully downloaded**. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-meeting-experience-tab-design-guidelines-fail.png" alt-text="Graphic shows an example of tab not following tab design guidelines.":::
For more information, see [Teams dialog design guidelines](~\task-modules-and-ca
</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). [*Mandatory Fix*]
-* A tooltip must display the app name when hovering over the app icon during meetings. [*Mandatory Fix*]
+* 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). [*Must fix*]
+* A tooltip must display the app name when hovering over the app icon during meetings. [*Must fix*]
:::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. [*Mandatory Fix*]
+* Message extensions must function the same during meetings as they do outside meetings. [*Must fix*]
</details> </br> <details><summary>In-meeting tabs</summary>
-* Must be responsive. [*Mandatory Fix*]
-* Must maintain padding and component sizes. [*Mandatory Fix*]
-* Must have a back button if there's more than one layer of navigation. [*Mandatory Fix*]
+* Must be responsive. [*Must fix*]
+* Must maintain padding and component sizes. [*Must fix*]
+* Must have a back button if there's more than one layer of navigation. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-in-meeting-exp-back-button.png" alt-text="Graphic shows an example of back button present."::: :::image type="content" source="../../../../assets/images/submission/validation-in-meeting-exp-back-button-absent.png" alt-text="Graphic shows an example of back button not present.":::
-* 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. [*Mandatory Fix*]
-* Must not have Horizontal scroll. [*Mandatory Fix*]
+* 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 fix*]
+* Must not have Horizontal scroll. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-in-meeting-tab-vertical-scroll.png" alt-text="Graphic shows an example of in-meeting tab with vertical scroll.":::
For more information, see [Teams dialog design guidelines](~\task-modules-and-ca
</br> <details><summary>In-meeting dialogs</summary>
-* Must be used sparingly and for scenarios that are light and task oriented. [*Mandatory Fix*]
-* Must display content in a single column and not have multiple navigation levels. [*Mandatory Fix*]
+* Must be used sparingly and for scenarios that are light and task oriented. [*Must fix*]
+* Must display content in a single column and not have multiple navigation levels. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-in-meeting-single-column-layout.png" alt-text="Graphic shows an example of single column layout for in-meeting dialog."::: :::image type="content" source="../../../../assets/images/submission/validation-in-meeting-multiple-column-layout.png" alt-text="Graphic shows an example of multiple column layouts for in-meeting dialog.":::
-* Must not use dialogs. [*Mandatory Fix*]
-* Must align with the center of the meeting stage. [*Mandatory Fix*]
+* Must not use dialogs. [*Must fix*]
+* Must align with the center of the meeting stage. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-in-meeting-dialog-not-aligned.png" alt-text="Graphic shows an example of in-meeting dialog not aligning with the center of meeting stage.":::
-* Must be dismissed after a user selects a button or performs an action. [*Mandatory Fix*]
+* Must be dismissed after a user selects a button or performs an action. [*Must fix*]
-* **Together mode**: Ensure that you consider the following best practices for a scene building experience: [*Mandatory Fix*]
+* **Together mode**: Ensure that you consider the following best practices for a scene building experience: [*Must fix*]
* All images are in .png format. * The final package with all the images put together mustn't exceed 1920x1080 resolution. The resolution is an even number. This resolution is a requirement for scenes to be shown successfully. * The maximum scene size is 10 MB.
For more information, see [Teams dialog design guidelines](~\task-modules-and-ca
</br> <details><summary>Shared Meeting Stage</summary>
-To use the **shareAppContentToStage** API, you must declare the correct RSC permissions. In the app manifest, you must configure the `authorization` property. Update the `name` property as `MeetingStage.Write.Chat` and `type` property as `Delegated` in the `resourceSpecific` field. [*Mandatory Fix*]
+To use the **shareAppContentToStage** API, you must declare the correct RSC permissions. In the app manifest, you must configure the `authorization` property. Update the `name` property as `MeetingStage.Write.Chat` and `type` property as `Delegated` in the `resourceSpecific` field. [*Must fix*]
-Shared meeting stage feature can only be launched through the Teams desktop app. However, the shared meeting stage consumption experience must be usable and not broken when viewed on mobile devices. [*Mandatory Fix*]
+Shared meeting stage feature can only be launched through the Teams desktop app. However, the shared meeting stage consumption experience must be usable and not broken when viewed on mobile devices. [*Must fix*]
</details>
If your app uses the [activity feed APIs provided by Microsoft Graph](/graph/tea
* Your Teams apps must follow [activity feed notifications design guidelines](/graph/teams-send-activityfeednotifications).
-* Irrelevant, improper, unresponsive, or broken workflow mustn't be present after user selects a notification in Teams activity feed. Users mustn't be blocked from completing a workflow after they select an activity feed notification. [*Mandatory Fix*]
+* Irrelevant, improper, unresponsive, or broken workflow mustn't be present after user selects a notification in Teams activity feed. Users mustn't be blocked from completing a workflow after they select an activity feed notification. [*Must fix*]
-* Include your appΓÇÖs name in the activity feed notification for end-users to understand the source or trigger for the notification without confusion. [*Mandatory Fix*]
+* Include your appΓÇÖs name in the activity feed notification for end-users to understand the source or trigger for the notification without confusion. [*Must fix*]
-* App must trigger notifications for all the notification scenarios mentioned in the app long description, app first run experience, and in scenarios declared under `activityTypes` in the app manifest. [*Mandatory Fix*]
+* App must trigger notifications for all the notification scenarios mentioned in the app long description, app first run experience, and in scenarios declared under `activityTypes` in the app manifest. [*Must fix*]
-* Notifications must display within five seconds of user action. [*Mandatory Fix*]
+* Notifications must display within five seconds of user action. [*Must fix*]
-* You must call out notification limitations (if any) in your app long description or in the appΓÇÖs first run experience. [*Mandatory Fix*]
+* You must call out notification limitations (if any) in your app long description or in the appΓÇÖs first run experience. [*Must fix*]
</details> <br/> <details><summary>General</summary>
-* All the notification triggers specified in your app configuration must work. [*Mandatory Fix*]
-* Notifications must be localized per the supported languages configured for your app. [*Mandatory Fix*]
-* Notifications must display within five seconds of user action. [*Mandatory Fix*]
-* Notifications must be localized as per the supported languages for all the platforms where your app is compatible. [*Mandatory Fix*]
+* All the notification triggers specified in your app configuration must work. [*Must fix*]
+* Notifications must be localized per the supported languages configured for your app. [*Must fix*]
+* Notifications must display within five seconds of user action. [*Must fix*]
+* Notifications must be localized as per the supported languages for all the platforms where your app is compatible. [*Must fix*]
</details> </br> <details><summary>Avatars</summary>
-* The notification avatar must match your app's color icon. [*Mandatory Fix*]
-* Notifications triggered by a user must include the user's avatar. [*Mandatory Fix*]
+* The notification avatar must match your app's color icon. [*Must fix*]
+* Notifications triggered by a user must include the user's avatar. [*Must fix*]
</details> </br> <details><summary>Spamming</summary>
-* Apps mustn't send more than 10 notifications per minute to a user. [*Mandatory Fix*]
-* Bots and the activity feed mustn't trigger duplicate notifications. [*Mandatory Fix*]
-* Notifications must provide some value to users and not be used for trivial or irrelevant events. [*Mandatory Fix*]
+* Apps mustn't send more than 10 notifications per minute to a user. [*Must fix*]
+* Bots and the activity feed mustn't trigger duplicate notifications. [*Must fix*]
+* Notifications must provide some value to users and not be used for trivial or irrelevant events. [*Must fix*]
</details> </br> <details><summary>Navigation and layout</summary>
-* Notifications must adhere to the Teams activity feed layout and experience. [*Mandatory Fix*]
-* When selecting a notification, the user must be directed to relevant content within Teams. [*Mandatory Fix*]
+* Notifications must adhere to the Teams activity feed layout and experience. [*Must fix*]
+* When selecting a notification, the user must be directed to relevant content within Teams. [*Must fix*]
</details>
If your app uses the [activity feed APIs provided by Microsoft Graph](/graph/tea
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 Microsoft Entra consent dialog and other screens. For more information, see [Mark your app as publisher verified](/azure/active-directory/develop/mark-app-as-publisher-verified). [*Mandatory Fix*]
+* **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 Microsoft Entra consent dialog and other screens. For more information, see [Mark your app as publisher verified](/azure/active-directory/develop/mark-app-as-publisher-verified). [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-365-compliance-publisher-verification.png" alt-text="Graphic shows an example of a blue verified badge on the Microsoft Entra consent dialog.":::
-* **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. [*Suggested Fix*]
+* **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. [*Good-to-fix*]
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: For an app that isn't previously listed, you can't complete Publisher Attestation until the app is available in Teams Store. If you're updating an already listed app, complete [Publisher Attestation](/microsoft-365-app-certification/docs/attestation) before submitting the latest version of the app.
The Microsoft 365 App Compliance Program is intended to help organizations asses
:::image type="icon" source="../../../../assets/icons/certificate-icon-16.png"::: This section is in line with [Microsoft commercial marketplace policy number 1140.7](/legal/marketplace/certification-policies#11407-advertising).
-Apps mustn't display advertising, including dynamic ads, banner ads, and ads in message. [*Mandatory Fix*]
+Apps mustn't display advertising, including dynamic ads, banner ads, and ads in message. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-advertising-banners.png" alt-text="Graphic shows an example of a failed scenario of advertising in Teams.":::
Apps mustn't display advertising, including dynamic ads, banner ads, and ads in
## Cryptocurrency based apps
-You must demonstrate compliance with all laws where your app is distributed, if your app: [*Mandatory Fix*]
+You must demonstrate compliance with all laws where your app is distributed, if your app: [*Must fix*]
* Facilitates cryptocurrency transactions or transmissions within the app.
After an internal Microsoft review, if the compliance demonstration is satisfact
## App functionality
-* Workflows or content in the app must be related to the scope. [*Mandatory Fix*]
-* All app capabilities must be functional and must work properly as described in the AppSource or app manifest long description. [*Mandatory Fix*]
-* Apps must always notify the user before downloading any file or executable on the userΓÇÖs environment. Any call to action (CTA), either text based or otherwise, that makes it clear to the user that a file or executable is downloaded on user action is allowed in the app. [*Mandatory Fix*]
-* Apps with region dependency must notify the users with a graceful failure message in all applicable capabilities if they attempt to use it in an unsupported region. [*Mandatory Fix*]
+* Workflows or content in the app must be related to the scope. [*Must fix*]
+* All app capabilities must be functional and must work properly as described in the AppSource or app manifest long description. [*Must fix*]
+* Apps must always notify the user before downloading any file or executable on the userΓÇÖs environment. Any call to action (CTA), either text based or otherwise, that makes it clear to the user that a file or executable is downloaded on user action is allowed in the app. [*Must fix*]
+* Apps with region dependency must notify the users with a graceful failure message in all applicable capabilities if they attempt to use it in an unsupported region. [*Must fix*]
[Back to top](#teams-store-validation-guidelines) ## Mobile experience
-* Mobile add-ins must be free. There mustn't be any in-app content or links that promote upselling, online stores, or other requests for payment. Any accounts required for apps must have no charge for use and if time-limited, mustn't include any content indicating a need to pay. [*Mandatory Fix*]
+* Mobile add-ins must be free. There mustn't be any in-app content or links that promote upselling, online stores, or other requests for payment. Any accounts required for apps must have no charge for use and if time-limited, mustn't include any content indicating a need to pay. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-mobile-add-in-charges.png" alt-text="Graphic shows an example of a mobile add-in asking for payment.":::
After an internal Microsoft review, if the compliance demonstration is satisfact
* Use of the word **FREE** in the context of a trial or app upgrade with a link that leads to a landing page without payment or pricing information is allowed on mobile. Plain text to signal app is **PAID** is allowed on mobile.
-* Use of the word **FREE** as plain text in the context of a trial or app upgrade and associated with pricing details isn't allowed on mobile. [*Mandatory Fix*]
+* Use of the word **FREE** as plain text in the context of a trial or app upgrade and associated with pricing details isn't allowed on mobile. [*Must fix*]
-* Use of the word **FREE** in the context of a trial or app upgrade and associated with a link that leads to a landing page with pricing information or payment details on mobile isn't allowed. [*Mandatory Fix*]
+* Use of the word **FREE** in the context of a trial or app upgrade and associated with a link that leads to a landing page with pricing information or payment details on mobile isn't allowed. [*Must fix*]
-* Pricing details on mobile in any format, for example, image, text, or link isn't allowed. CTA such as **view plans** on mobile isn't allowed. Information about plans without pricing details but with a contact link or email on mobile isn't allowed. Any text with contact details linking or alluding to a paid upgrade isn't allowed on mobile. Payments for physical goods are allowed on mobile. For example, your app can allow payment to book a taxi. [*Mandatory Fix*]
+* Pricing details on mobile in any format, for example, image, text, or link isn't allowed. CTA such as **view plans** on mobile isn't allowed. Information about plans without pricing details but with a contact link or email on mobile isn't allowed. Any text with contact details linking or alluding to a paid upgrade isn't allowed on mobile. Payments for physical goods are allowed on mobile. For example, your app can allow payment to book a taxi. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-mobile-exp-pricing-details-on-mobile-fail.png" alt-text="Graphic shows an example of pricing details on mobile.":::
-* Payments for digital goods in app aren't allowed on mobile. [*Mandatory Fix*]
+* Payments for digital goods in app aren't allowed on mobile. [*Must fix*]
:::image type="content" source="../../../../assets/images/submission/validation-mobile-exp-payments-digital-goods.png" alt-text="Graphic shows an example of payments for digital goods on mobile.":::
-* Teams apps must offer an appropriate cross-device mobile experience. [*Mandatory Fix*]
+* Teams apps must offer an appropriate cross-device mobile experience. [*Must fix*]
-* Capabilities that aren't supported on mobile mustn't dead-end a user and must provide a graceful failure message where applicable. [*Mandatory Fix*]
+* Capabilities that aren't supported on mobile mustn't dead-end a user and must provide a graceful failure message where applicable. [*Must fix*]
[Back to top](#teams-store-validation-guidelines)
Teams apps extensible across Microsoft 365 clients must be fully responsive and
### Mobile experience
-Users must be able to launch the app from the actions flyout menu within the Microsoft 365 client on mobile. The app name must be displayed correctly in the action bar. [*Mandatory Fix*]
+Users must be able to launch the app from the actions flyout menu within the Microsoft 365 client on mobile. The app name must be displayed correctly in the action bar. [*Must fix*]
#### App launch from actions flyout
-Users must be able to successfully launch and switch between multiple static tabs within the Microsoft 365 client on mobile. The tabs must load properly. If there are more than three static tabs, the remaining tabs must be visible under the **More** section. [*Mandatory Fix*]
+Users must be able to successfully launch and switch between multiple static tabs within the Microsoft 365 client on mobile. The tabs must load properly. If there are more than three static tabs, the remaining tabs must be visible under the **More** section. [*Must fix*]
#### Multi tab experience
-If your app uses SSO, it must authenticate the user successfully. SSO allows users to sign in using one set of credentials to multiple independent software systems. Users can access all the required applications without using different credentials to authenticate. [*Mandatory Fix*]
+If your app uses SSO, it must authenticate the user successfully. SSO allows users to sign in using one set of credentials to multiple independent software systems. Users can access all the required applications without using different credentials to authenticate. [*Must fix*]
#### App authentication
-The app must terminate the user account instance when the user is switched or logged out within the Microsoft 365 client on mobile. [*Mandatory Fix*]
+The app must terminate the user account instance when the user is switched or logged out within the Microsoft 365 client on mobile. [*Must fix*]
#### Account switching and logout experience
-* Users must be able to go back to the previous work state. If the user is on the root page, the back navigation must terminate the app instance within the Microsoft 365 client on mobile. [*Mandatory Fix*]
+* Users must be able to go back to the previous work state. If the user is on the root page, the back navigation must terminate the app instance within the Microsoft 365 client on mobile. [*Must fix*]
-* Apps that support deep link to a workflow must be able redirect the user to the appropriate landing page experience. [*Mandatory Fix*]
+* Apps that support deep link to a workflow must be able redirect the user to the appropriate landing page experience. [*Must fix*]
#### Tab navigation
-* The progress indicator must appear when the app is loading and dismiss automatically after the app is loaded. [*Mandatory Fix*]
+* The progress indicator must appear when the app is loading and dismiss automatically after the app is loaded. [*Must fix*]
-* An error screen must appear when an app fails to load in the instances such as incoherent or broken network, time-out, or authentication failure, and so on. [*Mandatory Fix*]
+* An error screen must appear when an app fails to load in the instances such as incoherent or broken network, time-out, or authentication failure, and so on. [*Must fix*]
[Back to top](#teams-store-validation-guidelines)
-## Teams apps extensible as plugin for Microsoft Copilot for Microsoft 365
+## Teams apps extensible as plugin for Microsoft 365 Copilot
* App packages are correctly formatted and adhere to the manifest schema version 1.13 or later. * App must pass the [responsible AI checks.](/legal/marketplace/certification-policies#1-apps-with-artificial-intelligenceai-generated-content-must-meet-below-requirements)
The short descriptions of an app, parameter, and command must not include the fo
The long description of an app must clearly call out the following:
-* App's compatibility with Copilot. For example, use Contoso in Copilot to search and summarize your tasks.
+* App's compatibility with Microsoft 365 Copilot. For example, use Contoso in Microsoft 365 Copilot to search and summarize your tasks.
-* Provide at least one prompt of how users can use a message extension plugin in Copilot. For example, what are the high priority tickets assigned to me this week in Contoso.
+* Provide at least one prompt of how users can use a message extension plugin in Microsoft 365 Copilot. For example, what are the high priority tickets assigned to me this week in Contoso.
- :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-plugin-prompt-pass.png" alt-text="Screenshot shows a pass scenario with an example of sample prompt for message extension usage as a plugin in Copilot.":::
+ :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-plugin-prompt-pass.png" alt-text="Screenshot shows a pass scenario with an example of sample prompt for message extension usage as a plugin in Microsoft 365 Copilot.":::
- :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-plugin-prompt-fail.png" alt-text="Screenshot shows a fail scenario without an example of sample prompt for message extension usage as a plugin in Copilot.":::
+ :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-plugin-prompt-fail.png" alt-text="Screenshot shows a fail scenario without an example of sample prompt for message extension usage as a plugin in Microsoft 365 Copilot.":::
### Response Quality
-* The mandatory fields in Microsoft 365 Chat Adaptive Card response must include Information title and at least two additional useful fields of your choice, for example, date modified, author, status, and flags. Both the preview and content must be part of a single response.
+* The mandatory fields in Microsoft 365 Copilot Adaptive Card response must include Information title and at least two additional useful fields of your choice, for example, date modified, author, status, and flags. Both the preview and content must be part of a single response.
- :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-app-response-copilot.png" alt-text="Screenshot shows an example of a sample app showing Microsoft 365 Chat app response contains Preview and Content in the same response. ":::
+ :::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-app-response-copilot.png" alt-text="Screenshot shows an example of a sample app showing Microsoft 365 Copilot's response that contains Preview and Content in the same response.":::
-* Adaptive Cards in Microsoft 365 Chat response must have at least one action button.
-* Action buttons present in Microsoft 365 Chat response Adaptive Cards must be functional.
+* Adaptive Cards in Microsoft 365 Copilot response must have at least one action button.
+* Action buttons present in Microsoft 365 Copilot response Adaptive Cards must be functional.
:::image type="content" source="../../../../assets/images/Copilot/validation-guidelines-plugin-functional-action.png" alt-text="Screenshot shows an example of information title, additional user fields, and action button in an Adaptive Card response.":::
-* Microsoft 365 Chat must respond accurately and not display an error when a user prompts with a single parameter.
-* Microsoft 365 Chat must respond accurately and not show an error when a user prompts with a multi parameter.
-* Microsoft 365 Chat must respond accurately and not show an error when a user prompts with a follow-up.
-* Message extension must contain at least two parameters for enhanced user experience in Microsoft 365 Chat.
+* Microsoft 365 Copilot must respond accurately and not display an error when a user prompts with a single parameter.
+* Microsoft 365 Copilot must respond accurately and not show an error when a user prompts with a multi parameter.
+* Microsoft 365 Copilot must respond accurately and not show an error when a user prompts with a follow-up.
+* Message extension must contain at least two parameters for enhanced user experience in Microsoft 365 Copilot.
[Back to top](#teams-store-validation-guidelines)
platform Publish https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/deploy-and-publish/appsource/publish.md
If your app is production ready, you can begin the process of getting it listed
* Details of failures or issues with policy links and categorization:
- * Mandatory fix: Issues must be fixed prior to app approval.
+ * Must fix: Issues must be fixed prior to app approval.
- * Suggested fix: Issues can be fixed post app approval as the issues are recommendations to improve your appΓÇÖs experience.
+ * Good-to-fix: Issues can be fixed post app approval as the issues are recommendations to improve your appΓÇÖs experience.
* Blocker: Issues prevent the validation team from testing your app functionality further and must be resolved for validation to continue.
platform Glossary https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/get-started/glossary.md
Common terms and definitions used in Microsoft Teams developer documentation.
| Conversation | A series of messages sent between your Microsoft Teams app (tab or bot) and one or more users. A conversation can have three scopes: channel, personal, and group chat. <br>**See also**: [One-on-one chat](#o); [Group chat](#g); [Channel](#c) | | [Conversational bot](../bots/how-to/conversations/conversation-messages.md) | It lets a user interact with your web service using text, interactive cards, and dialogs. <br>**See also** [Chat bot](#c); [Standalone app](#s) | | [Copilot](../messaging-extensions/build-bot-based-plugin.md)|Microsoft 365 Copilot is powered by an advanced processing and orchestration engine that seamlessly integrates Microsoft 365 apps, Microsoft Graph, and Large Language Models (LLMs) to turn your words into the most powerful productivity tool. |
-| [Copilot handoff](../bots/how-to/conversations/bot-copilot-handoff.md) | Copilot handoffs are plugin-provided deep links that carry over chat context, enabling users to seamlessly transition their chat with Copilot for Microsoft 365 to your bot service. |
-| [Custom engine copilot](/microsoft-365-copilot/extensibility/overview-custom-engine-copilot) | Custom engine copilots are conversational Teams bots designed to harness the powerful capabilities of Large Language Models (LLMs) for seamless user interaction. These advanced bots mark a significant departure from traditional bots, offering an extensive range of features that elevate the overall user experience. |
+| [Copilot handoff](../bots/how-to/conversations/bot-copilot-handoff.md) | Copilot handoffs are plugin-provided deep links that carry over chat context, enabling users to seamlessly transition their chat with Microsoft 365 Copilot to your bot service. |
+| [Custom engine agent](/microsoft-365-copilot/extensibility/overview-custom-engine-agent) | Custom engine agents are conversational Teams bots designed to harness the powerful capabilities of Large Language Models (LLMs) for seamless user interaction. These advanced bots mark a significant departure from traditional bots, offering an extensive range of features that elevate the overall user experience. |
| Customer-owned apps | An app created by you or your organization that is meant for use by other Teams app users outside the organization. It can be made available on Microsoft Teams Store. <br> **See also**: [Teams Store validation guidelines](#s); [Microsoft Store](#s); [LOB apps](#l); [Personal tab](#p); [Shared apps](#s) | | Custom app built for your org (LOB app) | An app created only for Teams by you or your organization. | | [Custom app upload](../toolkit/publish.md#publish-to-individual-scope-or-custom-app-upload-permission) | A process where a Teams app is loaded to the Teams client to test it in the Teams environment before distributing it. |
platform Build Bot Based Message Extension https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/build-bot-based-message-extension.md
description: Learn about Bot-based message extension using Bot Framework to inte
ms.localizationpriority: medium Previously updated : 10/19/2023 Last updated : 09/16/2024 # Build message extensions using Bot Framework
For more information, see [app manifest schema](~/resources/schema/manifest-sche
## Message extension as plugin for Copilot for Teams meetings
-Message extension plugins are supported in Copilot for Teams meetings. Extending bot-based message extension plugins to meetings allows you to enhance the Copilot for Teams meetings. Copilot can utilize various app capabilities during meetings, such as task modules, app sharing, and more, to improve user engagement and productivity. For example, a plugin can be used in Copilot for Teams meetings to summarize discussions, generate notes, and list tasks. It also extends the benefits of traditional plugins by enabling real-time interaction with external data and custom functionality.
+Message extension plugins are supported in Copilot for Teams meetings. Extending bot-based message extension plugins to meetings allows you to enhance the Copilot for Teams meetings. Copilot for Teams meetings can utilize various app capabilities during meetings, such as task modules, app sharing, and more, to improve user engagement and productivity. For example, a plugin can be used in Copilot for Teams meetings to summarize discussions, generate notes, and list tasks. It also extends the benefits of traditional plugins by enabling real-time interaction with external data and custom functionality.
-Meetings Copilot is interactive and efficient, it can assist with summarizing discussions, suggesting action items, and providing prompt-less assistance in real-time. Users can ask natural language questions to meeting copilot and get responses from your plugin that are relevant to the meeting context. Plugins are available for users to enable in both Copilot for Microsoft 365 and Copilot for Teams meetings.
+Copilot for Teams meetings is interactive and efficient, it can assist with summarizing discussions, suggesting action items, and providing prompt-less assistance in real-time. Users can ask natural language questions to Copilot for Teams meetings and get responses from your plugin that are relevant to the meeting context. Plugins are available for users to enable in both Microsoft 365 Copilot and Copilot for Teams meetings.
:::image type="content" source="../assets/images/Copilot/meeting-copilot-extensibility.png" alt-text="Screenshot shows the plugins flyout menu in Copilot for Teams meetings."::: | Benefits | Description | |-||
-| User Empowerment | Extending Meeting Copilot empowers users with various actions to enhance their meeting experience. |
+| User Empowerment | Extending Copilot for Teams meetings empowers users with various actions to enhance their meeting experience. |
| UI Commands | Users can easily access features like opening a task module or sharing an app to the stage. | | Search Commands | Efficient data retrieval from app databases is made possible, streamlining the search process. | | Scenarios | Description | |-||
-| Reactive Commands | Users can directly command Copilot to perform specific actions or provide information. |
-| | - Natural Language Prompts: Users can instruct Copilot to carry out search commands. |
-| | - Prompt Suggestions: Apps can offer static or enriched prompts for Copilot to execute. |
-| Proactive Assistance | Copilot proactively listens to meeting signals and assists users by: |
+| Reactive Commands | Users can directly command Copilot for Teams meetings to perform specific actions or provide information. |
+| | - Natural Language Prompts: Users can instruct Copilot for Teams meetings to carry out search commands. |
+| | - Prompt Suggestions: Apps can offer static or enriched prompts for Copilot for Teams meetings to execute. |
+| Proactive Assistance | Copilot for Teams meetings proactively listens to meeting signals and assists users by: |
| | - Suggesting prompts from apps: Contextually relevant suggestions based on the discussion topics. |
-| | - Providing assistance without explicit prompts: Copilot can automatically suggest actions based on the discussion. |
+| | - Providing assistance without explicit prompts: Copilot for Teams meetings can automatically suggest actions based on the discussion. |
## Next step
platform Build Bot Based Plugin https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/build-bot-based-plugin.md
Title: Message Extension as Plugin for Copilot
-description: Learn how to build a bot-based message extension plugin for Microsoft Copilot for Microsoft 365 using Teams Developer Portal and Teams Toolkit.
+description: Learn how to build a bot-based message extension plugin for Microsoft 365 Copilot using Developer Portal for Teams and Teams Toolkit.
ms.localizationpriority: medium Previously updated : 07/02/2024 Last updated : 09/16/2024
-# Extend bot-based message extension as plugin for Copilot for Microsoft 365
+# Extend bot-based message extension as plugin for Microsoft 365 Copilot
> [!NOTE] >
-> * Ensure that Copilot for Microsoft 365 is available for your organization. You have two ways to get a developer environment for Copilot:
-> * A sandbox Microsoft 365 tenant with Copilot (available in limited preview through [TAP membership](https://developer.microsoft.com/microsoft-365/tap)).
-> * An [eligible Microsoft 365 or Office 365 production environment](/microsoft-365-copilot/extensibility/prerequisites#customers-with-existing-microsoft-365-and-copilot-licenses) with a Copilot for Microsoft 365 license.
+> * Ensure that Microsoft 365 Copilot is available for your organization. You have two ways to get a developer environment for Microsoft 365 Copilot:
+> * A sandbox Microsoft 365 tenant with Microsoft 365 Copilot (available in limited preview through [TAP membership](https://developer.microsoft.com/microsoft-365/tap)).
+> * An [eligible Microsoft 365 or Office 365 production environment](/microsoft-365-copilot/extensibility/prerequisites#customers-with-existing-microsoft-365-and-copilot-licenses) with a Microsoft 365 Copilot license.
> * Bot-based search message extension plugin is available in [**public developer preview**](../resources/dev-preview/developer-preview-intro.md).
-> * Only *bot-based* message extensions with *search* commands can be extended as plugins for Copilot for Microsoft 365.
+> * Only *bot-based* message extensions with *search* commands can be extended as plugins for Microsoft 365 Copilot.
-Microsoft Copilot for Microsoft 365, powered by an advanced processing and orchestration engine, integrates Microsoft 365 apps, Microsoft Graph, and Large Language Models (LLMs) to transform your words into a potent productivity tool. Although Copilot for Microsoft 365 can utilize apps and data within the Microsoft 365 ecosystem, many users rely on various external tools and services for work management and collaboration. By extending your message extension as a plugin in Copilot for Microsoft 365, you can enable users to interact with third-party tools and services, therefore empowering them to achieve more with Copilot for Microsoft 365. You can achieve this extension by developing a plugin or connecting to an external data source.
+Microsoft 365 Copilot, powered by an advanced processing and orchestration engine, integrates Microsoft 365 apps, Microsoft Graph, and Large Language Models (LLMs) to transform your words into a potent productivity tool. Although Microsoft 365 Copilot can utilize apps and data within the Microsoft 365 ecosystem, many users rely on various external tools and services for work management and collaboration. By extending your message extension as a plugin in Microsoft 365 Copilot, you can enable users to interact with third-party tools and services, therefore empowering them to achieve more with Microsoft 365 Copilot. You can achieve this extension by developing a plugin or connecting to an external data source.
-See the video to learn more about extending Copilot for Microsoft 365 using Teams message extensions:
+See the video to learn more about extending Microsoft 365 Copilot using Microsoft Teams message extensions:
</br> </br>
See the video to learn more about extending Copilot for Microsoft 365 using Team
## What is a plugin?
-A plugin allows Copilot for Microsoft 365 to interact directly with third-party data, apps, and services, enhance its capabilities, and broaden its range of capabilities. Plugins allow Copilot for Microsoft 365 to:
+A plugin allows Microsoft 365 Copilot to interact directly with third-party data, apps, and services, enhance its capabilities, and broaden its range of capabilities. Plugins allow Microsoft 365 Copilot to:
* Fetch real-time information, such as the latest news coverage on a product launch. * Retrieve knowledge-based information, such as a teamΓÇÖs design files in Figma.
Descriptions enhance the usability and effectiveness of a message extension plug
* **App description**: App description helps improve your app discoverability in the Teams Store. * **Command description**: Command description maps user intent and utterance to search command inside a plugin and must be built based on the analysis of the user intent and keywords. * **Parameter description**: Parameter description explains the requirements of the system in a natural language with output format.
-* **Semantic description**: Semantic description helps Copilot for Microsoft 365 generate content by providing a conceptual understanding of the plugin's capabilities and scenarios where it can help achieve user goals and match userΓÇÖs intent with the plugin's capabilities.
+* **Semantic description**: Semantic description helps Microsoft 365 Copilot generate content by providing a conceptual understanding of the plugin's capabilities and scenarios where it can help achieve user goals and match userΓÇÖs intent with the plugin's capabilities.
-For more information, see [define descriptions](high-quality-message-extension.md#define-descriptions).
+For more information, see [Descriptions](high-quality-message-extension.md#description).
-All bot-based search message extensions are eligible for plugin support, subject to validation to ensure the plugin meets quality, security, privacy, and usefulness expectations. You can create a bot-based search message extension using Teams Toolkit for Visual Studio Code, Visual Studio, Teams Toolkit command line interface (CLI), or Developer Portal for Teams and extend the message extension to function as a plugin in Copilot for Microsoft 365.
+All bot-based search message extensions are eligible for plugin support, subject to validation to ensure the plugin meets quality, security, privacy, and usefulness expectations. You can create a bot-based search message extension using Teams Toolkit for Visual Studio Code, Visual Studio, Teams Toolkit command line interface (CLI), or Developer Portal for Teams and extend the message extension to function as a plugin in Microsoft 365 Copilot.
## Prerequisites
-Before you get started, ensure that you're familiar with the following standards and guidelines for building message extension plugins for Copilot for Microsoft 365:
+Before you get started, ensure that you're familiar with the following standards and guidelines for building message extension plugins for Microsoft 365 Copilot:
-* Standards for compliance, performance, security, and user experience outlined in [Teams Store validation guidelines](../concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#teams-apps-extensible-as-plugin-for-microsoft-copilot-for-microsoft-365).
+* Standards for compliance, performance, security, and user experience outlined in [Teams Store validation guidelines](../concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#teams-apps-extensible-as-plugin-for-microsoft-365-copilot).
-* [Guidelines to create or upgrade a message extension plugin for Copilot for Microsoft 365](../messaging-extensions/high-quality-message-extension.md).
+* [Guidelines to create or upgrade a message extension plugin for Microsoft 365 Copilot](../messaging-extensions/high-quality-message-extension.md).
## Create bot-based message extension > [!IMPORTANT]
-> Plugins for Microsoft Copilot for Microsoft 365 are in preview and only work in Microsoft 365 Chat in Microsoft Teams.
+> Plugins for Microsoft 365 Copilot are in preview and only work in Microsoft 365 Copilot in Teams.
-Let's create a bot-based search message extension that can search npm registries in Teams and Copilot and share results through the compose message area of the Microsoft Teams client.
+Let's create a bot-based search message extension that can search npm registries in Teams and Microsoft 365 Copilot and share results through the compose message area of the Microsoft Teams client.
# [Visual Studio Code](#tab/visual-studio-code)
To run your message extension in Teams, follow these steps:
1. Select a product from the list. Teams unfurls the product as an Adaptive Card in the message compose area. 1. Select **Send**.
-**Trigger message extension in Copilot for Microsoft 365**
+**Trigger message extension in Microsoft 365 Copilot**
-To trigger the message extension as plugin in Copilot for Microsoft 365 in Teams, follow these steps:
+To trigger the message extension as plugin in Microsoft 365 Copilot in Teams, follow these steps:
1. Select **Apps**.
-1. Search for **Copilot** and open the **Copilot for Microsoft 365** app.
+1. Search for **Copilot** and open Microsoft 365 Copilot.
1. Select **Plugins**. 1. From the list of plugins, turn on the toggle for your message extension. :::image type="content" source="../assets/images/Copilot/bot-based-VSC-plugin-toggle.png" alt-text="Screenshot shows the Plugin option, list of plugins, and the toggle enabled for bot-based-ME-test-local plugin.":::
-1. From the message compose area, send a message to Copilot for Microsoft 365 to search for npm package information in Teams and Copilot. For example, find the npm package info on teamsfx-react in npm-searchlocal.
+1. From the message compose area, send a message to Microsoft 365 Copilot to search for npm package information in Teams and Microsoft 365 Copilot. For example, find the npm package info on teamsfx-react in npm-searchlocal.
- :::image type="content" source="../assets/images/Copilot/bot-based-VSC-trigger-plugin.png" alt-text="Screenshot shows the plugin prompt and the response from Copilot for Microsoft 365.":::
+ :::image type="content" source="../assets/images/Copilot/bot-based-VSC-trigger-plugin.png" alt-text="Screenshot shows the plugin prompt and the response from Microsoft 365 Copilot.":::
> [!NOTE]
-> This prompt might not always make Copilot for Microsoft 365 include a response from your message extension. If it happens, try some other prompts or leave feedback to us by downvoting the Copilot for Microsoft 365 response and leave a message.
+> This prompt might not always make Microsoft 365 Copilot include a response from your message extension. If it happens, try some other prompts or leave feedback to us by downvoting the Microsoft 365 Copilot response and leave a message.
# [Visual Studio](#tab/visual-studio)
To create a bot-based search message extension plugin using Visual Studio, follo
:::image type="content" source="../assets/images/Copilot/bot-based-VS-debug-teams-send-card.png" alt-text="Screenshot shows Contoso. Base product sent as an Adaptive Card in Teams chat.":::
-**Trigger message extension in Copilot for Microsoft 365**
+**Trigger message extension in Microsoft 365 Copilot**
-To trigger the message extension as plugin in Copilot for Microsoft 365, follow these steps:
+To trigger the message extension as plugin in Microsoft 365 Copilot, follow these steps:
1. Go to **Visual Studio**. 1. In the debug dropdown, select **Copilot (browser)**. Visual Studio launches Teams web client.
To trigger the message extension as plugin in Copilot for Microsoft 365, follow
:::image type="content" source="../assets/images/Copilot/bot-based-VSC-debug-Copilot.png" alt-text="Screenshot shows the Copilot (Browser) debug option in Visual Studio."::: 1. Go to **Teams web client** > **Apps**.
-1. Search for **Copilot for Microsoft 365** and open the **Copilot for Microsoft 365** app.
+1. Search for **Copilot** and open Microsoft 365 Copilot.
1. Select **Plugins**. 1. From the list of plugins, turn on the toggle for your app. :::image type="content" source="../assets/images/Copilot/bot-based-VS-me-plugin-toggle.png" alt-text="Screenshot shows the Plugin option, list of plugins, and the toggle enabled for bot-based-ME-test-local plugin.":::
-1. From the message compose area, send a message to Copilot for Microsoft 365 to search for npm package information in Teams and Copilot. For example, find the npm package info on teamsfx-react in npmsearchlocal.
+1. From the message compose area, send a message to Microsoft 365 Copilot to search for npm package information in Teams and Microsoft 365 Copilot. For example, find the npm package info on teamsfx-react in npmsearchlocal.
- :::image type="content" source="../assets/images/Copilot/bot-based-VS-trigger-plugin.png" alt-text="Screenshot shows the plugin prompt and the Adaptive Card response with content and preview card from Copilot for Microsoft 365. The response contains a list of four products with Contoso product name. ":::
+ :::image type="content" source="../assets/images/Copilot/bot-based-VS-trigger-plugin.png" alt-text="Screenshot shows the plugin prompt and the Adaptive Card response with content and preview card from Microsoft 365 Copilot. The response contains a list of four products with Contoso product name. ":::
> [!NOTE]
-> This prompt might not always make Copilot for Microsoft 365 include a response from your message extension. If it happens, try some other prompts or leave feedback to us by downvoting the Copilot for Microsoft 365 response and leave a message.
+> This prompt might not always make Microsoft 365 Copilot include a response from your message extension. If it happens, try some other prompts or leave feedback to us by downvoting the Microsoft 365 Copilot response and leave a message.
# [Toolkit CLI](#tab/toolkit-cli)
To create a bot-based search message extension plugin using Teams Toolkit CLI, f
1. From the message extension fly-out menu, enter the name of your message extension in the search box. 1. Select your message extension and enter your search query.
-**Trigger message extension in Copilot for Microsoft 365**
+**Trigger message extension in Microsoft 365 Copilot**
-To trigger the message extension through Copilot for Microsoft 365, follow these steps:
+To trigger the message extension through Microsoft 365 Copilot, follow these steps:
1. Select **Apps**.
-1. Search for **Copilot for Microsoft 365** and open the **Copilot for Microsoft 365** app.
+1. Search for **Copilot** and open Microsoft 365 Copilot.
1. Select **Plugins**. 1. From the list of plugins, turn on the toggle for your app. :::image type="content" source="../assets/images/Copilot/bot-based-VSC-plugin-toggle.png" alt-text="Screenshot shows the Plugin option, list of plugins, and the toggle enabled for bot-based-ME-test-local plugin.":::
-1. From the message compose area, send a message to Copilot for Microsoft 365 to search for npm package information in Teams and Copilot. For example, find the npm package info on teamsfx-react in npm-searchlocal.
+1. From the message compose area, send a message to Microsoft 365 Copilot to search for npm package information in Teams and Microsoft 365 Copilot. For example, find the npm package info on teamsfx-react in npm-searchlocal.
- :::image type="content" source="../assets/images/Copilot/bot-based-VSC-trigger-plugin.png" alt-text="Screenshot shows the plugin prompt and the response from Copilot for Microsoft 365.":::
+ :::image type="content" source="../assets/images/Copilot/bot-based-VSC-trigger-plugin.png" alt-text="Screenshot shows the plugin prompt and the response from Microsoft 365 Copilot.":::
> [!NOTE]
-> This prompt might not always make Copilot for Microsoft 365 include a response from your message extension. If it happens, try some other prompts or leave feedback to us by downvoting the Copilot for Microsoft 365 response and leave a message tagged with [MessageExtension].
+> This prompt might not always make Microsoft 365 Copilot include a response from your message extension. If it happens, try some other prompts or leave feedback to us by downvoting the Microsoft 365 Copilot response and leave a message tagged with [MessageExtension].
# [Developer Portal for Teams](#tab/developer-portal-for-teams)
To test your bot-based message extension created in the Developer Portal for Tea
-For more on testing your plugin in Copilot for Microsoft 365, see [Debugging plugin selection](/microsoft-365-copilot/extensibility/orchestrator?tabs=tasks#debugging-plugin-selection).
+For more on testing your plugin in Microsoft 365 Copilot, see [debugging plugin selection](/microsoft-365-copilot/extensibility/debugging-copilot-plugin).
## Enable message extension as a plugin for Copilot for meetings
-Ensure that you've created a bot-based message extension and extended it as a plugin for Copilot for Microsoft 365. Before you get started, We recommend you to follow the guidelines listed in [Copilot for Microsoft 365 extension guidelines](high-quality-message-extension.md#extend-your-plugin-to-copilot-in-meetings) to extend your plugin for Copilot for meetings.
+Ensure that you've created a bot-based message extension and extended it as a plugin for Microsoft 365 Copilot. Before you get started, follow the guidelines listed in [ensure your Copilot plugins work in Teams meetings](high-quality-message-extension.md#ensure-your-copilot-plugins-work-in-teams-meetings) to extend your plugin for Copilot for meetings.
-To enable message extension as a plugin for Copilot for Teams meetings, follow these steps:
+To enable message extension as a plugin for Copilot for meetings, follow these steps:
1. Go to a **Teams meeting**. 1. Select **Join**.
To enable message extension as a plugin for Copilot for Teams meetings, follow t
1. In the Copilot for Teams pane, at the bottom-right corner, select the **Copilot Plugin Button**.
- :::image type="content" source="../assets/images/Copilot/meeting-copilot-trigger-plugin.png" alt-text="Screenshot shows the plugin icon in the copilot pane in a Teams meeting.":::
+ :::image type="content" source="../assets/images/Copilot/meeting-copilot-trigger-plugin.png" alt-text="Screenshot shows the plugin icon in the Copilot for Teams pane in a Teams meeting.":::
1. Search for your plugin and turn on the toggle for your plugin. 1. From the compose area, select **More prompts** to send a static prompt or you can type your own prompt and select **Send**.
- :::image type="content" source="../assets/images/Copilot/meeting-copilot-static-prompts.png" alt-text="Screenshot shows the list of static prompts available in the copilot pane in a Teams meeting.":::
+ :::image type="content" source="../assets/images/Copilot/meeting-copilot-static-prompts.png" alt-text="Screenshot shows the list of static prompts available in the Copilot for Teams pane in a Teams meeting.":::
-Meeting Copilot helps your meetings to be better and more productive. You can make meetings more interactive, which helps users by giving them a smoother and more interesting experience.
+Copilot for meetings helps your meetings to be better and more productive. You can make meetings more interactive, which helps users by giving them a smoother and more interesting experience.
## Step-by-step guide
-Follow the [step-by-step guide](../sbs-messagingextension-searchcommand-plugin.yml) to build a bot-based search message extension plugin for Copilot for Microsoft 365.
+Follow the [step-by-step guide](../sbs-messagingextension-searchcommand-plugin.yml) to build a bot-based search message extension plugin for Microsoft 365 Copilot.
## See also * [Build message extensions using API](api-based-overview.md) * [Define message extension action commands](how-to/action-commands/define-action-command.md)
-* [Extend Microsoft Copilot for Microsoft 365](/microsoft-365-copilot/extensibility/)
+* [Extend Microsoft 365 Copilot](/microsoft-365-copilot/extensibility/)
platform Copilot Plugin Faq https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/copilot-plugin-faq.md
Title: Microsoft 365 Chat plugin FAQ
+ Title: Microsoft 365 Copilot plugin FAQ
-description: In this article, fetch answers to some frequently asked questions while building a plugin for Microsoft Copilot for Microsoft 365.
+description: In this article, fetch answers to some frequently asked questions while building a plugin for Microsoft 365 Copilot.
ms.localizationpriority: medium Previously updated : 02/14/2024 Last updated : 09/16/2024 # Frequently Asked Questions
-Get answers to your common queries about building a message extension and extending the message extension as a plugin in Microsoft 365 Chat.
+Get answers to your common queries about building a message extension and extending the message extension as a plugin in Microsoft 365 Copilot.
</br> <details>
-<summary>Why isn't Microsoft 365 Chat including my plugin in a response?</summary>
+<summary>Why isn't Microsoft 365 Copilot including my plugin in a response?</summary>
Ensure your app manifest (previously called Teams app manifest) is descriptive. The app manifest helps in plugin matching in response to a user prompt. Also, ensure that you upload the app package to Outlook and interacted with the app, including authentication.
-If the problem continues, use the thumbs down indicator in the Microsoft 365 Chat reply and prefix your reply with [MessageExtension].
+If the problem continues, use the thumbs down indicator in the Microsoft 365 Copilot reply and prefix your reply with [MessageExtension].
</details> </br>
Here's an example description that work for NPM Finder.
</br> <details>
-<summary> Microsoft 365 Chat includes my plugin in the response, but the Microsoft 365 ChatΓÇÖs response doesnΓÇÖt meet my expectations. What should I do?</summary>
+<summary> Microsoft 365 Copilot includes my plugin in the response, but Microsoft 365 CopilotΓÇÖs response doesnΓÇÖt meet my expectations. What should I do?</summary>
-Use the downvoting option in the Microsoft 365 Chat reply and prefix your reply with [MessageExtension].
+Use the downvoting option in the Microsoft 365 Copilot reply and prefix your reply with [MessageExtension].
</details> </br>
Yes, you can. Ensure that you have a descriptive app manifest and upload the app
</br> <details>
-<summary> How can I get my existing Teams message extension to work with Microsoft 365 Chat? </summary>
+<summary> How can I get my existing Teams message extension to work with Microsoft 365 Copilot? </summary>
1. Register the bot channel in Azure Bot Service. 1. Upload the app to Outlook.
Yes, you can. Ensure that you have a descriptive app manifest and upload the app
</br> <details>
-<summary>What are the guidelines for Teams apps extensible as plugin for Microsoft Copilot for Microsoft 365? </summary>
+<summary>What are the guidelines for Teams apps extensible as plugin for Microsoft 365 Copilot? </summary>
-You can read the [Teams Store validation guidelines](../concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#teams-apps-extensible-as-plugin-for-microsoft-copilot-for-microsoft-365) for Teams apps extensible as plugin for Microsoft Copilot for Microsoft 365.
+You can read the [Teams Store validation guidelines](../concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#teams-apps-extensible-as-plugin-for-microsoft-365-copilot) for Teams apps extensible as plugin for Microsoft 365 Copilot.
</details> </br>
Developers will be encouraged to certify their new plugin after successfully com
</br> <details>
-<summary>How can I create or upgrade a message extension plugin for Copilot for Microsoft 365?</summary>
+<summary>How can I create or upgrade a message extension plugin for Microsoft 365 Copilot?</summary>
- You can [create or upgrade a message extension as a plugin in Copilot for Microsoft 365](build-bot-based-plugin.md) to interact with third-party tools and services and achieve more with Copilot for Microsoft 365. Additionally, your extensions must meet the standards for compliance, performance, security, and user experience outlined in [guidelines to create or upgrade a message extension plugin for Copilot for Microsoft 365](high-quality-message-extension.md).
+ You can [create or upgrade a message extension as a plugin in Microsoft 365 Copilot](build-bot-based-plugin.md) to interact with third-party tools and services and achieve more with Microsoft 365 Copilot. Additionally, your extensions must meet the standards for compliance, performance, security, and user experience outlined in [guidelines to create or upgrade a message extension plugin for Microsoft 365 Copilot](high-quality-message-extension.md).
</details>
platform Create Api Message Extension https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/create-api-message-extension.md
description: Learn how to create or build an API-based message extension using T
ms.localizationpriority: medium Previously updated : 04/08/2024 Last updated : 09/16/2024 # Create an API-based message extension
You can add commands and parameters to your message extension, to add commands:
1. Under **Details**, update the **Command description**.
- 1. If you want to launch a command using a trigger in Microsoft 365 chat, turn on the **Automatically run the command when a user opens the extension** toggle.
+ 1. If you want to launch a command using a trigger in Microsoft 365 Copilot, turn on the **Automatically run the command when a user opens the extension** toggle.
1. Select **Add**. The command is added successfully.
You can add commands and parameters to your message extension, to add commands:
An API-based message extension is created. To test your API-based message extension created in the Developer Portal for Teams, you can use the following methods:
platform Dev Guidelines Copilot Agents https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/dev-guidelines-copilot-agents.md
+
+ Title: Development guidelines for Copilot agents
+description: Learn how to optimize the Copilot agents with these development guidelines to create and upgrade Microsoft 365 Copilots
+++
+ms.localizationpriority: high
Last updated : 09/16/2024+++
+# Guidelines to create and upgrade Copilot agents
+
+> [!IMPORTANT]
+>
+> * Plugins for Microsoft 365 Copilot are in preview and work only in Microsoft 365 Copilot.
+> * Message extension plugins are in preview.
+> * Message extensions plugins in Microsoft 365 Copilot are in public preview for Microsoft Word and Microsoft PowerPoint.
+> * Ensure that Microsoft 365 Copilot is available for your organization. You have two ways to get a developer environment for Microsoft 365 Copilot:
+> * A sandbox Microsoft 365 tenant with Microsoft 365 Copilot (available in limited preview through [TAP membership](https://developer.microsoft.com/microsoft-365/tap)).
+> * An enterprise customer production environment with Microsoft 365 Copilot licenses.
+> For more information about validation guidelines for Copilot agents to increase their chance for being listed on the Team Store, see [validation guidelines for Copilot agents](../concepts/deploy-and-publish/appsource/prepare/review-copilot-validation-guidelines.md).
+
+Microsoft 365 plugins provide integration with various Microsoft 365 products, such as Teams and Outlook. The integration helps users to search or create content in external systems. Message extension plugins allow Microsoft 365 Copilot to interact with APIs from other software and services through a bot. With Microsoft 365 Copilot, you can:
+
+* Search for the latest information or record. For example, the latest incident ticket or survey results.
+* Summarize information based on multiple records. For example, summarize all incident tickets related to the project Northwind.
+
+We recommend that you build or upgrade your existing message extensions to maximize their usefulness and usability in Microsoft 365 Copilot. Message extensions must support one or more search commands. As Microsoft 365 Copilot recognizes them as skills, it can execute on behalf of the user.
++
+## Define app, command, and parameter descriptions
+
+[*Must fix*]
+
+A good description offers a clear and concise summary of the appΓÇÖs features and allows Microsoft 365 Copilot to efficiently discover and execute search operations. When a user enters the app name along with a verb, for example, **Find Contoso tickets**, the message extension plugin must be invoked from Microsoft 365 Copilot.
+
+ :::image type="content" source="../assets/images/Copilot/validation-guidelines-plugin-prompt-pass.png" alt-text="Screenshot shows a pass scenario with an example of a sample prompt for message extension plugin in Microsoft 365 Copilot.":::
+
+ :::image type="content" source="../assets/images/Copilot/validation-guidelines-plugin-prompt-fail.png" alt-text="Screenshot shows a fail scenario without an example of sample prompt for message extension as a plugin in Microsoft 365 Copilot.":::
+
+### App description
+
+Long and short app descriptions must be clear and define the app's scope. To render an app as a plugin in Microsoft 365 Copilot, modify the app description to suit the following plugin requirements:
+
+* Long description must clearly explain the functionality and usage of the message extension plugin in Microsoft 365 Copilot. For example, use Contoso cloud in Microsoft 365 Copilot to search and summarize your tasks.
+* Short description must briefly describe the app's functionality in a natural language and can include the name of the app.
+
+The following code snippets show the short description examples for each category:
+
+# [Tasks](#tab/tasks)
+
+**Description**: Create, search, view tickets, bugs, and projects.
+
+**App description example:**
+
+```json
+{
+ "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.13/MicrosoftTeams.schema.json",
+ "version": "1.0.0",
+ "manifestVersion": "1.13",
+ "id": "2bxxxxc5-5xxx-4xxx-aXXX-94xxxx8919e5",
+ "name": {
+ "short": "Tasks",
+ "full": "Contoso Tasks"
+ },
+ "description": {
+ "short": "Create, search, view tickets, bugs, and projects",
+ "full": "Contoso Tasks makes it easy to stay organized. Create, assign, and track tasks individually or collaboratively with your team, and see everything come together in one place."
+ },
+```
+
+# [Surveys](#tab/surveys)
+
+**Description**: Create and search for surveys and results.
+
+**App description example:**
+
+```json
+{
+ "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.13/MicrosoftTeams.schema.json",
+ "version": "1.0.0",
+ "manifestVersion": "1.13",
+ "id": "2bxxxxc5-5xxx-4xxx-aXXX-94xxxx8919e5",
+ "name": {
+ "short": "Survey",
+ "full": "Contoso Survey"
+ },
+ "description": {
+ "short": "Create and search for surveys and results.",
+ "full": "Contoso Survey helps you manage all your surveys in one place. Create, capture, and analyze surveys within the platform you use every day."
+ },
+```
+
+# [CRM](#tab/crm)
+
+**Description**: Search and view customer leads.
+
+**App description example:**
+
+```json
+{
+ "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.13/MicrosoftTeams.schema.json",
+ "version": "1.0.0",
+ "manifestVersion": "1.13",
+ "id": "2bxxxxc5-5xxx-4xxx-aXXX-94xxxx8919e5",
+ "name": {
+ "short": "CRM",
+ "full": "Contoso CRM"
+ },
+ "description": {
+ "short": "Search and view customer leads.",
+ "full": "Resolve tickets faster, simplify employee workflows and improve team performance by integrating Contoso CRM to Microsoft Teams. Contoso CRM is a complete customer service solution thatΓÇÖs easy to use and scales with your business."
+ }
+```
+
+# [General](#tab/general)
+
+**Description**: Stock and share lookup tool.
+
+**App description example:**
+
+```json
+{
+ "$schema": "https://developer.microsoft.com/en-us/json-schemas/teams/v1.13/MicrosoftTeams.schema.json",
+ "version": "1.0.0",
+ "manifestVersion": "1.13",
+ "id": "2bxxxxc5-5xxx-4xxx-aXXX-94xxxx8919e5",
+ "name": {
+ "short": "General",
+ "full": "Contoso stocks"
+ },
+ "description": {
+ "short": "Stock and share look up tool.",
+ "full": "Get real-time stock quotes and share them in a conversation. Search by company name, share, or stocks."
+```
+++
+### Search command description
+
+Command description maps user intent and utterance to search command inside a plugin and must be built based on the analysis of the user intent and keywords. Search command descriptions must:
+
+* Focus on what and how the command searches (detailed list) in natural language.
+* Include verbs and synonyms, if applicable.
+* Focus on keywords that are likely to be used in the search function of your native apps.
+
+#### Semantic description
+
+[*Good-to-fix*]
+
+The [semanticDescription](../resources/schem#composeextensionscommands) property is used to provide a detailed description of a command for Microsoft 365 Copilot. Semantic description for commands supports up to 5,000 characters and isn't displayed in the user interface. If the `semanticDescription` property is left empty, Microsoft 365 Copilot uses the information in the `description` field. When writing a `semanticDescription`, you must include information about expected values, limits, and ranges for the command.
+
+The `semanticDescription` property isn't a mandatory field. However, if you add `semanticDescription` in app manifest, the existing validation checks for short, parameter, and command descriptions are also applicable for semantic descriptions.
+
+The following code snippets show the command and semantic description examples for each category:
+
+# [Tasks](#tab/tasks)
+
+**Description**: Search for high priority tasks related to Northwind that are due tomorrow.
+
+**Command description example:**
+
+```json
+"commands": [
+ {
+ "id": "Search",
+ "type": "query",
+ "title": "Tasks",
+ "description": "Search for high priority tasks related to Northwind that are due tomorrow.",
+ "SemanticDescription": "Search for issues, epics, stories, tasks, sub tasks, bugs + additional details."
+ "initialRun": true,
+ "fetchTask": false,
+ "context": [
+ "commandBox",
+ "compose",
+ "message"
+ ],
+```
+
+# [Surveys](#tab/surveys)
+
+**Description**: Search for surveys, drafts, and results with keywords or number of respondents.
+
+**Command description example:**
+
+```json
+"commands": [
+ {
+ "id": "Search",
+ "type": "query",
+ "title": "Survey",
+ "description": "Search for surveys, drafts, and results with keywords or number of respondents.",
+ "semanticDescription": "This command enables users to search for surveys, drafts, and results based on specific keywords or the number of respondents."
+ "initialRun": true,
+ "fetchTask": false,
+ "context": [
+ "commandBox",
+ "compose",
+ "message"
+ ],
+```
+
+# [CRM](#tab/crm)
+
+**Description**: Through CRM plugin, find qualified, unqualified, and quoted leads of clients and customers.
+
+**Command description example:**
+
+```json
+"commands": [
+ {
+ "id": "Search",
+ "type": "query",
+ "title": "CRM",
+ "description": "Through CRM plugin, find qualified, unqualified, and quoted leads of clients and customers.",
+ "semanticDescription": "This command allows users to search for leads in the CRM system based on specific criteria.",
+ "initialRun": true,
+ "fetchTask": false,
+ "context": [
+ "commandBox",
+ "compose",
+ "message"
+ ],
+```
+
+# [General](#tab/general)
+
+**Description**: Find number of stocks or listed equities using keywords, key ratios, index, and so on.
+
+**Command description example:**
+
+```json
+"commands": [
+ {
+ "id": "Search",
+ "type": "query",
+ "title": "General",
+ "description": "Find number of stocks or listed equities using keywords, key ratios, and index.",
+ "initialRun": true,
+ "fetchTask": false,
+ "context": [
+ "commandBox",
+ "compose",
+ "message"
+ ],
+```
+++
+> [!IMPORTANT]
+>
+> For activating the OAuth sign-in link in the plugin, ensure that you set the `initialRun` property to `true` for search commands within the app manifest.
+
+### Parameter description
+
+Each message extension command supports has a corresponding `parameters' property, which supports up to five parameters and the first parameter must be visible in the message extension search bar. A parameter must have a good description, which must contain a combination of acceptable parameters, enums, acronyms, and output format.
+
+The [semanticDescription](../resources/schem#composeextensionscommands) property is used to provide a detailed description of a command for Microsoft 365 Copilot. Semantic description for parameters supports up to 2,000 characters and isn't displayed in the user interface. If the `semanticDescription` property is left empty, Microsoft 365 Copilot uses the information in the `description` field. When writing a `semanticDescription`, you must include information about expected values, limits, and ranges for the command.
+
+A good parameter description explains the requirements of the system in a natural language with output format. The following are a few examples of basic and advanced search requests for each category:
+
+# [Tasks](#tab/tasks)
+
+Basic search: Search for tasks related to Northwind.</br>
+Advanced search: Search for high priority tasks related to Northwind that are due tomorrow.
+
+**Parameter description example:**
+
+```json
+"parameters": [
+ {
+ "name": "Name",
+ "title": "Project or Task Name",
+ "description": "Project name or task name as keyword.",
+ "inputType": "text"
+ },
+ {
+ "name": "Time",
+ "title": "Time",
+ "description": "Date or number of days for which you need tasks for.",
+ "semanticDescription": "Date or number of days for which you need tasks for. Output: Number",
+ "inputType": "text"
+ },
+ {
+ "name": "Priority",
+ "title": "Priority",
+ "description": "Priority of tasks.",
+ "semanticDescription": "Priority of tasks. Acceptable values are high, medium, low, NA",
+ "inputType": "text"
+ }]
+```
+
+# [Surveys](#tab/surveys)
+
+Basic search: Retrieve Customer Satisfaction Surveys. </br>
+Advanced search: Retrieve recent customer satisfaction survey on product Contoso which as filled by more than 100 recipients.
+
+**Parameter description example:**
+
+```json
+"parameters": [
+ {
+ "name": "SurveyName",
+ "title": "Name of Survey",
+ "description": "Survey name or related keyword",
+ "inputType": "text"
+ },
+ {
+ "name": "Tags",
+ "title": "Tags",
+ "description": "Product name or keywords related pertaining to a question",
+ "inputType": "text"
+ },
+ {
+ "name": "ResponseNumber",
+ "title": "Response number",
+ "description": "Number of responses received for a survey.",
+ "semanticDescription": "Number of responses received for a survey. Output: Number",
+ "inputType": "text"
+ }
+]
+```
+
+# [CRM](#tab/crm)
+
+Basic search: Fetch me qualified leads. </br>
+Advanced search: Fetch qualified leads for which quotes are pending from last seven days.
+
+**Parameter description example:**
+
+```json
+"parameters": [
+ {
+ "name": "TypeofLeads",
+ "title": "Type of Leads",
+ "description": "Type of leads to find.",
+ "semanticDescription": "Type of leads to find. Acceptable fields are: Qualified, Unqualified and New.",
+ "inputType": "text"
+ },
+ {
+ "name": "Status",
+ "title": "Status",
+ "description": "Status of leads to find.",
+ "semanticDescription": "Status of leads to find. Acceptable fields are: Pending, Quote Given and Quote Rejected.",
+ "inputType": "text"
+ },
+ {
+ "name": "Time",
+ "title": "Time",
+ "description": "Number of days to search for leads with given status.",
+ "semanticIndex": "Number of days to search for leads with given status. Output: Number",
+ "inputType": "text"
+ }
+]
+```
+
+# [General](#tab/general)
+
+Basic search: Find stocks in NASDAQ.</br>
+Advanced search: Find top 10 stocks in NASDAQ with P/E less than 30 and P/B less than 2.
+
+**Parameter description example:**
+
+```json
+"parameters": [
+ {
+ "name": "StockIndex",
+ "title": "Stock Index",
+ "description": "Name of index to search for stocks",
+ "semanticDescription": "Name of stock market index used to search for stocks",
+ "inputType": "text"
+ },
+ {
+ "name": "NumberofStocks",
+ "title": "Ranked Number of Stocks",
+ "description": "Number of stocks to return.",
+ "semanticDescription": "Number of stocks to return in ranked order. Output format: Top:<Number of stocks or bottom:<Number of stocks>",
+ "inputType": "text"
+ },
+ {
+ "name": "P/B",
+ "title": "Price to Book Ratio",
+ "description": "Price-to-book ratio of a stock.",
+ "semanticDescription": "Price to book (P/B) ratio of a stock. Output format: >x.xx or <x.xx",
+ "inputType": "text"
+ },
+ {
+ "name": "P/E",
+ "title": "Price to Earnings Ratio",
+ "description": "Price-to-earnings ratio of a stock with comparison.",
+ "semanticDescription": "Price to Earnings (P/E) ratio of a stock with comparison. Output format: >x.xx or <x.xx",
+ "inputType": "text"
+ }
+]
+```
+++
+## Enhance message extension to retrieve information through compound utterances
+
+[*Must fix*]
+
+> [!NOTE]
+> Search through dialog (referred as task module in TeamsJS v1.x) isn't supported in Microsoft 365 Copilot.
+
+For Microsoft 365 Copilot, a search-based message extension must support more than three unique compound utterances to perform deep retrieval of accurate information. To enable compound utterances, you must expand the scope of search to handle three or more parameters by updating the [app manifest (previously called Teams app manifest)](../resources/schem#composeextensionscommands) and ensure the following:
+
+* Update your web service to support search based on multiple parameters. For more information on how to respond to user requests, see [Respond to search command](how-to/search-commands/respond-to-search.md).
+* Microsoft 365 Copilot might pass an empty string or null value for parameters, which aren't part of user utterance, update your web service to handle the parameters.
+
+* A message extension supports upto 10 commands (9 usable) and each command has a corresponding `parameters` property, which supports up to five parameters.
+
+<br>
+<details><summary>The following code is an example of multiple parameters defined in app manifest:</summary>
+
+```json
+"commands": [
+ {
+ "id": "inventorySearch",
+ "context": [
+ "compose",
+ "commandBox"
+ ],
+ "description": "Search products by name, category, inventory status, supplier location, stock level",
+ "title": "Product inventory",
+ "type": "query",
+ "parameters": [
+ {
+ "name": "productName",
+ "title": "Product name",
+ "description": "Enter a product name here",
+ "inputType": "text"
+ },
+ {
+ "name": "categoryName",
+ "title": "Category name",
+ "description": "Enter the category of the product",
+ "inputType": "text"
+ },
+ {
+ "name": "inventoryStatus",
+ "title": "Inventory status",
+ "description": "Enter what status of the product inventory. Possible values are 'in stock', 'low stock', 'on order', or 'out of stock'",
+ "inputType": "text"
+ },
+ {
+ "name": "supplierCity",
+ "title": "Supplier city",
+ "description": "Enter the supplier city of product",
+ "inputType": "text"
+ },
+ {
+ "name": "stockQuery",
+ "title": "Stock level",
+ "description": "Enter a range of integers such as 0-42 or 100- (for >100 items). Only use if you need an exact numeric range.",
+ "inputType": "text"
+ }
+ ]
+ },
+ {
+ "id": "discountSearch",
+ "context": [
+ "compose",
+ "commandBox"
+ ],
+ "description": "Search for discounted products by category",
+ "title": "Discounts",
+ "type": "query",
+ "parameters": [
+ {
+ "name": "categoryName",
+ "title": "Category name",
+ "description": "Enter the category to find discounted products",
+ "inputType": "text"
+ }
+ ]
+ },
+ {
+ "id": "revenueSearch",
+ "context": [
+ "compose",
+ "commandBox"
+ ],
+ "description": "Find products based on their revenue/period",
+ "title": "Revenue",
+ "type": "query",
+ "parameters": [
+ {
+ "name": "revenueRange",
+ "title": "Revenue range",
+ "description": "Enter 'high' or 'low' or enter a range of integers such as 0-10000 or 5000- using this exact format",
+ "inputType": "text"
+ }
+ ]
+ }
+ ]
+```
+
+</details>
+<br>
++
+The search parameters must have good descriptions with acceptable parameters, enums, acronyms, and output format. For more information and examples, see [Parameter description](#parameter-description).
+
+## Define sample prompts
+
+[*Must fix*]
+
+The [`samplePrompts`](../resources/schem#composeextensionscommands) property guides users on how to use the various plugins within Microsoft 365 Copilot. Microsoft 365 Copilot uses the sample prompts to display the prompts for the user. The prompts must be adaptable to different locales and clear across different commands. Sample prompts are available for First Run Experience (FRE) within Microsoft 365 Copilot when a user first installs or enables a plugin.
++
+> [!NOTE]
+>
+> * If the app manifest doesn't specify the `samplePrompts` property, the prompts aren't displayed.
+> * The `samplePrompts` property is mandatory for app validation during the app submission process.
+> * If you define multiple commands for your app, a maximum of three prompts (one from each of the top three commands) are displayed to the user. The prompts rotate to provide the user with a diverse set of prompts across different commands.
+
+The following code is an example of the `samplePrompts` property in app manifest:
+
+```json
+"composeExtensions": [
+ {
+ "canUpdateConfiguration": true,
+ "botId": "bxxxxxx5-xxxx-xxxx-xxxx-4xxxxxx16599",
+ "commands": [
+ {
+ "id": "orders",
+ "title": "Orders",
+ "context": [
+ "Commandbox",
+ "Compose"
+ ],
+ "description": "Search for orders",
+ "semanticDescription": "Search for orders",
+ "samplePrompts": [
+ {
+ "text": "Search for all orders"
+ },
+ {
+ "text": "Search for orders related to Contoso"
+ },
+ {
+ "text": "Search for all pending orders"
+ },
+ {
+ "text": "Search for all completed ordered for Fabrikam"
+ }
+ ]
+ }
+ ]
+ }
+]
+```
+++
+## Create rich Adaptive Card responses
+
+[*Must fix*]
+
+Message extensions respond to a user input with an Adaptive Card. An Adaptive Card for a message extension plugin must function effectively, appear rich, and meet the following requirements:
+
+* Adaptive Card response must include Adaptive Card content and preview card information as part of the same template. [*Must fix*]
+
+ :::image type="content" source="../assets/images/Copilot/validation-guidelines-app-response-copilot.png" alt-text="Screenshot shows an example of a sample app showing Microsoft 365 Copilot app response contains preview and content in the same response." lightbox="../assets/images/Copilot/validation-guidelines-app-response-copilot.png":::
+
+ <br/>
+ <details><summary>Adaptive Card response template example</summary>
+
+ ```json
+ {
+ "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
+ "type": "AdaptiveCard",
+ "version": "1.5",
+ "body": [
+ {
+ "type": "Container",
+ "items": [
+ {
+ "type": "TextBlock",
+ "text": "${companyName}",
+ "size": "Medium",
+ "wrap": true,
+ "style": "heading"
+ },
+ {
+ "type": "TextBlock",
+ "text": "${stockExchange} ${stockSymbol}",
+ "isSubtle": true,
+ "spacing": "None",
+ "wrap": true
+ },
+ {
+ "type": "TextBlock",
+ "text": "${formattedDate} ${formattedTime}",
+ "wrap": true
+ }
+ ]
+ },
+ {
+ "type": "Container",
+ "spacing": "None",
+ "items": [
+ {
+ "type": "ColumnSet",
+ "columns": [
+ {
+ "type": "Column",
+ "width": "stretch",
+ "items": [
+ {
+ "type": "TextBlock",
+ "text": "${currentPrice} ",
+ "size": "ExtraLarge",
+ "wrap": true
+ },
+ {
+ "type": "TextBlock",
+ "text": "${priceChange} ${percentChange}",
+ "color": "${changeColor}",
+ "spacing": "None",
+ "wrap": true
+ }
+ ]
+ },
+ {
+ "type": "Column",
+ "width": "auto",
+ "items": [
+ {
+ "type": "FactSet",
+ "facts": [
+ {
+ "title": "Open",
+ "value": "${openPrice} "
+ },
+ {
+ "title": "High",
+ "value": "${highPrice} "
+ },
+ {
+ "title": "Low",
+ "value": "${lowPrice} "
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "previewCard": {
+ "contentType": "application/vnd.microsoft.card.hero",
+ "content": {
+ "title": "${companyName}",
+ "text": "${stockSymbol}"
+ }
+ }
+ }
+ ```
+
+ </details>
+
+ > [!NOTE]
+ > Action types `imBack`, `messageBack` aren't supported in a data object.
+
+ The following action types are recommended:
+
+ * `Action.OpenUrl`: Opens a specified URL from the Card.
+ * `Action.ToggleVisibility`: Displays or hides one or more elements in the card.
+ * `Action.Execute`: Collects the input fields and sends them as a request to your bot service.
+ * `Action.Submit`: Opens a dialog or Stageview using type invoke in data object.
+
+ :::image type="content" source="../assets/images/Copilot/ailib-copilot-action-buttons.png" alt-text="Graphic shows an example of the Update Stock, restock, and Cancel restock action buttons in an Adaptive Card response in Microsoft 365 Copilot.":::
+
+* If a user can change any information on the card through dialog, Stageview, or directly from the card, we recommend the Adaptive Card to support universal actions and automatic refresh. [*Recommended*]
+* Adaptive Cards must include a URL as part of the [metadata](https://adaptivecards.io/explorer/Metadata.html), which allows cards to be easily copied from one hub to another. [*Recommended*]
+* Apart from thumbnails, any image in an Adaptive Card must have an alt-text. [*Recommended*]
+
+## Message extension plugins in Microsoft 365 Copilot apps
+
+[*Must fix*]
+
+> [!IMPORTANT]
+> Message extension plugins in Microsoft 365 Copilot apps are in limited private preview for Word and PowerPoint. More details to be published after a public preview is announced.
+
+Copilot agents customize and extend the Microsoft 365 Copilot experience by bringing more skills and knowledge to Microsoft 365 Copilot for a personalized user experience. By using plugins, which are a subset of Copilot agents, users can integrate additional capabilities into Microsoft 365 Copilot by interacting with third-party applications, whether for retrieving or modifying information within those apps. For instance, message extension plugins facilitate searching for data in other applications so that Microsoft 365 Copilot can present it upon request when the plugin is activated.
+
+ If you've developed a plugin for Microsoft 365 Copilot in Teams or [copilot.microsoft.com](https://copilot.microsoft.com/#/), you're already aware of the benefits it offers to users within their workflow.
+
+## Code samples
+
+| Sample name | Description | TypeScript |
+|-|--|--|
+| Northwind inventory message extension | This sample demonstrates how to use a Teams message extension as a plugin in Microsoft 365 Copilot. | [View](https://github.com/OfficeDev/Copilot-for-M365-Plugins-Samples/tree/main/samples/msgext-northwind-inventory-ts) |
+
+## See also
+
+* [Extend bot-based message extension as plugin](build-bot-based-plugin.md)
+* [Extend Microsoft 365 Copilot](/microsoft-365-copilot/extensibility/)
platform Define Search Command https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/how-to/search-commands/define-search-command.md
description: Learn about message extension search commands for Teams apps, to create a search command through app manifest and manually. Last updated : 09/16/2024 ms.localizationpriority: medium # Define message extension search commands
ms.localizationpriority: medium
The search command is invoked from any one or both of the following locations: * Compose message area: The buttons at the bottom of the compose message area.
-* Command box: By using / in the command box. For example, **/your-app-name**. If you're using the classic Teams, search command is invoked by @mentioning in the command box. For example, **@your-app-name**.
+* Command box: By using / in the command box. For example, **/your-app-name**. If you're using the classic Teams, search command is invoked by @mentioning in the command box. For example, **@your-app-name**.
When a search command is invoked from the compose message area, the user sends the results to the conversation. When a search command invoked from the command box, the user interacts with the resulting card, or copies it for use elsewhere.
To run the message extension in Teams, follow these steps:
:::image type="content" source="../../../assets/images/Copilot/bot-based-me-tdp-type.png" alt-text="Screenshot shows API Message extension is already in use disclaimer when a user switches from API to bot message extension type."::: 1. If you have an existing bot, select **Existing bot** or if you have a bot ID, select **Enter Bot ID**.
-
+ 1. If you don't have an existing bot ID, select **Create a bot**, to create a new bot and enter the bot ID of the new bot that you created. 1. Select **Save**.
To run the message extension in Teams, follow these steps:
### Extend bot-based message extension as plugin > [!IMPORTANT]
-> Plugins for Microsoft Copilot for Microsoft 365 are in preview and only work in Microsoft 365 Chat in Teams.
+> Plugins for Microsoft 365 Copilot are in preview and only work in Microsoft 365 Copilot in Teams.
-Microsoft 365 plugins provide integration with various Microsoft 365 products, such as Teams and Outlook. The integration helps users to search or create content in external systems. Message extension plugins allow Microsoft Copilot for Microsoft 365 to interact with APIs from other software and services through a bot. We recommend that you build or upgrade your existing message extensions to maximize their usefulness and usability in Copilot for Microsoft 365. For more information, see [extend bot-based message extension as plugin for Copilot for Microsoft 365](../../build-bot-based-plugin.md).
+Microsoft 365 plugins provide integration with various Microsoft 365 products, such as Teams and Outlook. The integration helps users to search or create content in external systems. Message extension plugins allow Microsoft 365 Copilot to interact with APIs from other software and services through a bot. We recommend that you build or upgrade your existing message extensions to maximize their usefulness and usability in Microsoft 365 Copilot. For more information, see [extend bot-based message extension as plugin for Microsoft 365 Copilot](../../build-bot-based-plugin.md).
## Code snippets
platform What Are Messaging Extensions https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/what-are-messaging-extensions.md
description: Learn how message extensions are used, its types, and scenarios. Sa
ms.localizationpriority: medium Previously updated : 02/24/2023 Last updated : 09/16/2024 # Build message extensions
The article provides an overview of message extensions, use cases, functionality
The following image displays the locations from where message extensions can be invoked: > [!NOTE]
->
+>
> * @mentioning message extensions in the compose box isn't supported. > * Message extension options aren't supported for group chats with external users.
The following table helps you select a message extension type to get started:
| Message extension with search-based commands | This sample shows how to build a Search-based Message Extension. It searches NuGet packages and displays the results in search based messaging extension. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/python) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-search/csharp/demo-manifest/msgext-search.zip) |Message extension action preview| This sample shows how to use action preview in Messaging Extensions using Bot Framework v4. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/nodejs) |NA|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-action-preview/csharp/demo-manifest/msgext-action-preview.zip) | |Message extension action for task scheduling|This sample shows how to schedule a task from message extension action command and get a reminder card at a scheduled date and time.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-message-reminder/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-message-reminder/nodejs)| NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-message-reminder/csharp/demo-manifest/msgext-message-reminder.zip)|
-| Northwind inventory message extension| This sample demonstrates how to use a Teams message extension as a plugin in Microsoft Copilot for Microsoft 365. | NA |[View](https://github.com/OfficeDev/Copilot-for-M365-Plugins-Samples/tree/main/samples/msgext-northwind-inventory-ts) |NA |NA
+| Northwind inventory message extension| This sample demonstrates how to use a Teams message extension as a plugin in Microsoft 365 Copilot. | NA |[View](https://github.com/OfficeDev/Copilot-for-M365-Plugins-Samples/tree/main/samples/msgext-northwind-inventory-ts) |NA |NA
platform Manifest Schema Dev Preview https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/schema/manifest-schema-dev-preview.md
Title: Developer Preview App Manifest Schema
description: Learn about public developer preview manifest schema for Microsoft Teams, sample app manifest, schema properties, and how to enable developer preview. ms.localizationpriority: medium Previously updated : 11/15/2021 Last updated : 09/16/2024 # Public developer preview app manifest schema
The app manifest describes how the app integrates into the Microsoft Teams platf
"color32x32": "%FILENAME-32x32px%" }, "accentColor": "%HEX-COLOR%",
+ "copilotExtensions": {
+ "declarativeCopilots": [
+ {
+ "id": "agent1",
+ "file": "declarativeAgent1.json"
+ }
+ ]
+ },
"configurableTabs": [ { "configurationUrl": "https://contoso.com/teamstab/configure",
A color to use with and as a background for your outline icons.
The value must be a valid HTML color code starting with '#', for example `#4464ee`.
+## copilotExtensions
+
+**Optional** &ndash; Object
+
+Defines one or more agents to Microsoft 365 Copilot. [Declarative agents](/microsoft-365-copilot/extensibility/overview-declarative-agent) are customizations of Microsoft 365 Copilot that run on its same orchestrator and foundation models.
+
+|Name| Type| Maximum size | Required | Description|
+||||||
+|`declarativeCopilots`|Array of objects| 1 |✔️| Array of `declarativeCopilot` objects. |
+
+### declarativeCopilot
+
+Represents a customization of Microsoft 365 Copilot, as defined by its manifest file.
+
+|Name| Type| Maximum size | Required | Description|
+||||||
+|`id`|String| |✔️| Unique identifier for the agent. When using Microsoft Copilot Studio to build agents, this is auto-generated. Otherwise, manually assign the value according to your own conventions or preference. |
+|`file`|String| |✔️| Relative path within the app package to the [declarative agent manifest](/microsoft-365-copilot/extensibility/declarative-agent-manifest) file. |
+ ## configurableTabs **Optional** &ndash; Array
Each command item is an object with the following structure:
|||||| |`id`|String|64 characters|✔️|The ID for the command.| |`type`|String|64 characters||Type of the command. One of `query` or `action`. Default: `query`|
-|`samplePrompts`|Array|5 ||Property used by Copilot to display prompts supported by the plugin to the user. For Copilot scenarios, this property is required in order to pass app validation for store submission. |
+|`samplePrompts`|Array|5 ||Property used by Microsoft 365 Copilot to display prompts supported by the plugin to the user. For Microsoft 365 Copilot scenarios, this property is required in order to pass app validation for store submission. |
|`samplePrompts.text`|string|128 characters|✔️|Content of the sample prompt.| |`apiResponseRenderingTemplateFile`|String|2048 characters||A relative file path for api [response rendering template](https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.ResponseRenderingTemplate.schema.json) file used to format the JSON response from developer’s API to Adaptive Card response.| |`context`|Array of Strings|3 characters||Defines where the message extension can be invoked from. Any combination of `compose`, `commandBox`, `message`. <br>Default values: `compose, commandBox`| |`title`|String|32 characters|✔️|The user-friendly command name.| |`description`|String|128 characters||The description that appears to users to indicate the purpose of this command.|
-|`semanticDescription`|String|5000 characters||Semantic description of the command for consumption by Copilot using Large Language Models (LLMs).|
+|`semanticDescription`|String|5000 characters||Semantic description of the command for consumption by Microsoft 365 Copilot using Large Language Models (LLMs).|
|`initialRun`|Boolean|||A Boolean value that indicates whether the command runs initially with no parameters. <br>Default value: `false`| |`fetchTask`|Boolean|||A Boolean value that indicates if it must fetch the dialog dynamically.<br>Default value: `false`| |`taskInfo`|Object|||Specify the dialog to preload when using a message extension command.|
platform Manifest Schema https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/schema/manifest-schema.md
Title: Manifest schema reference
description: In this article, you'll have the latest version of the public manifest schema for Microsoft Teams reference, schema, and sample full manifest. ms.localizationpriority: high Previously updated : 02/09/2023 Last updated : 09/16/2024 # App manifest schema
Each command item is an object with the following structure:
|||||| |`id`|String|64 characters|✔️|The ID for the command.| |`type`|String|||Type of the command. One of `query` or `action`. <br>Default value: `query` |
-|`samplePrompts`|Array|5 ||Property used by Copilot to display prompts supported by the plugin to the user.|
+|`samplePrompts`|Array|5 ||Property used by Microsoft 365 Copilot to display prompts supported by the plugin to the user.|
|`samplePrompts.text`|String|128 characters|✔️|Content of the sample prompt.| |`apiResponseRenderingTemplateFile`|String|2048 characters||A relative file path for api [response rendering template](https://developer.microsoft.com/json-schemas/teams/vDevPreview/MicrosoftTeams.ResponseRenderingTemplate.schema.json) file used to format the JSON response from developer’s API to Adaptive Card response.| |`context`|Array of strings|3 ||Defines where the message extension can be invoked from. Any combination of `compose`, `commandBox`, `message`. <br>Default values: `compose, commandBox`| |`title`|String|32 characters|✔️|The user-friendly command name.| |`description`|String|128 characters||The description that appears to users to indicate the purpose of this command.|
-|`semanticDescription`|String|5000 characters||Semantic description of the command for consumption by Copilot using Large Language Models (LLMs).|
+|`semanticDescription`|String|5000 characters||Semantic description of the command for consumption by Microsoft 365 Copilot using Large Language Models (LLMs).|
|`initialRun`|Boolean|||A Boolean value indicates whether the command runs initially with no parameters. <br>Default value: `false` | |`fetchTask`|Boolean|||A Boolean value that indicates if it must fetch the dialog (referred as task module in TeamsJS v1.x) dynamically. <br>Default value: `false` | |`taskInfo`|Object|||Specify the dialog to preload when using a message extension command.|
Each command item is an object with the following structure:
|`parameters.name`|String|64 characters|✔️|The name of the parameter as it appears in the client. The parameter name is included in the user request.| |`parameters.title`|String|32 characters|✔️|User-friendly title for the parameter.| |`parameters.description`|String|128 characters||User-friendly string that describes this parameter’s purpose.|
-|`parameters.semanticDescription`|String|2000 characters||Semantic description of the parameter for consumption by Copilot using Large Language Models (LLMs).|
+|`parameters.semanticDescription`|String|2000 characters||Semantic description of the parameter for consumption by Microsoft 365 Copilot using Large Language Models (LLMs).|
|`parameters.value`|String|512 characters||Initial value for the parameter. The value isn't supported.| |`parameters.inputType`|String|||Defines the type of control displayed on a dialog for `fetchTask: false`. Input value can only be one of `text`, `textarea`, `number`, `date`, `time`, `toggle`, `choiceset`. <br>Default value: `text` | |`parameters.choices`|Array of objects|10 items||The choice options for the `choiceset`. Use only when `parameters.inputType` is `choiceset`.|
platform Cards Reference https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/cards/cards-reference.md
Title: Create & Explore Card Types in Teams
description: In this module, learn what are cards and card actions available to bots in Teams and create a hero, thumbnail and adaptive cards. ms.localizationpriority: high Previously updated : 06/13/2023 Last updated : 09/16/2024 # Types of cards
Adaptive Cards must not display a horizontal scroll. To avoid horizontal scrolls
* Avoid defining ColumnSets with more than three columns. * DonΓÇÖt use explicit pixel width on more than one column in the set.
- * When using an explicit width, donΓÇÖt specify a value that would make the column use more than 1/4 of the narrowest possible card width (for example, the width of a card in the meeting chat pane or in Copilot).
+ * When using an explicit width, donΓÇÖt specify a value that would make the column use more than 1/4 of the narrowest possible card width (for example, the width of a card in the meeting chat pane or in Microsoft 365 Copilot).
* In general, 48 pixels is about the maximum explicit width youΓÇÖd want to use, although there may be exceptions depending on the scenario. * **Sizing images**
platform Teams Faq https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/teams-faq.md
Title: Teams Developer Documentation - FAQs description: In this article, check FAQS on Adaptive Card Previewer, bots, Live Share, Microsoft 365 Chat, Teams AI library, Partner Center, and other Teams FAQs. Last updated : 09/16/2024 ms.localizationpriority: high
Resolution - Connect Microsoft Entra ID to Microsoft Cloud Partner Program](/par
<!--Links found: 1. [Update preferred email](/partner-center/partner-center-account-setup.md#update-preferred-email) 1. [Merge your partner account with another partner account](/partner-center/merge-accounts.md)-->
-
+ </details> <!-- <details>
No, Live Share doesn't support meeting recordings.
</details>
-## Microsoft 365 Chat
+## Microsoft 365 Copilot
<details>
-<summary>Why isn't Microsoft 365 Chat including my plugin in a response?</summary>
+<summary>Why isn't Microsoft 365 Copilot including my plugin in a response?</summary>
Ensure your app manifest (previously called Teams app manifest) is descriptive. The app manifest helps in plugin matching in response to a user prompt. Also, ensure that you upload the app package to Outlook and interacted with the app, including authentication.
-If the problem continues, use the thumbs down indicator in the Microsoft 365 Chat reply and prefix your reply with [MessageExtension].
+If the problem continues, use the thumbs down indicator in the Microsoft 365 Copilot reply and prefix your reply with [MessageExtension].
</details> <details>
Here's an example description that work for NPM Finder.
</details> <details>
-<summary> Microsoft 365 Chat includes my plugin in the response, but the Microsoft 365 ChatΓÇÖs response doesnΓÇÖt meet my expectations. What should I do?</summary>
+<summary> Microsoft 365 Copilot includes my plugin in the response, but Microsoft 365 CopilotΓÇÖs response doesnΓÇÖt meet my expectations. What should I do?</summary>
-Use the downvoting option in the Microsoft 365 Chat reply and prefix your reply with [MessageExtension].
+Use the downvoting option in the Microsoft 365 Copilot reply and prefix your reply with [MessageExtension].
</details> <details>
Yes, you can. Ensure that you have a descriptive app manifest and upload the app
</details> <details>
-<summary> How can I get my existing Teams message extension to work with Microsoft 365 Chat? </summary>
+<summary> How can I get my existing Teams message extension to work with Microsoft 365 Copilot? </summary>
1. Register the bot channel in Azure Bot Service. 1. Upload the app to Outlook. </details> <details>
-<summary>What are the guidelines for Teams apps extensible as plugin for Microsoft Copilot for Microsoft 365? </summary>
+<summary>What are the guidelines for Teams apps extensible as plugin for Microsoft 365 Copilot? </summary>
-You can read the [Teams Store validation guidelines](concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#teams-apps-extensible-as-plugin-for-microsoft-copilot-for-microsoft-365) for Teams apps extensible as plugin for Microsoft Copilot for Microsoft 365.
+You can read the [Teams Store validation guidelines](concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#teams-apps-extensible-as-plugin-for-microsoft-365-copilot) for Teams apps extensible as plugin for Microsoft 365 Copilot.
</details> <details>
After the app passes the proactive validation, developers of both existing and n
Developers are encouraged to certify their new plugin after successfully completing validation. </details> <details>
-<summary>How can I create or upgrade a message extension plugin for Copilot for Microsoft 365?</summary>
+<summary>How can I create or upgrade a message extension plugin for Microsoft 365 Copilot?</summary>
- You can [create or upgrade a message extension as a plugin in Copilot for Microsoft 365](messaging-extensions/build-bot-based-plugin.md) to interact with third-party tools and services and achieve more with Copilot for Microsoft 365. Additionally, your extensions must meet the standards for compliance, performance, security, and user experience outlined in [guidelines to create or upgrade a message extension plugin for Copilot for Microsoft 365](messaging-extensions/high-quality-message-extension.md).
+ You can [create or upgrade a message extension as a plugin in Microsoft 365 Copilot](messaging-extensions/build-bot-based-plugin.md) to interact with third-party tools and services and achieve more with Microsoft 365 Copilot. Additionally, your extensions must meet the standards for compliance, performance, security, and user experience outlined in [guidelines to create or upgrade a message extension plugin for Microsoft 365 Copilot](messaging-extensions/high-quality-message-extension.md).
</details> ## Microsoft Graph
platform Build A RAG Bot In Teams https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/build-a-RAG-bot-in-teams.md
description: Learn how to build basic AI chatbot using Teams AI library in Teams
ms.localizationpriority: high Previously updated : 05/21/2024 Last updated : 09/16/2024 # Build a RAG bot in Teams
Microsoft Teams enables you to build a conversational bot with RAG to create an
:::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/create-new-app.png" alt-text="Screenshot shows the location of the Create New Project link in the Teams Toolkit sidebar.":::
-1. Select **Custom Copilot**.
+1. Select **Custom Engine Agent**.
- :::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/custom-copilot.png" alt-text="Screenshot shows the option to select custom Copilot as the new project to create.":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/custom-copilot.png" alt-text="Screenshot shows the option to select custom engine agent as the new project to create.":::
1. Select **Chat With Your Data**.
class MyDataSource(DataSource):
## Add more API for Custom API as data source
-Follow these steps to extend the custom copilot from Custom API template with more APIs.
+Follow these steps to extend the custom engine agent from Custom API template with more APIs.
1. Update `./appPackage/apiSpecificationFile/openapi.*`.
platform Build A Basic AI Chatbot In Teams https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/build-a-basic-AI-chatbot-in-teams.md
description: Learn how to build and customize a basic AI chatbot using Teams AI
ms.localizationpriority: high Previously updated : 05/21/2024 Last updated : 09/16/2024 # Build a basic AI chatbot
The AI chatbot template showcases a bot app, similar to ChatGPT, that responds t
:::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/create-new-app.png" alt-text="Screenshot shows the location of the Create New Project link in the Teams Toolkit sidebar.":::
-1. Select **Custom Copilot**.
+1. Select **Custom Engine Agent**.
- :::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/custom-copilot.png" alt-text="Screenshot shows the option to select custom Copilot as the new project to create.":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/custom-copilot.png" alt-text="Screenshot shows the option to select custom engine agent as the new project to create.":::
1. Select **Basic AI Chatbot**.
platform Build An AI Agent In Teams https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/build-an-AI-agent-in-Teams.md
description: Learn how to build AI Agent in Teams AI library using Assistants AP
ms.localizationpriority: high Previously updated : 05/21/2024 Last updated : 09/16/2024 # Build an AI agent bot in Teams
An AI agent in Microsoft Teams is a conversational chatbot that uses Large Langu
:::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/create-new-app.png" alt-text="Screenshot shows the location of the Create New Project link in the Teams Toolkit sidebar.":::
-1. Select **Custom Copilot**.
+1. Select **Custom Engine Agent**.
- :::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/custom-copilot.png" alt-text="Screenshot shows the option to select custom Copilot as the new project to create.":::
+ :::image type="content" source="../assets/images/teams-toolkit-v2/custom-copilot/custom-copilot.png" alt-text="Screenshot shows the option to select custom engine agent as the new project to create.":::
1. Select **AI Agent**.
platform Teams Toolkit Fundamentals Vs https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/toolkit-v4/teams-toolkit-fundamentals-vs.md
description: Learn about Teams Toolkit, it's installation, navigation, and user
ms.localizationpriority: medium Previously updated : 05/24/2022 Last updated : 09/16/2024 # Teams Toolkit Visual Studio Overview
The following are the key features of Teams Toolkit:
* [Automatic registration and configuration](#automatic-registration-and-configuration) * [CodeLens to trigger Teams Toolkit lifecycle](#codelens-to-trigger-teams-toolkit-lifecycle) * [Teams Toolkit documentation](#teams-toolkit-documentation)
-* [Copilot plugin](#copilot-plugin)
+* [Microsoft 365 Copilot plugin](#microsoft-365-copilot-plugin)
> [!NOTE]
-> CodeLens to trigger Teams Toolkit lifecycle, Teams Toolkit documentation and Copilot plugin is available in public developer preview.
+> CodeLens to trigger Teams Toolkit lifecycle, Teams Toolkit documentation, and Microsoft 365 Copilot plugin is available in public developer preview.
### Project templates
To view the Teams Toolkit documentation, follow these steps from Teams Toolkit:
A browser window opens to view the documentation.
-### Copilot plugin
+### Microsoft 365 Copilot plugin
-The latest version of Teams Toolkit incorporates numerous preview features designed to support in Microsoft Copilot development. To enable and activate the preview feature, follow these steps:
+The latest version of Teams Toolkit incorporates numerous preview features designed to support Microsoft 365 Copilot plugin development. To enable and activate the preview feature, follow these steps:
1. Select **Tools** > **Options...**.
The latest version of Teams Toolkit incorporates numerous preview features desig
:::image type="content" source="../../assets/images/teams-toolkit-v2/teams-toolkit-vs/preview-copilot-plugin.png" alt-text="Screenshot shows the selection of Copilot plugin from preview feature.":::
-Enhance the capabilities of Microsoft Copilot by converting your app into a plugin that helps user productivity in daily tasks and workflows. Activate these plugins for Copilot using the Teams Toolkit. Teams Toolkit Copilot plugin supports specific capabilities, such as Custom Search Results and [AI Assistant Bot [Preview]](/microsoft-365-copilot/extensibility/).
+Enhance the capabilities of Microsoft 365 Copilot by converting your app into a plugin that helps user productivity in daily tasks and workflows. Activate these plugins for Microsoft 365 Copilot using the Teams Toolkit. Teams Toolkit Copilot plugin supports specific capabilities, such as Custom Search Results and [AI Assistant Bot [Preview]](/microsoft-365-copilot/extensibility/).
#### TeamsFx .NET SDK reference
Enhance the capabilities of Microsoft Copilot by converting your app into a plug
## See also
-[Install Teams Toolkit](install-Teams-Toolkit-vs.md)
+[Install Teams Toolkit](install-Teams-Toolkit-vs.md)
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md
Teams platform features that are available to all app developers.
| 24/06/2024 | Static tabs are generally available for chats, channels, and meetings. | Build tabs > [Build tabs for Teams](tabs/what-are-tabs.md)| | 21/05/2024 | Introduced Assistants API to create powerful AI assistants capable of performing a variety of tasks. | Build bots > Teams AI library > [Overview](bots/how-to/teams%20conversational%20ai/teams-conversation-ai-overview.md#assistants-api) | | 21/05/2024 | Get started with the process of building apps with the Teams AI library using the LightBot sample. | Build bots > Teams AI library > [Quick start guide](bots/how-to/teams%20conversational%20ai/conversation-ai-quick-start.md)|
-| 21/05/2024 | Introduced a step-by-step guide to build a custom copilot to chat with your data using the Teams AI library and Teams Toolkit. | Build bots > Teams AI library > Build custom copilot > [Build custom copilot using Teams Toolkit](teams-ai-library-tutorial.yml)|
+| 21/05/2024 | Introduced a step-by-step guide to build a custom engine agent to chat with your data using the Teams AI library and Teams Toolkit. | Build bots > Teams AI library > Build custom engine agent > [Build custom engine agent using Teams Toolkit](teams-ai-library-tutorial.yml)|
| 21/05/2024 | Use Live Share sessions to enable seamless collaboration in Teams meetings, chats, and channels. | Build apps for Teams meetings and calls > Enhanced collaboration with Live Share > [Live Share collaborative contexts](apps-in-teams-meetings/teams-live-share-overview.md#live-share-collaborative-contexts)| |17/05/2024|Deploy Teams app to container service.|Tools and SDKs > Teams Toolkit for Visual Studio Code > Host your app on Azure > [Deploy Teams app to container service](toolkit/deploy-Teams-app-to-container-service.md)| |12/04/2024|Implement authentication in API-based search message extensions to provide secure and seamless access to your app.|Build message extensions > Build message extensions using API > [Authentication](messaging-extensions/build-api-based-message-extension.md#authentication)|
Developer preview is a public program that provides early access to unreleased T
**2024 September**
-***September 03, 2024***: [Introduced nested app authentication for single-page applications that are embedded in host environment.](concepts/authentication/nested-authentication.md)
+* ***September 16, 2024***: [Learn about requirements for the validation of your Copilot agent to increase its chances of being listed on Teams Store.](concepts/deploy-and-publish/appsource/prepare/review-copilot-validation-guidelines.md)
+
+* ***September 16, 2024***: [Explore the development guidance to build Copilot agents.](messaging-extensions/dev-guidelines-copilot-agents.md)
+
+* ***September 03, 2024***: [Introduced nested app authentication for single-page applications that are embedded in host environment.](concepts/authentication/nested-authentication.md)
:::column-end::: :::row-end:::
Developer preview is a public program that provides early access to unreleased T
| -- | | -| | 14/06/2024 | Introduced preapproval of RSC permissions for admins to control RSC permissions for app installation. | Utilize Teams data with Microsoft Graph > Resource-specific consent > [Preapproval of RSC permissions](graph-api/rsc/preapproval-instruction-docs.md) | | 23/05/2024 | Leverage AI label, citations, feedback buttons, and sensitivity labels in your bot's messages. | Build bots > Bot conversations > [Format AI bot messages](bots/how-to/format-ai-bot-messages.md) |
-| 23/05/2024 | Enhance your Copilot message extension plugin to hand off a conversation to your custom engine copilot.| Build message extensions > Build message extensions using Bot Framework > Search commands > [Copilot handoff](bots/how-to/conversations/bot-copilot-handoff.md)|
+| 23/05/2024 | Enhance your Copilot message extension plugin to hand off a conversation to your custom engine agent.| Build message extensions > Build message extensions using Bot Framework > Search commands > [Copilot handoff](bots/how-to/conversations/bot-copilot-handoff.md)|
| 14/05/2024 | Introduced a new manifest property to let potential customers contact you with queries before they can confidently adopt your app.| App manifest > [Public developer preview](resources/schem#developercontactinfo)| | 07/05/2024 | You can specify a 32x32 color icon with a transparent background to ensure a consistent appearance when your app runs in Outlook and Microsoft 365.| Distribute your app > [32x32 color icon](concepts/build-and-test/apps-package.md#outline-icon)| | 15/03/2024 | Extend static tabs to channels with a customizable experience. | [Build tabs for Teams](tabs/what-are-tabs.md) |
Developer preview is a public program that provides early access to unreleased T
| **Date** | **Update** | **Find here** | | -- | | -| |27/11/2023| Extend an action-based Teams message extension across Microsoft 365. | Extend your app across Microsoft 365 > [Extend m365 teams message extension](~/m365-apps/extend-m365-teams-message-extension.md)|
-|14/11/2023| Build a bot-based message extension and extend the message extension as plugin for Microsoft Copilot for Microsoft 365 and also check the guidelines to create or upgrade a message extension plugin for Microsoft Copilot for Microsoft 365. | Build message extension > [Build bot based plugin](messaging-extensions/build-bot-based-plugin.md) and [High quality message extension.](messaging-extensions/high-quality-message-extension.md)|
+|14/11/2023| Build a bot-based message extension and extend the message extension as plugin for Microsoft 365 Copilot and also check the guidelines to create or upgrade a message extension plugin for Microsoft 365 Copilot. | Build message extension > [Build bot based plugin](messaging-extensions/build-bot-based-plugin.md) and [High quality message extension.](messaging-extensions/high-quality-message-extension.md)|
|02/11/2023| Introduced Adaptive Card Previewer in public developer preview. | Tools > [Adaptive Card Previewer](concepts/build-and-test/adaptive-card-previewer.md)| |25/10/2023| Introduced the `extensions` property in public developer preview app manifest schema. | App manifest > [Public developer preview](resources/schem#extensions)| |25/10/2023| Build message extensions using API (API-based) to interact directly with third-party data, apps, and services. | Build message extensions > [Build message extensions using API](messaging-extensions/api-based-overview.md)|