Service | Microsoft Docs article | Related commit history on GitHub | Change details |
---|---|---|---|
platform | Collaboration Controls Deprecation | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/collaboration-controls-deprecation.md | +> [!WARNING] +> The Collaboration controls for model-driven applications are set to retire by May 2024. Retirement will be carried out in two phases to ensure a smooth transition. Following table details the timeline of the retirement process and its impacts: +> +> | Timeframe | Action | Impact | +> |||| +> | February 2024 |Collaboration controls will no longer be available to install from AppSource.|- New deployments of the collaboration controls in Power Apps environments aren't possible. </br> - Existing installations aren't affected.| +> | May 2024 |The internal service that powers the controls will be retired.|- The controls will stop supporting integration with Microsoft 365 and will return errors to users. </br> Data generated and managed through the controls won't be impacted. For more information, see the table later in this article.| +> +> Artifacts created and managed through the controls will continue to exist after the service is retired. +> +> | Control | Impact | +> ||| +> | **Approvals** |Approvals created in the Approvals control will remain in the Approvals app but will no longer be accessible in the Approvals control.| +> | **Files** |Files managed in the Files control will remain in SharePoint but will no longer be accessible in the Files control.| +> | **Meetings** |Meetings created in the Meeting control will remain in Outlook and Teams calendars but will no longer be accessible in the Meetings control.| +> | **Notes** |Notes created in the Notes control will remain in the Dataverse notes table.| +> | **Tasks** |Tasks created in the Task control will remain in Planner but will no longer be accessible in the Task control.| +> +> We recommend removing the Collaboration controls and Collaboration connector from all Power Apps solutions and prepare users for the upcoming Collaboration controls retirement. |
platform | Content Security Policy Headers | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/tabs/content-security-policy-headers.md | -|Microsoft 365 app host| frame-ancestor permission| +> [!WARNING] +> Microsoft's cloud services, including web versions of Teams (*teams.microsoft.com*), Outlook (*outlook.com*), and Microsoft 365 (*microsoft365.com*) domains are migrating to the *cloud.microsoft* domain. Perform the following steps before June 2024 to ensure your app continues to render on the Teams web client: +> +> 1. Update TeamsJS SDK to v.2.19.0 or higher. For more information about the latest release of TeamsJS SDK, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js). +> +> 2. Update your [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) headers in your Teams app to allow your app to access the ***teams.cloud.microsoft*** domain. If your Teams app extends across Outlook and Microsoft 365, ensure you allow your app to access ***teams.cloud.microsoft***, ***outlook.cloud.microsoft***, and ***m365.cloud.microsoft*** domains. ++| **Microsoft 365 app host** | **frame-ancestor permission** | |--|--|-| Teams | `teams.microsoft.com`, `*.teams.microsoft.com`, `*.skype.com` | -| Microsoft 365 app | `*.microsoft365.com`, `*.office.com` | -| Outlook | `outlook.live.com`, `outlook.office.com`, `outlook.office365.com`, `outlook-sdf.office.com`, `outlook-sdf.office365.com` | +| Teams | `teams.microsoft.com`, `*.teams.microsoft.com`, `teams.cloud.microsoft` | +| Microsoft 365 app | `*.microsoft365.com`, `*.office.com`, `m365.cloud.microsoft` | +| Outlook | `outlook.live.com`, `outlook.office.com`, `outlook.office365.com`, `outlook-sdf.office.com`, `outlook-sdf.office365.com`, `outlook.cloud.microsoft` | |
platform | Teamjs Version Details | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/teamjs-version-details.md | -| |[TeamsJS](/javascript/api/overview/msteams-client) version | [App manifest](../resources/schem) version| Next steps| -|||--|| -|**Teams apps extended to Microsoft 365 / Outlook**| TeamsJS v.2.0 or later | **1.13** or later | [Extend a Teams app to run across Microsoft 365](../m365-apps/extend-m365-teams-personal-tab.md) or [Create a new Microsoft 365 app](../m365-apps/extend-m365-teams-personal-tab.md#quickstart) | -|**Existing Teams-only apps**| Update to TeamsJS v.2.0 when possible (v.1.12 is still supported*) | 1.12 | [Understand TeamsJS backwards compatibility](../tabs/how-to/using-teams-client-library.md#backwards-compatibility) and [Update to TeamsJS v.2.0](../tabs/how-to/using-teams-client-library.md#updating-to-teamsjs-version-20)| -|**New Teams-only apps**| TeamsJS v.2.0 or later | 1.12 | [Create a new Teams app using Teams Toolkit](../toolkit/create-new-project.md)| +| App type | TeamsJS version | App manifest version | Next steps| +||||| +|**Teams apps extended across Outlook and Microsoft 365**| TeamsJS v.2.19.0 or later | v.1.13 or later | [Extend a Teams app to run across Microsoft 365](../m365-apps/extend-m365-teams-personal-tab.md) or [Create a new Microsoft 365 app](../m365-apps/extend-m365-teams-personal-tab.md#quickstart) | +|**Existing Teams-only apps**| Update to TeamsJS v.2.19.0 when possible (v.1.12 is still supported*) | 1.12 | [Understand TeamsJS backwards compatibility](../tabs/how-to/using-teams-client-library.md#backwards-compatibility) and [Update to TeamsJS v.2.0](../tabs/how-to/using-teams-client-library.md#updating-to-teamsjs-version-20)| +|**New Teams-only apps**| TeamsJS v.2.19.0 or later | 1.12 | [Create a new Teams app using Teams Toolkit](../toolkit/create-new-project.md)| -**Use the latest TeamsJS (v.2.0 or later) whenever possible, in order to leverage from the latest improvements and new feature support including Teams-only apps. TeamsJS v.1.12 continue to be supported, however, no new features or improvements will be added. The 1.12 and 1.13 schemas are otherwise the same. For more information, see [TeamsJS library](../tabs/how-to/using-teams-client-library.md).* +**Use the latest TeamsJS (v.2.19.0 or later) whenever possible, to take advantage of the latest improvements and new feature support including Teams-only apps. TeamsJS v.1.12 continues to be supported, however, no new features or improvements will be added. The 1.12 and 1.13 schemas are otherwise the same. For more information, see [TeamsJS library](../tabs/how-to/using-teams-client-library.md).* |
platform | Extend M365 Teams Personal Tab | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/m365-apps/extend-m365-teams-personal-tab.md | Alternately, you can use a basic single sign-on (SSO) **hello world** app that's ### Quickstart -To start with a personal tab that's already enabled to run in Teams, Outlook, and Microsoft 365 app, you can use Teams Toolkit extension for Visual Studio Code. +Use the Teams Toolkit extension for Visual Studio Code to start with a personal tab that's enabled to run in Teams, Outlook, and Microsoft 365. 1. Open **Visual Studio Code**.-1. Select **Command Palette...** under the View option or **Ctrl+Shift+P**. -1. Select **Teams: Create a New App**. -1. Select the **Tab** option. -1. Select **Basic tab**. +2. Select the Teams Toolkit :::image type="icon" source="../assets/images/teams-toolkit-v2/teams-toolkit-sidebar-icon.PNG" border="false"::: icon in the activity bar. +3. Select **Create a New App**. +4. Select **Tab**. +5. Select **Basic Tab**. :::image type="content" source="images/toolkit-tab-sample.png" alt-text="Screenshot shows the Basic Tab option highlighted to create a new app feature using a tab."::: -1. Select a preferred programming language. -1. Select a location on your local machine for the workspace folder and enter your application name. -1. Once your app has been created, within the Teams Toolkit extension, make sure you're signed in to the appropriate Microsoft 365 Developer Program sandbox tenant and Azure account. These options can be found within the **ACCOUNTS** section of the extension. -1. Select **Command Palette...** under the View option or **Ctrl+Shift+P**. -1. Enter **Teams: Provision** to create the Teams app resources such as Azure App Service, App Service plan, Azure Bot, and Managed Identity in your Azure account. Alternatively, you can select **Provision** under **LIFECYCLE** section of the extension. -1. Select a subscription and a resource group. If you choose to create a new resource group, you need to specify the location. -1. Select **Provision**. -1. Select **Command Palette...** under the View option or **Ctrl+Shift+P**. -1. Enter **Teams: Deploy** to deploy the sample code to the provisioned resources in Azure and start the app. Alternatively, you can select **Deploy** under the **LIFECYCLE** section of the extension. -1. Select **Deploy**. +6. Select a preferred programming language. +7. Select a location on your local machine for the workspace folder and enter your application name. +8. Once your app is created, within the Teams Toolkit extension, make sure you're signed in to the appropriate Microsoft 365 Developer Program sandbox tenant and Azure account. These options are available in the **ACCOUNTS** section of the extension. +9. Select **Command Palette...** under the View option or **Ctrl+Shift+P**. +10. Enter **Teams: Provision** to create the Teams app resources such as Azure App Service, App Service plan, Azure Bot, and Managed Identity in your Azure account. Alternatively, you can select **Provision** under **LIFECYCLE** section of the extension. +11. Select a subscription and a resource group. If you choose to create a new resource group, you need to specify the location. +12. Select **Provision**. +13. Select **Command Palette...** under the View option or **Ctrl+Shift+P**. +14. Enter **Teams: Deploy** to deploy the sample code to the provisioned resources in Azure and start the app. Alternatively, you can select **Deploy** under the **LIFECYCLE** section of the extension. -From here, you can skip ahead to [upload your custom app in Teams](#upload-your-custom-app-in-teams) and preview your app in Outlook and the Microsoft 365 app. The app manifest and TeamsJS API calls have already been updated for Microsoft 365 app. +From here, you can skip ahead to [upload your custom app in Teams](#upload-your-custom-app-in-teams) and preview your app in Outlook and the Microsoft 365 app. The app manifest and TeamsJS API calls are already updated for Microsoft 365 app. ### SharePoint Framework (SPFx) apps If you used Teams Toolkit to create your personal app, you can also use it to va ## Update TeamsJS references -Your app must refer to the npm package `@microsoft/teams-js@2.5.0` (or later) to run in Outlook and Microsoft 365. Previous versions of TeamsJS are still functional in Outlook and Microsoft 365 apps, but deprecation warnings are logged. Support for the previous versions eventually discontinue in both Outlook and Microsoft 365. To determine the latest version of TeamsJS, see [TeamsJS GitHub repository](https://github.com/OfficeDev/microsoft-teams-library-js). +Your app must refer to the npm package `@microsoft/teams-js@2.5.0` (or later) to run in Outlook and Microsoft 365. Previous versions of TeamsJS are still functional in Outlook and Microsoft 365 apps, but deprecation warnings are logged. Support for the previous versions eventually gets discontinued in both Outlook and Microsoft 365. To determine the latest version of TeamsJS, see [TeamsJS GitHub repository](https://github.com/OfficeDev/microsoft-teams-library-js). > [!NOTE] > If you want to use an earlier version of TeamsJS than v2.5.0, ensure that you add `www.microsoft365.com` to the `validMessageOrigins` (optional) array of the `app.initialize` call. If your app makes use of [Content Security Policy](https://developer.mozilla.org [Microsoft Entra Single-sign on (SSO)](../tabs/how-to/authentication/tab-sso-overview.md) for personal tabs works the same way in Microsoft 365 app and Outlook as it does in Teams. However, you need to add several client application identifiers to the Microsoft Entra app registration of your tab app in your tenant's *App registrations* portal. 1. Sign in to [Microsoft Azure portal](https://portal.azure.com) with your sandbox tenant account.-1. Open the **App registrations** blade. +1. Open **App registrations**. 1. Select the name of your personal tab application to open its app registration. 1. Select **Expose an API** (under *Manage*). - :::image type="content" source="images/azure-app-registration-clients.png" alt-text="Screenshot shows the Authorized client Ids from the App registrations blade on Azure portal."::: + :::image type="content" source="images/azure-app-registration-clients.png" alt-text="Screenshot shows the authorized client IDs from the app registrations on Azure portal."::: 1. In the **Authorized client applications** section, ensure all of the following `Client Id` values are added: Only a subset of Teams application types and capabilities are supported in Outlo For an overall summary of Microsoft 365 host and platform support for Teams apps, see [Extend Teams apps across Microsoft 365](overview.md). -You can check for host support of a given capability at runtime by calling the `isSupported()` function on that capability (namespace), and adjusting app behavior as appropriate. This allows your app to light up UI and functionality in hosts that support it and provide a graceful fallback experience in hosts that don't. For more information, see [Differentiate your app experience](../tabs/how-to/using-teams-client-library.md#differentiate-your-app-experience). +You can check for host support of a given capability at runtime by calling the `isSupported()` function on that capability (namespace), and adjusting app behavior as appropriate. This action allows your app to light up UI and functionality in hosts that support it and provide a graceful fallback experience in hosts that don't. For more information, see [Differentiate your app experience](../tabs/how-to/using-teams-client-library.md#differentiate-your-app-experience). Use the [Microsoft Teams developer community channels](/microsoftteams/platform/feedback) to report issues and provide feedback. ### Debugging -From Visual Studio code with Teams Toolkit, you can Debug (**F5**) your tab application running in Teams, Microsoft 365 app, and Outlook. +You can debug your tab application running in Teams, Microsoft 365 app, and Outlook with Teams Toolkit in Visual Studio Code. -Select the desired target and then launch the debug experience. Upon first run of local debug, you're prompted to sign in to your Microsoft 365 tenant account. +Choose the desired debug method and select the **F5** key. Upon the first run of the local debug, Teams Toolkit prompts you to sign in to your Microsoft 365 tenant account. Provide feedback and report any issues with the Teams Toolkit debugging experience at [Microsoft Teams Framework (TeamsFx)](https://github.com/OfficeDev/TeamsFx/issues). To debug your app in Outlook for Android: ##### Debugging Microsoft 365 for Android -Teams Toolkit (`F5`) debugging isn't yet supported with Microsoft 365 for Android app. Here's how to remotely debug your app running in Microsoft 365 for Android app: +Teams Toolkit (`F5`) doesn't support debugging Android apps in Microsoft 365. Here's how to remotely debug your app running in Microsoft 365 for Android app: 1. If you debug using a physical Android device, connect it to your dev machine and enable the option for [USB debugging](https://developer.android.com/studio/debug/dev-options). This option is enabled by default with the Android emulator.-1. Launch the Microsoft 365 app From your Android device. -1. Open your profile **Me > Settings > Allow debugging**, and toggle on the option for **Enable remote debugging**. +2. Launch the Microsoft 365 app From your Android device. +3. Open your profile **Me > Settings > Allow debugging**, and toggle on the option for **Enable remote debugging**. :::image type="content" source="images/office-android-enable-remote-debugging.png" alt-text="Screenshot shows the Enable remote debugging toggle option."::: -1. Leave **Settings**. -1. Leave your profile screen. -1. Select **Apps** and launch your uploaded custom app to run within the Microsoft 365 app. -1. Ensure your Android device is connected to your dev machine. From your dev machine, open your browser to its DevTools inspection page. For example, go to `edge://inspect/#devices` in Microsoft Edge to display a list of debug-enabled Android WebViews. -1. Find the `Microsoft Teams Tab` with your tab URL and select **inspect** to start debugging your app with DevTools. +4. Leave **Settings**. +5. Leave your profile screen. +6. Select **Apps** and launch your uploaded custom app to run within the Microsoft 365 app. +7. Ensure your Android device is connected to your dev machine. From your dev machine, open your browser to its DevTools inspection page. For example, go to `edge://inspect/#devices` in Microsoft Edge to display a list of debug-enabled Android WebViews. +8. Find the `Microsoft Teams Tab` with your tab URL and select **inspect** to start debugging your app with DevTools. :::image type="content" source="images/office-android-debug.png" alt-text="Screenshot shows the list of webviews in DevTools." lightbox="images/office-android-debug.png"::: -1. Debug your tab app within the Android WebView in the same way that you [remotely debug](/microsoft-edge/devtools-guide-chromium/remote-debugging) a regular website on an Android device. +9. Debug your tab app within the Android WebView in the same way that you [remotely debug](/microsoft-edge/devtools-guide-chromium/remote-debugging) a regular website on an Android device. ## Code sample |
platform | High Quality Message Extension | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/high-quality-message-extension.md | Microsoft 365 plugins provide integration with various Microsoft 365 products, * 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 Copilot for Microsoft 365. Message extensions should support one or more search commands, as these are recognized by Copilot for Microsoft 365 as skills it can execute on behalf of the user. Additionally, your extensions must meet the standards for compliance, performance, security, and user experience outlined in this article. +We recommend that you build or upgrade your existing message extensions to maximize their usefulness and usability in Copilot for Microsoft 365. Message extensions should support one or more search commands, as Copilot for Microsoft 365 recognizes them as skills it can execute on behalf of the user. Additionally, your extensions must meet the standards for compliance, performance, security, and user experience outlined in this article. :::image type="content" source="../assets/images/Copilot/ailib-copilot-interface.png" alt-text="Graphic shows the user experience between Microsoft Teams and Copilot for Microsoft 365 (M365 Chat)."::: Ensure that you adhere to the description guidelines listed in the following tab | | | | :::image type="icon" source="../assets/images/publish-app/dont-icon.png" border="false"::: | Anti-Compete: Avoid using the name of any other plugin in both short and long descriptions. | | :::image type="icon" source="../assets/images/publish-app/dont-icon.png" border="false"::: | Responsible AI: Avoid using inappropriate or offensive keywords. |-| :::image type="icon" source="../assets/images/publish-app/dont-icon.png" border="false"::: | Prompt injections: Ensure that the descriptions doesn't guide Copilot to take actions that bypass the normal functioning of the application. Additionally, the description mustn't contain symbols or text that indicate that it can be used as code for prompt injection. Avoid using phrases, functions, and code that call an app recurrently. | +| :::image type="icon" source="../assets/images/publish-app/dont-icon.png" border="false"::: | Prompt injections: Ensure that the descriptions don't guide Copilot to take actions that bypass the normal functioning of the application. Additionally, the description mustn't contain symbols or text that indicate that it can be used as code for prompt injection. Avoid using phrases, functions, and code that call an app recurrently. | ### App description -Long and short app descriptions must be clear and define the app's scope. To render an app as a plugin in Copilot for Microsoft 365, app description must be modified to suit the following plugin requirements: +Long and short app descriptions must be clear and define the app's scope. To render an app as a plugin in Copilot for Microsoft 365, 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 Copilot for Microsoft 365. For example, Use Contoso cloud in Copilot for Microsoft 365 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 table lists the short description examples for each category: ### Search command description -Command description is used to map 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: +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. For a plugin to be validated, invoked, and work seamlessly, ensure that it meets | Criteria | Fulfillment | ||| | Manifest version | App manifest version must be 1.13 or later. [*Mandatory*] |-|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](../m365-apps/extend-m365-teams-message-extension.md#add-microsoft-365-channel-for-your-app).[*Mandatory*]| +|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](../m365-apps/extend-m365-teams-message-extension.md#add-microsoft-365-channel-for-your-app). [*Mandatory*]| | Response Time | Response time must not exceed 9 seconds for 99 percent, 5 Seconds for 75 percent and 2 Seconds for 50 percent. [*Mandatory*] | | Reliability | Apps must maintain 99.9% availability. For instance, if Microsoft 365 Chat calls a plugin 1000 times, it must provide a meaningful response 999 times. [*Mandatory*] | | Zero Regressions | If you need to resubmit your app for validation, the existing message extension functionality that was working earlier mustn't break. This requirement is only applicable to ISV apps and not apps built for your organization. [*Mandatory*] | | Single sign-on (SSO) | If applicable, update your Microsoft Entra ID app registration for SSO. [*Recommended*] | | Content Security Policy |If applicable, modify your Content Security Policy headers. [*Recommended*] | +> [!IMPORTANT] +> If applicable, update your Content Security Policy headers and `X-Frame-Options` in accordance with [Configure Content Security Policy headers](../m365-apps/extend-m365-teams-personal-tab.md#configure-content-security-policy-headers). ## Code samples |
platform | App With Collaboration Controls | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/app-with-collaboration-controls.md | Last updated 10/07/2022 # Create a new model-driven app with Collaboration controls for Teams -Collaboration controls are designed for [model-driven applications](/power-apps/maker/model-driven-apps/model-driven-app-overview). The following section covers how to create a model-driven app. -> [!NOTE] -> Currently, Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). +Collaboration controls are designed for [model-driven applications](/power-apps/maker/model-driven-apps/model-driven-app-overview). Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). The following section covers how to create a model-driven app. ## Create a model-driven application Following are the steps to add Collaboration control capabilities such as Tasks, 5. Select ‘Hide Label’ on the Properties. - :::image type="content" source="../assets/images/collaboration-control/hide-label-properties.png" alt-text="Screenshot shows how to select hide label."::: + :::image type="content" source="../assets/images/collaboration-control/hide-label-properties.png" alt-text="Screenshot shows how to select the Hide Label option."::: 1. The Tasks control appears now. Following are the steps to add Collaboration control capabilities such as Tasks, 1. Repeat the Tasks steps to add Approvals, Files, Meetings, and Notes controls to your app. 1. After you add all the controls, you'll see the controls rendered below in Form Designer. If a control doesn't render in Form Designer, for example shows a blank form, run your app in Power Apps and the presence of a 'configure' page or an 'empty state' means the control was successfully added. - :::image type="content" source="../assets/images/collaboration-control/new-collab-approval.png" alt-text="Screenshot shows Controls form designer are successfully added."::: + :::image type="content" source="../assets/images/collaboration-control/new-collab-approval.png" alt-text="Screenshot shows Controls form the designer are successfully added."::: 1. You can now run your power app in Power Apps by selecting it. Following are the steps to add Collaboration control capabilities such as Tasks, > [!TIP] > The controls are only visible after a record is saved in the application. If the control tabs don't appear in your record, try to refresh your browser or republish the app from Power Apps. -Now you’ve successfully added the Collaboration controls to your application. You can now run your application in Power Apps and launch the controls. As settings haven't yet been configured, you'll not be able to create entities such as Tasks, or Meetings until those are added. +Now you’ve successfully added the Collaboration controls to your application. You can now run your application in Power Apps and launch the controls. As settings aren't configured yet, you can't create entities such as Tasks, or Meetings until those are added. ## Define Settings for your Collaboration Use the following instructions to retrieve the Group ID of your Teams team for A Use the following instructions to retrieve the Retrieve the SharePoint Site ID and Drive ID for Files: -1. To use the Files control, you'll need to configure to an existing SharePoint site or create a new SharePoint site. To create a new site, see [create a site](/sharepoint/create-site-collection). +1. To use the Files control, you need to configure to an existing SharePoint site or create a new SharePoint site. To create a new site, see [create a site](/sharepoint/create-site-collection). 1. Now retrieve the Setting Values of Site ID and Drive ID, which can be called using the details in your SharePoint site. Use the following instructions to retrieve the Retrieve the SharePoint Site ID a 1. A Json response is returned with a parameter value of type array or list of drive objects. Look through the Json for the Json object whose name parameter matches the name of your document library. Save the value of the Drive ID parameter. -To create meetings with users outside of your organization such as customers and to use virtual visit features within your app you would need to provide a Bookings business. For more information, see [Microsoft Bookings](/microsoft-365/bookings/bookings-overview?view=o365-worldwide&preserve-view=true). +To create meetings with users outside of your organization such as customers and use virtual visit features within your app you would need to provide a Bookings business. For more information, see [Microsoft Bookings](/microsoft-365/bookings/bookings-overview?view=o365-worldwide&preserve-view=true). ## Add Settings to your Collaboration Manager app Explore collaboration in the Tasks tab by selecting the Tasks tab, which opens a :::image type="content" source="../assets/images/collaboration-control/add-task.png" alt-text="Screenshot describes on how to add a task."::: -1. The saved task will appear in the tasks list. +1. The saved task appears in the tasks list. 1. As all the tasks are backed by Microsoft Planner. Users can use the Tasks app within Microsoft Teams to see all the tasks that are assigned. To get started, select ellipses **…** in Teams left pane. Search and select Tasks by Planner and To Do. Users can see both Internal meetings and Customer Bookings on their meeting list As the meetings are backed by Outlook, users can go to either Bookings, or Outlook Calendar to see all the meetings listed in a single calendar. Internal meetings are listed in shared calendar. -Following are the steps to add a shared calendar to your Outlook (optional) : +Following are the steps to add a shared calendar to your Outlook (optional): -1. On the Home tab of the ribbon, in the Manage Calendars section, select Open Calendar > Open Shared Calendar. +1. On the Home tab of the ribbon, in the **Manage Calendars** section, select **Open Calendar** > **Open Shared Calendar**. -1. In the Open a Shared Calendar dialog , enter the person's name. Select the person you're looking for and then select OK. +1. In the Open a Shared Calendar dialog, enter the person's name. Select the person you're looking for and then select **OK**. In the left Pane, under Shared Calendars you should now see an additional calendar with the person's name. |
platform | Collaboration Api Reference | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/collaboration-api-reference.md | Last updated 01/10/2023 # Collaboration control and Settings REST API reference -Developers can use the Collaboration controls and Settings REST API to manage settings, start, map, and retrieve collaboration activities with their own business model entities. -> [!NOTE] -> Currently Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). --This article provides reference for the Collaboration controls and Settings REST API reference. +Developers can use the Collaboration controls and Settings REST API to manage settings, start, map, and retrieve collaboration activities with their own business model entities. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). ## REST Operations: Collaboration - Custom API |
platform | Collaboration Control Power Automate | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/collaboration-control-power-automate.md | Last updated 01/11/2023 # Power Automate -Power Automate can be used to automate workflows around your Collaboration Manager application. For example, automatically create tasks when a new record is created. -Collaboration control connector enables developers to access Collaboration control APIs by triggers or actions in automated workflows in Microsoft Power Automate, Microsoft Power Apps, and Azure Logic apps. +Power Automate can be used to automate workflows around your Collaboration Manager application. For example, automatically create tasks when a new record is created. -> [!NOTE] -> Currently, Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). +Collaboration control connector enables developers to access Collaboration control APIs by triggers or actions in automated workflows in Microsoft Power Automate, Microsoft Power Apps, and Azure Logic apps. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). In this version, the connector enables makers to set up triggers: |
platform | Collaboration Control | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/collaboration-control.md | Last updated 01/18/2023 # Collaboration controls -The Collaboration controls enable applying Microsoft 365 and Microsoft Teams for Approvals, Files, Meetings, Notes, and Tasks to enable contextual collaboration around business processes. These controls allow you to build custom collaborative experiences that can be surfaced right in Teams. The solutions that make up Collaboration controls allow makers to build applications that integrate with Microsoft 365 services like Planner, Bookings, Outlook, and SharePoint in a low code manner. ++The Collaboration controls enable applying Microsoft 365 and Microsoft Teams for Approvals, Files, Meetings, Notes, and Tasks to enable contextual collaboration around business processes. These controls allow you to build custom collaborative experiences that can be surfaced right in Teams. The solutions that make up Collaboration controls allow makers to build applications that integrate with Microsoft 365 services like Planner, Bookings, Outlook, and SharePoint in a low code manner. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). These controls give you the power to simplify your users workflow collaboration by building custom apps for your org (LOB apps) and work without switching the context from app to app with the following: These controls give you the power to simplify your users workflow collaboration * Notes * Tasks -> [!NOTE] -> Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). - Following are some of the key capabilities of Collaboration controls: * **Microsoft Planner tasks:** Create tasks and assign it to members of a record so that they can view a consolidated list of tasks in model driven app and tasks app in Microsoft Teams. |
platform | Collaboration Controls Limitations | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/collaboration-controls-limitations.md | Last updated 09/30/2022 # Limitations and known issues -> [!NOTE] -> Currently, Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). Following are the limitations for Collaboration controls: The text on the ΓÇ£clear" button displayed on the Tasks filter isn't translated. **Tasks: Grid context menu appears cropped** -When the Tasks grid is populated by a low number of Tasks the grid context menu may appear cropped and require use of scrollbars. +When the Tasks grid is populated by a low number of Tasks the grid context menu might appear cropped and require use of scrollbars. **Tasks: Keyword search filter use ΓÇ£BeginsWithΓÇ¥ operator for ΓÇ£GuestΓÇ¥ tasks** When search Tasks using the keyword text filter, ΓÇ£GuestΓÇ¥ tasks are returned ## Files -When navigating into the Archive folder after archiving files, users might experience duplicate archive folders. Navigating from the archive folder(s) to the files main view resolves the issue, and files that are archived won't be removed. +When navigating into the Archive folder after archiving files, users might experience duplicate archive folders. Navigating from the archive folder(s) to the files main view resolves the issue, and files that are archived aren't removed. ## Controls The controls provide the following methods to debug your application. 1. **Browser logging** for UI controls. This is standard console logging. - 1. It's supported when using a browser to run the Collaboration Manager app via Power Platform and Teams web. + 1. It'sBrowser logging is supported when using a browser to run the Collaboration Manager app through Power Platform and Teams web. 1. Within the console tab, you can search for errors using the Collaboration Manager error message or searching for Collaboration Manager control names such as Tasks. > [!TIP] |
platform | Configure Tasks | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/configure-tasks.md | Last updated 09/30/2022 # Configure Tasks for external clients -External tasks that can be assigned to users who aren't part of your organization or don't have access to your application such as assigning a task to a customer. -To enable, you'll need an extra step of passing an XML string to each instance of Tasks PCF control attached to the sub grid component on desired MDA form. XML string is a parametrized query that allows the control to extract the required data from a table that contains customer information. +External tasks that can be assigned to users who aren't part of your organization or don't have access to your application such as assigning a task to a customer. -> [!NOTE] -> Currently, Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). +To enable, you need an extra step of passing an XML string to each instance of Tasks PCF control attached to the sub grid component on desired MDA form. XML string is a parametrized query that allows the control to extract the required data from a table that contains customer information. To create external tasks, follow the steps: To create external tasks, follow the steps: 1. Email 1. Parent (Lookup to the parent table such as Inspections) > [!NOTE]- > The customer entity created above is, where the task control pulls the customer information from when assigning an external task. The Parent field ensures that the customer entity is linked to an Inspection record. + > The customer entity created is where the task control pulls the customer information from when assigning an external task. The Parent field ensures that the customer entity is linked to an Inspection record. 1. Generate a Fetch XML file to allow the PCF control to pull the right customer information. To create external tasks, follow the steps: 1. In the property dialog, set the properties as shown in the following image: - :::image type="content" source="~/assets/images/collaboration-control/tasks-property.png" alt-text="Sceenshot shows to set the properties in the Tasks property settings."::: + :::image type="content" source="~/assets/images/collaboration-control/tasks-property.png" alt-text="Sceenshot shows an example of the updated properties in the Tasks property settings."::: -1. Go to the Controls tab and select :::image type="icon" source="~/assets/images/collaboration-control/edit-icon.png" alt-text="Screenshot shows how to edit the tasks."::: on Custom Tasks property to add the Fetch XML generated above. +1. Go to the Controls tab and select :::image type="icon" source="~/assets/images/collaboration-control/edit-icon.png" alt-text="Screenshot shows how to edit the tasks."::: on Custom Tasks property to add the Fetch XML generated. 1. Paste the Fetch XML |
platform | Deploy Collaboration Control In Teams | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/deploy-collaboration-control-in-teams.md | Last updated 10/04/2022 # Deploy Collaboration controls to Microsoft Teams -Collaboration controls currently work best within Microsoft Teams. You can create a new app that can be embedded inside Teams app as both, a personal app and a tab app. -> [!NOTE] -> Currently, Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). +Collaboration controls currently work best within Microsoft Teams. You can create a new app that can be embedded inside Teams app as both, a personal app and a tab app. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). ## Configure the app for Teams To do so, we'll use Power Apps **new app** settings. 1. Search and select **Hide the navbar** from the list of settings definitions. This hides the left pane in your application. - :::image type="content" source="../assets/images/collaboration-control/hide-the-nav-bar.png" alt-text="Screenshot shows how to select hide the nav bar."::: + :::image type="content" source="../assets/images/collaboration-control/hide-the-nav-bar.png" alt-text="Screenshot shows the Hide the navbar option."::: 1. On the lower right of your application in the edit pane, there's a section titled **Setting app values**. If you created your app using the modern app designer, your app appears on the list. Select **New app value** under your app. To do so, we'll use Power Apps **new app** settings. :::image type="content" source="../assets/images/collaboration-control/default-solution.png" alt-text="The screenshot shows default solution."::: -1. Select **Publish all customizations** to publish all the work you've completed. +1. Select **Publish all customizations**. :::image type="content" source="../assets/images/collaboration-control/publish-cusomization.png" alt-text="Publish all customizations."::: ## Add the app to Microsoft Teams app catalog -As the settings are defined, you can now add the app to Microsoft Teams. To start with, browse to the **Apps** page in the Power Apps maker portal and find the app that you've created and select ellipse **…**. +As the settings are defined, you can now add the app to Microsoft Teams. To start with, browse to the **Apps** page in the Power Apps maker portal and find the app that you created and select ellipse **…**. To add the app to Teams, select **Add to Teams**. Following are required to enable users to run the deployed Collaboration Manager :::image type="content" source="../assets/images/collaboration-control/new-team.png" alt-text="Screenshot to select new team type."::: - 1. Ensure that you note the team name. You'll need this later to assign this team as the owner of a record. + 1. Ensure that you note the team name. You'll need it later to assign this team as the owner of a record. 1. Select **Next.** |
platform | Install Collaboration Control | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/install-collaboration-control.md | -> [!NOTE] -> Currently, Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). In this article, you'll learn how to install Collaboration Controls. The following are required to build and deploy Collaboration Manager applications using the Collaboration controls: * **Power apps**: To build and run Model Driven Applications using the Collaboration controls. * **M365 E3 or higher**: To deploy custom applications to Microsoft Teams and store tasks in Planner, files in SharePoint, and meetings in Outlook. -To install the components into a Power Platform environment the following roles are required: +Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). To install the components into a Power Platform environment, the following roles are required: * System customizer * Environment maker For more information on role privileges, see [Configure user security in an envi ## Install the Collaboration controls solutions -You'll install the Collaboration controls into your dataverse environment via [Microsoft AppSource.](https://appsource.microsoft.com/en-us/product/dynamics-365/mscm.collaboration-toolkit-preview?flightCodes=collaborationcontrols&signInModalType=2&ctaType=1) +You install the Collaboration controls into your dataverse environment through [Microsoft AppSource.](https://appsource.microsoft.com/en-us/product/dynamics-365/mscm.collaboration-toolkit-preview?flightCodes=collaborationcontrols&signInModalType=2&ctaType=1) You'll be able to configure and use the components within your own model-driven app only after browsing to [Microsoft AppSource](https://appsource.microsoft.com/en-us/product/dynamics-365/mscm.collaboration-toolkit-preview?flightCodes=collaborationcontrols&signInModalType=2&ctaType=1) and installing Collaboration controls into your dataverse environment. Collaboration Controls include the following solutions: |**Settings' solutions** | **Purpose** | ||| | Collaboration controls Settings | Hold the settings infrastructure that powers Collaboration controls |-| Collaboration controls Settings Objects | Provides pre-defined settings values that are used by the Collaboration controls.| +| Collaboration controls Settings Objects | Provides predefined settings values that are used by the Collaboration controls.| |**Collaboration solutions** | **Purpose** | ||| Collaboration Controls include the following solutions: > [!NOTE] > If you have an existing version of the controls installed in your environment, you might need to create a fresh environment and complete a new install to successfully upgrade to the latest version. -Before installation, you must be in a Power Platform environment or admin tenant. You'll need a dataverse environment with a database. If you don't have one, you'll need to [create a new one](/power-platform/admin/create-environment) to continue with the installation. +Before installation, you must be in a Power Platform environment or admin tenant. You need a dataverse environment with a database. If you don't have one, you need to [create a new one](/power-platform/admin/create-environment) to continue with the installation. To install the solutions, browse to [Microsoft AppSource](https://appsource.microsoft.com/en-us/product/dynamics-365/mscm.collaboration-toolkit-preview?flightCodes=collaborationcontrols&signInModalType=2&ctaType=1) and complete the following steps: To install the solutions, browse to [Microsoft AppSource](https://appsource.micr :::image type="content" source="../assets/images/collaboration-control/collaboration-controls-preview.png" alt-text="Screenshot of install Collaboration control preview." border="true"::: -1. You'll be directed to Power Platform Admin Center. Select an environment from the dropdown menu and agree to the terms and policy statements. +1. You're directed to Power Platform Admin Center. Select an environment from the dropdown menu and agree to the terms and policy statements. > [!TIP] > If you see a permissions error when you select the environment, try selecting outside the environment dropdown menu to see if that resolves the issue. To install the solutions, browse to [Microsoft AppSource](https://appsource.micr 1. Go to [https://make.powerapps.com/](https://make.powerapps.com/), [https://make.preview.powerapps.com/](https://make.preview.powerapps.com/) is also supported if you're signed up to Power Apps preview. -1. Ensure that you're in the environment the controls are installed into as you can view the environment and change it if necessary on the top right of the Power Apps portal. +1. Ensure that you're in the environment where the controls are installed. You can view the environment and can change the environment on the upper-right corner of the Power Apps portal if necessary. -1. Select the **Solutions** tab to view all the solutions that you've installed in the right environment. +1. Select the **Solutions** tab to view all the solutions that you installed in the right environment. :::image type="content" source="../assets/images/collaboration-control/solutions.png" alt-text="Screenshot shows solutions tab to view all solutions collaboration control." border= "true"::: |
platform | Virtual Tables For Tasks | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/virtual-tables-for-tasks.md | Last updated 01/11/2023 # Virtual tables for Tasks, Meetings, Files -A new capability with this release is a set of Virtual tables. These enable developers to interact with Graph via OData APIs. --The Collaboration controls core solution includes a set of [virtual tables](/power-apps/developer/data-platform/virtual-entities/get-started-ve), which can be used for programmatic access to the data created by the Collaboration controls. -> [!NOTE] -> Currently, Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). +A new capability with this release is a set of Virtual tables. These enable developers to interact with Graph via OData APIs. -> [!TIP] -> [Virtual tables](/power-apps/developer/data-platform/virtual-entities/get-started-ve) also known as virtual entities, enable the integration of data residing in external systems by seamlessly representing that data as tables in Microsoft Dataverse, without replication of data and often without custom coding. +The Collaboration controls core solution includes a set of [virtual tables](/power-apps/developer/data-platform/virtual-entities/get-started-ve), which can be used for programmatic access to the data created by the Collaboration controls. Collaboration controls are available only in [public developer preview](~/resources/dev-preview/developer-preview-intro.md). The external system that is used by the Collaboration controls is Microsoft Graph. There are virtual tables for group calendar events, booking appointments, planner plans or tasks and SharePoint drives, folders, and files. This article provides samples, which demonstrate how to access the virtual tables using the Dataverse REST API to perform CRUD (Create, Read, Update, and Delete) operations. > [!TIP]-> For more information on the Dataverse REST API, see [use the Microsoft Dataverse Web API](/power-apps/developer/data-platform/webapi/overview). +> +> * [Virtual tables](/power-apps/developer/data-platform/virtual-entities/get-started-ve) also known as virtual entities, enable the integration of data residing in external systems by seamlessly representing that data as tables in Microsoft Dataverse, without replication of data and often without custom coding. +> * For more information on the Dataverse REST API, see [use the Microsoft Dataverse Web API](/power-apps/developer/data-platform/webapi/overview). * Virtual tables use the standard Dataverse Web API, which makes it easy to use the virtual tables to populate data in your application. * Virtual tables implement complex workflows required to support Collaboration controls and these execute within Microsoft data centers for optimum performance. Create a Planner Task with `PlanId` and `collaborationRootId`. you can create se ``` * `collaborationRootId`: Identifies the collaboration session we want to associate this plan with, use the value from task 2-* `planId`: Identifies the plan this task will be assigned to, use the value from the previous step +* `planId`: Identifies the plan this task is assigned to, use the value from the previous step * `taskTitle`: Title for the task # [Response](#tab/response2) Header: If-Match: {{@odata.etag}} } ``` -* `@odata.etag`: Etag for the task, you must perform a read to retrieve the most up to date version. +* `@odata.etag`: Etag for the task, you must perform a read to retrieve the latest version. * `planTitle`: Updated title for the task.-* `@details.etag`: Etag for the task details, you must perform a read using the query $select query parameter to include the `m365_details` column to retrieve the most up to date version. This value is included in the `m365_details` column of the response. This value isn't the same as the `@odata.etag` because in the Planner backend, the Task and its details are stored separately. +* `@details.etag`: Etag for the task details, you must perform a read using the query $select query parameter to include the `m365_details` column to retrieve the latest version. This value is included in the `m365_details` column of the response. This value isn't the same as the `@odata.etag` because in the Planner backend, the Task and its details are stored separately. # [Response](#tab/response7) To resolve this issue, you must always provide a valid `collaborationRootId` pro ### Attempt to read a virtual record without a Collaboration map -Virtual tables allow you to execute requests, which return collections of virtual records. We saw this earlier in this document where we requested all the planner tasks associated with a specific collaboration session. It's also possible to request all the planner tasks associated with a specific planner plan by using a $filter system query like this: $filter=m365_planid eq`{{planId}}`. One issue that happens if you use such a query is that records are returned for planner tasks, which aren't associated with a collaboration session that is, planner tasks that were created by a means other than using a Collaboration control. If you attempt to read, update, or delete such a record, the request fails because the virtual table can't find the associated collaboration map. +Virtual tables allow you to execute requests, which return collections of virtual records. We saw this earlier in this document where we requested all the planner tasks associated with a specific collaboration session. It's also possible to request all the planner tasks associated with a specific planner plan by using a `$filter` system query like `$filter=m365_planid eq {{planId}}`. One issue that happens if you use such a query is that records are returned for planner tasks, which aren't associated with a collaboration session that is, planner tasks that were created by a means other than using a Collaboration control. If you attempt to read, update, or delete such a record, the request fails because the virtual table can't find the associated collaboration map. # [Request](#tab/request9) Header: If-Match: {{@odata.etag}} ### Querying for Associated Virtual Records -In Task 5 of above, described how to Retrieve Associated Planner Tasks. This operation is supported for all of the virtual tables. When executing this request, you must include a `$filter` query, which specifies the Collaboration Root ID as shown below: +In Task 5, described how to Retrieve Associated Planner Tasks. This operation is supported for all of the virtual tables. When executing this request, you must include a `$filter` query, which specifies the Collaboration Root ID as follows: # [Request](#tab/request12) In Task 5 of above, described how to Retrieve Associated Planner Tasks. This ope -* Other filtering options can't be combined with this `$filter` query and if there they'll be ignored. +* Other filtering options can't be combined with this `$filter` query and if there they're ignored. * Other filtering must be performed directly on the response from the request. ### Querying for Virtual records with required key attributes -When, Dataverse Web API is called to retrieve multiple records from the following virtual tables a mandatory key attribute is required. Graph Booking Appointments requires a valid `m365_bookingbusinessid` is included in the query. If the key attribute isn't provided, then the request fails as follows: +When the Dataverse Web API is called to retrieve multiple records from the following virtual tables, a mandatory key attribute is required. Graph Booking Appointments requires a valid `m365_bookingbusinessid` is included in the query. If the key attribute isn't provided, then the request fails as follows: # [Response](#tab/response13) |
platform | Tab Sso Graph Api | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/authentication/tab-sso-graph-api.md | Graph scopes, such as `User.Read` or `Mail.Read`, indicate what your app can acc You can configure additional Graph scopes in Microsoft Entra ID for your app. These are delegated permissions, which are used by apps that require signed-in access. A signed-in app user or administrator must initially consent to them. Thereafter, your tab app can consent on behalf of the signed-in user when it calls Microsoft Graph. -If your application doesn't require a signed-in user, consider utilizing application permissions, also recognized as the app-only access scenario. Only administrators have the authority to grant consent for application permissions. For more information, see [application permissions](/graph/permissions-overview#application-permissions). +We recommend using delegated permissions for the signed-in user. If your application doesn't need a signed-in user, consider using application permissions, also known as the app-only access scenario. Only administrators can grant consent for application permissions. For more information, see [application permissions](/graph/permissions-overview#application-permissions). ### To configure API permissions If your application doesn't require a signed-in user, consider utilizing applica ## Configure authentication for different platforms -Depending on the platform or device where you want to target your app, additional configuration may be required, such as redirect URIs, specific authentication settings, or details specific to the platform. +Depending on the platform or device where you want to target your app, additional configuration might require, such as redirect URIs, specific authentication settings, or details specific to the platform. > [!NOTE] > > - If your tab app hasn't been granted IT admin consent, app users need to provide consent the first time they use your app on a different platform.-> - Implicit grant isn't required if SSO is enabled on a tab app. +> - Implicit grant isn't required if single sign-on (SSO) is enabled on a tab app. You can configure authentication for multiple platforms as long as the URL is unique. If you need to access Microsoft Graph data, configure your server-side code to: > [!IMPORTANT] > > - As a best practice for security, always use [server-side code to make Microsoft Graph calls](/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#middle-tier-access-token-request) or other calls that require passing an access token. This helps protect the token from being intercepted or leaked. DO NOT return the OBO token to the client because it would then enable the client to make direct calls to Microsoft Graph.-> +> - Two separate apps registered in Microsoft Entra ID will require individual tokens for each app. Use the [OBO flow](/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow) to enable communication between the apps. > - DonΓÇÖt use `notifySuccess` result to return the token information to the parent page. Use `localStorage` to save the token and pass the item key via `notifySuccess`. ## Obtain consent Your app can obtain consent for Graph permissions globally from the tenant admin When asking for additional user consent using the Microsoft Teams JavaScript client library (TeamsJS) [authentication](/javascript/api/@microsoft/teams-js/authentication) capability, keep in mind the following considerations: -> [!TIP] -> [Teams Personal Tab SSO Authentication](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/tab-personal-sso-quickstart/js/src/components/Tab.js#L64-L101) sample provides code demonstrating following steps. +To implement SSO authentication in a personal tab, follow these steps: -1. The token retrieved using `getAuthToken()` must be exchanged on the server-side using Microsoft Entra [OBO flow](/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow) to get access to those other Graph APIs. Ensure that you use the Azure AD v2 endpoint for this exchange. -1. When you try to execute the token exchange for a user for the first time, if Microsoft Entra refuses to exchange tokens it might be because the user hasn't consented to give your app permission to the user's data. In these cases, your exchange fails with either the `invalid_grant` or `interaction_required` error. Examples of *invalid_grant* errors include when consent is required or *auth_code*, assertion, or the refresh token is expired, revoked, malformed, or absent. Examples of *interaction_required* include when multi-factor authentication or corporate device enrollment is required. +1. The token retrieved using `getAuthToken()` must be exchanged on the server-side using Microsoft Entra OBO flow to get access to those other Graph APIs. Ensure that you use the Microsoft Entra v2 endpoint for this exchange. +1. When you try to execute the token exchange for a user for the first time, if Microsoft Entra refuses to exchange tokens it might be because the user hasn't consented to give your app permission to the user's data. In these cases, your exchange fails with either the `invalid_grant` or `interaction_required` error. Examples of *invalid_grant* errors include when consent is required or *auth_code*, assertion, or the refresh token is expired, revoked, malformed, or absent. Examples of *interaction_required* include when multifactor authentication or corporate device enrollment is required. 1. If the exchange fails because of the `invalid_grant` or `interaction_required` errors, you must prompt the user for consent. Since user interaction can only happen from the client, your server needs to return an indication to your client app that consent is required. You can then use the user interface (UI) to ask the app user to grant other consent. The UI must include a button that triggers an [Microsoft Entra consent dialog](../../../tabs/how-to/authentication/tab-sso-code.md#consent-dialog-for-getting-access-token). 1. To ask the user for consent for your app to access their data, you must include the `prompt=consent` property in your [query-string-parameter](/azure/active-directory/develop/v2-oauth2-implicit-grant-flow#send-the-sign-in-request) to Microsoft Entra ID. - Instead of `?scope={scopes}`, use `?prompt=consent&scope={scopes}` - Ensure that the `{scopes}` property includes all the scopes you're prompting the user for. For example, `Mail.Read` or `User.Read`. To handle incremental consent for tab app, see [incremental and dynamic user consent](/azure/active-directory/develop/v2-permissions-and-consent).-1. After the app user has granted more permissions, retry the OBO flow to get access to additional Graph APIs. +1. After the app user has granted more permissions, retry the OBO flow to get access to additional Graph APIs. For more information, see +[Teams Personal Tab SSO Authentication](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/tab-personal-sso-quickstart/js/src/components/Tab.js#L64-L101) +sample code. ## Race condition when making an OBO call after invalid grant exception If your application is unaware of this behavior, it might ask the user for conse The wait-and-retry mechanism must keep track if a user has consented to the required scopes. If an API call that includes an OBO request fails with the above errors, but the user has already consented, avoid showing the consent prompt to the user. Instead, wait for some time before retrying the API call. Usually, Microsoft Entra ID sends the consent within three to five seconds. In one of our [sample applications](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/8f266c33608d6d7b4cf89c81779ccf49e7664c1e/samples/bot-tab-conversations/csharp/Source/ConversationalTabs.Web/ClientApp/src/utils/UtilsFunctions.ts#LL8C1-L8C1), we retry up to three times with double the wait time between each retry, starting at a one-second wait. -If after three to five attempts the OBO flow still fails, the user might not have consented to all the required scopes, and you may have to prompt them to consent again. +If after three to five attempts the OBO flow still fails, the user might not have consented to all the required scopes, and you might have to prompt them to consent again. This approach helps reduce the possibility of user being prompted for consent more than once. |
platform | Tab Requirements | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/tab-requirements.md | Title: Prerequisites -description: In this article, learn the prerequisites to build Microsoft Teams personal, channel, or group tab. Know the tools required to build your tab. +description: In this article, learn about the prerequisites and tools needed to build a Microsoft Teams personal, channel, or group tab. ms.localizationpriority: high Last updated 03/28/2023 Last updated 03/28/2023 Ensure that you adhere to the following prerequisites while building your Teams personal and channel or group tab: * Enable discovery of your tab pages in an iFrame by utilizing X-Frame-Options and [Content-Security-Policy HTTP](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) response headers.- * Set Content Security Policy headers to allow Teams and any other [host applications](../../m365-apps/overview.md) of your app: - [!INCLUDE [CSP headers for multi-hub apps](~/includes/tabs/content-security-policy-headers.md)] +* Set Content Security Policy headers to allow Teams and any other [host applications](../../m365-apps/overview.md) of your app: - * For Internet Explorer 11 compatibility, set `X-Content-Security-Policy`. Alternately, set header `X-Frame-Options: ALLOW-FROM https://teams.microsoft.com/`. This header is deprecated but still accepted by most browsers. -* Login pages don't render in iFrames, as a safeguard against clickjacking. Your authentication logic needs to use a method other than redirect. For example, use token-based or cookie-based authentication. +* For Internet Explorer 11 compatibility, set `X-Content-Security-Policy`. Alternately, set header `X-Frame-Options: ALLOW-FROM https://teams.microsoft.com/`. This header is deprecated but most browsers still accept it. ++* Sign-in pages don't render in iFrames as a safeguard against clickjacking. Your authentication logic needs to use a method other than redirect. For example, use token-based or cookie-based authentication. > [!NOTE] > It is recommended that you set the intended use for your cookies rather than rely on default browser behavior. For more information, see [SameSite cookie attribute](../../resources/samesite-cookie-update.md). * Browsers same-origin policy restriction prevents webpages from making requests to different domains than the served web page. So, you can redirect the configuration or content page to another domain or subdomain. Your cross-domain navigation logic needs to allow the Teams client to validate the origin against a static `validDomains` list in the [app manifest](../../resources/schem#validdomains) when loading or communicating with the tab. -* Style your tabs based on the Teams client's theme, design, and intent. Tabs work best when they're built to address a specific need and focus on a small set of tasks or a subset of data that is relevant to the tab's channel location. +* Style your tabs based on the Teams client's theme, design, and intent. Tabs work best when built to address a specific need and focus on a small set of tasks or a subset of data that is relevant to the tab's channel location. -* Within your content page, add a reference to [Microsoft Teams JavaScript client library](/javascript/api/overview/msteams-client) using script tags. After your page loads, make a call to `app.initialize()`, otherwise your page won't be displayed. +* Within your content page, add a reference to [Microsoft Teams JavaScript client library](/javascript/api/overview/msteams-client) using script tags. After your page loads, make a call to `app.initialize()`, or else your page isn't displayed. * For authentication to work on mobile clients, you must upgrade to TeamsJS version 1.4.1 or later. Ensure that you adhere to the following prerequisites while building your Teams | | [Visual Studio 2022](https://visualstudio.microsoft.com), **ASP.NET and web development** workload| .NET. You can install the free community edition of Visual Studio 2022. | | | [Git](https://git-scm.com/downloads) | Git to use the sample apps repo from GitHub. | | | [Microsoft Teams](https://www.microsoft.com/en-us/microsoft-teams/download-app) | Microsoft Teams to collaborate with everyone you work with through apps for chat, meetings, call - all in one place. |-| | [ngrok](https://ngrok.com/download) | Ngrok is a reverse proxy software tool. Ngrok creates a tunnel to your locally running web server's publicly available HTTPS endpoints. Your server's web endpoints are available during the current session on your computer. When the computer is shut down or goes to sleep, the service is no longer available. | +| | [ngrok](https://ngrok.com/download) | Ngrok is a reverse proxy software tool. Ngrok creates a tunnel to your locally running web server's publicly available HTTPS endpoints. Your server's web endpoints are available during the current session on your computer. When you shut down or put your device to sleep, the service is no longer available. | | | [Developer Portal for Teams](https://dev.teams.microsoft.com/) | Web-based portal to configure, manage, and distribute your Teams app including to your organization or the Microsoft Teams Store. | ### Build your Teams tab |
platform | Tabs Link Unfurling | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/tabs-link-unfurling.md | Stage View is a user interface (UI) component that allows you to render content Stage View is a full screen UI component that can be used to render your app content, providing users with a focused experience to engage with your app. Stage View can be invoked from either an Adaptive Card or a deep link, in both chats and channels. -* When users invoke Stage View from Adaptive cards, Stage View opens in a new Teams window along with the originating chat or channel thread in the side panel. This new app canvas is called the [Collaborative Stage View](#collaborative-stage-view). The Collaborative Stage View allows users to multi-task and collaborate with each other. +* When users invoke Stage View from Adaptive Cards, Stage View opens in a new Teams window along with the originating chat or channel thread in the side panel. This new app canvas is called the [Collaborative Stage View](#collaborative-stage-view). The Collaborative Stage View allows users to multi-task and collaborate with each other. * The Collaborative Stage View surfaces the originating chat or thread from where it was invoked and helps the users to engage with content and conversation side-by-side. The following image is an example of the Collaborative Stage View: |:--|:--| | Stage View is useful to display rich content to the users, such as a page, a dashboard, or a file. It provides rich features that help to render your content in the new pop-up window and the full-screen canvas. <br><br> After your app content opens in Stage View, users can choose to pin the content as a tab. <br><br> For more collaborative capabilities, opening your content in Collaborative Stage View (through an Adaptive Card) allows users to engage with content and conversation side-by-side, while enabling multi-window scenarios.| [Dialog](../task-modules-and-cards/task-modules/task-modules-tabs.md) is especially useful to display messages that need users' attention, or collect information required to move to the next step.| +> [!WARNING] +> Microsoft's cloud services, including web versions of Teams (*teams.microsoft.com*), Outlook (*outlook.com*), and Microsoft 365 (*microsoft365.com*) domains are migrating to the *cloud.microsoft* domain. Perform the following steps before June 2024 to ensure your app continues to render on the Teams web client: +> +> 1. Update TeamsJS SDK to v.2.19.0 or higher. For more information about the latest release of TeamsJS SDK, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js). +> +> 2. Update your [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) headers in your Teams app to allow your app to access the ***teams.cloud.microsoft*** domain. If your Teams app extends across Outlook and Microsoft 365, ensure you allow your app to access ***teams.cloud.microsoft***, ***outlook.cloud.microsoft***, and ***m365.cloud.microsoft*** domains. + ### Invoke Stage View through deep link To invoke the Stage View through deep link from your tab, you must wrap the deep link URL in the `app.openLink(url)` API. Stage View from a deep link always defaults to the modal experience (and not a Teams window). While the Stage View deep link can be passed through an `OpenURL` action in the card, the Stage View deep link is intended for the tab canvas. For Stage View from Adaptive Cards, it's recommended to follow the JSON [Adaptive Card example](#example). When the user enters an app content URL in a chat, the bot is invoked and return The following image is an example of a Collaborative Stage View from an Adaptive Card: :::image type="content" source="../assets/images/tab-images/collaborative-stage-view.png" alt-text="Screenshot shows the Collaborative Stage View in Adaptive Card."::: The following is a JSON code example to create a Collaborative Stage View button ``` -Following is the process to invoke Collaborative Stage View: +The following steps show how to invoke Collaborative Stage View: * When the user shares a URL in a Teams chat, the bot receives an `composeExtensions/queryLink` invoke request. The bot returns an Adaptive Card with the type `tab/tabInfoAction`. * When the user selects the action button on the Adaptive Card, Collaborative Stage View opens based on the content in the Adaptive Card. |
platform | Invoking Task Modules | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/invoking-task-modules.md | The next section provides examples of embedding dialogs in a YouTube video and a ## CSS for HTML or JavaScript dialogs -HTML or JavaScript-based dialogs have access to the entire area of the dialog below the header. While that offers a great deal of flexibility, if you want padding around the edges to align with the header elements and avoid unnecessary scroll bars, you must specify the CSS. The next sections provide examples for common use cases. +HTML or JavaScript-based dialogs have access to the entire area of the dialog below the header. While that offers a great deal of flexibility, if you want padding around the edges to align with the header elements and avoid unnecessary scroll bars, you must specify the CSS. ++> [!WARNING] +> Microsoft's cloud services, including web versions of Teams (*teams.microsoft.com*), Outlook (*outlook.com*), and Microsoft 365 (*microsoft365.com*) domains are migrating to the *cloud.microsoft* domain. Perform the following steps before June 2024 to ensure your app continues to render on the Teams web client: +> +> 1. Update TeamsJS SDK to v.2.19.0 or higher. For more information about the latest release of TeamsJS SDK, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js). +> +> 2. Update your [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) headers in your Teams app to allow your app to access the ***teams.cloud.microsoft*** domain. If your Teams app extends across Outlook and Microsoft 365, ensure you allow your app to access ***teams.cloud.microsoft***, ***outlook.cloud.microsoft***, and ***m365.cloud.microsoft*** domains. ++Here are a few examples of common use cases. ### Example 1: YouTube video |
platform | Task Modules Bots | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/task-modules-bots.md | Title: Use dialogs in Microsoft Teams bots -description: Learn how to use dialogs with Microsoft Teams bots, including Bot Framework cards, Adaptive cards, and deep links. +description: Learn how to use dialogs with Microsoft Teams bots, including Bot Framework cards, Adaptive Cards, and deep links. ms.localizationpriority: medium Last updated 01/31/2023 Last updated 01/31/2023 # Use dialogs with bots -Dialogs (referred as task modules in TeamsJS v1.x) can be invoked from Microsoft Teams bots using buttons on Adaptive Cards and Bot Framework cards that are hero, thumbnail, and connector for Microsoft 365 Groups. Dialogs are often a better user experience than multiple conversation steps. Keep track of bot state and allow the user to interrupt or cancel the sequence. +Invoke dialogs (referred as task modules in TeamsJS v1.x) from Microsoft Teams bots using buttons on Adaptive Cards and Bot Framework cards that are hero, thumbnail, and connector for Microsoft 365 Groups. Dialogs are often a better user experience than multiple conversation steps. Keep track of bot state and allow the user to interrupt or cancel the sequence. There are two ways of invoking dialogs: There are two ways of invoking dialogs: > [!IMPORTANT] > Each `url` and `fallbackUrl` must implement the HTTPS encryption protocol. -The next section provides details on invoking a dialog using `task/fetch`. - ## Invoke a dialog using `task/fetch` When the `value` object of the `invoke` card action or `Action.Submit` is initialized and when a user selects the button, an `invoke` message is sent to the bot. In the HTTP response to the `invoke` message, there's a [TaskInfo object](~/task-modules-and-cards/task-modules/invoking-task-modules.md#dialoginfo-object) embedded in a wrapper object, which Teams uses to display the dialog (referred as task module in TeamsJS v1.x). +> [!WARNING] +> Microsoft's cloud services, including web versions of Teams (*teams.microsoft.com*), Outlook (*outlook.com*), and Microsoft 365 (*microsoft365.com*) domains are migrating to the *cloud.microsoft* domain. Perform the following steps before June 2024 to ensure your app continues to render on the Teams web client: +> +> 1. Update TeamsJS SDK to v.2.19.0 or higher. For more information about the latest release of TeamsJS SDK, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js). +> +> 2. Update your [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) headers in your Teams app to allow your app to access the ***teams.cloud.microsoft*** domain. If your Teams app extends across Outlook and Microsoft 365, ensure you allow your app to access ***teams.cloud.microsoft***, ***outlook.cloud.microsoft***, and ***m365.cloud.microsoft*** domains. + :::image type="content" source="../../assets/images/task-module/task-module-invoke-request-response.png" alt-text="task/fetch request or response"::: -The following steps provide the invoke dialog (referred as task module in TeamsJS v1.x) using `task/fetch`: +The following steps provide instructions on how to invoke a dialog (referred as task module in TeamsJS v1.x) using `task/fetch`: 1. This image shows a Bot Framework hero card with a **Buy** `invoke` [card action](~/task-modules-and-cards/cards/cards-actions.md#action-type-invoke). The value of the `type` property is `task/fetch` and the rest of the `value` object can be of your choice. 1. The bot receives the `invoke` HTTP POST message. The next section provides details on submitting the result of a dialog. When the user is finished with the dialog, submitting the result back to the bot is similar to the way it works with tabs. For more information, see [example of submitting the result of a dialog](~/task-modules-and-cards/task-modules/task-modules-tabs.md#example-of-submitting-the-result-of-a-dialog). There are a few differences as follows: -* HTML or JavaScript that is `TaskInfo.url`: Once you've validated what the user has entered, you call the `microsoftTeams.tasks.submitTask()` function referred to hereafter as `submitTask()` for readability purposes. You can call `submitTask()` without any parameters if you want Teams to close the dialog (referred as task module in TeamsJS v1.x), but you must pass an object or a string to your `submitHandler`. Pass it as the first parameter, `result`. Teams invokes `submitHandler`, `err` is `null`, and `result` is the object or string you passed to `submitTask()`. If you call `submitTask()` with a `result` parameter, you must pass an `appId` or an array of `appId` strings. This allows Teams to validate that the app sending the result is the same one, which invoked the dialog. Your bot receives a `task/submit` message including `result`. For more information, see [payload of `task/fetch` and `task/submit` messages](#payload-of-taskfetch-and-tasksubmit-messages). +* HTML or JavaScript that is `TaskInfo.url`: Once you've validated what the user has entered, you call the `microsoftTeams.tasks.submitTask()` function referred to hereafter as `submitTask()` for readability purposes. You can call `submitTask()` without any parameters if you want Teams to close the dialog (referred as task module in TeamsJS v1.x), but you must pass an object or a string to your `submitHandler`. Pass it as the first parameter, `result`. Teams invokes `submitHandler`, `err` is `null`, and `result` is the object or string you passed to `submitTask()`. If you call `submitTask()` with a `result` parameter, you must pass an `appId` or an array of `appId` strings. This action allows Teams to validate that the app sending the result is the same one, which invoked the dialog. Your bot receives a `task/submit` message including `result`. For more information, see [payload of `task/fetch` and `task/submit` messages](#payload-of-taskfetch-and-tasksubmit-messages). * Adaptive Card that is `TaskInfo.card`: The Adaptive Card body as filled in by the user is sent to the bot through a `task/submit` message when the user selects any `Action.Submit` button. The next section provides details on how to respond to the `task/submit` messages. This section defines the schema of what your bot receives when it receives a `ta The next section provides an example of receiving and responding to `task/fetch` and `task/submit` invoke messages in Node.js. - The following tabs provides `task/fetch` and `task/submit` invoke messages in Node.js and C#: + The following tabs provide `task/fetch` and `task/submit` invoke messages in Node.js and C#: # [Node.js](#tab/nodejs) The schema for Bot Framework card actions is different from Adaptive Card `Actio |Sample name | Description | .NET | Node.js | Manifest| |-|--|--|-|-|-|Dialog sample bots-V4 | This sample shows how to create dialogs using bot framework v4 and Teams tab. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) +|Dialog sample bots-V4 | This sample shows how to create dialogs using Bot Framework v4 and Teams tab. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/nodejs)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-task-module/csharp/demo-manifest/bot-task-module.zip) ## Step-by-step guide |
platform | Task Modules Tabs | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/task-modules-tabs.md | Last updated 02/22/2023 # Use dialogs in tabs -You can add modal dialogs (referred as task modules in TeamsJS v1.x) to your tabs to simplify the user experience for any workflows that require data input. Dialogs allow you to gather user input in a Microsoft Teams-Aware modal window. A good example of this is editing Planner cards. You can use dialogs to create a similar experience. +Add modal dialogs (referred as task modules in TeamsJS v1.x) to your tabs to simplify the user experience for any workflows that require data input. Dialogs allow you to gather user input in a Microsoft Teams-Aware modal window, such as editing Planner cards. You can use dialogs to create a similar experience. The two main operations of dialogs involve opening and closing (submitting) them. The functions are slightly different for earlier versions (prior to v2.x.x) of the TeamsJS library: You can invoke either an HTML or Adaptive Card dialog from a tab. The value of `UrlDialogInfo.url` is set to the location of the content of your dialog. The dialog window opens and `UrlDialogInfo.url` is loaded as an `<iframe>` inside it. JavaScript in the dialog page calls `microsoftTeams.app.initialize()`. If there's a `submitHandler` function on the page and there's an error when invoking `microsoftTeams.dialog.url.open()`, then `submitHandler` is invoked with `err` set to the error string indicating the same. +> [!WARNING] +> Microsoft's cloud services, including web versions of Teams (*teams.microsoft.com*), Outlook (*outlook.com*), and Microsoft 365 (*microsoft365.com*) domains are migrating to the *cloud.microsoft* domain. Perform the following steps before June 2024 to ensure your app continues to render on the Teams web client: +> +> 1. Update TeamsJS SDK to v.2.19.0 or higher. For more information about the latest release of TeamsJS SDK, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js). +> +> 2. Update your [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) headers in your Teams app to allow your app to access the ***teams.cloud.microsoft*** domain. If your Teams app extends across Outlook and Microsoft 365, ensure you allow your app to access ***teams.cloud.microsoft***, ***outlook.cloud.microsoft***, and ***m365.cloud.microsoft*** domains. + ### Adaptive Card dialog ```typescript The following image displays the dialog: The following code is adapted from [the dialog sample](~/task-modules-and-cards/task-modules/invoking-task-modules.md#code-sample): - # [TeamsJs v2](#tab/teamsjs3) ```typescript If there's no invocation error and the user doesn't select **X** to dismiss the ### HTML or JavaScript dialogs -After validating user input, call `microsoftTeams.dialog.url.submit()`. You can call `submit()` without any parameters if you want Teams to close the dialog, or you can pass an object or string `result` back to your app as the first parameter, and an `appId` of the app that opened the dialog as the second parameter. If you call `submit()` with a `result` parameter, you must pass an `appId` (or an array of `appId` strings of apps authorized to receive the result of the dialog). This enables Teams to validate that the app sending the result is the same as the invoked dialog. +After validating user input, call `microsoftTeams.dialog.url.submit()`. You can call `submit()` without any parameters if you want Teams to close the dialog, or you can pass an object or string `result` back to your app as the first parameter, and an `appId` of the app that opened the dialog as the second parameter. If you call `submit()` with a `result` parameter, you must pass an `appId` (or an array of `appId` strings of apps authorized to receive the result of the dialog). This action enables Teams to validate that the app sending the result is the same as the invoked dialog. Teams will then invoke your `submitHandler` where `err` is *null* and `result` is the object or string you passed to `submit()`. When you invoke the dialog with a `submitHandler` and the user selects an `Actio The Adaptive Card body as filled in by the user is sent to the bot using a `task/submit invoke` message when the user selects an `Action.Submit` button. The schema for the object you receive is similar to [the schema you receive for task/fetch and task/submit messages](../../task-modules-and-cards/task-modules/task-modules-bots.md#payload-of-taskfetch-and-tasksubmit-messages). The only difference is that the schema of the JSON object is an Adaptive Card object as opposed to an object containing an Adaptive Card object as [when Adaptive cards are used with bots](../../task-modules-and-cards/task-modules/task-modules-bots.md#payload-of-taskfetch-and-tasksubmit-messages). -The following is the example of payload: +The following code is the example of payload: ```json { The following is the example of payload: } ``` -The following is the example of Invoke request: +The following code is the example of Invoke request: ```javascript let adaptiveCardDialogInfo = { Taking up the earlier [example of invoking an HTML dialog](#example-of-invoking- <form method="POST" id="customerForm" action="/register" onSubmit="return validateForm()"> ``` -There are five fields on this form but for this example only three values are required, `name`, `email`, and `favoriteBook`. +There are five fields on this form but this example requires only three values, `name`, `email`, and `favoriteBook`. The following code gives an example of the `validateForm()` function that calls `submit()`: function validateForm() { > [!NOTE] > The `tasks` namespace is replaced by the `dialog` namespace. The `dialog` namespace includes sub-namespaces for HTML (`url`), Adaptive Card (`adaptiveCard`), and bot-based (`dialog.url.bot` and `dialog.adaptiveCard.bot`) functionality. -The following table provides the possible values of `err` that can be received by your `submitHandler`: +The following table provides the possible values of `err` that your `submitHandler` receives: | Problem | Error message that is value of `err` | | - | | | Values for both `TaskInfo.url` and `TaskInfo.card` were specified. | Values for both card and URL were specified. One or the other, but not both, are allowed. |-| Neither `TaskInfo.url` nor `TaskInfo.card` specified. | You must specify a value for either card or URL. | +| `TaskInfo.url` and `TaskInfo.card` specified. | You must specify a value for either card or URL. | | Invalid `appId`. | Invalid app ID. | | User selected X button, closing it. | User canceled or closed the dialog. | |
platform | What Are Task Modules | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/what-are-task-modules.md | Dialogs (referred as task modules in TeamsJS v1.x) permit you to create modal po Dialogs are useful for initiating and completing tasks or displaying rich information, such as videos or Power Business Intelligence (BI) dashboards. A pop-up experience is often more natural for users initiating and completing tasks compared to a tab or a conversation-based bot experience. -Dialogs build on the foundation of Microsoft Teams tabs. They're essentially a tab inside a pop-up window. They use the same Microsoft Teams JavaScript client library (TeamsJS), so if you have built a tab you're already familiar with creating a dialog. +Dialogs build on the foundation of Microsoft Teams tabs. They're essentially a tab inside a pop-up window. They use the same Microsoft Teams JavaScript client library (TeamsJS), so if you have built a tab, you're already familiar with creating a dialog. -Dialogs can be invoked in three ways: +You can invoke dialogs in three ways: * Channel or personal tabs: Using the TeamsJS library, you can invoke dialogs from buttons, links, or menus on your tab. For more information, see [using dialogs in tabs](~/task-modules-and-cards/task-modules/task-modules-tabs.md). * Bots: Using buttons on [cards](~/task-modules-and-cards/cards/cards-reference.md) sent from your bot. This is useful when you don't require everyone in a channel to see what you are doing with a bot. For example, when having users respond to a poll in a channel it isn't useful to see a record of that poll being created. For more information, see [using dialogs from Teams bots](~/task-modules-and-cards/task-modules/task-modules-bots.md). A dialog includes the following as shown in the previous image: > It is currently not possible to detect the `err` event when a dialog is invoked from a bot. 5. The blue rectangle is where your web page appears if you're loading your own web page using the `url` property of the [TaskInfo object](~/task-modules-and-cards/task-modules/invoking-task-modules.md#dialoginfo-object). For more information, see [Invoke and dismiss dialogs](~/task-modules-and-cards/task-modules/invoking-task-modules.md).-6. If you're displaying an Adaptive Card using the `card` property of the [TaskInfo object](~/task-modules-and-cards/task-modules/invoking-task-modules.md#dialoginfo-object) the padding is added for you. For more information, see [CSS for HTML or JavaScript dialogs](~/task-modules-and-cards/task-modules/invoking-task-modules.md#css-for-html-or-javascript-dialogs). +6. If you're displaying an Adaptive Card using the `card` property of the [TaskInfo object](~/task-modules-and-cards/task-modules/invoking-task-modules.md#dialoginfo-object), the padding is added for you. For more information, see [CSS for HTML or JavaScript dialogs](~/task-modules-and-cards/task-modules/invoking-task-modules.md#css-for-html-or-javascript-dialogs). 7. Adaptive Card buttons render after you select **Sign up**. When using your own page, create your own buttons. By design, the primary button style (solid) is applied to the last root action in an Adaptive Card. For all other actions, the default button style is applied. ## Next step |
platform | Debug Mobile | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/debug-mobile.md | You can view the project folders and files under **Explorer** in the Visual Stud > * When the dev tunnel access value is set to `private`, the tab app cannot be displayed within an iframe on the web client. The login page is hosted on **login.microsoftonline.com**, which has the `X-FRAME-Options` header set to DENY. > * To preview the tab app on the mobile client and debug it on web clients, set the access value to `public`. Any user with the app's URL can visit the tab. - :::image type="content" source="../assets/images/debug-mobile/login.PNG" alt-text="Screenshot shows the login page."::: --1. Remove `TAB_DOMAIN` and `TAB_ENDPOINT` from the `teamsapp.local.yml` file. +2. Remove `TAB_DOMAIN` and `TAB_ENDPOINT` from the `teamsapp.local.yml` file. ```javascript - uses: script You can view the project folders and files under **Explorer** in the Visual Stud echo "::set-teamsfx-env TAB_ENDPOINT=https://localhost:53000"; ``` -1. If you're using React, add the configuration `WDS_SOCKET_PORT=0` in `teamsapp.local.yml` file to activate hot reloading while debugging in React after utilizing the tunnel service. +3. If you're using React, add the configuration `WDS_SOCKET_PORT=0` in `teamsapp.local.yml` file to activate hot reloading while debugging in React after utilizing the tunnel service. ```javascript - uses: file/createOrUpdateEnvironmentFile You can view the project folders and files under **Explorer** in the Visual Stud       WDS_SOCKET_PORT: 0 ``` -## Run the deployed app +4. Run the deployed app -1. Open the debug panel (**Ctrl+Shift+D** / **⌘⇧-D** or **View > Run**) from Visual Studio Code. -1. Select **Launch Remote in Teams (Edge)** from the launch configuration dropdown. -1. Select the Start debugging (F5) button. + 1. Open the debug panel (**Ctrl+Shift+D** or **View > Run**) from Visual Studio Code. + 2. Select **Launch Remote in Teams (Edge)** from the launch configuration dropdown. + 3. Select the Start debugging (F5) button. :::image type="content" source="~/assets/images/teams-toolkit-v2/deploy-azure/launch-remote.png" alt-text="Screenshot shows how to launch the app remotely."::: + 4. You'll be prompted to upload a custom app into Teams. Select **Add**. ++ :::image type="content" source="~/assets/images/teams-toolkit-v2/deploy-azure/remote-app-client.png" alt-text="Screenshot shows an app being installed."::: ++ The app opens as a personal tab. ++ :::image type="content" source="../assets/images/debug-mobile/login.PNG" alt-text="Screenshot shows the personal tab app page."::: + # [Command Line](#tab/cline) 1. Go to [ngrok](https://ngrok.com) and sign up for a free account or log into your existing account. You can view the project folders and files under **Explorer** in the Visual Stud TAB_ENDPOINT=https://sample-ngrok-id.ngrok.io ``` -1. Execute the command `teamsfx provision --env local` in your project directory. -1. Execute the command `teamsfx deploy --env local` in your project directory. -1. Execute the command `teamsfx preview --env local` in your project directory. +1. Run the following commands in your project directory: + 1. `teamsfx provision --env local` + 1. `teamsfx deploy --env local` + 1. `teamsfx preview --env local` -You'll be prompted to upload a custom app into Teams. Select **Add**. -- ## Test your tab app on mobile client 1. To find the previewing app, open Teams on your mobile device and select **More**. |
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. :::row-end::: <br/> -<details> --<summary><b>2024</b></summary> --| **Date** | **Update** | **Find here** | -| -- | | -| -|25/01/2024|Use Micro-capability templates to show rich unfurl previews of your links without installing your app in Microsoft Teams.|Build message extension > Build message extensions using Bot Framework > [Micro-capabilities for website links](messaging-extensions/how-to/micro-capabilities-for-website-links.md)| -|24/01/2024|Introduced advanced step-by-step guide to learn how to debug your AI chat bot using Teams App Test Tool.|[Debug your AI chat bot using Teams App Test Tool](sbs-teams-app-test-tool.yml)| -|19/01/2024|Use / to invoke message extensions from command box in the new Teams client.|Build message extension > [Build message extensions using Bot Framework](messaging-extensions/build-bot-based-message-extension.md)| -|04/01/2024|Apps for Teams meetings are available in Department of Defense (DOD) environment.|[Build apps for Teams meetings and calls](apps-in-teams-meetings/teams-apps-in-meetings.md)| --<br/> -</details> - </br> <details> Teams platform features that are available to all app developers. | -- | | -| |20/12/2023|Incoming Webhooks are available in GCC-High environment.|[Build webhooks and connectors](~/webhooks-and-connectors/what-are-webhooks-and-connectors.md)| |20/12/2023|Introduced RSC permissions for users to access different resources.| Utilize Teams data with Microsoft Graph > [Resource-specific consent for your Teams app](graph-api/rsc/resource-specific-consent.md#rsc-permissions-for-user-access) |-|18/12/2023|App caching in chat, channel, and meeting tab scopes is available for iOS.| Buils tabs > [App caching for your tab app](tabs/how-to/app-caching.md) | +|18/12/2023|App caching in chat, channel, and meeting tab scopes is available for iOS.| Build tabs > [App caching for your tab app](tabs/how-to/app-caching.md) | |15/12/2023|Bots can mention tags in text messages and Adaptive Cards posted in Teams channels.| Build bots > Bot conversation > [Channel and group chat conversations with a bot](bots/how-to/conversations/channel-and-group-conversations.md#tag-mention) | |12/12/2023|Use Teams AI library to build apps that can leverage LLMs to facilitate more natural conversational interactions with users, guiding that conversation into your apps skills.|Build bots > [Teams AI library](bots/how-to/Teams%20conversational%20AI/teams-conversation-ai-overview.md)| |21/11/2023|Terminology update. LOB apps is referred to as custom apps built for your org (LOB apps).|| Teams platform features that are available to all app developers. | 17/05/2023 | Updated Get started module with GitHub Codespaces and step-by-step guides aligned with Teams Toolkit v5. It also includes details for extending Teams app over Microsoft 365 and Outlook. | [Get started](get-started/get-started-overview.md)| | 24/04/2023 | Develop your apps with a seamless transition between Teams Developer Portal and Teams Toolkit. | Tools and SDKs > Developer Portal for Teams > [Develop your apps with Teams Toolkit](concepts/build-and-test/develop-your-apps-with-teams-toolkit.md) | | 14/04/2023 | App update in any one context where the app is installed automatically updates the app in all the related contexts (chats, channels, and meetings). | Distribute your app > [Upload your app in Teams](concepts/deploy-and-publish/apps-upload.md#update-your-app) |-| 06/04/2023 | Set up Microsoft license management for third-party SaaS apps in Partner Centre as part of the offer publishing that allows easy management and tracking of licenses for third-party app subscriptions within Teams. | Monetize your app > [Set up Microsoft license management](~/concepts/deploy-and-publish/appsource/prepare/manage-third-party-apps-license.md) | +| 06/04/2023 | Set up Microsoft license management for third-party SaaS apps in Partner Center as part of the offer publishing that allows easy management and tracking of licenses for third-party app subscriptions within Teams. | Monetize your app > [Set up Microsoft license management](~/concepts/deploy-and-publish/appsource/prepare/manage-third-party-apps-license.md) | | 04/04/2023 | Tab apps in shared channels are available in Department of Defense (DOD) environment. | Build tabs > [Build apps for shared channels](~/concepts/build-and-test/shared-channels.md) | | 23/03/2023 | Use apps in Teams meetings scheduled through public channels. | Build apps for Teams meetings and calls > [Overview](apps-in-teams-meetings/teams-apps-in-meetings.md) | | 20/03/2023 | Bots are available in Department of Defense (DOD) environment. | Build bots > [Overview](bots/what-are-bots.md)| Explore updates from the previous GA releases listed here. |12/20/2021| Introduced step-by-step guide to create meeting content bubble | Build apps for Teams meetings > Enable and configure apps for meetings > [Step-by-step guide to create meeting content bubble](sbs-meeting-content-bubble.yml) | |12/09/2021| Introduced step-by-step guide to meeting Stage View | Build apps for Teams meetings > Enable and configure apps for meetings > [Step-by-step guide to create meetings Stage View](sbs-meetings-stage-view.yml)| |12/13/2021 | Introduced guidelines for app linked to SaaS offer | Distribute your app > Publish to the Teams Store > Review Teams Store validation guidelines > [Guidelines for apps linked to SaaS offer](concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md#apps-linked-to-saas-offer)|-|12/09/2021| Introduced step-by-step guide to create meeting sidepanel | Build apps for Teams meetings > Enable and configure apps for meetings > [Step-by-step guide to create meeting sidepanel in Teams](sbs-meetings-sidepanel.yml)| +|12/09/2021| Introduced step-by-step guide to create meeting side panel | Build apps for Teams meetings > Enable and configure apps for meetings > [Step-by-step guide to create meeting side panel in Teams](sbs-meetings-sidepanel.yml)| |12/01/2021 | Introduced new Teams Store icon | ΓÇó Design your app > App capabilities > [Designing your personal app for Microsoft Teams](concepts/design/personal-apps.md)</br> ΓÇó Design your app > UI components > [Designing your Microsoft Teams app with advanced UI components](concepts/design/design-teams-app-advanced-ui-components.md) | |11/24/2021| Introduced step-by-step guide to generate meeting token | Build apps for Teams meetings > Enable and configure apps for meetings > [Step-by-step guide to create meeting token in Teams](sbs-meeting-token-generator.yml)| |11/17/2021| Updated Teams Store validation guidelines|[Teams Store validation guidelines](~/concepts/deploy-and-publish/appsource/prepare/teams-store-validation-guidelines.md)| Explore updates from the previous GA releases listed here. | 12/26/2019 | The `replyToId` parameter in payloads sent to a bot is no longer encrypted, allowing you to use this value to construct deep links to these messages. Message payloads include the encrypted values in the parameter `legacy.replyToId`. | | 11/05/2019 | Single sign-on using the Teams JavaScript SDK. | [Single sign-on](tabs/how-to/authentication/tab-sso-overview.md) | | 10/31/2019 | Conversational bots and message extension documentation updated to reflect the 4.6 Bot Framework SDK. Documentation for the v3 SDK is available in the Resources section. | All bot and message extension documentation |-| 10/31/2019 | New documentation structure, and major article refactoring. Report any dead links or 404's by creating a GitHub Issue. | All of them! | +| 10/31/2019 | New documentation structure, and major article refactoring. Report any dead links or 404s by creating a GitHub Issue. | All of them! | | 09/13/2019 | Request bot is installed from action-based message extension. | [Initiate actions with message extensions](resources/messaging-extension-v3/create-extensions.md#request-to-install-your-conversational-bot) | 08/28/2019 | Support for private channels in tabs and Connectors. | [Get context for your tab](tabs/how-to/access-teams-context.md#retrieve-context-in-private-channels) | | 06/20/2019 | Share an external website, from an external website, into a Teams channel. | [Share to Teams](concepts/build-and-test/share-to-teams-overview.md). | Explore updates from the previous GA releases listed here. | 09/11/2018 | Tab configuration pages are now taller. | [Tab Design](tabs/design/tabs.md) | | 08/15/2018 | Adaptive cards are now supported in Teams.|[Adaptive card actions in Teams](task-modules-and-cards/cards/cards-reference.md#adaptive-card) | | 08/10/2018 | Client support for DevTools.| [DevTools for the Microsoft Teams Desktop Client](~/resources/dev-preview/developer-preview-tools.md)|-| 08/08/2018 | Message extensions now supports multiple commands. | [composeExtensions.commands](~/resources/schem#composeextensionscommands)| +| 08/08/2018 | Message extensions now support multiple commands. | [composeExtensions.commands](~/resources/schem#composeextensionscommands)| | 08/07/2018 | Inline configuration is now supported in Connectors. The Connectors documentation is revised and expanded for clarity.| [Connectors](~/concepts/connectors/connectors.md)| | 08/06/2018 | Your bot can now send and receive files. | [Send and receive files through your bot](~/bots/how-to/bots-filesv4.md)| | 07/23/2018 | Information about app recertification is added to the publishing section. |[Manifest permissions](resources/schem#permissions)| Discover Microsoft Teams platform features that are deprecated. You can now get Teams platform features that aren't available. +* ***February 02, 2024***: Teams, Outlook, and Microsoft 365 web domains are migrating to *cloud.microsoft* domain. [Configure your app](m365-apps/extend-m365-teams-personal-tab.md#configure-content-security-policy-headers) before June 2024 to ensure continued functionality. ++* ***February 02, 2024***: The Collaboration controls for model-driven applications **are** set to retire by May 2024. We recommend removing the Collaboration controls and Collaboration connector from all Power Apps solutions and prepare users for the upcoming [Collaboration controls](~/samples/collaboration-control.md) retirement. + * ***October 11, 2023***: Adaptive Card tabs **are** deprecated in the new Microsoft Teams. If your app is using Adaptive Card tabs, we recommend you to rebuild the tab as a [web-based tab](tabs/what-are-tabs.md). * ***May 17, 2023***: [Teams Toolkit v4](toolkit/teams-toolkit-fundamentals.md) extension within Visual Studio Code **will be** deprecated. We recommend that you use Teams Toolkit v5 within Visual Studio Code for building your Teams app. |