Updates from: 03/28/2024 02:26:46
Service Microsoft Docs article Related commit history on GitHub Change details
platform Deep Link Application https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-link-application.md
Last updated 05/04/2023
Deep links are configured to perform various actions such as opening a tab, initiating an app install dialog, or browsing within the app. Use deep links in [bot](~/bots/what-are-bots.md) and [connector](~/webhooks-and-connectors/what-are-webhooks-and-connectors.md) messages to inform users about changes to your tab or its items.
-You can create a deep links for a custom app, however, if an app in the Microsoft Teams Store shares the same app ID as the custom app ID, the deep link opens the app from Teams Store instead of the custom app. You can also create a deep link to the app for mobile, after your app is approved for the Teams mobile platform. For the deep link to work on Teams iOS, you need the Apple App Store Connect Team ID. For more information, see [how to update Apple App Store Connect Team ID](../deploy-and-publish/appsource/prepare/update-apple-store-team-connect-id.md).
+You can create a deep links for a custom app. However, if an app in the Microsoft Teams Store shares the same app ID as the custom app ID, the deep link opens the app from Teams Store instead of the custom app. You can also create a deep link to the app for mobile, after your app is approved for the Teams mobile platform. For the deep link to work on Teams iOS, you need the Apple App Store Connect Team ID. For more information, see [how to update Apple App Store Connect Team ID](../deploy-and-publish/appsource/prepare/update-apple-store-team-connect-id.md).
Deep links allow users to know more about an app and install it in different scopes. You can also create deep links for your app users to go to specific pages within your app. In this article, learn how to create a deep link: * [To open application install dialog](#deep-link-to-open-application-install-dialog) * [To browse within your app](#deep-link-to-browse-within-your-app) * [To go to a chat with the application](#deep-link-to-a-chat-with-the-application)
-* [Share deep link for a tab](#share-deep-link-for-a-tab)
+* [To share deep link for a tab](#share-deep-link-for-a-tab)
* [To open a dialog (referred as task module in TeamsJS v1.x)](#deep-link-to-open-a-dialog) [!INCLUDE [sdk-include](~/includes/sdk-include.md)]
Deep links allow users to know more about an app and install it in different sco
Deep links allow app users to open an application install dialog to know more information about the app or install it in different contexts. You can create a deep link to application in the following ways:
-* [Configure deep link manually using your app ID](#configure-deep-link-manually-using-your-app-id).
-* [Configure deep link using TeamsJS library](#configure-deep-link-using-teamsjs-library).
+* [Configure deep link manually using your app ID](#configure-deep-link-manually-using-your-app-id)
+* [Configure deep link to a tab using TeamsJS](#configure-deep-link-to-a-tab-using-teamsjs)
-#### Configure deep link manually using your app ID
+### Configure deep link manually using your app ID
Here's the deep link format you need to open an app install dialog from your Teams client using app ID:
Here's the deep link format you need to open an app install dialog from your Tea
Where `<your-app-id>` is your application ID (f46ad259-0fe5-4f12-872d-c737b174bcb4).
-##### App ID used for different apps
+#### App ID for different types of apps
-Following are the different app IDs that are used for deep links:
+The following table lists the different types of app IDs used for different types of apps for deep links:
-* Custom app uploaded in Teams: Manifest ID
-* Apps submitted to org catalog: Org catalog ID. For more information, see [how to find ID based on the app manifest ID](/graph/api/appcatalogs-list-teamsapps#example-3-find-application-based-on-the-teams-app-manifest-id).
-* Apps submitted to Teams Store: Store ID
+| Type of app | Type of app ID |
+| | |
+| Custom app uploaded in Teams | Manifest ID |
+| Apps submitted to org catalog | Org catalog ID |
+| Apps submitted to Teams Store | Store ID |
-#### Configure deep link using TeamsJS library
+For more information, see [how to find ID based on the app manifest ID](/graph/api/appcatalogs-list-teamsapps#example-3-find-application-based-on-the-teams-app-manifest-id).
Applications can use TeamsJS library to initiate the app installation dialog, eliminating the need for manual deep link generation. Here's an example of how to trigger the app installation dialog using TeamsJS within your application:
if(appInstallDialog.isSupported()) {
else { /* handle case where capability isn't supported */ } ```
-For more information about the app install dialog, see the [appInstallDialog.openAppInstallDialog()](/javascript/api/@microsoft/teams-js/appinstalldialog?view=msteams-client-js-latest#@microsoft-teams-js-appinstalldialog-openappinstalldialog&preserve-view=true) function in the API reference documentation.
+For more information about the `appInstallDialog` module, see [appInstallDialog module](/javascript/api/@microsoft/teams-js/appinstalldialog?view=msteams-client-js-latest#@microsoft-teams-js-appinstalldialog-openappinstalldialog&preserve-view=true).
# [TeamsJS v1](#tab/teamsjs-v1)
microsoftTeams.executeDeepLink("https://teams.microsoft.com/l/app/<appId>");
## Deep link to browse within your app
-App users can browse through content in Teams from your tab using TeamsJS. You can use deep link to browse within your app, if your tab needs to connect users with other content in Teams, such as to a channel, message, another tab, or to open a scheduling dialog. In few instances navigation can also be accomplished using TeamsJS and it's recommended to use typed capabilities of TeamsJS wherever possible.
+App users can browse through content in Teams from your tab using TeamsJS. You can use a deep link to browse within your app if your tab needs to connect users with other content in Teams, such as to a channel, message, another tab, or to open a scheduling dialog. In few instances, navigation can also be accomplished using TeamsJS and we recommend to use typed capabilities of TeamsJS wherever possible.
-One of the benefits of using TeamsJS, particularly for Teams app that might run in other hosts (Outlook and Office), is that it's possible to check if the host supports the capability you're attempting to use. To check a host's support of a capability, you can use the `isSupported()` function associated with the namespace of the API. TeamsJS organizes APIs into capabilities by way of namespaces. For example, prior to usage of an API in the `pages` namespace, you can check the returned Boolean value from `pages.isSupported()` and take the appropriate action within the context of your app and app's UI.
+TeamsJS enables Teams apps extended across Outlook and Microsoft 365 to check if the host supports the capability you're attempting to use. To check a host's support of a capability, you can use the `isSupported()` function associated with the namespace of the API. TeamsJS organizes APIs into capabilities by way of namespaces. For example, before using an API in the `pages` namespace, you can check the returned Boolean value from `pages.isSupported()` and take the appropriate action within the context of your app and app's UI.
For more information about capabilities and the APIs in TeamsJS, see [Building tabs and other hosted experiences with the TeamsJS library](~/tabs/how-to/using-teams-client-sdk.md#apis-organized-into-capabilities).
You can configure deep links to browse within your app in the following ways:
* [Configure deep link to browse within your app manually](#configure-deep-link-to-browse-within-your-app-manually) * [Configure deep link to a tab using TeamsJS](#configure-deep-link-to-a-tab-using-teamsjs)
-#### Configure deep link to browse within your app manually
+### Configure deep link to browse within your app manually
Use the following format for a deep link in a bot, connector, or message extension card:
The query parameters are:
| `context.channelId`&emsp; | Microsoft Teams channel ID that is available from the tab [context](~/tabs/how-to/access-teams-context.md). This property is available only in configurable tabs with a scope of **team**. It isn't available in static tabs, which has a **personal** scope.| 19:<cbe3683f25094106b826c9cada3afbe0@thread.skype> | | `context.chatId`&emsp; | Chat ID that is available from the tab [context](~/tabs/how-to/access-teams-context.md) for group and meeting chat. | 17:b42de192376346a7906a7dd5cb84b673@thread.v2 | | `context.contextType`&emsp; | Chat is the only supported `contextType` for meetings. | chat |
-|`&openInMeeting=false`| `openInMeeting` is used to control the user experience when the target tab is associated with a meeting. If user interacts with the deep link in an ongoing meeting experience, by default Teams opens the app in the in-meeting side panel. Set this value to `false` to always open the app in the meeting chat tab rather than the side panel, regardless of the meeting status. Teams ignores any value other than `false`. | `false` |
+|`&openInMeeting=false`| Use `openInMeeting` to control the user experience when the target tab is associated with a meeting. If user interacts with the deep link in an ongoing meeting experience, Teams opens the app in the in-meeting side panel. Set this value to `false` to always open the app in the meeting chat tab rather than the side panel, regardless of the meeting status. Teams ignores any value other than `false`. | `false` |
> [!NOTE] >
The navigation behavior of a Teams app extended across Microsoft 365 Office is d
1. The target that the deep link points to. 1. The host where the Teams app is running.
-If the Teams app is running within the host where the deep link is targeted, your app opens directly within the host. However, if the Teams app is running in a different host from where the deep link is targeted, the app will first open in the browser.
+If the Teams app is running within the host where the deep link is targeted, your app opens directly within the host. However, if the Teams app is running in a different host from where the deep link is targeted, the app first opens in the browser.
## Deep link to a chat with the application You can allow app users browse to a personal chat with the application by configuring the deep link manually using the following format:
-`https://teams.microsoft.com/l/entity/<appId>/conversations?tenantId=<tenantId>`, where `appId` is your application ID. To know about different app IDs used see, [app ID used for different apps](#app-id-used-for-different-apps).
+`https://teams.microsoft.com/l/entity/<appId>/conversations?tenantId=<tenantId>`, where `appId` is your application ID. To know about different app IDs used see, see [App ID for different types of apps](#app-id-for-different-types-of-apps).
## Share deep link for a tab
You can share deep links to entities in Teams apps to navigate to the content an
# [TeamsJS v2](#tab/teamsjs-v2)
-To implement, add a **copy link** action to each item, in whatever way best suits your UI. When the user takes this action, call [`pages.shareDeepLink()`](/javascript/api/@microsoft/teams-js/pages?view=msteams-client-js-latest#@microsoft-teams-js-pages-sharedeeplink&preserve-view=true) to display a dialog containing a link that the user can copy to the clipboard. When you make this call, pass an ID for your item. You get it back in [context](~/tabs/how-to/access-teams-context.md) when the link is followed and your tab is reloaded.
+Add a **copy link** action to each item in whatever way best suits your UI. When the user takes this action, call [`pages.shareDeepLink()`](/javascript/api/@microsoft/teams-js/pages?view=msteams-client-js-latest#@microsoft-teams-js-pages-sharedeeplink&preserve-view=true) to display a dialog containing a link that the user can copy to the clipboard. When you make this call, pass an ID for your item. You get it back in [context](~/tabs/how-to/access-teams-context.md) when the link is followed and your tab is reloaded.
```javascript pages.shareDeepLink({ subPageId: <subPageId>, subPageLabel: <subPageLabel>, subPageWebUrl: <subPageWebUrl> })
For more information, see [pages.shareDeepLink()](/javascript/api/@microsoft/tea
# [TeamsJS v1](#tab/teamsjs-v1)
-To implement this, add a **copy link** action to each item, in whatever way best suits your UI. When the user takes this action, call `shareDeepLink()` to display a dialog containing a link that the user can copy to the clipboard. When you make this call, pass an ID for your item. You get it back in [context](~/tabs/how-to/access-teams-context.md) when the link is followed and your tab is reloaded.
+Add a **copy link** action to each item in whatever way best suits your UI. When the user takes this action, call `shareDeepLink()` to display a dialog containing a link that the user can copy to the clipboard. When you make this call, pass an ID for your item. You get it back in [context](~/tabs/how-to/access-teams-context.md) when the link is followed and your tab is reloaded.
```javascript microsoftTeams.shareDeepLink({ subEntityId: <subEntityId>, subEntityLabel: <subEntityLabel>, subEntityWebUrl: <subEntityWebUrl> })
The query parameters are:
* `entityID`: The item ID that you provided when [configuring the tab](~/tabs/how-to/create-tab-pages/configuration-page.md). For example, `tasklist123`. * `entityWebUrl`: An optional parameter with a fallback URL to use if the client doesn't support rendering of the tab - `https://tasklist.example.com/123` or `https://tasklist.example.com/list123/task456`.
-* `entityName`: A label for the item in your tab to use when displaying the deep link, `Task List 123` or `Task 456`.
+* `entityName`: A label for the item in your tab to use when displaying the deep link, such as `Task List 123` or `Task 456`.
Example: `https://teams.microsoft.com/l/entity/fe4a8eba-2a31-4737-8e33-e5fae6fee194/tasklist123?webUrl=https://tasklist.example.com/123&TaskList`
The following table provides information on `APP_ID` and `BOT_APP_ID`:
| Value | Type | Required | Description | | | | | | | `APP_ID` | string | Yes | For third-party apps, use the app `id` from manifest or the `APP_ID` from Teams admin center as they're identical. For custom apps or custom apps built for your org (LOB apps), use the `APP_ID` from Teams admin center or use the [Graph API](/graph/api/application-list). The [validDomains array](~/resources/schem#validdomains) in the manifest for `APP_ID` must contain the domain for `url` if `url` is present in the deep-link URL. The app ID is already known when a dialog is invoked from a tab or a bot, which is why it isn't included in `TaskInfo`. |
-| `BOT_APP_ID` | string | No | If a value for `completionBotId` is specified, the `result` object is sent using a `task/submit invoke` message to the specified bot. `BOT_APP_ID` must be specified as a bot in the app's manifest, which you can't send it to any bot. |
+| `BOT_APP_ID` | string | No | If a value for `completionBotId` is specified, the `result` object is sent using a `task/submit invoke` message to the specified bot. Specify `BOT_APP_ID` must be specified as a bot in the app's manifest, which you can't send it to any bot. |
> [!NOTE] > `APP_ID` and `BOT_APP_ID` can be the same in many cases, if an app has a recommended bot to use as an app's ID and if there is one.
By default, a deep link opens in a meeting side panel. To open a deep link direc
For more information, see [deep link to a tab](#configure-deep-link-to-browse-within-your-app-manually).
-Deep link doesn't open in the meeting side panel in the following scenarios:
+A deep link doesn't open in the meeting side panel in the following scenarios:
-* If there's no active meeting.
-* If the app doesn't have `sidePanel` context declared in the app manifest.
-* If `openInMeeting=false` is set in the deep link.
-* If deep link is selected outside of the meeting window or component.
-* If deep link doesn't match the current meeting for example, deep link is created from another meeting.
+* There's no active meeting.
+* The app doesn't have `sidePanel` context declared in the app manifest.
+* `openInMeeting` is set to `false` in the deep link.
+* The deep link is selected outside of the meeting window or component.
+* The deep link doesn't match the current meeting, for example, if the deep link is created from another meeting.
## Code Sample | Sample name | Description | .NET |Node.js| |-|-||-|
-|Deep link consuming Subentity ID | This sample shows how to use deep-link from bot chat to tab consuming Subentity ID. It also shows deep links for navigate to app, navigate to chat, open profile dialog and open scheduling dialog.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs)|
+| Deep link consuming Subentity ID | This sample shows how to use a deep link from a bot chat to a tab consuming the Subentity ID. It also shows deep links for:<br>- Navigating to an app<br>- Navigating to a chat<br>- Open a profile dialog<br>- Open a scheduling dialog |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs)|
platform Deep Link Teams https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-link-teams.md
Last updated 01/31/2023
You can create a deep link to a Teams chat, such as to start a new chat, go to a channel conversation, and access a file within a channel.
-In this article, youΓÇÖll learn to create a deep link:
+In this article, youΓÇÖll learn to create:
-* [To start a new chat](#deep-link-to-start-a-new-chat)
-* [To navigate to a chat](#deep-link-to-navigate-to-a-chat)
-* [To navigate to channel conversation](#deep-links-to-navigate-to-channel-conversation)
-* [To navigate to chat messages](#deep-links-to-navigate-to-chat-messages)
-* [To file in a channel](#generate-deep-links-to-file-in-a-channel)
+- [Deep link to start a new chat](#deep-link-to-start-a-new-chat)<br>
+- [Deep link to navigate to a chat](#deep-link-to-navigate-to-a-chat)<br>
+- [Deep links to navigate to channel conversation](#deep-links-to-navigate-to-channel-conversation)<br>
+- [Deep links to navigate to chat messages](#deep-links-to-navigate-to-chat-messages)<br>
+- [Generate deep links to a file in a channel](#generate-deep-links-to-a-file-in-a-channel)
## Deep link to start a new chat
You can configure deep links to start a new chat in one of the following two way
* [Configure deep link to start a chat manually](#configure-deep-link-to-start-a-chat-manually) * [Configure deep link to start a chat using TeamsJS library](#configure-deep-link-to-start-a-chat-using-teamsjs-library)
-#### Configure deep link to start a chat manually
+### Configure deep link to start a chat manually
-While use of the typed APIs is recommended, you can alternatively use the following format for a manually created deep link that you can use in a bot, connector, or message extension card. To use this deep link with your bot, specify this as the URL target in your card's button or tap action through the `openUrl` action type.
+While use of the typed APIs is recommended, you can alternatively use the following format for a manually created deep link that you can use in a bot, connector, or message extension card:
`https://teams.microsoft.com/l/chat/0/0?tenantId=<tenantId>&users=<user1>,<user2>,...&topicName=<chat name>&message=<precanned text>`
+To use this deep link with your bot, specify the deep link as the URL target in your card's button or tap action through the `openUrl` action type.
+ The query parameters are: * `users`: A comma-separated list of user IDs representing the participants of the chat. The user that performs the action is always included as a participant. Currently, the User ID parameter supports the Microsoft Entra `UserPrincipalName`, such as an email address only.
The query parameters are:
Example: `https://teams.microsoft.com/l/chat/0/0?users=joe@contoso.com,bob@contoso.com&topicName=Prep%20For%20Meeting%20Tomorrow&message=Hi%20folks%2C%20kicking%20off%20a%20chat%20about%20our%20meeting%20tomorrow`
-#### Configure deep link to start a chat using TeamsJS library
+### Configure deep link to start a chat using TeamsJS library
The following example demonstrates how to open a chat message to a group of participants with an initial message. You can target the deep link to an existing or a new chat. If a chat already exists, the deep link opens in that chat.
The query parameters are:
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`
-## Generate deep links to file in a channel
+## Generate deep links to a file in a channel
Use the following deep link format can be used in a bot, connector, or message extension card for configuring a deep link to connect to a file in a channel:
groupId: "ae063b79-5315-4ddb-ba70-27328ba6c31e"
| Sample name | Description | .NET |Node.js| |-|-||-|
-|Deep link consuming Subentity ID | This sample shows how to use deep-link from bot chat to tab consuming Subentity ID. It also shows deeplinks for navigate to app, navigate to chat, open profile dialog and open scheduling dialog.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs)|
+|Deep link consuming Subentity ID | This sample shows how to use a deep link from a bot chat to a tab consuming the Subentity ID. It also shows deep links for:<br>- Navigating to an app<br>- Navigating to a chat<br>- Open a profile dialog<br>- Open a scheduling dialog |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs)|
platform Deep Link Workflow https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-link-workflow.md
You can create a deep link to perform a specific task in Teams, such as to creat
In this article, youΓÇÖll learn to create a deep link:
-* [To start a new chat](#deep-link-to-start-a-new-chat)
-* [To open a meeting scheduling dialog](#deep-link-to-open-a-meeting-scheduling-dialog)
-* [To start an audio-video call](#deep-link-to-start-an-audio-video-call-with-users)
-* [To share content to stage in meetings](#generate-a-deep-link-to-share-content-to-stage-in-meetings)
-* [To meeting side panel](#deep-link-to-meeting-side-panel)
-* [To join a meeting](#deep-link-to-join-a-meeting)
+* [Deep link to start a new chat](#deep-link-to-start-a-new-chat)<br>
+* [Deep link to open a meeting scheduling dialog](#deep-link-to-open-a-meeting-scheduling-dialog)<br>
+* [Deep link to start an audio-video call with users](#deep-link-to-start-an-audio-video-call-with-users)<br>
+* [Generate a deep link to share content to stage in meetings](#generate-a-deep-link-to-share-content-to-stage-in-meetings)<br>
+* [Deep link to meeting side panel](#deep-link-to-meeting-side-panel)<br>
+* [Deep link to join a meeting](#deep-link-to-join-a-meeting)<br>
* [Invoke Stage View through deep link](#invoke-stage-view-through-deep-link) ## Deep link to start a new chat
The query parameters are:
* `topicName`: An optional field for chat's display name if a chat has three or more users. If this field isn't specified, the chat's display name is based on the names of the participants. * `message`: An optional field for the message text that you want to insert into the current user's compose box while the chat is in a draft state.
-To use this deep link with your bot, specify the deep link as the URL target in your card's button or tap action through the `openUrl` action type. Apps can also use Teams JavaScript library 2.0 to create this without having to manually prepare the deep link. Following is an example using Microsoft Teams JavaScript client library (TeamsJS):
+To use this deep link with your bot, specify the deep link as the URL target in your card's button or tap action through the `openUrl` action type. Apps can also use Teams JavaScript client library (TeamsJS) v.2.0 or later to create this without having to manually prepare the deep link. The following example uses TeamsJS to check if chat capability is supported:
```javascript if(chat.isSupported()) {
else { /* handle case where capability isn't supported */ }
## Deep link to open a meeting scheduling dialog
-You can create deep link in your Teams apps to open a meeting scheduling dialog and provide information, such as meeting title and participants. To do this, use one of the following methods:
+You can create deep link in your Teams apps to open a meeting scheduling dialog and provide information, such as meeting title and participants using the following methods:
* [Configure deep link manually to open a meeting scheduling dialog](#configure-deep-link-manually-to-open-a-meeting-scheduling-dialog) * [Configure deep link using TeamsJS library to open a meeting scheduling dialog](#configure-deep-link-using-teamsjs-library-to-open-a-meeting-scheduling-dialog)
-While it's recommended to use the typed APIs of TeamsJS, it's possible to manually create deep links to the Teams built-in scheduling dialog.
+While we recommend the use of typed APIs of TeamsJS, it's possible to manually create deep links to the Teams built-in scheduling dialog.
#### Configure deep link manually to open a meeting scheduling dialog
Example: `https://teams.microsoft.com/l/meeting/new?subject=test%20subject&atten
#### Configure deep link using TeamsJS library to open a meeting scheduling dialog
-You can also use TeamsJS library 2.0 in your Teams app to open the meeting scheduling dialog without having to manually prepare the link. In order to open the scheduling dialog in Teams, you must continue using the original deep-link URL based method, as Teams doesn't support the calendar capability yet:
+You can also use TeamsJS v.2.0 or later in your Teams app to open the meeting scheduling dialog without having to manually prepare the link. In order to open the scheduling dialog in Teams, you must continue using the original deep-link URL based method, as Teams doesn't support the calendar capability yet:
# [TeamsJS v2](#tab/teamsjs-v2)
For more information about working with the calendar, see [calendar](/javascript
## Deep link to start an audio-video call with users
-You can configure your Teams apps to prepare a deep link for users to start one-on-one call, a group call, or video call. You can invoke audio only or audio-video calls to a single user or a group of users by specifying the call type and the participants. Before placing the call, Teams client prompts for a confirmation to make the call. If there's a group call, you can call a set of VoIP users and a set of PSTN users in the same deep link invocation.
+You can configure your Teams apps to prepare a deep link for users to start one-on-one call, a group call, or video call. You can invoke audio only or audio-video calls to a single user or a group of users by specifying the call type and the participants. Before Teams places the call, the client prompts for a confirmation. If there's a group call, you can call a set of VoIP and PSTN users in the same deep link invocation.
In a video call, the Teams client asks for confirmation before turning on the caller's video for the call. The receiver of the call has a choice to respond through audio only or audio and video, through the Teams call notification window.
You can configure deep links in one of the following two ways:
#### Configure deep link manually to start audio-video call with users
-While the use of the typed APIs of TeamsJS library is recommended, you can also use a manually configured deep link to start a call. Refer to the following formats:
+While we recommend the use of the typed APIs of TeamsJS v.2.0 or later, you can also use a manually configured deep link to start a call. Refer to the following formats:
| Deep link | Format | Example |
-|--|--||
+| | | |
| Make an audio call | `https://teams.microsoft.com/l/call/0/0?users=<user1>,<user2>` | `https://teams.microsoft.com/l/call/0/0?users=joe@contoso.com` | | Make an audio and video call | `https://teams.microsoft.com/l/call/0/0?users=<user1>,<user2>&withVideo=true` | `https://teams.microsoft.com/l/call/0/0?users=joe@contoso.com&withVideo=true` |
-|Make an audio and video call with an optional parameter source | `https://teams.microsoft.com/l/call/0/0?users=<user1>,<user2>&withVideo=true&source=demoApp` | `https://teams.microsoft.com/l/call/0/0?users=joe@contoso.com&withVideo=true&source=demoApp` |
+| Make an audio and video call with an optional parameter source | `https://teams.microsoft.com/l/call/0/0?users=<user1>,<user2>&withVideo=true&source=demoApp` | `https://teams.microsoft.com/l/call/0/0?users=joe@contoso.com&withVideo=true&source=demoApp` |
| Make an audio and video call to a combination of VoIP and PSTN users | `https://teams.microsoft.com/l/call/0/0?users=<user1>,4:<phonenumber>` | `https://teams.microsoft.com/l/call/0/0?users=joe@contoso.com,4:9876543210` | Following are the query parameters:
-* `users`: A comma-separated list of user IDs representing the participants of the call. The user ID field supports the Microsoft Entra `UserPrincipalName`, typically an email address, or in a PSTN call, it supports a pstn mri 4:&lt;phonenumber&gt;.
+* `users`: A comma-separated list of user IDs representing the participants of the call. The user ID field supports the Microsoft Entra `UserPrincipalName`, typically an email address, or in a PSTN call, it supports a PSTN MRI 4:&lt;phonenumber&gt;.
* `withVideo`: An optional parameter, which you can use to make a video call. Setting this parameter only turns on the caller's camera. The receiver of the call has a choice to answer through an audio or an audio and video call through the Teams call notification window. #### Configure deep link using TeamsJS library to start audio-video call with users
-Applications can also use TeamsJS library 2.0 to start calls without having to manually prepare these deep links.
-The following code demonstrates using the TeamsJS library to start a call:
+Applications can also use TeamsJS v.2.0 or later to start calls without having to manually prepare these deep links.
+The following code demonstrates using TeamsJS to start a call:
```javascript if(call.isSupported()) {
For more information, see [deep link to a tab](~/concepts/build-and-test/deep-li
Deep link doesn't open in the meeting side panel in the following scenarios:
-* If there's is no active meeting.
-* If the app doesn't have `sidePanel` context declared in the app manifest.
-* If `openInMeeting=false` is set in the deep link.
-* If deep link is selected outside of the meeting window or component.
-* If deep link doesn't match the current meeting for example, deep link is created from another meeting.
+* There's no active meeting.
+* The app doesn't have `sidePanel` context declared in the app manifest.
+* `openInMeeting` is set to `false` in the deep link.
+* The deep link is selected outside of the meeting window or component.
+* The deep link doesn't match the current meeting, such as a deep link created in another meeting.
## Deep link to join a meeting
-Teams app can read the URL for joining a meeting URL through Graph APIs. This deep link brings up the UI for the user to join the meeting. For more information see, [Get `onlineMeeting`](/graph/api/onlinemeeting-get#response-1) and [Get meeting details](~/apps-in-teams-meetings/meeting-apps-apis.md#get-meeting-details-api)
+Teams app can read the URL for joining a meeting URL through Graph APIs. This deep link brings up the UI for the user to join the meeting. For more information, see [Get `onlineMeeting`](/graph/api/onlinemeeting-get#response-1) and [Get meeting details](~/apps-in-teams-meetings/meeting-apps-apis.md#get-meeting-details-api).
## 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. The deep link can also be passed through an `OpenURL` action in the card. For more information see, [Stage View](~/tabs/tabs-link-unfurling.md#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. The deep link can also be passed through an `OpenURL` action in the card. For more information, see [Stage View](~/tabs/tabs-link-unfurling.md#invoke-stage-view-through-deep-link).
## Code Sample | Sample name | Description | .NET |Node.js| |-|-||-|
-|Deep link consuming Subentity ID | This sample shows how to use deep-link from bot chat to tab consuming Subentity ID. It also shows deep links for navigate to app, navigate to chat, open profile dialog and open scheduling dialog.|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp)|[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs)|
+|Deep link consuming Subentity ID | This sample shows how to use a deep link from a bot chat to a tab consuming the Subentity ID. It also shows deep links for:<br>- Navigating to an app<br>- Navigating to a chat<br>- Open a profile dialog<br>- Open a scheduling dialog | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/csharp) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/tab-deeplink/nodejs) |
platform Deep Links Execution Handling https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-links-execution-handling.md
You can configure your app to post messages to a chat and add deep links to them
When you add a deep link to a hyperlinked Markdown text message, it's triggered and opened within Teams. Following is an example:
-Example: `[App](https://teams.microsoft.com/l/app/{appId})`, where `appId` is your application ID. To know more about different app IDs used see, [app ID used for different apps](~/concepts/build-and-test/deep-link-application.md#app-id-used-for-different-apps).
+Example: `[App](https://teams.microsoft.com/l/app/{appId})`, where `appId` is your application ID. To know more about different app IDs used see, [App ID for different types of apps](deep-link-application.md#app-id-for-different-types-of-apps).
For more information, see [use Markdown formatting in Teams](https://support.microsoft.com/en-us/office/use-markdown-formatting-in-teams-4d10bd65-55e2-4b2d-a1f3-2bebdcd2c772).
For more information, see [use Markdown formatting in Teams](https://support.mic
When you add a deep link to a raw text message, it's triggered and opened within Teams. Following is an example:
-Example: `https://teams.microsoft.com/l/app/{appId}`, where `appId` is your application ID. To know more about different app IDs used see, [app ID used for different apps](~/concepts/build-and-test/deep-link-application.md#app-id-used-for-different-apps).
-
+Example: `https://teams.microsoft.com/l/app/{appId}`, where `appId` is your application ID. To know more about different app IDs used see, [App ID for different types of apps](deep-link-application.md#app-id-for-different-types-of-apps).
### Adaptive Card
-You can include an `openURL` action in an Adaptive Card and add a deep link to it. The deep link is executed within Teams. As raw links or hyperlinks in an Adaptive Card open in the browser, it's recommended that you use `openURL` action. For more information, see [Action.OpenUrl](https://adaptivecards.io/explorer/Action.OpenUrl.html).
+You can include an `openURL` action in an Adaptive Card and add a deep link to it. The deep link is executed within Teams. As raw links or hyperlinks in an Adaptive Card open in the browser, we recommend that you use `openURL` action. For more information, see [Action.OpenUrl](https://adaptivecards.io/explorer/Action.OpenUrl.html).
Following is an example Adaptive Card payload:
When a deep link to a tab app is triggered, ensure that all parameters are set i
When Teams navigates to the tab through a deep link, Teams verifies if the subpage ID exists and retrieves it through the TeamsJS library.
-If the tab is navigated through a deep link, the [`app.getContext()`](/javascript/api/@microsoft/teams-js/app?view=msteams-client-js-latest#@microsoft-teams-js-app-getcontext&preserve-view=true) calls `microsoftTeams.getContext()` to verify if the subpage ID exists. In TeamsJS v2 library subpage ID is named as `subPageId` and in v1 it's `subEntityId`. For more information, see [PageInfo interface](/javascript/api/@microsoft/teams-js/app?view=msteams-client-js-latest#@microsoft-teams-js-app-pageinfo&preserve-view=true).
+If the tab is navigated through a deep link, the [`app.getContext()`](/javascript/api/@microsoft/teams-js/app?view=msteams-client-js-latest#@microsoft-teams-js-app-getcontext&preserve-view=true) calls `microsoftTeams.getContext()` to verify if the subpage ID exists. In TeamsJS v2 library, the subpage ID is named as `subPageId`, and in v1, it's `subEntityId`. For more information, see [PageInfo interface](/javascript/api/@microsoft/teams-js/app?view=msteams-client-js-latest#@microsoft-teams-js-app-pageinfo&preserve-view=true).
platform Deep Links https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/deep-links.md
Title: Deep links overview
-description: Learn how to create deep links and navigate using them in your Microsoft Teams apps with tabs.
-
+description: Learn how to configure Microsoft Teams deep links, types of deep links, and protocol handlers in deep links.
+ ms.localizationpriority: high Last updated 04/13/2023 # Configure deep links
-Deep links function as URLs that direct users straight to specific content within an app thereby eliminating the need to navigate through several screens. In Microsoft Teams, you can use deep links to go to a specific chat, message, or tab within an app. You can also use deep links to initiate a new chat or call and share content during a meeting.
+Deep links function as URLs that direct users straight to specific content within an app, thus eliminating the need to navigate through several screens. In Microsoft Teams, you can use deep links to go to a specific chat, message, or tab within an app. You can also use deep links to initiate a new chat or call and share content during a meeting.
You can use deep links in Teams in the following ways: * Deep link to an app.- * Deep link to a chat.- * Deep link to a workflow. * **Deep link to an app**: Use a deep link to browse through the contents within a tab and open an app install dialog. For example, your app can have a bot that sends messages notifying the user of an important activity. When the user selects the notification, the deep link navigates to the tab where the user can view more details about the activity.
You can use deep links in Teams in the following ways:
:::image type="content" source="~/assets/images/deeplink-chat.gif" alt-text="Graphical representation shows the user experience of deep links in chat.":::
-* **Deep link to a workflow**: Use a deep link to create a new chat, open a scheduling dialog, or navigate to an audio-video call. App users can benefit from an improved app experience by utilizing simplified or automated user tasks. These tasks include initiating a new chat or scheduling a meeting, which are made easier by prepopulating the deep links with necessary parameters.
+* **Deep link to a workflow**: Use a deep link to create a new chat, open a scheduling dialog, or navigate to an audio-video call. App users can benefit from an improved app experience by utilizing simplified or automated user tasks. These tasks include initiating a new chat or scheduling a meeting that can be made easier by prepopulating the deep links with necessary parameters.
For more information, see [deep link to a workflow](~/concepts/build-and-test/deep-link-workflow.md). :::image type="content" source="~/assets/images/deeplink-schedule.gif" alt-text="Graphical representation shows the user experience of deep links to launch a meeting scheduling dialog.":::
-You can use the Microsoft Teams JavaScript client library (TeamsJS) to navigate within your tab. For scenarios such as navigating to content and information or launching a chat dialog. The TeamsJS typed APIs provide an improved experience and are recommended for Teams apps that might run in Outlook or Microsoft 365 apps. They also provide a way to check that the capability used is supported by the host.
-
-<! TBD: Edit this article.
-* Admonitions/alerts seem to be overused.
-* An important alert at the end of this table does not make sense. Also, it has a code snippet inside it.
-* List items in the table are not formatted well in output.
-* Some headings use -ing verbs.
-* Example values and some URLs should be in backticks and not emphasized.
-* Codeblock are missing language.
-* Check for markdownlint errors.
-* Table with just a row isn't really needed. Provide the content without tabulating it.
->
+You can use the Microsoft Teams JavaScript client library (TeamsJS) to navigate within your tab. For scenarios such as navigating to content and information or launching a chat dialog, the TeamsJS typed APIs provide an improved experience. We recommend using TeamsJs typed APIs for Teams apps that might run in Outlook or Microsoft 365 apps. They also provide a way to check if the host supports the capability used.
+
+## Protocol handlers in deep links
+
+Teams deep links support two types of protocol handlers:
+
+1. **HTTPS**: The `https://` protocol handler is the default handler in most URLs. Using this protocol handler in a Teams deep link opens it in a browser window that gives you three options:
+ 1. Open the deep link in the Teams desktop client if it's installed
+ 2. Download the Teams desktop client if it's not installed
+ 3. Open the deep link in the Teams web client
+
+ :::image type="content" source="../../assets/images/deep-link-open.png" alt-text="Screenshot shows a deep link opened in a browser.":::
+
+ > [!NOTE]
+ > A deep link must start with `https://teams.microsoft.com/l/` to ensure that it's handled correctly by Teams. Teams URLs copied from the browser's address bar don't work as deep links in the new Teams client.
+
+2. **MSTEAMS**: The `msteams://` protocol handler skips the client selection screen in the browser and opens the deep link directly in the Teams desktop client. Users who don't have the Teams desktop client might not be able to access deep links with `msteams://`. Always use `https://` in deep links unless you're certain that your app's users have the desktop client on their device.
+
+ > [!CAUTION]
+ > Don't append `msteams:` to a `https://` deep link such as `msteams:https://teams.microsoft.com/l/call/0/0` as Teams can't parse this deep link as a valid URL object.
+
+## See also
+
+* [Integrate web apps](../../samples/integrate-web-apps-overview.md)
+* [Deep link to an application](deep-link-application.md)
+* [Deep link to Teams chat](deep-link-teams.md)
+* [Deep link to a workflow in Teams](deep-link-workflow.md)
platform Share To Teams From Personal App Or Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/concepts/build-and-test/share-to-teams-from-personal-app-or-tab.md
The following image shows the Share to Teams option:
:::image type="content" source="../../assets/images/share-to-teams/share-button.PNG" alt-text="share-to-teams-button":::
+Share to Teams button can be hosted or embedded in an app running inside Teams. You can add Share to Teams button to the app created by using [Teams JavaScript client library](../../tabs/how-to/using-teams-client-library.md).
+
+> [!NOTE]
+> Share to Teams isn't supported inside a [modal dialog](~/task-modules-and-cards/what-are-task-modules.md) (referred as task modules in TeamsJS v1.x) or [Stage View](~/tabs/tabs-link-unfurling.md#stage-view) in Teams web client. You can't open a modal on top of another modal.
+ ## Response codes The following table provides the response codes:
The following table provides the response codes:
| **9000** | Platform code is old and doesn't implement this API. | | **10000** | The return value is too large and has exceeded our size boundaries. |
-## Limitations
-
-* The Share to Teams button can be hosted or embedded in an app running inside Teams.
-* You can add Share to Teams button to the app created by using [Teams JavaScript client library](../../tabs/how-to/using-teams-client-library.md).
- ## End user Share to Teams experience After you enable Share to Teams button on personal app or tab, you can share the content. To access, follow the steps:
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.
**2024 March**
+* ***March 27, 2024***: [Configure Teams deep links using the msteams:// and https:// protocol handlers.](concepts/build-and-test/deep-links.md#protocol-handlers-in-deep-links)
* ***March 26, 2024***: [Adaptive Cards resposive layout helps you to design cards to look great on any device in order to provide an enhanced user experience across chat, channels, and meeting chat.](task-modules-and-cards/cards/cards-format.md#adaptive-card-responsive-layout) * ***March 07, 2024***: [Introduced Adaptive Card Previewer to view the realtime changes for Visual Studio 2022.](concepts/build-and-test/adaptive-card-previewer-vs.md) * ***March 07, 2024***: [Introduced Teams App Test Tool that streamlines the debug process of bot-based apps for Visual Studio 2022.](toolkit/toolkit-v4/debug-your-Teams-app-test-tool-vs.md)