From 91f1a1426e650849203ef40a4dd54e36dd5eec51 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Mon, 9 Jun 2025 12:32:42 +0530 Subject: [PATCH 01/56] Update shared-channels.md Updated content for indirect membership for shared channels --- .../build-and-test/shared-channels.md | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index e5c9bb96c5f..dd47a903201 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -79,6 +79,41 @@ You can get direct shared channel membership by using the `hostTeamGroupID` from GET /teams/{host-team-group-id}/channels/{channel-id}/sharedWithTeams/{teamX}/members ``` +## Receive notifications for indirect membership changes + +A shared channel in Teams can be associated with multiple teams. Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). + +When a user joins or leaves an associated team, their access to the shared channel updates accordingly. These are indirect membership changes. + +Apps installed in shared channels can receive notifications when users gain or lose access through associated teams. This allows apps to maintain accurate access control and track user status in real time. + +### Notification behaviour + +Notifications are sent when user access changes indirectly. To receive these notifications: + +* Ensure the app is installed in the host team and enabled for the shared channel. +* Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. + +If either condition is not met, notifications are not delivered. + +### Subscription setup + +To subscribe to indirect membership updates, use the following resource URL in your Microsoft Graph subscription: + +`/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressWhenSharedUnsharedWithTeam=true` + +Subscription allows apps to monitor membership changes in shared channel and its host team. + +### Validate user access + +When a notification indicates an indirect membership update, for example, a user removed from an associated team, the app may need to validate whether the user still has access to the shared channel. + +Use the following API for validation: + + ```http + GET /DoesUserHaveAccessAsync + ``` + ## Classify members in the shared channel as in-tenant or out-tenant You can classify members as in-tenant or out-tenant by comparing `tenantID` of the member or team with `hostTeamTenantID` as follows: From b78c8516d6976b84a1a2938a93c8a3317f59cbbd Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Mon, 9 Jun 2025 13:25:20 +0530 Subject: [PATCH 02/56] Update shared-channels.md --- .../build-and-test/shared-channels.md | 49 +++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index dd47a903201..3332d73624c 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -83,11 +83,11 @@ You can get direct shared channel membership by using the `hostTeamGroupID` from A shared channel in Teams can be associated with multiple teams. Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). -When a user joins or leaves an associated team, their access to the shared channel updates accordingly. These are indirect membership changes. +When a user joins or leaves an associated team, their access to the shared channel updates accordingly. These are referred as indirect membership changes. Apps installed in shared channels can receive notifications when users gain or lose access through associated teams. This allows apps to maintain accurate access control and track user status in real time. -### Notification behaviour +### Indirect membership notification Notifications are sent when user access changes indirectly. To receive these notifications: @@ -104,9 +104,35 @@ To subscribe to indirect membership updates, use the following resource URL in y Subscription allows apps to monitor membership changes in shared channel and its host team. +### API usage for membership management + +You can manage the indirect membership using the following APIs: + +To get all current channel members: + + ```http + GET /teams/{team-id}/channels/{channel-id}/allMembers + ``` + +To get details of associated teams: + + ```http + GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams + ``` +To get details of the allowed members from a team: + + ```http + GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/ allowedMembers + ``` + +> [!NOTE] +> `allowedMembers` provided details of newly associated users. This is not applicable for unshared events. + ### Validate user access -When a notification indicates an indirect membership update, for example, a user removed from an associated team, the app may need to validate whether the user still has access to the shared channel. +When an app receives a notification for an indirect membership update, the app may need to validate user's access to the shared channel. + +For example, this occures when a user is removed from an associated team. Use the following API for validation: @@ -114,6 +140,23 @@ Use the following API for validation: GET /DoesUserHaveAccessAsync ``` +The API verifies whether the user still has access through another team or direct membership. + +### Handle bulk membership changes + +In large-scale scenarios, such as sharing a channel with a large team or removing multiple users, Microsoft Teams suppress individual notifications. + +To handle bulk membership changes: + +* Use `allMembers` to retrieve the complete updated list +* Use `allowedMembers` for delta changes (only during share operations) +* Avoid using `DoesUserHaveAccessAsync` for every user unless required +* Subscribe to shared/unshared events using supported APIs + +### RSC permissions + +Apps using resource-specific consent (RSC) must request extended scopes to support both direct and indirect membership updates. These permissions are necessary to query membership data and respond to notifications. + ## Classify members in the shared channel as in-tenant or out-tenant You can classify members as in-tenant or out-tenant by comparing `tenantID` of the member or team with `hostTeamTenantID` as follows: From 14240ed88fae5f78e255b1a7c15c828791a81fec Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Mon, 9 Jun 2025 14:08:23 +0530 Subject: [PATCH 03/56] Update shared-channels.md --- .../build-and-test/shared-channels.md | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 3332d73624c..66054bb0923 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -108,37 +108,36 @@ Subscription allows apps to monitor membership changes in shared channel and its You can manage the indirect membership using the following APIs: -To get all current channel members: +* To get all current channel members: ```http GET /teams/{team-id}/channels/{channel-id}/allMembers ``` -To get details of associated teams: +* To get details of associated teams: ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams ``` -To get details of the allowed members from a team: + +* To get details of allowed members from a team: ```http - GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/ allowedMembers + GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/ allowedMembers ``` > [!NOTE] -> `allowedMembers` provided details of newly associated users. This is not applicable for unshared events. +> The `allowedMembers` provided details of newly associated users. This is not applicable for unshared events. ### Validate user access -When an app receives a notification for an indirect membership update, the app may need to validate user's access to the shared channel. - -For example, this occures when a user is removed from an associated team. +When an app receives a notification for an indirect membership update, the app needs to validate user's access to the shared channel. For example, this occurs when a user is removed from an associated team. Use the following API for validation: - ```http - GET /DoesUserHaveAccessAsync - ``` +```http +GET /DoesUserHaveAccessAsync +``` The API verifies whether the user still has access through another team or direct membership. From 92bc6a252d4046e05c67f076115ab20188811f81 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Mon, 9 Jun 2025 20:59:37 +0530 Subject: [PATCH 04/56] Update shared-channels.md --- .../build-and-test/shared-channels.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 66054bb0923..1d5e4ad4e16 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -83,9 +83,9 @@ You can get direct shared channel membership by using the `hostTeamGroupID` from A shared channel in Teams can be associated with multiple teams. Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). -When a user joins or leaves an associated team, their access to the shared channel updates accordingly. These are referred as indirect membership changes. +When a user joins or leaves an associated team, their access to the shared channel updates accordingly. These changes are referred as indirect membership changes. -Apps installed in shared channels can receive notifications when users gain or lose access through associated teams. This allows apps to maintain accurate access control and track user status in real time. +Apps installed in shared channels can receive notifications when users gain or lose access through associated teams. It helps apps to maintain accurate access control and track user status in real time. ### Indirect membership notification @@ -108,30 +108,30 @@ Subscription allows apps to monitor membership changes in shared channel and its You can manage the indirect membership using the following APIs: -* To get all current channel members: +* Get all current channel members with GET `allMembers` API. ```http GET /teams/{team-id}/channels/{channel-id}/allMembers ``` -* To get details of associated teams: +* Get each shared team with GET `sharedWithTeams` API. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams ``` -* To get details of allowed members from a team: +* Get allowed members of each shared team with GET `allowedMembers` API. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/ allowedMembers ``` > [!NOTE] -> The `allowedMembers` provided details of newly associated users. This is not applicable for unshared events. +> The `allowedMembers` provides details of newly associated users. It is not applicable for unshared events. ### Validate user access -When an app receives a notification for an indirect membership update, the app needs to validate user's access to the shared channel. For example, this occurs when a user is removed from an associated team. +When an app receives a notification for an indirect membership update, the app needs to validate user's access to the shared channel. For example, validation occurs when a user is removed from an associated team. Use the following API for validation: @@ -152,9 +152,8 @@ To handle bulk membership changes: * Avoid using `DoesUserHaveAccessAsync` for every user unless required * Subscribe to shared/unshared events using supported APIs -### RSC permissions - -Apps using resource-specific consent (RSC) must request extended scopes to support both direct and indirect membership updates. These permissions are necessary to query membership data and respond to notifications. +> [!NOTE] +> Apps using resource-specific consent (RSC) must request extended scopes to support both direct and indirect membership updates. These permissions are necessary to query membership data and respond to notifications. ## Classify members in the shared channel as in-tenant or out-tenant From de0eaadd2c6ec2e9518782be2507c614ff3b8eba Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Tue, 10 Jun 2025 12:33:14 +0530 Subject: [PATCH 05/56] Update shared-channels.md --- .../build-and-test/shared-channels.md | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 1d5e4ad4e16..0e26848c7db 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -81,20 +81,18 @@ You can get direct shared channel membership by using the `hostTeamGroupID` from ## Receive notifications for indirect membership changes -A shared channel in Teams can be associated with multiple teams. Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). +Shared channel in Teams can be associated with multiple teams. Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). When a user joins or leaves an associated team, access to the shared channel updates accordingly. These updates are referred to as indirect membership changes. -When a user joins or leaves an associated team, their access to the shared channel updates accordingly. These changes are referred as indirect membership changes. - -Apps installed in shared channels can receive notifications when users gain or lose access through associated teams. It helps apps to maintain accurate access control and track user status in real time. +Apps installed in shared channels can receive notifications when users gain or lose access through associated teams. Receiving notifications enables apps to maintain accurate access control and track user status in real time. ### Indirect membership notification -Notifications are sent when user access changes indirectly. To receive these notifications: +Notifications are sent when user's access to shared channel changes indirectly. To receive these notifications: -* Ensure the app is installed in the host team and enabled for the shared channel. +* Install the app in the host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. -If either condition is not met, notifications are not delivered. +The app doesn't receive notifications unless both requirements are met. ### Subscription setup @@ -102,11 +100,11 @@ To subscribe to indirect membership updates, use the following resource URL in y `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressWhenSharedUnsharedWithTeam=true` -Subscription allows apps to monitor membership changes in shared channel and its host team. +This subscription allows apps to monitor membership changes in a shared channel and its associated teams. ### API usage for membership management -You can manage the indirect membership using the following APIs: +You can manage indirect membership using the following APIs: * Get all current channel members with GET `allMembers` API. @@ -127,30 +125,28 @@ You can manage the indirect membership using the following APIs: ``` > [!NOTE] -> The `allowedMembers` provides details of newly associated users. It is not applicable for unshared events. +> The `allowedMembers` API returns only newly associated users and isn't applicable for unshared events. ### Validate user access -When an app receives a notification for an indirect membership update, the app needs to validate user's access to the shared channel. For example, validation occurs when a user is removed from an associated team. - -Use the following API for validation: +When an app receives a notification for an indirect membership update, it must validate user access to a shared channel. For example, if a user is removed from a team associated with a shared channel, use the following API to determine whether the user still has access through another team or direct membership. ```http GET /DoesUserHaveAccessAsync ``` -The API verifies whether the user still has access through another team or direct membership. +The API verifies whether the user retains access to the shared chhanel. ### Handle bulk membership changes -In large-scale scenarios, such as sharing a channel with a large team or removing multiple users, Microsoft Teams suppress individual notifications. +In large-scale scenarios, such as sharing a channel with a large team or removing multiple users, Teams suppresses individual notifications to reduce volume. To handle bulk membership changes: -* Use `allMembers` to retrieve the complete updated list -* Use `allowedMembers` for delta changes (only during share operations) -* Avoid using `DoesUserHaveAccessAsync` for every user unless required -* Subscribe to shared/unshared events using supported APIs +* Use `allMembers` to retrieve the complete updated list of current members. +* Use `allowedMembers` to retrieve only newly added members during shared events. +* Avoid using `DoesUserHaveAccessAsync` for every user unless necessary. +* Subscribe to shared and unshared events using supported Microsoft Graph APIs. > [!NOTE] > Apps using resource-specific consent (RSC) must request extended scopes to support both direct and indirect membership updates. These permissions are necessary to query membership data and respond to notifications. From 560314940bc1fde4fb5c1ebcd586ec4267004343 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Tue, 10 Jun 2025 18:51:13 +0530 Subject: [PATCH 06/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 0e26848c7db..507de3a61f5 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -135,7 +135,7 @@ When an app receives a notification for an indirect membership update, it must v GET /DoesUserHaveAccessAsync ``` -The API verifies whether the user retains access to the shared chhanel. +The API verifies whether the user retains access to the shared channel. ### Handle bulk membership changes From 50788a14b308024cf0244d2d0ac27fd7e7b548d3 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Tue, 10 Jun 2025 21:49:40 +0530 Subject: [PATCH 07/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 507de3a61f5..0976403a050 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -121,7 +121,7 @@ You can manage indirect membership using the following APIs: * Get allowed members of each shared team with GET `allowedMembers` API. ```http - GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/ allowedMembers + GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers ``` > [!NOTE] From 828b89af402e0e6433adf786bd8dae1659e6760b Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Fri, 13 Jun 2025 10:14:18 +0530 Subject: [PATCH 08/56] Update shared-channels.md --- .../build-and-test/shared-channels.md | 42 +++++++------------ 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 0976403a050..aadea325468 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -73,69 +73,59 @@ You can get direct shared channel membership by using the `hostTeamGroupID` from GET /teams/{host-team-group-id}/channels/{channel-id}/sharedWithTeams ``` -3. Use GET members of each shared team (Team X) with GET `sharedWithTeams` API. +3. Use GET members of each shared team (sharewithteamsId) with GET `sharedWithTeams` API. ```http - GET /teams/{host-team-group-id}/channels/{channel-id}/sharedWithTeams/{teamX}/members + GET /teams/{host-team-group-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers ``` -## Receive notifications for indirect membership changes +## Get notifications for indirect membership changes -Shared channel in Teams can be associated with multiple teams. Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). When a user joins or leaves an associated team, access to the shared channel updates accordingly. These updates are referred to as indirect membership changes. +Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. To receive these notifications: -Apps installed in shared channels can receive notifications when users gain or lose access through associated teams. Receiving notifications enables apps to maintain accurate access control and track user status in real time. - -### Indirect membership notification - -Notifications are sent when user's access to shared channel changes indirectly. To receive these notifications: - -* Install the app in the host team and enable it for the shared channel. +* Install the app in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. -The app doesn't receive notifications unless both requirements are met. - -### Subscription setup - To subscribe to indirect membership updates, use the following resource URL in your Microsoft Graph subscription: `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressWhenSharedUnsharedWithTeam=true` -This subscription allows apps to monitor membership changes in a shared channel and its associated teams. +This subscription enables apps to monitor membership changes in shared channels and its associated teams. -### API usage for membership management +### Manage indirect membership in shared channels -You can manage indirect membership using the following APIs: +You can manage indirect membership in shared channels using the following Microsoft Graph APIs: -* Get all current channel members with GET `allMembers` API. +* Use `allMembers` API to retrieve all users who are members of a specific channel. ```http GET /teams/{team-id}/channels/{channel-id}/allMembers ``` -* Get each shared team with GET `sharedWithTeams` API. +* Use `sharedWithTeams` API to list all teams a channel is shared with. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams ``` -* Get allowed members of each shared team with GET `allowedMembers` API. +* Use the `allowedMembers` API to retrieve users from a shared team who can access a shared channel. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers ``` > [!NOTE] -> The `allowedMembers` API returns only newly associated users and isn't applicable for unshared events. +> `allowedMembers` API returns only newly associated users and doesn't apply to unshared events. ### Validate user access -When an app receives a notification for an indirect membership update, it must validate user access to a shared channel. For example, if a user is removed from a team associated with a shared channel, use the following API to determine whether the user still has access through another team or direct membership. +When an app receives a notification for an indirect membership update, it must validate user acess to the shared channel. For example, if a user is removed from a team associated with a shared channel, use the following API to determine whether the user still has access to the shared channel. ```http GET /DoesUserHaveAccessAsync ``` -The API verifies whether the user retains access to the shared channel. +The API verifies whether the user still has access to the shared channel. ### Handle bulk membership changes @@ -143,13 +133,13 @@ In large-scale scenarios, such as sharing a channel with a large team or removin To handle bulk membership changes: -* Use `allMembers` to retrieve the complete updated list of current members. +* Use `allMembers` API to retrieve the complete updated list of current members. * Use `allowedMembers` to retrieve only newly added members during shared events. * Avoid using `DoesUserHaveAccessAsync` for every user unless necessary. * Subscribe to shared and unshared events using supported Microsoft Graph APIs. > [!NOTE] -> Apps using resource-specific consent (RSC) must request extended scopes to support both direct and indirect membership updates. These permissions are necessary to query membership data and respond to notifications. +> Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. ## Classify members in the shared channel as in-tenant or out-tenant From 5581e2a2785f7645b47608fc34881cf0a2f2ca98 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Fri, 13 Jun 2025 10:18:10 +0530 Subject: [PATCH 09/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index aadea325468..de094617ffb 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -119,7 +119,7 @@ You can manage indirect membership in shared channels using the following Micros ### Validate user access -When an app receives a notification for an indirect membership update, it must validate user acess to the shared channel. For example, if a user is removed from a team associated with a shared channel, use the following API to determine whether the user still has access to the shared channel. +When an app receives a notification for an indirect membership update, it must validate user access to the shared channel. For example, if a user is removed from a team associated with a shared channel, use the following API to determine whether the user still has access to the shared channel. ```http GET /DoesUserHaveAccessAsync From 158d22ef134206d77ef13ace36fa84cd296b0819 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Mon, 16 Jun 2025 12:19:27 +0530 Subject: [PATCH 10/56] Updates to notifications for indirect membership --- msteams-platform/TOC.yml | 2 +- .../concepts/build-and-test/shared-channels.md | 2 +- msteams-platform/whats-new.md | 13 +++++++------ 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/msteams-platform/TOC.yml b/msteams-platform/TOC.yml index e1c77fa1134..6b0fbfbec64 100644 --- a/msteams-platform/TOC.yml +++ b/msteams-platform/TOC.yml @@ -535,7 +535,7 @@ displayName: Teams Store apps approved by Microsoft for mobile - name: Apps for shared channels href: concepts/build-and-test/shared-channels.md - displayName: Cross-tenant notifications, context for shared channel, apps and permissions in shared channels + displayName: Cross-tenant notifications, context for shared channel, apps and permissions in shared channels, notifications for indirect membership - name: Send activity feed notifications href: /graph/teams-send-activityfeednotifications?toc=/microsoftteams/platform/toc.json&bc=/microsoftteams/platform/breadcrumb/toc.json displayName: activity feed, notification, customize notification diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index de094617ffb..03ad1c09b80 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -86,7 +86,7 @@ Apps installed in shared channels can receive notifications when users are added * Install the app in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. -To subscribe to indirect membership updates, use the following resource URL in your Microsoft Graph subscription: +To subscribe to indirect membership updates, use the following Microsoft Graph resource URL: `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressWhenSharedUnsharedWithTeam=true` diff --git a/msteams-platform/whats-new.md b/msteams-platform/whats-new.md index 5105d6bd079..9ccae851a43 100644 --- a/msteams-platform/whats-new.md +++ b/msteams-platform/whats-new.md @@ -33,13 +33,9 @@ Discover Microsoft Teams platform features that are generally available (GA). Yo :::column span="2"::: Teams platform features that are available to all app developers.
-**2025 May** +**2025 June** -* ***May 29, 2025***: [Introducing app manifest v1.22 with support for custom activity icons and prefetch of nested app authentication tokens.](/microsoft-365/extensibility/schema/?view=m365-app-1.22&preserve-view=true) -* ***May 19, 2025***: [Introducing Microsoft 365 admin center permission to view custom app analytics and the agent usage analytics for custom apps in Developer Portal.](/microsoftteams/platform/concepts/build-and-test/analyze-your-apps-usage-in-developer-portal?tabs=custom-apps-built-for-your-org) -* ***May 19, 2025***:
Branding updates:
• Teams Toolkit is now Microsoft 365 Agents Toolkit.
• Teams App Test Tool is now Microsoft 365 Agents Playground.
• Teams App CLI, TeamFx CLI, and Teams Toolkit CLI are now Microsoft 365 Agents Toolkit CLI.
• `teamsapp` CLI signature is now referred as `atk`. -* ***May 16, 2025***: [Use Meeting AI Insights API to fetch conversation summaries, action items, and mentions directly from Teams meetings.](graph-api/meeting-transcripts/meeting-insights.md) -* ***May 13, 2025***: [Introducing agent usage analytics for third-party apps in Developer Portal](/microsoftteams/platform/concepts/build-and-test/analyze-your-apps-usage-in-developer-portal?tabs=thirdpartyapps). +***June 27, 2025***: [Apps can now subscribe to Microsoft Graph change notifications when users gain or lose access to shared channels due to team membership changes. Supports indirect membership notification updates via a new subscription resource URL, APIs for retrieving (allMembers, sharedWithTeams/allowedMembers), and validating user access (DoesUserHaveAccessAsync)](/microsoftteams/platform/concepts/build-and-test/shared-channels) :::column-end::: :::row-end::: @@ -53,6 +49,11 @@ Teams platform features that are available to all app developers.
| **Date** | **Update** | **Find here** | | -------- | --------- | ----------------| +| 29/05/2025 | Introducing app manifest v1.22 with support for custom activity icons and prefetch of nested app authentication tokens.| [Microsoft 365 app manifest schema reference.](/microsoft-365/extensibility/schema/?view=m365-app-1.22&preserve-view=true) | +| 19/05/2025 | Branding updates:
• Teams Toolkit is now Microsoft 365 Agents Toolkit
• Teams App Test Tool is now Microsoft 365 Agents Playground
• Teams App CLI, TeamFx CLI, and Teams Toolkit CLI are now Microsoft 365 Agents Toolkit CLI
• `teamsapp` CLI signature is now `atk` | [Microsoft 365 Agent Toolkit](/microsoft-365/developer/overview-m365-agents-toolkit?toc=%2Fmicrosoftteams%2Fplatform%2Ftoc.json&bc=%2Fmicrosoftteams%2Fplatform%2Fbreadcrumb%2Ftoc.json) | +| 19/05/2025 | Introducing Microsoft 365 admin center permission to view custom app analytics and the agent usage analytics for custom apps in Developer Portal | Tools and SDKs > Tools > Developer Portal for Teams > [Analyze app and agent usage in Developer Portal](/microsoftteams/platform/concepts/build-and-test/analyze-your-apps-usage-in-developer-portal?tabs=custom-apps-built-for-your-org) | +| 16/05/2025 | Use Meeting AI Insights API to fetch conversation summaries, action items, and mentions directly from Teams meetings | Build apps for Teams meetings and calls > Get meeting transcripts, recordings, and AI summaries > [Get AI-generated meeting summaries](graph-api/meeting-transcripts/meeting-insights.md) | +| 13/05/2025 | Introducing agent usage analytics for third-party apps in Developer Portal | Tools and SDKs > Tools > Developer Portal for Teams > [Analyze app and agent usage in Developer Portal](/microsoftteams/platform/concepts/build-and-test/analyze-your-apps-usage-in-developer-portal?tabs=thirdpartyapps) | | 30/04/2025 | Introducing streaming messages for bot apps. | Build bots and agents > Bot user experience > [Stream bot messages](bots/streaming-ux.md) | | 21/04/2025 | Precache your tab app to optimize its initial load time. | Build tabs > Tab features > App caching for your tab app > [Debug tool for cached apps](tabs/how-to/app-caching.md#precaching-tab-apps) | | 21/04/2025 | You can specify a 32x32 color icon with a transparent background to ensure a consistent appearance when your app runs in Outlook and Microsoft 365. | Publish your app or agent > Create Teams app package > [Color icon](concepts/build-and-test/apps-package.md#color-icon) | From d55c73407865b534d00085d36ae70a419cda3019 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Mon, 16 Jun 2025 12:27:25 +0530 Subject: [PATCH 11/56] Update whats-new.md --- msteams-platform/whats-new.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/whats-new.md b/msteams-platform/whats-new.md index 9ccae851a43..8a6f14efa24 100644 --- a/msteams-platform/whats-new.md +++ b/msteams-platform/whats-new.md @@ -35,7 +35,7 @@ Discover Microsoft Teams platform features that are generally available (GA). Yo Teams platform features that are available to all app developers.
**2025 June** -***June 27, 2025***: [Apps can now subscribe to Microsoft Graph change notifications when users gain or lose access to shared channels due to team membership changes. Supports indirect membership notification updates via a new subscription resource URL, APIs for retrieving (allMembers, sharedWithTeams/allowedMembers), and validating user access (DoesUserHaveAccessAsync)](/microsoftteams/platform/concepts/build-and-test/shared-channels) +***June 27, 2025***: [Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. Supports indirect membership notification updates via a new subscription resource URL, APIs for retrieving, and validating user access](/microsoftteams/platform/concepts/build-and-test/shared-channels) :::column-end::: :::row-end::: From fb841dc334678d0d920b32f6432341ba4da254b7 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Mon, 16 Jun 2025 12:33:19 +0530 Subject: [PATCH 12/56] Update whats-new.md --- msteams-platform/whats-new.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/whats-new.md b/msteams-platform/whats-new.md index 8a6f14efa24..d733c61b7e5 100644 --- a/msteams-platform/whats-new.md +++ b/msteams-platform/whats-new.md @@ -35,7 +35,7 @@ Discover Microsoft Teams platform features that are generally available (GA). Yo Teams platform features that are available to all app developers.
**2025 June** -***June 27, 2025***: [Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. Supports indirect membership notification updates via a new subscription resource URL, APIs for retrieving, and validating user access](/microsoftteams/platform/concepts/build-and-test/shared-channels) +***June 27, 2025***: [Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. Supports indirect membership notification updates via a new subscription resource URL, APIs for retrieving, and validating user access.](/microsoftteams/platform/concepts/build-and-test/shared-channels) :::column-end::: :::row-end::: From db71823486652a6a75e2c59ed2ce44f6f2f80941 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Tue, 17 Jun 2025 10:20:43 +0530 Subject: [PATCH 13/56] Update shared-channels.md --- .../concepts/build-and-test/shared-channels.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 03ad1c09b80..823658e04f8 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -96,19 +96,19 @@ This subscription enables apps to monitor membership changes in shared channels You can manage indirect membership in shared channels using the following Microsoft Graph APIs: -* Use `allMembers` API to retrieve all users who are members of a specific channel. +* Use [allMembers](/graph/api/channel-list-allmembers?view=graph-rest-1.0&tabs=http) API to retrieve all users who are members of a specific channel. ```http GET /teams/{team-id}/channels/{channel-id}/allMembers ``` -* Use `sharedWithTeams` API to list all teams a channel is shared with. +* Use [sharedWithTeams](/graph/api/sharedwithchannelteaminfo-list?view=graph-rest-1.0&tabs=http) API to list all teams a channel is shared with. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams ``` -* Use the `allowedMembers` API to retrieve users from a shared team who can access a shared channel. +* Use the [allowedMembers](/graph/api/sharedwithchannelteaminfo-list-allowedmembers?view=graph-rest-1.0&tabs=http) API to retrieve users from a shared team who can access a shared channel. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers @@ -119,14 +119,12 @@ You can manage indirect membership in shared channels using the following Micros ### Validate user access -When an app receives a notification for an indirect membership update, it must validate user access to the shared channel. For example, if a user is removed from a team associated with a shared channel, use the following API to determine whether the user still has access to the shared channel. +When an app receives a notification for an indirect membership update, it must validate user access to the shared channel. For example, if a user is removed from a team associated with a shared channel, use the following API to determine whether the user still has access to the shared channel. The API verifies whether the user still has access to the shared channel. ```http GET /DoesUserHaveAccessAsync ``` -The API verifies whether the user still has access to the shared channel. - ### Handle bulk membership changes In large-scale scenarios, such as sharing a channel with a large team or removing multiple users, Teams suppresses individual notifications to reduce volume. From 20919116c94fafe730a2d3d215cb25d21dea8cc9 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Tue, 17 Jun 2025 10:29:08 +0530 Subject: [PATCH 14/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 823658e04f8..780300d0f94 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -96,19 +96,19 @@ This subscription enables apps to monitor membership changes in shared channels You can manage indirect membership in shared channels using the following Microsoft Graph APIs: -* Use [allMembers](/graph/api/channel-list-allmembers?view=graph-rest-1.0&tabs=http) API to retrieve all users who are members of a specific channel. +* Use `allMembers` API to retrieve all users who are members of a specific channel. ```http GET /teams/{team-id}/channels/{channel-id}/allMembers ``` -* Use [sharedWithTeams](/graph/api/sharedwithchannelteaminfo-list?view=graph-rest-1.0&tabs=http) API to list all teams a channel is shared with. +* Use `sharedWithTeams` API to list all teams a channel is shared with. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams ``` -* Use the [allowedMembers](/graph/api/sharedwithchannelteaminfo-list-allowedmembers?view=graph-rest-1.0&tabs=http) API to retrieve users from a shared team who can access a shared channel. +* Use the `allowedMembers` API to retrieve users from a shared team who can access a shared channel. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers From d90fb70f61ee89e1096fe21d9322eabdb0269ac9 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Tue, 17 Jun 2025 16:49:46 +0530 Subject: [PATCH 15/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 780300d0f94..e54ef31f7fe 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -96,19 +96,19 @@ This subscription enables apps to monitor membership changes in shared channels You can manage indirect membership in shared channels using the following Microsoft Graph APIs: -* Use `allMembers` API to retrieve all users who are members of a specific channel. +* Use [allMembers](/graph/api/channel-list-allmembers?view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve all users who are members of a specific channel. ```http GET /teams/{team-id}/channels/{channel-id}/allMembers ``` -* Use `sharedWithTeams` API to list all teams a channel is shared with. +* Use [sharedWithTeams](/graph/api/sharedwithchannelteaminfo-list?view=graph-rest-1.0&tabs=http&preserve-view=true) API to list all teams a channel is shared with. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams ``` -* Use the `allowedMembers` API to retrieve users from a shared team who can access a shared channel. +* Use the [allowedMembers](/graph/api/sharedwithchannelteaminfo-list-allowedmembers?view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve users from a shared team who can access a shared channel. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers From ac4b8ba635b27e94cf0a81ba7d8d27d0abdc1a11 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Wed, 18 Jun 2025 15:11:45 +0530 Subject: [PATCH 16/56] Updates to content --- msteams-platform/concepts/build-and-test/shared-channels.md | 6 +++--- msteams-platform/whats-new.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index e54ef31f7fe..4ce228ddd68 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -81,16 +81,16 @@ You can get direct shared channel membership by using the `hostTeamGroupID` from ## Get notifications for indirect membership changes -Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. To receive these notifications: +Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. To receive these notifications, you must: -* Install the app in a host team and enable it for the shared channel. +* [Install the app](../..//concepts/deploy-and-publish/apps-upload) in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. To subscribe to indirect membership updates, use the following Microsoft Graph resource URL: `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressWhenSharedUnsharedWithTeam=true` -This subscription enables apps to monitor membership changes in shared channels and its associated teams. +This subscription enables apps to monitor membership changes in shared channels and its associated teams. For more information on how to create a Microsoft Graph change notification subscription, see [Create a subscription](/graph/teams-changenotifications-teammembership&preserve-view=true) ### Manage indirect membership in shared channels diff --git a/msteams-platform/whats-new.md b/msteams-platform/whats-new.md index d733c61b7e5..2410de027ec 100644 --- a/msteams-platform/whats-new.md +++ b/msteams-platform/whats-new.md @@ -35,7 +35,7 @@ Discover Microsoft Teams platform features that are generally available (GA). Yo Teams platform features that are available to all app developers.
**2025 June** -***June 27, 2025***: [Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. Supports indirect membership notification updates via a new subscription resource URL, APIs for retrieving, and validating user access.](/microsoftteams/platform/concepts/build-and-test/shared-channels) +***June 27, 2025***: [Apps can now recieve notificarions when users are added to or removed from a shared channel through assoicated teams, helping developers maintain accurate access control](/microsoftteams/platform/concepts/build-and-test/shared-channels) :::column-end::: :::row-end::: From d1c5586a8ff59f7ed829bd06780c72315c33dc25 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Wed, 18 Jun 2025 15:32:02 +0530 Subject: [PATCH 17/56] Update shared-channels.md --- .../concepts/build-and-test/shared-channels.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 4ce228ddd68..89f074417e2 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -83,32 +83,32 @@ You can get direct shared channel membership by using the `hostTeamGroupID` from Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. To receive these notifications, you must: -* [Install the app](../..//concepts/deploy-and-publish/apps-upload) in a host team and enable it for the shared channel. +* [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. To subscribe to indirect membership updates, use the following Microsoft Graph resource URL: `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressWhenSharedUnsharedWithTeam=true` -This subscription enables apps to monitor membership changes in shared channels and its associated teams. For more information on how to create a Microsoft Graph change notification subscription, see [Create a subscription](/graph/teams-changenotifications-teammembership&preserve-view=true) +This subscription enables apps to monitor membership changes in shared channels and its associated teams. For more information on how to create a Microsoft Graph change notification subscription, see [Create a subscription](/graph/teams-changenotifications-teammembership) ### Manage indirect membership in shared channels You can manage indirect membership in shared channels using the following Microsoft Graph APIs: -* Use [allMembers](/graph/api/channel-list-allmembers?view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve all users who are members of a specific channel. +* Use [allMembers](/graph/api/channel-list-allmembers?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve all users who are members of a specific channel. ```http GET /teams/{team-id}/channels/{channel-id}/allMembers ``` -* Use [sharedWithTeams](/graph/api/sharedwithchannelteaminfo-list?view=graph-rest-1.0&tabs=http&preserve-view=true) API to list all teams a channel is shared with. +* Use [sharedWithTeams](/graph/api/sharedwithchannelteaminfo-list?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to list all teams a channel is shared with. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams ``` -* Use the [allowedMembers](/graph/api/sharedwithchannelteaminfo-list-allowedmembers?view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve users from a shared team who can access a shared channel. +* Use the [allowedMembers](/graph/api/sharedwithchannelteaminfo-list-allowedmembers?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve users from a shared team who can access a shared channel. ```http GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers From b8c656af475a3d4e6a6bba46f11da1ea07590bd9 Mon Sep 17 00:00:00 2001 From: v-bijinc Date: Wed, 18 Jun 2025 16:39:42 +0530 Subject: [PATCH 18/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 89f074417e2..dd21dc44dba 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -90,7 +90,7 @@ To subscribe to indirect membership updates, use the following Microsoft Graph r `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressWhenSharedUnsharedWithTeam=true` -This subscription enables apps to monitor membership changes in shared channels and its associated teams. For more information on how to create a Microsoft Graph change notification subscription, see [Create a subscription](/graph/teams-changenotifications-teammembership) +This subscription enables apps to monitor membership changes in shared channels and its associated teams. For more information on how to create a Microsoft Graph change notification subscription, see [Create a subscription.](/graph/teams-changenotifications-teammembership) ### Manage indirect membership in shared channels From 8da9aa6945520991e12c4b7aa982575d9f978fce Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 16 Jul 2025 19:39:03 +0530 Subject: [PATCH 19/56] Updated new subscription resources --- .../concepts/build-and-test/shared-channels.md | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index dd21dc44dba..1af06e494d0 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -139,6 +139,12 @@ To handle bulk membership changes: > [!NOTE] > Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. +**New Subscription Resource** +/teams/{team-id}/channels/{channel-id}/sharedWithTeams (user and application context) + +**Purpose** +Notifies subscribers when a shared channel is shared or unshared with a team—reducing per-user notifications for large teams. + ## Classify members in the shared channel as in-tenant or out-tenant You can classify members as in-tenant or out-tenant by comparing `tenantID` of the member or team with `hostTeamTenantID` as follows: @@ -181,9 +187,10 @@ If you're developing an app for use in federated group chats with external users ## Code sample -| Sample name | Description | Node.js | -|-------------|-------------|------|----| -| Teams Conversation Bot | This sample app displays the names of the members in a federated group chat with external users. |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-feed-members/nodejs/)| +| Sample name | Description | .NET | Node.js | Python | +|-------------|-------------|------|----|------|----| +| Teams Conversation Bot | This sample app displays the names of the members in a federated group chat with external users.| NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-feed-members/nodejs/) | NA | +| Membership change notification | This sample application demonstrates how to send notifications for shared channel events in Microsoft Teams, such as users being added, removed, or having their membership updated and when channel is shared/unshared with a team. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/csharp) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/python) | ## See also From da43d3692f067429cd67a37bb46e88388c4b12a4 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 16 Jul 2025 21:39:42 +0530 Subject: [PATCH 20/56] added spaces --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 1af06e494d0..04fe04aa146 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -140,9 +140,11 @@ To handle bulk membership changes: > Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. **New Subscription Resource** + /teams/{team-id}/channels/{channel-id}/sharedWithTeams (user and application context) **Purpose** + Notifies subscribers when a shared channel is shared or unshared with a team—reducing per-user notifications for large teams. ## Classify members in the shared channel as in-tenant or out-tenant From 54bc2b3edd7602c36c4755755c5a7ad619b93d44 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Thu, 17 Jul 2025 18:35:14 +0530 Subject: [PATCH 21/56] Changed the content for sharedWithTeams notifications --- .../concepts/build-and-test/shared-channels.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 04fe04aa146..58e98671ef4 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -139,13 +139,13 @@ To handle bulk membership changes: > [!NOTE] > Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. -**New Subscription Resource** +## Manage sharedWithTeams Notifications for Large Membership Changes -/teams/{team-id}/channels/{channel-id}/sharedWithTeams (user and application context) +To reduce notification overload during large-scale membership updates, such as when a shared channel is added to or removed from a team with thousands of members, use the new SharedWithTeams subscription resource: -**Purpose** +/teams/{team-id}/channels/{channel-id}/sharedWithTeams -Notifies subscribers when a shared channel is shared or unshared with a team—reducing per-user notifications for large teams. +This subscription sends a single notification when a channel is shared or unshared with a team, avoiding thousands of per-user notifications and improving performance for apps that monitor membership changes. ## Classify members in the shared channel as in-tenant or out-tenant From 400a3b3d1a05bedae3bbac728a2cb47085928e4c Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Thu, 17 Jul 2025 18:45:43 +0530 Subject: [PATCH 22/56] Changed the subscription resource --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 58e98671ef4..1133848be9b 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -143,7 +143,7 @@ To handle bulk membership changes: To reduce notification overload during large-scale membership updates, such as when a shared channel is added to or removed from a team with thousands of members, use the new SharedWithTeams subscription resource: -/teams/{team-id}/channels/{channel-id}/sharedWithTeams +`/teams/{team-id}/channels/{channel-id}/sharedWithTeams` This subscription sends a single notification when a channel is shared or unshared with a team, avoiding thousands of per-user notifications and improving performance for apps that monitor membership changes. From 6d4ae24889553a31118f7ec15e2f8404241ff8e7 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Thu, 17 Jul 2025 18:54:10 +0530 Subject: [PATCH 23/56] changed heading level --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 1133848be9b..d37bb168d1b 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -139,7 +139,7 @@ To handle bulk membership changes: > [!NOTE] > Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. -## Manage sharedWithTeams Notifications for Large Membership Changes +#### Manage sharedWithTeams Notifications for Large Membership Changes To reduce notification overload during large-scale membership updates, such as when a shared channel is added to or removed from a team with thousands of members, use the new SharedWithTeams subscription resource: From 31413faa4c76ef8ff1a33d81aa9ab2b2eec8ae6a Mon Sep 17 00:00:00 2001 From: ChetanSharma-MSFT <59052547+ChetanSharma-msft@users.noreply.github.com> Date: Mon, 21 Jul 2025 16:16:54 +0530 Subject: [PATCH 24/56] Update whats-new.md Not part of feature. --- msteams-platform/whats-new.md | 5 ----- 1 file changed, 5 deletions(-) diff --git a/msteams-platform/whats-new.md b/msteams-platform/whats-new.md index f720a96196a..f168312a78b 100644 --- a/msteams-platform/whats-new.md +++ b/msteams-platform/whats-new.md @@ -52,11 +52,6 @@ Teams platform features that are available to all app developers.
| **Date** | **Update** | **Find here** | | -------- | --------- | ----------------| -| 29/05/2025 | Introducing app manifest v1.22 with support for custom activity icons and prefetch of nested app authentication tokens.| [Microsoft 365 app manifest schema reference.](/microsoft-365/extensibility/schema/?view=m365-app-1.22&preserve-view=true) | -| 19/05/2025 | Branding updates:
• Teams Toolkit is now Microsoft 365 Agents Toolkit
• Teams App Test Tool is now Microsoft 365 Agents Playground
• Teams App CLI, TeamFx CLI, and Teams Toolkit CLI are now Microsoft 365 Agents Toolkit CLI
• `teamsapp` CLI signature is now `atk` | [Microsoft 365 Agent Toolkit](/microsoft-365/developer/overview-m365-agents-toolkit?toc=%2Fmicrosoftteams%2Fplatform%2Ftoc.json&bc=%2Fmicrosoftteams%2Fplatform%2Fbreadcrumb%2Ftoc.json) | -| 19/05/2025 | Introducing Microsoft 365 admin center permission to view custom app analytics and the agent usage analytics for custom apps in Developer Portal | Tools and SDKs > Tools > Developer Portal for Teams > [Analyze app and agent usage in Developer Portal](/microsoftteams/platform/concepts/build-and-test/analyze-your-apps-usage-in-developer-portal?tabs=custom-apps-built-for-your-org) | -| 16/05/2025 | Use Meeting AI Insights API to fetch conversation summaries, action items, and mentions directly from Teams meetings | Build apps for Teams meetings and calls > Get meeting transcripts, recordings, and AI summaries > [Get AI-generated meeting summaries](graph-api/meeting-transcripts/meeting-insights.md) | -| 13/05/2025 | Introducing agent usage analytics for third-party apps in Developer Portal | Tools and SDKs > Tools > Developer Portal for Teams > [Analyze app and agent usage in Developer Portal](/microsoftteams/platform/concepts/build-and-test/analyze-your-apps-usage-in-developer-portal?tabs=thirdpartyapps) | | 30/04/2025 | Introducing streaming messages for bot apps. | Build bots and agents > Bot user experience > [Stream bot messages](bots/streaming-ux.md) | | 21/04/2025 | Precache your tab app to optimize its initial load time. | Build tabs > Tab features > App caching for your tab app > [Debug tool for cached apps](tabs/how-to/app-caching.md#precaching-tab-apps) | | 21/04/2025 | You can specify a 32x32 color icon with a transparent background to ensure a consistent appearance when your app runs in Outlook and Microsoft 365. | Publish your app or agent > Create Teams app package > [Color icon](concepts/build-and-test/apps-package.md#color-icon) | From 3e4106b75cec8a719e93ef83b283ec43191bcc29 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Tue, 5 Aug 2025 12:32:57 +0530 Subject: [PATCH 25/56] Changed Date and removed spelling mistake --- msteams-platform/whats-new.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/msteams-platform/whats-new.md b/msteams-platform/whats-new.md index f168312a78b..f733770e0b0 100644 --- a/msteams-platform/whats-new.md +++ b/msteams-platform/whats-new.md @@ -34,11 +34,10 @@ Discover Microsoft Teams platform features that are generally available (GA). Yo Teams platform features that are available to all app developers.
**2025 July** -* ***July 10, 2025***: [Custom icons for Teams notifications help your app stand out and increase engagement through more personalized activity feed updates.](/graph/teams-send-activityfeednotifications#custom-activity-icons-in-activity-feed-notifications)
-**2025 June** +* ***July 10, 2025***: [Custom icons for Teams notifications help your app stand out and increase engagement through more personalized activity feed updates.](/graph/teams-send-activityfeednotifications#custom-activity-icons-in-activity-feed-notifications)
-***June 27, 2025***: [Apps can now recieve notificarions when users are added to or removed from a shared channel through assoicated teams, helping developers maintain accurate access control](/microsoftteams/platform/concepts/build-and-test/shared-channels) +***Aug 15, 2025***: [Apps can now recieve notifications when users are added to or removed from a shared channel through assoicated teams, helping developers maintain accurate access control](/microsoftteams/platform/concepts/build-and-test/shared-channels) :::column-end::: :::row-end::: From 1cbd3b9b3442091a66ab2ede2835c33506e315c2 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Tue, 5 Aug 2025 16:54:45 +0530 Subject: [PATCH 26/56] Updated content for all members Added a hyperlink for allMembers API and tabulated the difference between direct and indirect members. --- .../concepts/build-and-test/shared-channels.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index d37bb168d1b..beb1ffab7d8 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -8,7 +8,7 @@ ms.topic: conceptual ms.date: 04/09/2025 --- -# Microsoft Teams Connect shared channels +# Microsoft Teams Connects shared channels Microsoft Teams Connect shared channels allow members of a channel to collaborate with users across other teams and organizations. You can create and share a shared channel with: @@ -59,6 +59,18 @@ You can collaborate with external members outside of your organization using sha ## Get shared channel membership +Use the [List allMembers API]([https://learn.microsoft.com/en-us/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http](/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http)) to retrieve all members (**direct** and **indirect**) of a shared channel. + +### Identify Direct vs. Indirect Members + +You can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. +This property identifies the source of a member’s access to a shared channel, as shown in the following table. + +|Member Type |Annotation Present? |Description | +|---------|---------|---------| +|Direct Member | **No** | The user is added directly to the shared channel. | +|Indirect Member| **Yes** | The user accesses the shared channel through another team. The annotation includes a URL that points to the source team. | + You can get direct shared channel membership by using the `hostTeamGroupID` from `getContext` and following these steps: 1. Get direct members with [GET channel members API](/graph/api/channel-list-members?view=graph-rest-beta&tabs=http&preserve-view=true) API. From 2e21f8d078d65da605d720ba2eee6bfe8abe1e56 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Tue, 5 Aug 2025 17:25:55 +0530 Subject: [PATCH 27/56] Fixed Hyperlink issue and added a Note for Duplicates --- .../concepts/build-and-test/shared-channels.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index beb1ffab7d8..a5281f6baf4 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -59,7 +59,7 @@ You can collaborate with external members outside of your organization using sha ## Get shared channel membership -Use the [List allMembers API]([https://learn.microsoft.com/en-us/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http](/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http)) to retrieve all members (**direct** and **indirect**) of a shared channel. +Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http) to retrieve all members (**direct** and **indirect**) of a shared channel. ### Identify Direct vs. Indirect Members @@ -71,6 +71,15 @@ This property identifies the source of a member’s access to a shared channel, |Direct Member | **No** | The user is added directly to the shared channel. | |Indirect Member| **Yes** | The user accesses the shared channel through another team. The annotation includes a URL that points to the source team. | +> [!NOTE] +> You might receive duplicate notifications when a member is added to a shared channel. This can happen if the member is already part of the shared channel directly or through another linked team. +> +> To avoid duplicate notifications: +> +> * Cache the **/allMembers** list for the shared channel. +> * Compare incoming indirect membership notifications against the cached list. +> * Ignore the notification if the member already exists; either directly or indirectly. + You can get direct shared channel membership by using the `hostTeamGroupID` from `getContext` and following these steps: 1. Get direct members with [GET channel members API](/graph/api/channel-list-members?view=graph-rest-beta&tabs=http&preserve-view=true) API. From 649a7b8995a708f288ae45150b52f248a4b356c9 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Tue, 5 Aug 2025 18:54:39 +0530 Subject: [PATCH 28/56] changes to include content for direct and indirect membership updates also changed query parameters. --- .../concepts/build-and-test/shared-channels.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index a5281f6baf4..1b327b247d1 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -100,16 +100,16 @@ You can get direct shared channel membership by using the `hostTeamGroupID` from GET /teams/{host-team-group-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers ``` -## Get notifications for indirect membership changes +## Get App notifications for direct and indirect membership changes -Users can access a shared channel either directly (added to the channel) or indirectly (members of a team with which the channel is shared). Apps installed in shared channels can receive notifications when users are added to or removed from an associated team with which the channel is shared. To receive these notifications, you must: +Users become part of a shared channel either directly, by being added to the channel, or indirectly, through membership in a team that the channel is shared with. Apps installed in shared channels receive notifications when users are added to or removed from a team that shares the channel. To receive these notifications, you must: * [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. -To subscribe to indirect membership updates, use the following Microsoft Graph resource URL: +To receive both direct and indirect member update notifications, you must include both the query string parameters when creating a subscription. If the query strings are not provided, the subscription only delivers notifications for direct member updates. -`/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressWhenSharedUnsharedWithTeam=true` +`/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressNotificationWhenSharedUnsharedWithTeam=true` This subscription enables apps to monitor membership changes in shared channels and its associated teams. For more information on how to create a Microsoft Graph change notification subscription, see [Create a subscription.](/graph/teams-changenotifications-teammembership) From f11856546924801ea2bf2aaa92e25e03274b40a9 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Tue, 5 Aug 2025 19:27:02 +0530 Subject: [PATCH 29/56] changed content for sharedwith Teams Notifications --- .../build-and-test/shared-channels.md | 21 +++++++------------ 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 1b327b247d1..382d8c21af7 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -148,25 +148,18 @@ GET /DoesUserHaveAccessAsync ### Handle bulk membership changes -In large-scale scenarios, such as sharing a channel with a large team or removing multiple users, Teams suppresses individual notifications to reduce volume. +Teams suppresses individual notifications when a channel is shared with a team or when multiple users are removed. This helps reduce notification volume and improve performance. -To handle bulk membership changes: +#### Use sharedWithTeams Subscription for Bulk Membership Changes -* Use `allMembers` API to retrieve the complete updated list of current members. -* Use `allowedMembers` to retrieve only newly added members during shared events. -* Avoid using `DoesUserHaveAccessAsync` for every user unless necessary. -* Subscribe to shared and unshared events using supported Microsoft Graph APIs. - -> [!NOTE] -> Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. - -#### Manage sharedWithTeams Notifications for Large Membership Changes - -To reduce notification overload during large-scale membership updates, such as when a shared channel is added to or removed from a team with thousands of members, use the new SharedWithTeams subscription resource: +To reduce notification overload during membership updates, such as when a shared channel is added to or removed from a team with thousands of members, use the new SharedWithTeams subscription resource: `/teams/{team-id}/channels/{channel-id}/sharedWithTeams` -This subscription sends a single notification when a channel is shared or unshared with a team, avoiding thousands of per-user notifications and improving performance for apps that monitor membership changes. +The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team, avoiding thousands of per-user notifications and improving performance for apps that monitor membership changes. + +> [!NOTE] +> Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. ## Classify members in the shared channel as in-tenant or out-tenant From 0327214eeb4d91e2e589ad79a40b0b6758b7a4fc Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Tue, 5 Aug 2025 22:32:17 +0530 Subject: [PATCH 30/56] corrected errors from Acrolinx --- .../build-and-test/shared-channels.md | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 382d8c21af7..95dabc0f64b 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -10,7 +10,7 @@ ms.date: 04/09/2025 # Microsoft Teams Connects shared channels -Microsoft Teams Connect shared channels allow members of a channel to collaborate with users across other teams and organizations. You can create and share a shared channel with: +Microsoft Teams Connects shared channels allow members of a channel to collaborate with users across other teams and organizations. You can create and share a shared channel with: * Members of another team within the same organization. * Individuals within the same organization. @@ -38,8 +38,11 @@ SupportedChannelTypes is an optional property that enables your app in non-stand > [!NOTE] > -> * If your app supports the team scope, it functions in standard channels, regardless of what values are defined in this property. -> * Your app might need to account for the unique properties of each of these channel types in order to function properly. +> Your app must account for the unique properties of each channel type to function properly: +> +> * Standard channels: Available to all team members and support most app capabilities. +> * Private channels: Restricted to a subset of team members and might limit app access. +> * Shared channels: Allow cross-team collaboration and introduce indirect membership scenarios. ## Get context for shared channels @@ -63,8 +66,7 @@ Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest ### Identify Direct vs. Indirect Members -You can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. -This property identifies the source of a member’s access to a shared channel, as shown in the following table. +You can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. This property identifies the source of a member’s access to a shared channel, as shown in the following table. |Member Type |Annotation Present? |Description | |---------|---------|---------| @@ -72,7 +74,7 @@ This property identifies the source of a member’s access to a shared channel, |Indirect Member| **Yes** | The user accesses the shared channel through another team. The annotation includes a URL that points to the source team. | > [!NOTE] -> You might receive duplicate notifications when a member is added to a shared channel. This can happen if the member is already part of the shared channel directly or through another linked team. +> You might receive duplicate notifications when a member is added to a shared channel. This scenario can happen if the member is already part of the shared channel directly or through another linked team. > > To avoid duplicate notifications: > @@ -107,7 +109,7 @@ Users become part of a shared channel either directly, by being added to the cha * [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. -To receive both direct and indirect member update notifications, you must include both the query string parameters when creating a subscription. If the query strings are not provided, the subscription only delivers notifications for direct member updates. +To receive both direct and indirect member update notifications, you must include both the query string parameters when creating a subscription. If the query strings aren't provided, the subscription only delivers notifications for direct member updates. `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressNotificationWhenSharedUnsharedWithTeam=true` @@ -138,17 +140,19 @@ You can manage indirect membership in shared channels using the following Micros > [!NOTE] > `allowedMembers` API returns only newly associated users and doesn't apply to unshared events. -### Validate user access +### Validate user access for membership updates -When an app receives a notification for an indirect membership update, it must validate user access to the shared channel. For example, if a user is removed from a team associated with a shared channel, use the following API to determine whether the user still has access to the shared channel. The API verifies whether the user still has access to the shared channel. +When an app receives a notification for an indirect membership update, it’s important to verify whether the user still has access to the shared channel as the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access is truly lost. Use the **doesUserHaveAccess** API to determine whether the user still has access to the shared channel. ```http -GET /DoesUserHaveAccessAsync +GET /doesUserHaveAccessAsync ``` +Refer to [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accessed and relevant permissions. + ### Handle bulk membership changes -Teams suppresses individual notifications when a channel is shared with a team or when multiple users are removed. This helps reduce notification volume and improve performance. +Teams suppresses individual notifications when a channel is shared with a team or when multiple users are removed. This feature reduces notification volume and improves performance. #### Use sharedWithTeams Subscription for Bulk Membership Changes @@ -156,7 +160,7 @@ To reduce notification overload during membership updates, such as when a shared `/teams/{team-id}/channels/{channel-id}/sharedWithTeams` -The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team, avoiding thousands of per-user notifications and improving performance for apps that monitor membership changes. +The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team. It avoids thousands of per-user notifications and improves performance for apps that monitor membership changes. > [!NOTE] > Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. From 899384b16235a192d8edada6818062df11f1f31d Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Tue, 5 Aug 2025 22:43:52 +0530 Subject: [PATCH 31/56] minor corrections --- msteams-platform/concepts/build-and-test/shared-channels.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 95dabc0f64b..59a8bced3e4 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -148,11 +148,11 @@ When an app receives a notification for an indirect membership update, it’s im GET /doesUserHaveAccessAsync ``` -Refer to [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accessed and relevant permissions. +Refer to [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accesses and relevant permissions. ### Handle bulk membership changes -Teams suppresses individual notifications when a channel is shared with a team or when multiple users are removed. This feature reduces notification volume and improves performance. +Teams supresses individual notifications when a channel is shared with a team or when multiple users are removed. This feature reduces notification volume and improves performance. #### Use sharedWithTeams Subscription for Bulk Membership Changes From 9400b3c4675657c0a9ccbf6a8d9f8b8268ce272e Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 18 Aug 2025 13:50:36 +0530 Subject: [PATCH 32/56] Added definition for direct and indirect members --- .../concepts/build-and-test/shared-channels.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 59a8bced3e4..b9f02d188c9 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -8,9 +8,9 @@ ms.topic: conceptual ms.date: 04/09/2025 --- -# Microsoft Teams Connects shared channels +# Microsoft Teams connects shared channels -Microsoft Teams Connects shared channels allow members of a channel to collaborate with users across other teams and organizations. You can create and share a shared channel with: +Microsoft Teams connects shared channels, which allow members of a channel to collaborate with users across other teams and organizations. You can create and share a shared channel with: * Members of another team within the same organization. * Individuals within the same organization. @@ -27,7 +27,7 @@ Teams Connect shared channels facilitate secure collaboration seamlessly. Allow ## Enable your app for shared channels -SupportedChannelTypes is an optional property that enables your app in non-standard channels. If your app supports the team scope and the property is defined, Teams enables your app in each channel type accordingly. Private and shared channels are supported. For more information, see [supportedChannelTypes](../../resources/schema/manifest-schema.md#supportedchanneltypes). +SupportedChannelTypes is an optional property that enables your app in nonstandard channels. If your app supports the team scope and the property is defined, Teams enables your app in each channel type accordingly. Private and shared channels are supported. For more information, see [supportedChannelTypes](../../resources/schema/manifest-schema.md#supportedchanneltypes). ```JSON "supportedChannelTypes": [ @@ -66,12 +66,16 @@ Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest ### Identify Direct vs. Indirect Members -You can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. This property identifies the source of a member’s access to a shared channel, as shown in the following table. +* **Direct Members**: Users who are added directly to the channel, including users from other tenants (cross-tenants). + +* **Indirect Members**: Users who are members of the team, with which the channel is shared, including teams in the same tenant or in a cross-tenant. + +Additionally, you can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. This property (available only in indirect membership) identifies the source of a member’s access to a shared channel, as shown in the following table. |Member Type |Annotation Present? |Description | |---------|---------|---------| |Direct Member | **No** | The user is added directly to the shared channel. | -|Indirect Member| **Yes** | The user accesses the shared channel through another team. The annotation includes a URL that points to the source team. | +|Indirect Member| **Yes** | The user accesses the shared channel through another team. The **@microsoft.graph.originalSourceMembershipUrl** property includes a URL that points to the source team and indicates that the user is an indirect member of the shared channel. | > [!NOTE] > You might receive duplicate notifications when a member is added to a shared channel. This scenario can happen if the member is already part of the shared channel directly or through another linked team. From e683c69f3189e0dc7c06071f31a584cc41e834ce Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 18 Aug 2025 18:07:11 +0530 Subject: [PATCH 33/56] made corrections to the text as per changes suggested --- .../build-and-test/shared-channels.md | 43 +++++-------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index b9f02d188c9..17485280559 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -78,37 +78,12 @@ Additionally, you can identify whether a member of a shared channel is direct or |Indirect Member| **Yes** | The user accesses the shared channel through another team. The **@microsoft.graph.originalSourceMembershipUrl** property includes a URL that points to the source team and indicates that the user is an indirect member of the shared channel. | > [!NOTE] -> You might receive duplicate notifications when a member is added to a shared channel. This scenario can happen if the member is already part of the shared channel directly or through another linked team. -> -> To avoid duplicate notifications: -> -> * Cache the **/allMembers** list for the shared channel. -> * Compare incoming indirect membership notifications against the cached list. -> * Ignore the notification if the member already exists; either directly or indirectly. - -You can get direct shared channel membership by using the `hostTeamGroupID` from `getContext` and following these steps: - -1. Get direct members with [GET channel members API](/graph/api/channel-list-members?view=graph-rest-beta&tabs=http&preserve-view=true) API. - - ```http - GET /teams/{host-team-group-id}/channels/{channel-id}/members - ``` - -2. Get each shared team with GET `sharedWithTeams` API. - - ```http - GET /teams/{host-team-group-id}/channels/{channel-id}/sharedWithTeams - ``` - -3. Use GET members of each shared team (sharewithteamsId) with GET `sharedWithTeams` API. - - ```http - GET /teams/{host-team-group-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers - ``` +> You might receive duplicate notifications when a member is added to a shared channel. This scenario can happen if the member is already part of the shared channel directly or through another linked team. Use the **List allMembers API** to view all the direct and indirect members. +> Ignore the notification if the member already exists; either directly or indirectly. ## Get App notifications for direct and indirect membership changes -Users become part of a shared channel either directly, by being added to the channel, or indirectly, through membership in a team that the channel is shared with. Apps installed in shared channels receive notifications when users are added to or removed from a team that shares the channel. To receive these notifications, you must: + Apps installed in shared channels receive notifications when users are added to or removed from a team that shares the channel. To receive these notifications, you must: * [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. @@ -149,14 +124,14 @@ You can manage indirect membership in shared channels using the following Micros When an app receives a notification for an indirect membership update, it’s important to verify whether the user still has access to the shared channel as the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access is truly lost. Use the **doesUserHaveAccess** API to determine whether the user still has access to the shared channel. ```http -GET /doesUserHaveAccessAsync +GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName') ``` Refer to [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accesses and relevant permissions. ### Handle bulk membership changes -Teams supresses individual notifications when a channel is shared with a team or when multiple users are removed. This feature reduces notification volume and improves performance. +Teams supresses individual notifications when a channel is shared or unshared with a team. This feature reduces notification volume and improves performance. #### Use sharedWithTeams Subscription for Bulk Membership Changes @@ -164,10 +139,14 @@ To reduce notification overload during membership updates, such as when a shared `/teams/{team-id}/channels/{channel-id}/sharedWithTeams` -The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team. It avoids thousands of per-user notifications and improves performance for apps that monitor membership changes. +The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team. It avoids thousands of per-user notifications and improves performance for apps that monitor membership changes. Ensure that you update the shared channel member list using the /allMembers API after receiving a "shared with" or "unshared from" team notification. > [!NOTE] -> Apps using resource-specific consent (RSC) must request extended permissions to support both direct and indirect membership updates. These permissions are required to query membership data and respond to notifications. +> To support membership updates in shared channels, apps using resource-specific consent (RSC) must request extended permissions. +> These permissions let the app: +> +> * Access membership data (both direct and indirect members). +> * Receive and respond to membership change notifications. ## Classify members in the shared channel as in-tenant or out-tenant From 3fcb62ac944af571d77c9eb2030d01d880a65736 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 18 Aug 2025 19:03:02 +0530 Subject: [PATCH 34/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 17485280559..95efa44befb 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -21,7 +21,7 @@ Microsoft Teams connects shared channels, which allow members of a channel to co > * Tab apps in shared channels are available in [Government Community Cloud (GCC), GCC High, Department of Defense (DoD)](../cloud-overview.md#teams-app-capabilities), and [Teams operated by 21Vianet](../sovereign-cloud.md) environments. > * SharePoint and the SharePoint pages apps aren't supported for shared channels in GCC, GCC High, DoD, and Teams operated by 21Vianet environments. -Teams Connect shared channels facilitate secure collaboration seamlessly. Allow external users outside of your organization to collaborate with internal users in Teams without changing their user context. Enhance user experience unlike using guest accounts, for example, the members must sign out of Teams and sign in again using a guest account. Teams applications extend the powerful collaboration space. +Teams connects shared channels, which facilitates secure collaboration seamlessly. Allow external users outside of your organization to collaborate with internal users in Teams without changing their user context. Enhance user experience unlike using guest accounts, for example, the members must sign out of Teams and sign in again using a guest account. Teams applications extend the powerful collaboration space. :::image type="content" source="~/assets/images/app-fundamentals/shared-channels-teams.png" alt-text="Diagram shows Team B from organization A and Team C from organization B collaborating in a shared channel as Team A."::: From 7c016ac0fcb09a8efe8383f0202511552c650be2 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 1 Sep 2025 20:07:31 +0530 Subject: [PATCH 35/56] part 3 changes incorporated --- .../build-and-test/shared-channels.md | 67 ++++++++++--------- 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 2c13de94cdf..029012f507f 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -1,5 +1,5 @@ --- -title: Teams Connect Shared Channels +title: Teams Connects Shared Channels author: surbhigupta description: Learn about Teams Connect shared channels to securely collaborate with internal and external users in a shared space without switching tenants. ms.author: surbhigupta @@ -21,7 +21,7 @@ Microsoft Teams connects shared channels, which allow members of a channel to co > * Tab apps in shared channels are available in [Government Community Cloud (GCC), GCC High, Department of Defense (DoD)](../cloud-overview.md#teams-app-capabilities), and [Teams operated by 21Vianet](../sovereign-cloud.md) environments. > * SharePoint and the SharePoint pages apps aren't supported for shared channels in GCC, GCC High, DoD, and Teams operated by 21Vianet environments. -Teams connects shared channels, which facilitates secure collaboration seamlessly. Allow external users outside of your organization to collaborate with internal users in Teams without changing their user context. Enhance user experience unlike using guest accounts, for example, the members must sign out of Teams and sign in again using a guest account. Teams applications extend the powerful collaboration space. +Teams connects shared channels, which facilitates secure collaboration seamlessly. Allow external users outside of your organization to collaborate with internal users in Teams without changing their user context. Enhance user experience through cross-tenanants collaboration, secure granular access control, and real-time membership syncing. :::image type="content" source="~/assets/images/app-fundamentals/shared-channels-teams.png" alt-text="Diagram shows Team B from organization A and Team C from organization B collaborating in a shared channel as Team A."::: @@ -36,7 +36,6 @@ SupportedChannelTypes is an optional property that enables your app in nonstanda ] ``` - ## Get context for shared channels When the content UX is loaded in a shared channel, use the data received from `getContext` call for shared channel changes. `getContext` call publishes two new properties, `hostTeamGroupID` and `hostTenantID`, which are used to retrieve channel membership using Microsoft Graph APIs. `hostTeam` is the team that creates the shared channel. @@ -63,11 +62,11 @@ Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest * **Indirect Members**: Users who are members of the team, with which the channel is shared, including teams in the same tenant or in a cross-tenant. -Additionally, you can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. This property (available only in indirect membership) identifies the source of a member’s access to a shared channel, as shown in the following table. +Additionally, you can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. This property identifies the source of a member’s access to a shared channel, as shown in the following table. |Member Type |Annotation Present? |Description | |---------|---------|---------| -|Direct Member | **No** | The user is added directly to the shared channel. | +|Direct Member | **Yes** | The user is added directly to the shared channel. | |Indirect Member| **Yes** | The user accesses the shared channel through another team. The **@microsoft.graph.originalSourceMembershipUrl** property includes a URL that points to the source team and indicates that the user is an indirect member of the shared channel. | > [!NOTE] @@ -81,37 +80,14 @@ Additionally, you can identify whether a member of a shared channel is direct or * [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. -To receive both direct and indirect member update notifications, you must include both the query string parameters when creating a subscription. If the query strings aren't provided, the subscription only delivers notifications for direct member updates. +To receive both direct and indirect member update notifications, you must include **both the query string parameters** when creating a subscription. If the query strings aren't provided, the subscription only delivers notifications for direct member updates. Refer [Channel membership access](/graph/teams-changenotifications-channelmembership), for more information. +```http `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressNotificationWhenSharedUnsharedWithTeam=true` +``` This subscription enables apps to monitor membership changes in shared channels and its associated teams. For more information on how to create a Microsoft Graph change notification subscription, see [Create a subscription.](/graph/teams-changenotifications-teammembership) -### Manage indirect membership in shared channels - -You can manage indirect membership in shared channels using the following Microsoft Graph APIs: - -* Use [allMembers](/graph/api/channel-list-allmembers?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve all users who are members of a specific channel. - - ```http - GET /teams/{team-id}/channels/{channel-id}/allMembers - ``` - -* Use [sharedWithTeams](/graph/api/sharedwithchannelteaminfo-list?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to list all teams a channel is shared with. - - ```http - GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams - ``` - -* Use the [allowedMembers](/graph/api/sharedwithchannelteaminfo-list-allowedmembers?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve users from a shared team who can access a shared channel. - - ```http - GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers - ``` - -> [!NOTE] -> `allowedMembers` API returns only newly associated users and doesn't apply to unshared events. - ### Validate user access for membership updates When an app receives a notification for an indirect membership update, it’s important to verify whether the user still has access to the shared channel as the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access is truly lost. Use the **doesUserHaveAccess** API to determine whether the user still has access to the shared channel. @@ -124,7 +100,7 @@ Refer to [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=gra ### Handle bulk membership changes -Teams supresses individual notifications when a channel is shared or unshared with a team. This feature reduces notification volume and improves performance. +Teams supresses individual membership update notifications when a channel is shared or unshared with a team. This feature reduces notification volume and improves performance. #### Use sharedWithTeams Subscription for Bulk Membership Changes @@ -141,6 +117,31 @@ The sharedWithTeams subscription sends a single notification when a channel is s > * Access membership data (both direct and indirect members). > * Receive and respond to membership change notifications. +### Manage indirect membership in shared channels + +You can manage indirect membership in shared channels using the following Microsoft Graph APIs: + +* Use [allMembers](/graph/api/channel-list-allmembers?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve all users who are members of a specific channel. + + ```http + GET /teams/{team-id}/channels/{channel-id}/allMembers + ``` + +* Use [sharedWithTeams](/graph/api/sharedwithchannelteaminfo-list?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to list all teams a channel is shared with. + + ```http + GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams + ``` + +* Use the [allowedMembers](/graph/api/sharedwithchannelteaminfo-list-allowedmembers?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to retrieve users from a shared team who can access a shared channel. + + ```http + GET /teams/{team-id}/channels/{channel-id}/sharedWithTeams/{sharewithteamsId}/allowedMembers + ``` + +> [!NOTE] +> `allowedMembers` API returns only newly associated users and doesn't apply to unshared events. + ## Classify members in the shared channel as in-tenant or out-tenant You can classify members as in-tenant or out-tenant by comparing `tenantID` of the member or team with `hostTeamTenantID` as follows: @@ -186,7 +187,7 @@ If you're developing an app for use in federated group chats with external users | Sample name | Description | .NET | Node.js | Python | |-------------|-------------|------|----|------|----| | Teams Conversation Bot | This sample app displays the names of the members in a federated group chat with external users.| NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-feed-members/nodejs/) | NA | -| Membership change notification | This sample application demonstrates how to send notifications for shared channel events in Microsoft Teams, such as users being added, removed, or having their membership updated and when channel is shared/unshared with a team. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/csharp) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/python) | +| Membership change notification | The sample application demonstrates how to send notifications for shared channel events in Microsoft Teams, such as users being added, removed, or having their membership updated and when channel is shared/unshared with a team. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/csharp) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/python) | ## See also From b9b0b4a760714dceee33c1bc6dfaed9460867d05 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 8 Sep 2025 12:52:08 +0530 Subject: [PATCH 36/56] changed as per Microsoft style guide --- msteams-platform/concepts/build-and-test/shared-channels.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 029012f507f..eb160c32267 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -73,14 +73,14 @@ Additionally, you can identify whether a member of a shared channel is direct or > You might receive duplicate notifications when a member is added to a shared channel. This scenario can happen if the member is already part of the shared channel directly or through another linked team. Use the **List allMembers API** to view all the direct and indirect members. > Ignore the notification if the member already exists; either directly or indirectly. -## Get App notifications for direct and indirect membership changes +## Get app notifications for direct and indirect membership changes Apps installed in shared channels receive notifications when users are added to or removed from a team that shares the channel. To receive these notifications, you must: * [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. * Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. -To receive both direct and indirect member update notifications, you must include **both the query string parameters** when creating a subscription. If the query strings aren't provided, the subscription only delivers notifications for direct member updates. Refer [Channel membership access](/graph/teams-changenotifications-channelmembership), for more information. +To receive both direct and indirect member update notifications, you must include **both the query string parameters** when creating a subscription. If the query strings aren't provided, the subscription only delivers notifications for direct member updates. To learn more, see [Channel membership access](/graph/teams-changenotifications-channelmembership). ```http `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressNotificationWhenSharedUnsharedWithTeam=true` @@ -96,7 +96,7 @@ When an app receives a notification for an indirect membership update, it’s im GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName') ``` -Refer to [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accesses and relevant permissions. +See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accesses and relevant permissions. ### Handle bulk membership changes From 72918837d5d7dd4ea0579b1f3feaf28792d44232 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 8 Sep 2025 13:20:39 +0530 Subject: [PATCH 37/56] changed content under in-tenant or out-tenant --- .../build-and-test/shared-channels.md | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index eb160c32267..ee405124f12 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -75,10 +75,10 @@ Additionally, you can identify whether a member of a shared channel is direct or ## Get app notifications for direct and indirect membership changes - Apps installed in shared channels receive notifications when users are added to or removed from a team that shares the channel. To receive these notifications, you must: +Apps installed in shared channels receive notifications when users are added to or removed from a team that shares the channel. To receive these notifications, you must: -* [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. -* Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. +1. [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. +1. Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. To receive both direct and indirect member update notifications, you must include **both the query string parameters** when creating a subscription. If the query strings aren't provided, the subscription only delivers notifications for direct member updates. To learn more, see [Channel membership access](/graph/teams-changenotifications-channelmembership). @@ -100,7 +100,7 @@ See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-re ### Handle bulk membership changes -Teams supresses individual membership update notifications when a channel is shared or unshared with a team. This feature reduces notification volume and improves performance. +In case of bulk memebership changes, Teams curbs individual membership update notifications when a channel is shared or unshared with a team. This feature reduces notification volume and improves performance. #### Use sharedWithTeams Subscription for Bulk Membership Changes @@ -108,7 +108,7 @@ To reduce notification overload during membership updates, such as when a shared `/teams/{team-id}/channels/{channel-id}/sharedWithTeams` -The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team. It avoids thousands of per-user notifications and improves performance for apps that monitor membership changes. Ensure that you update the shared channel member list using the /allMembers API after receiving a "shared with" or "unshared from" team notification. +The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team. It avoids thousands of per-user notifications and improves performance for apps that monitor membership changes. Ensure that you update the shared channel member list using the /allMembers API after receiving a 'shared with' or 'unshared from' team notification. > [!NOTE] > To support membership updates in shared channels, apps using resource-specific consent (RSC) must request extended permissions. @@ -144,17 +144,22 @@ You can manage indirect membership in shared channels using the following Micros ## Classify members in the shared channel as in-tenant or out-tenant -You can classify members as in-tenant or out-tenant by comparing `tenantID` of the member or team with `hostTeamTenantID` as follows: +You can classify members as in-tenant or out-tenant by comparing the `tenantID` of the member or team with `hostTeamTenantID` as follows: -1. Get the member you wish to compare. +1. Get the tenantID of the member you wish to compare. ```http GET /teams/{host-team-group-id}/channels/{channel-id}/members ``` -2. Use `getContext`, compare the `tenantID` of the member to the `hostTenantID` property. + >[!NOTE] + >You get the list of direct members of the channel only. - +1. Call microsoftTeams.app.getContext() from the Teams JavaScript client library (**TeamsJS SDK**). + The Teams context page opens with details such as **displayName**, **membershipType**, **ownerGroupID** and **tenantGroupID**. + +1. Compare the `tenantGroupID` of the member to the `hostTenantID` property + and determine if the member is in-tenant or out-tenant. ## Microsoft Entra native identity @@ -187,7 +192,7 @@ If you're developing an app for use in federated group chats with external users | Sample name | Description | .NET | Node.js | Python | |-------------|-------------|------|----|------|----| | Teams Conversation Bot | This sample app displays the names of the members in a federated group chat with external users.| NA |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/samples/bot-feed-members/nodejs/) | NA | -| Membership change notification | The sample application demonstrates how to send notifications for shared channel events in Microsoft Teams, such as users being added, removed, or having their membership updated and when channel is shared/unshared with a team. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/csharp) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/python) | +| Membership change notification | The sample application demonstrates how to send notifications for shared channel events in Microsoft Teams. Scenarios include users being added, removed, or membership being updated and when channel is shared or unshared with a team. | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/csharp) |[View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/nodejs) | [View](https://github.com/OfficeDev/Microsoft-Teams-Samples/tree/main/membershipChangeNotificationNodejs/samples/graph-membership-change-notification/python) | ## See also From 369ff86767c4d0e466d09e5195ede5cea455bbd3 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 8 Sep 2025 13:36:06 +0530 Subject: [PATCH 38/56] Acrolinx changes incorporated --- .../concepts/build-and-test/shared-channels.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index ee405124f12..27092e2d66e 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -100,7 +100,7 @@ See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-re ### Handle bulk membership changes -In case of bulk memebership changes, Teams curbs individual membership update notifications when a channel is shared or unshared with a team. This feature reduces notification volume and improves performance. +If there are bulk membership changes, Teams curbs individual membership update notifications when a channel is shared or unshared with a team. This feature reduces notification volume and improves performance. #### Use sharedWithTeams Subscription for Bulk Membership Changes @@ -152,13 +152,13 @@ You can classify members as in-tenant or out-tenant by comparing the `tenantID` GET /teams/{host-team-group-id}/channels/{channel-id}/members ``` - >[!NOTE] - >You get the list of direct members of the channel only. + >[!NOTE] + >You get the list of direct members of the channel only. -1. Call microsoftTeams.app.getContext() from the Teams JavaScript client library (**TeamsJS SDK**). - The Teams context page opens with details such as **displayName**, **membershipType**, **ownerGroupID** and **tenantGroupID**. +2. Call microsoftTeams.app.getContext() from the Teams JavaScript client library (**TeamsJS SDK**). + The Teams context page opens with details such as **displayName**, **membershipType**, **ownerGroupID** , and **tenantGroupID**. -1. Compare the `tenantGroupID` of the member to the `hostTenantID` property +3. Compare the `tenantGroupID` of the member to the `hostTenantID` property and determine if the member is in-tenant or out-tenant. ## Microsoft Entra native identity From 423df6670933850a37bf8e9e698d88af5bdf3f4f Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 8 Sep 2025 13:56:20 +0530 Subject: [PATCH 39/56] updated Intro and performed self-review --- .../build-and-test/shared-channels.md | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 27092e2d66e..3582f9adc87 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -10,21 +10,25 @@ ms.date: 04/09/2025 # Microsoft Teams connects shared channels -Microsoft Teams connects shared channels, which allow members of a channel to collaborate with users across other teams and organizations. You can create and share a shared channel with: +Teams connects shared channels, which facilitates secure collaboration seamlessly. Allow external members outside of your organization to collaborate with internal users in Teams without changing their user context. You can create and share a shared channel with: * Members of another team within the same organization. * Individuals within the same organization. * Individuals and other teams of other organizations. +Shared channels ensure: + +* Enhanced user experience through cross-tenanants collaboration +* Secure granular access control +* Real-time membership syncing + +:::image type="content" source="~/assets/images/app-fundamentals/shared-channels-teams.png" alt-text="Diagram shows Team B from organization A and Team C from organization B collaborating in a shared channel as Team A."::: + > [!NOTE] > > * Tab apps in shared channels are available in [Government Community Cloud (GCC), GCC High, Department of Defense (DoD)](../cloud-overview.md#teams-app-capabilities), and [Teams operated by 21Vianet](../sovereign-cloud.md) environments. > * SharePoint and the SharePoint pages apps aren't supported for shared channels in GCC, GCC High, DoD, and Teams operated by 21Vianet environments. -Teams connects shared channels, which facilitates secure collaboration seamlessly. Allow external users outside of your organization to collaborate with internal users in Teams without changing their user context. Enhance user experience through cross-tenanants collaboration, secure granular access control, and real-time membership syncing. - -:::image type="content" source="~/assets/images/app-fundamentals/shared-channels-teams.png" alt-text="Diagram shows Team B from organization A and Team C from organization B collaborating in a shared channel as Team A."::: - ## Enable your app for shared channels SupportedChannelTypes is an optional property that enables your app in nonstandard channels. If your app supports the team scope and the property is defined, Teams enables your app in each channel type accordingly. Private and shared channels are supported. For more information, see [supportedChannelTypes](../../resources/schema/manifest-schema.md#supportedchanneltypes). @@ -142,7 +146,7 @@ You can manage indirect membership in shared channels using the following Micros > [!NOTE] > `allowedMembers` API returns only newly associated users and doesn't apply to unshared events. -## Classify members in the shared channel as in-tenant or out-tenant +## Classify shared channel members as in-tenant or out-tenant You can classify members as in-tenant or out-tenant by comparing the `tenantID` of the member or team with `hostTeamTenantID` as follows: @@ -155,11 +159,11 @@ You can classify members as in-tenant or out-tenant by comparing the `tenantID` >[!NOTE] >You get the list of direct members of the channel only. -2. Call microsoftTeams.app.getContext() from the Teams JavaScript client library (**TeamsJS SDK**). +2. Call microsoftTeams.app.getContext() in your tab from the Teams JavaScript client library (**TeamsJS SDK**). The Teams context page opens with details such as **displayName**, **membershipType**, **ownerGroupID** , and **tenantGroupID**. -3. Compare the `tenantGroupID` of the member to the `hostTenantID` property - and determine if the member is in-tenant or out-tenant. +3. Compare the `ownerTenantID` of the member to the `hostTenantID` property + and determine if the member is an in-tenant or out-tenant. ## Microsoft Entra native identity From c068eda1feb3aa098edf30838b584bc33f9a7ec8 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 8 Sep 2025 17:56:39 +0530 Subject: [PATCH 40/56] updated changes by Dev0 --- .../concepts/build-and-test/shared-channels.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 3582f9adc87..6eeef70aaff 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -12,9 +12,9 @@ ms.date: 04/09/2025 Teams connects shared channels, which facilitates secure collaboration seamlessly. Allow external members outside of your organization to collaborate with internal users in Teams without changing their user context. You can create and share a shared channel with: -* Members of another team within the same organization. -* Individuals within the same organization. -* Individuals and other teams of other organizations. +* Members of another team within the same organization +* Individuals within the same organization +* Individuals and other teams of other organizations Shared channels ensure: @@ -22,6 +22,8 @@ Shared channels ensure: * Secure granular access control * Real-time membership syncing +A sample illustration showing shared channel membership is as follows: + :::image type="content" source="~/assets/images/app-fundamentals/shared-channels-teams.png" alt-text="Diagram shows Team B from organization A and Team C from organization B collaborating in a shared channel as Team A."::: > [!NOTE] @@ -66,12 +68,12 @@ Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest * **Indirect Members**: Users who are members of the team, with which the channel is shared, including teams in the same tenant or in a cross-tenant. -Additionally, you can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. This property identifies the source of a member’s access to a shared channel, as shown in the following table. +Additionally, you can identify whether a member of a shared channel is direct or indirect by checking the *@microsoft.graph.originalSourceMembershipUrl* annotation. This property identifies the source of a member’s access to a shared channel, as shown in the following table. |Member Type |Annotation Present? |Description | |---------|---------|---------| |Direct Member | **Yes** | The user is added directly to the shared channel. | -|Indirect Member| **Yes** | The user accesses the shared channel through another team. The **@microsoft.graph.originalSourceMembershipUrl** property includes a URL that points to the source team and indicates that the user is an indirect member of the shared channel. | +|Indirect Member| **Yes** | The user accesses the shared channel through another team. The *@microsoft.graph.originalSourceMembershipUrl* property includes a URL that points to the source team and indicates that the user is an indirect member of the shared channel. | > [!NOTE] > You might receive duplicate notifications when a member is added to a shared channel. This scenario can happen if the member is already part of the shared channel directly or through another linked team. Use the **List allMembers API** to view all the direct and indirect members. @@ -157,10 +159,10 @@ You can classify members as in-tenant or out-tenant by comparing the `tenantID` ``` >[!NOTE] - >You get the list of direct members of the channel only. + > The GET API only gives you the list of direct members of the shared channel. 2. Call microsoftTeams.app.getContext() in your tab from the Teams JavaScript client library (**TeamsJS SDK**). - The Teams context page opens with details such as **displayName**, **membershipType**, **ownerGroupID** , and **tenantGroupID**. + The getContext() call returns context of the shared channel, which contains the details such as **displayName**, **membershipType**, **ownerGroupID** , and **tenantGroupID**. 3. Compare the `ownerTenantID` of the member to the `hostTenantID` property and determine if the member is an in-tenant or out-tenant. From 60f9f78fee0a3c732b6bf0dff25900449747a8b5 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 8 Sep 2025 18:02:33 +0530 Subject: [PATCH 41/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 6eeef70aaff..74eb445b083 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -86,7 +86,7 @@ Apps installed in shared channels receive notifications when users are added to 1. [Install the app](../deploy-and-publish/apps-upload.md) in a host team and enable it for the shared channel. 1. Create a valid Microsoft Graph change notification subscription to monitor associated team membership changes and shared or unshared events using supported APIs. -To receive both direct and indirect member update notifications, you must include **both the query string parameters** when creating a subscription. If the query strings aren't provided, the subscription only delivers notifications for direct member updates. To learn more, see [Channel membership access](/graph/teams-changenotifications-channelmembership). +To receive both direct and indirect member update notifications, you must include both the query string parameters when creating a subscription. If the query strings aren't provided, the subscription only delivers notifications for direct member updates. To learn more, see [Channel membership access](/graph/teams-changenotifications-channelmembership). ```http `/teams/{team-id}/channels/getAllMembers?notifyOnIndirectMembershipUpdate=true&suppressNotificationWhenSharedUnsharedWithTeam=true` From 01c2f314342345f15a630105475059f4946aec54 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 10 Sep 2025 16:59:31 +0530 Subject: [PATCH 42/56] fixed internal review changes, typos and what's new section changes --- .../build-and-test/shared-channels.md | 24 +++++++++---------- msteams-platform/whats-new.md | 4 ++-- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 74eb445b083..5f84b3f5ed8 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -8,9 +8,9 @@ ms.topic: conceptual ms.date: 04/09/2025 --- -# Microsoft Teams connects shared channels +# Microsoft Teams connect shared channels -Teams connects shared channels, which facilitates secure collaboration seamlessly. Allow external members outside of your organization to collaborate with internal users in Teams without changing their user context. You can create and share a shared channel with: +Teams connect shared channels, which facilitates secure collaboration seamlessly. Allow external members outside of your organization to collaborate with internal users in Teams without changing their user context. You can create and share a shared channel with: * Members of another team within the same organization * Individuals within the same organization @@ -18,7 +18,7 @@ Teams connects shared channels, which facilitates secure collaboration seamlessl Shared channels ensure: -* Enhanced user experience through cross-tenanants collaboration +* Enhanced user experience through cross-tenants collaboration * Secure granular access control * Real-time membership syncing @@ -33,7 +33,7 @@ A sample illustration showing shared channel membership is as follows: ## Enable your app for shared channels -SupportedChannelTypes is an optional property that enables your app in nonstandard channels. If your app supports the team scope and the property is defined, Teams enables your app in each channel type accordingly. Private and shared channels are supported. For more information, see [supportedChannelTypes](../../resources/schema/manifest-schema.md#supportedchanneltypes). +SupportedChannelTypes is an optional property that enables your app in non-standard channels. If your app supports the team scope and the property is defined, Teams enables your app in each channel type accordingly. Private and shared channels are supported. For more information, see [supportedChannelTypes](../../resources/schema/manifest-schema.md#supportedchanneltypes). ```JSON "supportedChannelTypes": [ @@ -44,7 +44,7 @@ SupportedChannelTypes is an optional property that enables your app in nonstanda ## Get context for shared channels -When the content UX is loaded in a shared channel, use the data received from `getContext` call for shared channel changes. `getContext` call publishes two new properties, `hostTeamGroupID` and `hostTenantID`, which are used to retrieve channel membership using Microsoft Graph APIs. `hostTeam` is the team that creates the shared channel. +When the content UX is loaded in a shared channel, use the data received from `getContext` call for shared channel changes. `getContext` call publishes two new properties, `ownerGroupID` and `ownerTenantID`, which are used to retrieve channel membership using Microsoft Graph APIs. `hostTeam` is the team that creates the shared channel. For more information to enable your tab, see: @@ -60,15 +60,15 @@ You can collaborate with external members outside of your organization using sha ## Get shared channel membership -Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http) to retrieve all members (**direct** and **indirect**) of a shared channel. +Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http) to retrieve both direct and indirect members of a shared channel. -### Identify Direct vs. Indirect Members +### Identify direct or indirect members -* **Direct Members**: Users who are added directly to the channel, including users from other tenants (cross-tenants). +* Direct Members: Users who are added directly to the channel, including users from other tenants (cross-tenants). -* **Indirect Members**: Users who are members of the team, with which the channel is shared, including teams in the same tenant or in a cross-tenant. +* Indirect Members: Users who are members of the team, with which the channel is shared, including teams in the same tenant or in a cross-tenant. -Additionally, you can identify whether a member of a shared channel is direct or indirect by checking the *@microsoft.graph.originalSourceMembershipUrl* annotation. This property identifies the source of a member’s access to a shared channel, as shown in the following table. +Additionally, you can identify whether a member of a shared channel is direct or indirect by checking the **@microsoft.graph.originalSourceMembershipUrl** annotation. This property identifies the source of a member’s access to a shared channel, as shown in the following table. |Member Type |Annotation Present? |Description | |---------|---------|---------| @@ -150,7 +150,7 @@ You can manage indirect membership in shared channels using the following Micros ## Classify shared channel members as in-tenant or out-tenant -You can classify members as in-tenant or out-tenant by comparing the `tenantID` of the member or team with `hostTeamTenantID` as follows: +You can classify members as in-tenant or out-tenant by comparing the `TenantID` of the member or team with `OwnerTenantID` as follows: 1. Get the tenantID of the member you wish to compare. @@ -164,7 +164,7 @@ You can classify members as in-tenant or out-tenant by comparing the `tenantID` 2. Call microsoftTeams.app.getContext() in your tab from the Teams JavaScript client library (**TeamsJS SDK**). The getContext() call returns context of the shared channel, which contains the details such as **displayName**, **membershipType**, **ownerGroupID** , and **tenantGroupID**. -3. Compare the `ownerTenantID` of the member to the `hostTenantID` property +3. Compare the `TenantID` of the member to the `OwnerTenantID` property and determine if the member is an in-tenant or out-tenant. ## Microsoft Entra native identity diff --git a/msteams-platform/whats-new.md b/msteams-platform/whats-new.md index e3a7ce3a26c..785a69c3fc6 100644 --- a/msteams-platform/whats-new.md +++ b/msteams-platform/whats-new.md @@ -36,6 +36,8 @@ Teams platform features that are available to all app developers.
**2025 August** +***Sep 11, 2025***: [Apps can now receive notifications when users are added to or removed from a shared channel through associated teams, helping developers maintain accurate access control](/microsoftteams/platform/concepts/build-and-test/shared-channels) + * ***August 19, 2025***: [Teams now supports token prefetching for apps that use nested app authentication (NAA). This enhancement enables the host to acquire authentication tokens proactively before the app launches, improving startup performance and reducing latency.](concepts/authentication/nested-authentication.md#token-prefetching-for-nested-app-authentication-naa)
* ***August 08, 2025***: [Introducing app manifest v1.23 with support for custom contextual tabs and system-generated metadata for agents.](/microsoft-365/extensibility/schema/?view=m365-app-1.23&preserve-view=true) @@ -44,8 +46,6 @@ Teams platform features that are available to all app developers.
* ***July 10, 2025***: [Custom icons for Teams notifications help your app stand out and increase engagement through more personalized activity feed updates.](/graph/teams-send-activityfeednotifications#custom-activity-icons-in-activity-feed-notifications)
-***Aug 15, 2025***: [Apps can now recieve notifications when users are added to or removed from a shared channel through assoicated teams, helping developers maintain accurate access control](/microsoftteams/platform/concepts/build-and-test/shared-channels) - :::column-end::: :::row-end:::
From 25470228f680624ac59ff5f33c007623447f1d08 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 10 Sep 2025 17:09:39 +0530 Subject: [PATCH 43/56] added a bullet in what's new section --- msteams-platform/whats-new.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/whats-new.md b/msteams-platform/whats-new.md index 785a69c3fc6..9639857f9be 100644 --- a/msteams-platform/whats-new.md +++ b/msteams-platform/whats-new.md @@ -36,7 +36,7 @@ Teams platform features that are available to all app developers.
**2025 August** -***Sep 11, 2025***: [Apps can now receive notifications when users are added to or removed from a shared channel through associated teams, helping developers maintain accurate access control](/microsoftteams/platform/concepts/build-and-test/shared-channels) +* **Sep 11, 2025***: [Apps can now receive notifications when users are added to or removed from a shared channel through associated teams, helping developers maintain accurate access control](/microsoftteams/platform/concepts/build-and-test/shared-channels) * ***August 19, 2025***: [Teams now supports token prefetching for apps that use nested app authentication (NAA). This enhancement enables the host to acquire authentication tokens proactively before the app launches, improving startup performance and reducing latency.](concepts/authentication/nested-authentication.md#token-prefetching-for-nested-app-authentication-naa)
From 19eaaa2d3357cb0aa4682a92de56c29e11e3bf02 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 10 Sep 2025 18:32:51 +0530 Subject: [PATCH 44/56] updated property names as per UI --- .../concepts/build-and-test/shared-channels.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 5f84b3f5ed8..194e1dc7093 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -150,9 +150,9 @@ You can manage indirect membership in shared channels using the following Micros ## Classify shared channel members as in-tenant or out-tenant -You can classify members as in-tenant or out-tenant by comparing the `TenantID` of the member or team with `OwnerTenantID` as follows: +You can classify members as in-tenant or out-tenant by comparing the `TenantId` of the member or team with `ownerTenantId` as follows: -1. Get the tenantID of the member you wish to compare. +1. Get the TenantId of the member you wish to compare. ```http GET /teams/{host-team-group-id}/channels/{channel-id}/members @@ -162,9 +162,9 @@ You can classify members as in-tenant or out-tenant by comparing the `TenantID` > The GET API only gives you the list of direct members of the shared channel. 2. Call microsoftTeams.app.getContext() in your tab from the Teams JavaScript client library (**TeamsJS SDK**). - The getContext() call returns context of the shared channel, which contains the details such as **displayName**, **membershipType**, **ownerGroupID** , and **tenantGroupID**. + The getContext() call returns context of the shared channel, which contains the details such as **displayName**, **membershipType**, **ownerGroupId** , and **ownerTenantId**. -3. Compare the `TenantID` of the member to the `OwnerTenantID` property +3. Compare the `TenantId` of the member to the `ownerTenantId` property and determine if the member is an in-tenant or out-tenant. ## Microsoft Entra native identity From e4db921debd7c5acd08cbba02fd13142394cb03c Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Mon, 15 Sep 2025 13:00:56 +0530 Subject: [PATCH 45/56] changed content under validate user access for membership updates --- .../concepts/build-and-test/shared-channels.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 194e1dc7093..398868a97a3 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -1,5 +1,5 @@ --- -title: Teams Connects Shared Channels +title: Teams Connect Shared Channels author: surbhigupta description: Learn about Teams Connect shared channels to securely collaborate with internal and external users in a shared space without switching tenants. ms.author: surbhigupta @@ -96,7 +96,7 @@ This subscription enables apps to monitor membership changes in shared channels ### Validate user access for membership updates -When an app receives a notification for an indirect membership update, it’s important to verify whether the user still has access to the shared channel as the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access is truly lost. Use the **doesUserHaveAccess** API to determine whether the user still has access to the shared channel. +When an app receives a 'member removed' notification for an indirect membership update, it’s important to verify whether the user is removed from the shared channel, especially since the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access to the shared channel is actually revoked. Use the **doesUserHaveAccess** API to determine whether the user is removed from the shared channel. ```http GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName') @@ -104,6 +104,13 @@ GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',t See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accesses and relevant permissions. +When a member receives a 'member added' notification for an indirect membership update, +See [allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&branch=pr-en-us-27360&tabs=http), to refresh the list of all memebers. + +```http +GET /teams/{team-id}/channels/{channel-id}/allMembers +``` + ### Handle bulk membership changes If there are bulk membership changes, Teams curbs individual membership update notifications when a channel is shared or unshared with a team. This feature reduces notification volume and improves performance. From 6a9f3aadffa9f408c43c1af355bc3222d4b47a6e Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Tue, 16 Sep 2025 06:26:10 +0530 Subject: [PATCH 46/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 398868a97a3..40fe2c0df8e 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -97,13 +97,12 @@ This subscription enables apps to monitor membership changes in shared channels ### Validate user access for membership updates When an app receives a 'member removed' notification for an indirect membership update, it’s important to verify whether the user is removed from the shared channel, especially since the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access to the shared channel is actually revoked. Use the **doesUserHaveAccess** API to determine whether the user is removed from the shared channel. +See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accesses and relevant permissions. ```http GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName') ``` -See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accesses and relevant permissions. - When a member receives a 'member added' notification for an indirect membership update, See [allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&branch=pr-en-us-27360&tabs=http), to refresh the list of all memebers. From 0b95c7a60d4f01879cd4c34a7cf5772556c979ca Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 10:31:43 +0530 Subject: [PATCH 47/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 1 + 1 file changed, 1 insertion(+) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 40fe2c0df8e..5821c7ae562 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -10,6 +10,7 @@ ms.date: 04/09/2025 # Microsoft Teams connect shared channels +Teams connect shared channels, which facilitates secure collaboration seamlessly. Allow external members outside of your organization to collaborate with internal users in Teams without changing their user context. You can create and share a shared channel with: Teams connect shared channels, which facilitates secure collaboration seamlessly. Allow external members outside of your organization to collaborate with internal users in Teams without changing their user context. You can create and share a shared channel with: * Members of another team within the same organization From ede47b3ad02560b6dcfbeb9d96d303ce9f2ad950 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 11:34:42 +0530 Subject: [PATCH 48/56] incorporated changes --- .../build-and-test/shared-channels.md | 36 +++---------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 5821c7ae562..1565850f93a 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -10,7 +10,6 @@ ms.date: 04/09/2025 # Microsoft Teams connect shared channels -Teams connect shared channels, which facilitates secure collaboration seamlessly. Allow external members outside of your organization to collaborate with internal users in Teams without changing their user context. You can create and share a shared channel with: Teams connect shared channels, which facilitates secure collaboration seamlessly. Allow external members outside of your organization to collaborate with internal users in Teams without changing their user context. You can create and share a shared channel with: * Members of another team within the same organization @@ -97,15 +96,16 @@ This subscription enables apps to monitor membership changes in shared channels ### Validate user access for membership updates -When an app receives a 'member removed' notification for an indirect membership update, it’s important to verify whether the user is removed from the shared channel, especially since the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access to the shared channel is actually revoked. Use the **doesUserHaveAccess** API to determine whether the user is removed from the shared channel. -See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http) to learn more about user accesses and relevant permissions. +When an app receives a 'member removed' notification for an indirect membership update, it’s important to verify whether the user is removed from the shared channel, especially since the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access to the shared channel is actually revoked. +Use the **doesUserHaveAccess** API to determine whether the user is removed from the shared channel. +See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http&preserve-view=true) to learn more about user accesses and relevant permissions. ```http GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName') ``` When a member receives a 'member added' notification for an indirect membership update, -See [allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&branch=pr-en-us-27360&tabs=http), to refresh the list of all memebers. +See [allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&branch=pr-en-us-27360&tabs=http&preserve-view=true), to refresh the list of all memebers. ```http GET /teams/{team-id}/channels/{channel-id}/allMembers @@ -121,7 +121,7 @@ To reduce notification overload during membership updates, such as when a shared `/teams/{team-id}/channels/{channel-id}/sharedWithTeams` -The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team. It avoids thousands of per-user notifications and improves performance for apps that monitor membership changes. Ensure that you update the shared channel member list using the /allMembers API after receiving a 'shared with' or 'unshared from' team notification. +The sharedWithTeams subscription sends a single notification when a channel is shared or unshared with a team. It avoids thousands of per-user notifications and improves performance for apps that monitor membership changes. Ensure that you update the shared channel member list using the [allMembers](/graph/api/channel-list-allmembers?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API after receiving a 'shared with' or 'unshared from' team notification. > [!NOTE] > To support membership updates in shared channels, apps using resource-specific consent (RSC) must request extended permissions. @@ -174,32 +174,6 @@ You can classify members as in-tenant or out-tenant by comparing the `TenantId` 3. Compare the `TenantId` of the member to the `ownerTenantId` property and determine if the member is an in-tenant or out-tenant. -## Microsoft Entra native identity - -Apps must function cross-tenants in installation and usage. The following table lists the channel types and their corresponding group IDs: - -|Channel type| groupId | hostTeamGroupId | -|----------|---------|-----------------| -|Regular | Team Microsoft Entra group ID | Team Microsoft Entra group ID | -|Shared | Empty | Host Team Microsoft Entra group ID | - -## Apps in federated group chats with external users - -> [!NOTE] -> -> * Apps in federated group chats with external users aren't available in [Government Community Cloud (GCC), GCC High, Department of Defense (DoD)](../cloud-overview.md#teams-app-capabilities), and [Teams operated by 21Vianet](~/concepts/sovereign-cloud.md) environments. -> * Apps aren't supported in one-on-one chats, channels, or meetings with external users. - -Teams supports the use of apps in federated group chats with external users. These users can't add, update, or remove apps from the group chat. Only the host of the group chat can add, update, or remove apps. However, all members of the chat, including external users, can use apps under the following conditions: - -* The tenant admin of the group chat host's organization and the tenant admin of the external user's organization must allow the use of the app in federated group chats. For more information, see [Teams apps for external attendees or guests from outside an organization](/microsoftteams/apps-external-users). -* The app allows access to external users in federated group chats. - -If you're developing an app for use in federated group chats with external users, register your app as a multitenant app in Microsoft Entra ID. This action allows users across multiple organizations to access your app. - -> [!NOTE] -> If you want to test the [code sample](#code-sample) with an external user in a federated group chat, you must first add the external user as a guest to your tenant. For more information, see [Quickstart: Add a guest user and send an invitation](/entra/external-id/b2b-quickstart-add-guest-users-portal). After adding the user to the tenant, go to the federated group chat and add the guest to test the app. - ## Code sample | Sample name | Description | .NET | Node.js | Python | From b4dd91b3e63ae53e968f93ee473df46b56e5452e Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 11:49:56 +0530 Subject: [PATCH 49/56] updated APIs --- .../concepts/build-and-test/shared-channels.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 1565850f93a..eaabcb079b1 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -140,6 +140,12 @@ You can manage indirect membership in shared channels using the following Micros GET /teams/{team-id}/channels/{channel-id}/allMembers ``` +* Use [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http&preserve-view=true) API to determine whether the user is removed from the channel and view all user accesses and relevant permissions. + + ```http + GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',tenantId='@TenantID',userPrincipalName='@UserPrincipalName') + ``` + * Use [sharedWithTeams](/graph/api/sharedwithchannelteaminfo-list?branch=main&branchFallbackFrom=pr-en-us-13010&view=graph-rest-1.0&tabs=http&preserve-view=true) API to list all teams a channel is shared with. ```http @@ -162,7 +168,7 @@ You can classify members as in-tenant or out-tenant by comparing the `TenantId` 1. Get the TenantId of the member you wish to compare. ```http - GET /teams/{host-team-group-id}/channels/{channel-id}/members + GET /teams/{host-team-group-id}/channels/{channel-id}/allMembers ``` >[!NOTE] From 1c69a8c52c780ebe59e0db59d8f89228584bd6ee Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 12:00:06 +0530 Subject: [PATCH 50/56] fixed PR Warning --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index eaabcb079b1..d1715dfd261 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -60,7 +60,7 @@ You can collaborate with external members outside of your organization using sha ## Get shared channel membership -Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http) to retrieve both direct and indirect members of a shared channel. +Use the [List allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&tabs=http&preserve-view=true) to retrieve both direct and indirect members of a shared channel. ### Identify direct or indirect members From 33ccb33e7aa83ac82fd5b5a8a77d9c26f5c770ad Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 12:05:00 +0530 Subject: [PATCH 51/56] deleted note --- msteams-platform/concepts/build-and-test/shared-channels.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index d1715dfd261..efa57de4996 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -171,9 +171,6 @@ You can classify members as in-tenant or out-tenant by comparing the `TenantId` GET /teams/{host-team-group-id}/channels/{channel-id}/allMembers ``` - >[!NOTE] - > The GET API only gives you the list of direct members of the shared channel. - 2. Call microsoftTeams.app.getContext() in your tab from the Teams JavaScript client library (**TeamsJS SDK**). The getContext() call returns context of the shared channel, which contains the details such as **displayName**, **membershipType**, **ownerGroupId** , and **ownerTenantId**. From 6498775250bfad01ed09eda31572c8a49fd33197 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 14:48:27 +0530 Subject: [PATCH 52/56] Acrolinx --- msteams-platform/concepts/build-and-test/shared-channels.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index efa57de4996..097d419703d 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -96,7 +96,7 @@ This subscription enables apps to monitor membership changes in shared channels ### Validate user access for membership updates -When an app receives a 'member removed' notification for an indirect membership update, it’s important to verify whether the user is removed from the shared channel, especially since the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access to the shared channel is actually revoked. +When an app receives a 'member removed' notification for an indirect membership update, it’s important to verify whether the user is removed from the shared channel, especially since the same user might have both direct and indirect membership. For example, if a user is removed from a team that shares a channel, the app should confirm whether the user's access to the shared channel is revoked. Use the **doesUserHaveAccess** API to determine whether the user is removed from the shared channel. See [doesUserHaveAccess API](/graph/api/channel-doesuserhaveaccess?view=graph-rest-beta&tabs=http&preserve-view=true) to learn more about user accesses and relevant permissions. @@ -105,7 +105,7 @@ GET /teams/{team-id}/channels/{channel-id}/doesUserHaveAccess(userId='@userid',t ``` When a member receives a 'member added' notification for an indirect membership update, -See [allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&branch=pr-en-us-27360&tabs=http&preserve-view=true), to refresh the list of all memebers. +See [allMembers API](/graph/api/channel-list-allmembers?view=graph-rest-beta&branch=pr-en-us-27360&tabs=http&preserve-view=true), to refresh the list of all member. ```http GET /teams/{team-id}/channels/{channel-id}/allMembers From 429b3f128446f0dc5a694207a47063b6a4883edc Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 15:01:02 +0530 Subject: [PATCH 53/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 097d419703d..9719a0d26ab 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -193,3 +193,5 @@ You can classify members as in-tenant or out-tenant by comparing the `TenantId` * [Retention policy for Teams locations](/microsoft-365/compliance/create-retention-policies) * [Use guest access and external access to collaborate with people outside your organization](/microsoftteams/communicate-with-users-from-other-organizations) * [Manage external meetings and chat with people and organizations using Microsoft identities](/microsoftteams/trusted-organizations-external-meetings-chat?tabs=organization-settings) + +test From 40543818c96a7b1e55376de700e892edf0a367a0 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 15:06:00 +0530 Subject: [PATCH 54/56] removed test --- msteams-platform/concepts/build-and-test/shared-channels.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 9719a0d26ab..097d419703d 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -193,5 +193,3 @@ You can classify members as in-tenant or out-tenant by comparing the `TenantId` * [Retention policy for Teams locations](/microsoft-365/compliance/create-retention-policies) * [Use guest access and external access to collaborate with people outside your organization](/microsoftteams/communicate-with-users-from-other-organizations) * [Manage external meetings and chat with people and organizations using Microsoft identities](/microsoftteams/trusted-organizations-external-meetings-chat?tabs=organization-settings) - -test From 1bb3302e3e2f6d3a95ed2f43eb7f1e1dcc74717c Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 15:32:49 +0530 Subject: [PATCH 55/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 1 + 1 file changed, 1 insertion(+) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 097d419703d..361b7054904 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -193,3 +193,4 @@ You can classify members as in-tenant or out-tenant by comparing the `TenantId` * [Retention policy for Teams locations](/microsoft-365/compliance/create-retention-policies) * [Use guest access and external access to collaborate with people outside your organization](/microsoftteams/communicate-with-users-from-other-organizations) * [Manage external meetings and chat with people and organizations using Microsoft identities](/microsoftteams/trusted-organizations-external-meetings-chat?tabs=organization-settings) +test From 657a0e6f6784d8f59a1e4b8de487fe2145933439 Mon Sep 17 00:00:00 2001 From: NehaHEDAU-MSFT Date: Wed, 17 Sep 2025 15:37:21 +0530 Subject: [PATCH 56/56] Update shared-channels.md --- msteams-platform/concepts/build-and-test/shared-channels.md | 1 - 1 file changed, 1 deletion(-) diff --git a/msteams-platform/concepts/build-and-test/shared-channels.md b/msteams-platform/concepts/build-and-test/shared-channels.md index 361b7054904..097d419703d 100644 --- a/msteams-platform/concepts/build-and-test/shared-channels.md +++ b/msteams-platform/concepts/build-and-test/shared-channels.md @@ -193,4 +193,3 @@ You can classify members as in-tenant or out-tenant by comparing the `TenantId` * [Retention policy for Teams locations](/microsoft-365/compliance/create-retention-policies) * [Use guest access and external access to collaborate with people outside your organization](/microsoftteams/communicate-with-users-from-other-organizations) * [Manage external meetings and chat with people and organizations using Microsoft identities](/microsoftteams/trusted-organizations-external-meetings-chat?tabs=organization-settings) -test