Service | Microsoft Docs article | Related commit history on GitHub | Change details |
---|---|---|---|
platform | Deep Link Teams | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-link-teams.md | Use the following deep link format to navigate a user to a message in a personal `https://teams.microsoft.com/l/message/{chatId}/{messageId}?tenantId=<tenantId>?context={"contextType":"chat"}` -Example: `https://teams.microsoft.com/l/message/19:253f5895-9a62-4362-8d38-43f0205c702c_f1b94dcf-0aa3-4989-bcdf-ef4a5ed00f86@unq.gbl.spaces/1563480968434?context=%7B%22contextType%22:%22chat%22%7D` - The query parameters are: * `chatId`: Chat ID of the conversation. The supported format for `chatId` is 19: xxx. For example, `19:253f5895-9a62-4362-8d38-43f0205c702c_f1b94dcf-0aa3-4989-bcdf-ef4a5ed00f86@unq.gbl.spaces`.</br> The query parameters are: * `messageId`: Unique message ID of each message in a chat. When a bot posts a message in chat, the `messageId` is returned. You can also get the `messageId` through [Microsoft Graph APIs](/graph/api/message-get?view=graph-rest-1.0&tabs=http&preserve-view=true). For example, `1563480968434`. * `context`: Specify the contextType as chat. -Example: `http://teams.microsoft.com/l/message/19:253f5895-9a62-4362-8d38-43f0205c702c_f1b94dcf-0aa3-4989-bcdf-ef4a5ed00f86@unq.gbl.spaces/1563480968434?context=%7B%22contextType%22:%22chat%22%7D` +Example: `https://teams.microsoft.com/l/message/19:253f5895-9a62-4362-8d38-43f0205c702c_f1b94dcf-0aa3-4989-bcdf-ef4a5ed00f86@unq.gbl.spaces/1563480968434?context=%7B%22contextType%22:%22chat%22%7D` ++You can start a conversation with a bot using a prepopulated message through a deep link. Use the bot ID prefixed with `28:` in place of an email address. The format of the deep link is: ++`https://teams.microsoft.com/l/chat/0/0?users=28:[bot guid]&message=This%20message%20was%20triggered%20by%20a%20link!` ++The query parameter is `bot guid`, which is the bot ID attribute in the app manifest. ++Example: `https://teams.microsoft.com/l/chat/0/0?users=28:47345678-2134-6534-9143-65146789012&message=This%20message%20was%20triggered%20by%20a%20link!` ++The deep link provided only loads the message into the chat text box of the bot, and doesn't send the message automatically. To send the message, you must either select the **Send** button or select **Enter**. ## Deep link to navigate to a team |
platform | Cards Loop Component | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/m365-apps/cards-loop-component.md | Title: Adaptive Card-based Loop Component -description: In this module, learn how to build and test Adaptive Card-based Loop components for collaborative experiences within Microsoft Teams. + Title: Loop Component in Adaptive Cards +description: Learn how to build and test Adaptive Card-based Loop components for collaborative experiences within Microsoft Teams. ms.localizationpriority: high Previously updated : 01/26/2024 Last updated : 10/11/2024 # Adaptive Card-based Loop components > [!NOTE]-> Adaptive Card-based Loop components require Adaptive Cards version 1.6 or later. +> +> * Adaptive Card-based Loop components require Adaptive Card schema version 1.6 or later. +> * Adaptive Card-based Loop components aren't available in Microsoft Teams and Microsoft Outlook on macOS and mobile clients. -Adaptive Card-based Loop components enable you to build collaborative experiences within your Microsoft Teams [message extensions](../messaging-extensions/what-are-messaging-extensions.md) that work across Microsoft 365. Adaptive Card-based Loop components have actionable content that enables users to make live updates without having to switch context between Microsoft 365 apps, such as Teams and Outlook. --[Loop components](https://support.microsoft.com/office/first-things-to-know-about-loop-components-in-microsoft-teams-ee2a584b-5785-4dd6-8a2d-956131a29c81) were first released in Teams followed by other Microsoft 365 apps such as Outlook, Whiteboard, and Loop app. Loop components allow users to collaborate and share live content with others in the chat, email, meeting, Whiteboard or Loop app. Because Loop components stay in sync across different Microsoft 365 apps, they enable users to coauthor content and make real-time updates on their content. For more information, see [overview of Loop components in the Microsoft 365 ecosystem](/microsoft-365/loop/loop-components-teams). +Adaptive Card-based Loop components enable you to build collaborative experiences within your Teams message extensions that work across Microsoft 365. Adaptive Card-based Loop components have actionable content that enables users to make live updates without having to switch contexts between Microsoft 365 apps, such as Teams and Outlook. Following is an example of an Adaptive Card-based Loop component: -This article provides an overview of how to build and test your Adaptive Card-based Loop components. +## Build an Adaptive Card-based Loop component -## Prerequisites +To build an Adaptive Card-based Loop component, follow these steps: -Before you build an Adaptive Card-based Loop component, ensure that you meet the following prerequisites: +1. [Build a message extension with a search command](../sbs-gs-msgext.yml). -1. [Build a message extension with a search command](../messaging-extensions/what-are-messaging-extensions.md). +1. Add [link unfurling](../messaging-extensions/how-to/link-unfurling.md) to the message extension. -1. Add [link unfurling](../messaging-extensions/how-to/link-unfurling.md) support to the message extension. +1. Use [Universal Actions for Adaptive Cards](../task-modules-and-cards/cards/Universal-actions-for-adaptive-cards/Work-with-Universal-Actions-for-Adaptive-Cards.md) and define the `refresh` property to ensure that the card is always up to date. For more information, see [up-to-date cards](../task-modules-and-cards/cards/Universal-actions-for-adaptive-cards/Up-To-Date-Views.md). -1. Use [Universal Actions for Adaptive Cards](../task-modules-and-cards/cards/Universal-actions-for-adaptive-cards/Work-with-Universal-Actions-for-Adaptive-Cards.md). +1. [Extend your message extension across Microsoft 365](extend-m365-teams-message-extension.md#prerequisites). This step includes the following actions: + 1. Update your app manifest to version 1.13 or later. + 1. Add the Microsoft 365 channel for your bot. + 1. Update the Microsoft Entra app registration for single sign-on (SSO). -1. [Extend your Teams message extension across Microsoft 365](extend-m365-teams-message-extension.md). +1. Add the URL that uniquely identifies the card in the [metadata.webUrl](https://adaptivecards.io/explorer/Metadata.html) property. The `metadata.webUrl` property supports portability through the **Copy component** button :::image type="icon" source="../assets/icons/copy-component-button.png" border="false"::: present in the Loop component header. -## Build Adaptive Card-based Loop component +1. [Add your message extension to Teams](extend-m365-teams-message-extension.md#upload-your-custom-app-in-teams) and [preview your message extension in Outlook](extend-m365-teams-message-extension.md#preview-your-message-extension-in-outlook). Alternatively, you can also debug your app in [Developer Portal for Teams](../concepts/build-and-test/teams-developer-portal.md) using the **Preview in Teams** button on the **Overview** page. -To build the Adaptive Card-based Loop component, follow these steps: + :::image type="content" source="../assets/images/developer-portal-overview.png" alt-text="A screenshot of Developer Portal's overview page with the Preview in Teams button highlighted in red. " lightbox="../assets/images/developer-portal-overview.png"::: -1. Ensure that the Adaptive Card adheres to the [design guidelines](design-loop-components.md) to build an actionable and coherent Adaptive Card-based experience for your end users. -1. To enable Loop component, add the URL that uniquely identifies the card in the [metadata.webUrl](https://adaptivecards.io/explorer/Metadata.html) property in the [Adaptive Card schema](https://adaptivecards.io/explorer/). The `metadata.webUrl` property supports portability through the Copy button present in the Loop component header. +> [!NOTE] +> Ensure that the Adaptive Card-based Loop component adheres to the [design guidelines](design-loop-components.md) to build an actionable and coherent Adaptive Card-based experience for your users. ### Example -The following is a JSON example of an Adaptive Card-based Loop component with the `metadata` and `webUrl` properties: +The following JSON payload is an example of an Adaptive Card-based Loop component with the `metadata` and `webUrl` properties: ```json { The following is a JSON example of an Adaptive Card-based Loop component with th "metadata": { "webUrl": "https://contoso.com/tab" },+ "refresh": { + "action": { + "type": "Action.Execute", + "title": "Submit", + "verb": "personalDetailsCardRefresh" + }, + "userIds": [] + }, "body": [ { .... The following is a JSON example of an Adaptive Card-based Loop component with th } ``` -### Query parameters --|Property|Type|Description|Required| -||||| -| `metadata`| Metadata | Defines various metadata properties typically not used for rendering the card. | No | -| `webUrl` | String | URL that uniquely identifies the card and serves as a browser fallback that can be used by some hosts.| No | --## Test your Loop component --You can test the Loop component in the developer environments of Teams and Outlook for web. +### Schema -### Test in Microsoft Teams +|Property|Type|Description| +|||| +| `metadata`| Metadata | Defines various metadata properties typically not used for rendering the card. | +| `webUrl` | String | URL that uniquely identifies the card and serves as a browser fallback that can be used by some hosts. | -To configure, distribute, and manage your application use the [Developer Portal for Teams](../concepts/build-and-test/teams-developer-portal.md). You can test and debug your app in the Developer Portal using the following options: --* **Overview page**: On the **Overview page**, under **Teams store validation**, you can see a snapshot of your app's configuration and check if your app package validates against Microsoft Teams Store test cases. -* **Preview in Teams**: The **Preview in Teams** button launches your app quickly in the Teams client for debugging. ---### Test in Outlook for web --To turn on the Adaptive Card-based Loop component in Outlook for web, follow these steps: --1. Create a search-based message extension using [Teams App Camp](https://microsoft.github.io/app-camp/). -1. [Create a Microsoft 365 developer tenant](https://developer.microsoft.com/microsoft-365/dev-program) or sign in with your test tenant credentials. --The Adaptive Card generated by your app is rendered as a Loop component. +> [!NOTE] +> +> * When you copy an Adaptive Card-based Loop component, the URL of the Loop component is copied. When you paste the URL in a Teams chat or the Loop app, the link unfurls into the Adaptive Card-based Loop component. +> * Adaptive Card-based Loop components use the same [refresh mechanism](/adaptive-cards/authoring-cards/universal-action-model#refresh-mechanism) as regular Adaptive Cards. The content in an Adaptive Card-based Loop component is refreshed only when a user opens the Loop component. ## Code sample |**Sample name** | **Description** | **Node.js** | **.NET** | **Manifest** | |-|--|--|--|--|-| Message extension with Adaptive Card-based Loop Component | This sample demonstrates how to create a message extension with Adaptive Card-based Loop component.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-unfurling-ac-loop-components/nodejs)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-unfurling-ac-loop-components/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/msgext-unfurling-ac-loop-components/nodejs/demo-manifest/msgext-unfurling-ac-loop-components.zip) | +| Message extension with Adaptive Card-based Loop component | This sample demonstrates how to create a message extension with an Adaptive Card-based Loop component.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-unfurling-ac-loop-components/nodejs)| [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/msgext-unfurling-ac-loop-components/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/blob/main/samples/msgext-unfurling-ac-loop-components/nodejs/demo-manifest/msgext-unfurling-ac-loop-components.zip) | ## See also -[Design your Loop component](design-loop-components.md) +* [Build message extensions](../messaging-extensions/what-are-messaging-extensions.md) +* [Design your Loop component](design-loop-components.md) +* [Adaptive Cards Schema Explorer](https://adaptivecards.io/explorer/) |
platform | Design Loop Components | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/m365-apps/design-loop-components.md | Title: Loop Component Key Features -description: Learn how to design Adaptive Card-based Loop components, its key features, loop component elements, body, header, and border. +description: Learn how to design Adaptive Card-based Loop components, its key features, and the various elements, such as the body, header, and border. Previously updated : 01/26/2024 Last updated : 10/11/2024 ms.localizationpriority: medium ms.localizationpriority: medium # Loop component design guidelines -Microsoft Loop components are live, actionable units of productivity that stay in sync and move freely across Microsoft 365 apps. It includes the capability for you to create Loop components by evolving an existing Adaptive Card into a Loop component or creating a new Adaptive Card-based Loop component. +Microsoft Loop components are live, actionable units of productivity that stay in sync and move freely across Microsoft 365 apps. They allow users to share live content and collaborate with others in Microsoft Teams chats and meetings, Microsoft Outlook emails, Microsoft Whiteboard, or Loop app. You can create Loop components by either updating an existing Adaptive Card into a Loop component or creating a new Adaptive Card-based Loop component. ++Loop components were first released in Teams followed by other Microsoft 365 apps such as Outlook, Whiteboard, and Loop app. For more information, see [overview of Loop components in the Microsoft 365 ecosystem](/microsoft-365/loop/loop-components-teams). ## Loop component key features -**Live**: Your Adaptive Card must be self-updating when the card is loaded, such as when opening an email or chat, to reflect the latest information. +The following table lists the key features of a Loop component: -**Embedded**: Adaptive Cards are embedded, so there's nothing specific needed from you. +| Feature | Description | +||| +| Live | The latest information is populated in the card. If there are multiple instances, they remain in sync as updates are made. | +| Embedded | Cards can be placed into documents and conversations that are separate from the rest of the content. | +| Actionable | Tasks can be completed inline. | +| Portable | Components can work across the Microsoft 365 app that supports Loop components. | -**Actionable**: Loop components allow the user to take action to complete a flow within the component itself; beyond simply viewing information or opening a browser. If your Adaptive Card is a view-only experience, look for opportunities to make it actionable, as this is a core card element to delight users. Ensure that an Adaptive Card with view-only experience doesn't change to a Loop component, in this case, it must remain an Adaptive Card only. +* **Live**: Your Adaptive Card must be self-updating when the card is loaded, such as when opening an email or chat, to reflect the latest information. - > [!NOTE] - > Certain user permissions or modes of your component might not be actionable, but the common cases must be actionable. +* **Embedded**: Adaptive Cards are embedded, so there's nothing specific needed from you. -You can make your Adaptive Card actionable by including any of the following actions: +* **Actionable**: Loop components allow the user to take action to complete a flow within the component itself; beyond simply viewing information or opening a browser. If your Adaptive Card is a view-only experience, look for opportunities to make it actionable, as this is a core card element to delight users. Ensure that an Adaptive Card with view-only experience doesn't change to a Loop component, in this case, it must remain an Adaptive Card only. -* Approve an expense report -* Add a comment -* Update a date -* Update price, such as dollar amount -* Change an assignment or status value -* Add or update data + > [!NOTE] + > Certain user permissions or modes of your component might not be actionable, but the common cases must be actionable. -**Portable**: Adding the URL attribute as required in the developer guidance ensures that your component can be live-copied anywhere the Adaptive Card-based Loop component is supported. + You can make your Adaptive Card actionable by including any of the following actions: -|Property|Function| -||| -|Live| The latest information is populated in the card. If there are multiple instances, they remain in sync as updates are made. | -|Embedded | Cards can be placed into documents and conversations that are separate from the rest of the content. | -| Actionable | Tasks can be completed inline. | -| Portable | Components can work across the Microsoft 365 app that supports Loop components. | + * Approve an expense report + * Add a comment + * Update a date + * Update price, such as dollar amount + * Change an assignment or status value + * Add or update data ++* **Portable**: Adding the URL attribute as required in the developer guidance ensures that your component can be live-copied anywhere the Adaptive Card-based Loop component is supported. ## Loop component elements An Adaptive Card-based Loop component comprises of the body, header, and border. |Loop component element |Developer provides |Platform provides | |||| |**Body** | Contents fully controlled by you | Rendering and styling of controls based on your code. |-| **Header** | Icon and name | Elements and layout are standard and provided by platform | +| **Header** | Icon and name | Elements and layout are standard and provided by platform. | |**Border** | NA | Standard border for all Loop components. | -## Loop component body +### Loop component body The Loop component body makes your component unique. You can give your users a positive experience and grow usage and retention by building a component that embodies the Loop component attributes and provides customer value. -The details of the component body are determined by the specifics of your usersΓÇÖ needs and scenarios. +Your usersΓÇÖ specific needs and scenarios determine the component body. :::image type="content" source="../assets/images/adaptive-cards/loop-component-body.png" alt-text="Infographic shows the UX elements of a Loop component body."::: The following are the best practices for a Loop component body: -* Go to [Adaptive Cards Home](https://adaptivecards.io) and review the [Adaptive Cards overview](/adaptive-cards/) article to understand the basics and core design principles of Adaptive Cards. +* To understand the basics and core design principles of Adaptive Cards, see [Adaptive Cards overview](/adaptive-cards/). * Follow the [Adaptive Card design guidelines](../task-modules-and-cards/cards/design-effective-cards.md), which include tools, examples, notes about responsive design, and pixel density.-* The following list provides the Loop component specific considerations: +* The following list provides the Loop component-specific considerations: * Ensure that your component is true to the Loop components attributes such as, live, actionable, embedded, and portable. * [DonΓÇÖt add a separate button to open in browser.](#dont-add-a-separate-button-to-open-in-browser) * [DonΓÇÖt add a duplicate header or border.](#dont-add-a-duplicate-header-or-border) -### DonΓÇÖt add a separate button to open in browser +#### DonΓÇÖt add a separate button to open in browser -The Loop component header provides a standard way to open a browser-based view of the component based on your URL. Thus, there's no need to add a separate button to your component for actions such as, **View Details** or **Open on Web**. +The Loop component header provides a standard way to open a browser-based view of the component based on your URL. Thus, there's no need to add a separate button to your component for actions such as **View Details** or **Open on Web**. You can add buttons or links for more specific views, for example, **View Related Items**. When possible, provide the required information and interaction within the card. -### DonΓÇÖt add a duplicate header or border +#### DonΓÇÖt add a duplicate header or border -All Loop components have a standard header and border. Ensure that your Adaptive Card code must not duplicate the header and border. You can have an item-specific title for your component but ensure that the app name and icon isn't the same. +All Loop components have a standard header and border. Ensure that your Adaptive Card code doesn't duplicate the header and border. You can have an item-specific title for your component but ensure that the app name and icon aren't the same. -## Loop component header +### Loop component header -The platform provides the component header and includes standard elements such as app logo, app name, shared location, and copy. +The platform provides the component header, which includes standard elements such as the app logo, app name, and a **Copy component** :::image type="icon" source="../assets/icons/copy-component-button.png" border="false"::: button. :::image type="content" source="../assets/images/adaptive-cards/loop-component-header.png" alt-text="Infographic shows the UX elements in a Loop component header."::: -|Counter |Description | -||| -|1 | App logo: Full color app logo of your app. | -|2 | App name: Full name of your app. | -|3 | Shared locations (Loop control) | -|4 | Copy component | +| Counter | Description | +|-|-| +| 1 | **App logo**: Full color app logo of your app | +| 2 | **App name**: Full name of your app | +| 3 | **Copy component** button :::image type="icon" source="../assets/icons/copy-component-button.png" border="false"::: | -**App name** is drawn from the component contract. We recommend to use a concise name for your app. +**App name** is defined in your app manifest. We recommend using a concise name for your app. -**App logo** is drawn from the component contract. Ensure that the logo provided works on both light and dark backgrounds since the same asset is used for light, dark, and high contrast themes in Microsoft Teams. +**App logo** is defined in your app manifest. Ensure that the logo provided works on both light and dark backgrounds since the same asset is used for light, dark, and high contrast themes in Teams. -## Loop component border +### Loop component border -The component border separates your component from the content around it. It helps users understand that the Loop component is live and separate from the contents surrounding it such as, email or chat. +The component border separates your component from the content around it. It helps users understand that the Loop component is live and separate from the contents surrounding it, such as email or chat. The border appears automatically. The border appears automatically. > [!div class="nextstepaction"] > [Adaptive Card-based Loop components](cards-loop-component.md)++## See also ++[First things to know about Loop components in Microsoft Teams](https://support.microsoft.com/office/first-things-to-know-about-loop-components-in-microsoft-teams-ee2a584b-5785-4dd6-8a2d-956131a29c81) |
platform | Overview Explore | https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/overview-explore.md | Title: Use Teams Platform to Build Apps -description: Microsoft Teams platform features for your app on desktop and mobile. Tabs, bots, messaging extension, webhook, connectors, Microsoft Graph, or Adaptive Cards. +description: Learn about Teams platform capabilities such as tabs, bots, message extensions, webhooks, connectors, Microsoft Graph, Adaptive Card, and Copilot extensibility. ms.localizationpriority: high Previously updated : 11/02/2021 Last updated : 10/11/2024 + # Explore Teams platform features With Teams, you can build your app in a feature-rich environment. Using Teams as a platform for building apps, you can extend the Teams capabilities for your desktop and mobile app solutions. Choose the best features for your app. ## Teams app features With Teams, you can build your app in a feature-rich environment. Using Teams as |Tabs | Tabs are Teams-aware webpages embedded in Microsoft Teams. You can add them as part of a channel inside a team, group chat, or personal app for an individual user. | Personal tab, channel or group tab, Stage View, and link unfurling. | | Bots | A bot, also known as a chatbot or conversational bot, has evolved with artificial intelligence to understand and respond to users in natural language for dynamic conversations. A bot interaction can be a quick question and answer, or it can be a complex conversation that provides access to services. | Customer service, content generation such as new sales presentations or code, personalized guidance for your app, complex financial analysis, and automation of tasks. | | Message extension | Message extensions let the users interact with your web service Teams client. They search or start actions in an external system. You can send the result of the interaction to the Teams client as a richly formatted card. | Reserve a resource and allow the channel to know the reserved time slot. Search for a work item, and share it with the group as an Adaptive Card. Create a bug in your tracking system based on a Teams message, assign that bug to a user, and send a card to the conversation thread with the bug's details. |-|Meeting extensions | You can create apps to make meetings more productive. | Ask people to complete a survey during a call or send a quick reminder that doesnΓÇÖt interrupt the flow of the meeting. | +| Meeting extensions | You can create apps to make meetings more productive. | Ask people to complete a survey during a call or send a quick reminder that doesnΓÇÖt interrupt the flow of the meeting. | | Personal app | A personal app is a dedicated space (tab) or bot to help users focus on their own tasks or view activities important to them. | OneNote is a personal app that gives you a private workspace within Teams. Planner offers a bird's eye view of all your tasks, across boards that you or your team have added as channel tabs. | | Webhooks and connectors | Communicate with external apps, and send or receive notifications and messages from other apps. | Subscribe to receive notifications and messages from your web services. |-| Microsoft Graph | Microsoft Graph APIs enable Teams apps to build collaborative features with the intelligence of Microsoft 365 data and engage users regularly through activity feed notifications. | Send activity feed notifications, export or import messages, get meeting transcripts and recordings, use resource-specific consent (RSC) permissions, CRUD (create, read, update, and delete) users, chats, channels, and apps. | +| Microsoft Graph | Microsoft Graph APIs enable Teams apps to build collaborative features with the intelligence of Microsoft 365 data and engage users regularly through activity feed notifications. | Send activity feed notifications, export or import messages, get meeting transcripts and recordings, use resource-specific consent (RSC) permissions, CRUD (create, read, update, and delete) users, chats, channels, and apps. | | Adaptive Card | Cards help you organize information into groups and give users the opportunity to interact with specific parts of the information. | Sharing using text and images; gathering information using input forms. | | Dialogs (referred as task modules in TeamsJS v1.x) | Dialogs permit you to create modal pop-up experiences in your Teams application. | Run your own custom HTML or JavaScript code. Show an <`iframe`>-based widget such as a YouTube or Microsoft Stream video. |+| Copilot extensibility | The ability to customize and extend Microsoft 365 Copilot with additional knowledge and skills. Copilot agents help integrate your organization's knowledge, skills, and process automation into Microsoft 365 Copilot. | Generate unique insights and automate functions such as customer support, content creation, and data analysis using data specific to your organization. | ++For more information about how to extend Microsoft 365 Copilot, see [Microsoft 365 Copilot extensibility](/microsoft-365-copilot/extensibility/). ### Extend your Teams app across Microsoft 365 If you've already built some Teams apps, you can now extend your apps across Microsoft 365 and configure them to be accessible over Outlook and Microsoft 365. ## Next step |