Skip to content

Commit fd0549a

Browse files
Update app-developer-guidance-shared-private-channel.md
Updated content changes
1 parent 440ab5f commit fd0549a

File tree

1 file changed

+10
-84
lines changed

1 file changed

+10
-84
lines changed

msteams-platform/concepts/build-and-test/app-developer-guidance-shared-private-channel.md

Lines changed: 10 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ ms.localizationpriority: high
77
ms.topic: conceptual
88
ms.date: 04/09/2025
99
---
10-
# Adapting Microsoft Teams App for Private and Shared Channels: A Developer's Guide
10+
# Adapt Microsoft Teams App for Private and Shared Channels: A Developer's Guide
1111

1212
As Microsoft Teams evolves, shared and private channels introduce new collaboration patterns that differ significantly from Standard channels. To function reliably and securely across all channel types, apps must become context-aware—specifically in terms of:
1313

@@ -26,9 +26,9 @@ This guide helps you understand the updates, best practices, and testing steps n
2626

2727
### What This Guide Covers?
2828

29-
- key concepts (membership, access, installation, storage)
29+
- Key concepts (membership, access, installation, storage)
3030
- Implementation steps
31-
- testing guidance
31+
- Testing guidance
3232
- Best practices
3333

3434
Before diving into implementation, learn about the different channel models available in Microsoft Teams.
@@ -516,80 +516,6 @@ To make sure your app works smoothly in shared, private, and standard channels,
516516
- Test your app with all kinds of users—owners, members, guests, and external users—across every channel type and confirm everything works as expected.
517517
- Watch for updates in Microsoft Teams documentation and changelogs. For example, keep your app updated when APIs, permissions, or channel features change.
518518

519-
## Technical Appendix: Teams App Update Guide for Shared & Private Channel Support
520-
521-
### Mandatory Updates for Teams Apps in Shared & Private Channels
522-
523-
To ensure proper functionality in shared and private channels, all apps must include these updates.
524-
525-
| Change Type | What to Do | Why It Matters | Example |
526-
|-------------|------------|----------------|---------|
527-
| **Mandatory** | Use the Channel Members API | Shared/Private channels have different members than the team. Using the wrong API can miss users or cause data leaks. | **Task app**: Assign tasks only to channel members, not all team members. |
528-
| **Mandatory** | Access the Channel's SharePoint Site | Each channel has its own SharePoint. Using the team site can break file access or expose data. | **Document app**: Store and retrieve files from the channel’s SharePoint site. |
529-
| **Mandatory** | Respect Channel Boundaries | Don’t access or post across channels unless the user allows it. | **Summary app**: Only summarize messages from channels the user opts into. |
530-
| **Mandatory** | Update the App Manifest | Declare support for Shared/Private channels so your app shows up there. | **Any app**: Add `"supportsChannelFeatures": "tier1"` to your manifest. |
531-
532-
### Optional UX Improvements for Shared & Private Channels
533-
534-
These improvements enhance user experience and app reliability, but they're optional.
535-
536-
| Area | What to Do | Why It Helps | Example |
537-
|------|------------|--------------|---------|
538-
| **Privacy & Access Controls** | Add logic to limit features for guests/external users | Keeps sensitive data safe and follows company policies | **Poll app**: Guests can vote, but only members can create polls or see results |
539-
| **Collaboration Features** | Adjust tools based on channel roles and members | Prevents confusion and accidental changes by guests | **Whiteboard app**: Guests can draw, but not erase others’ work |
540-
| **Smart Notifications** | Customize alerts by channel type and user role | Cuts down noise and makes alerts more useful | **Helpdesk app**: IT gets all alerts. vendors only see their tickets |
541-
542-
### Context & Event Payloads
543-
544-
Follow these guidelines to process events and payloads correctly in shared and private channels.
545-
546-
- Use teamId for the host team and channelId for the shared channel in context and event payloads.
547-
- Apply hostTeamId and hostTenantId when handling cross-tenant scenarios.
548-
- Detect external users by comparing a user’s tenantId with hostTenantId.
549-
- Listen for events like channelShared, channelUnshared, channelMemberAdded, and channelMemberRemoved to track changes in shared channels.
550-
- Ensure your app is present in the channel so it receives these events.
551-
552-
### API Changes
553-
554-
Use the latest APIs to support shared and private channels. Earlier versions might have limited support.
555-
556-
- Review the API Change Table in the Appendix for updates to Graph and Activity Payload Extensions (APX) APIs.
557-
- Switch to the latest APIs that support shared and private channels.
558-
559-
### Handling External Users
560-
561-
Follow these steps to identify and manage external or guest users when your app is used across tenants.
562-
563-
- Identify B2B Guests using role = guest in Graph or user role = guest in APX.
564-
- Detect B2B Native users by comparing their tenantId with the hostTenantId from getContext().
565-
- Fetch members using /teams/{teamId}/channels/{channelId}/allmembers for tabs.
566-
- Use channelMemberAdded and /v3/conversations/{conversationId}/pagedMembers to get members in bots.
567-
- Classify users as external if their tenantId doesn’t match the host tenant.
568-
569-
### Manifest and Permissions
570-
571-
Update your app manifest and permissions to support shared and private channels and enable required capabilities.
572-
573-
- Include supportsChannelFeatures = "tier1" in your app manifest so it supports shared and private channels.
574-
- Omit this setting, and your app doesn't appear in shared or private channels.
575-
- Remove this setting later, and your app stops showing up in those channels.
576-
- Update your manifest with Resource Specific Consent (RSC) permissions, as many APIs now require them for shared/private channel functionality.
577-
578-
> [!NOTE]
579-
>
580-
> - RSC permissions are optional.
581-
> - You can choose to use regular permissions instead.
582-
> - RSC is one way to access resources, and its use depends entirely on the app’s design.
583-
584-
### Privacy & Security
585-
586-
Follow these best practices to protect user data, respect privacy, and manage access in shared and private channels."
587-
588-
- Use channel-specific APIs—don’t assume team members are also channel members.
589-
- Access storage through channel-specific APIs and avoid cross-posting unless allowed.
590-
- Respect privacy boundaries, and avoid leaking data between channels or user types.
591-
- Handle internal users, B2B Guests, and B2B Direct Connect users correctly.
592-
- Test all scenarios, including edge cases.
593519

594520
## Troubleshooting Guide
595521

@@ -672,21 +598,21 @@ If you have questions about shared or private channels, permissions, or function
672598
| Can I be part of a shared channel without being in the parent team? | Yes, shared channels allow external users to join if invited and granted permissions. |
673599
| Who can create shared or private channels? | Typically, team owners or users with specific permissions. Admins might restrict this capability via policy settings. |
674600

675-
### Access & Permissions
601+
### Access and Permissions
676602

677603
| Question | Answer |
678604
|----------|--------|
679-
| Why can’t I see a private channel I was added to? | You must be a member of both the parent team and the private channel. Removal from the team revokes access. |
605+
| Why can’t I see a private channel I was added to? | You must be a member of both the parent team and the private channel. Removal from the team revokes access to the channel. |
680606
| Can guests or external users access shared channels? | Yes, if both organizations enable external access and the user is explicitly invited. |
681-
| How do I know if a channel is private or shared? | A lock icon indicates private channel. A link icon indicates shared channel = shared channel. |
682-
| Why am I seeing an 'Access Denied' error when joining a shared channel? | Possible causes: incorrect invitation, disabled external access, or wrong account/tenant. |
607+
| How do I know if a channel is private or shared? | A lock icon indicates a private channel. A link icon indicates shared channel = shared channel. |
608+
| Why am I seeing an 'Access Denied' error when joining a shared channel? | Possible causes are incorrect invitation, disabled external access, or wrong account or tenant. |
683609

684-
### Functionality & Limitations
610+
### Functionality and Limitations
685611

686612
| Question | Answer |
687613
|----------|--------|
688614
| Can I add apps or tabs to a private channel? | Yes, but some apps might not be supported due to permissions or compatibility. Check before adding. |
689-
| Are files in private channels stored differently? | Yes, they’re stored in a separate SharePoint site accessible only to channel members. |
615+
| Are files in private channels stored differently? | Yes, they are stored in a separate SharePoint site accessible only to channel members. |
690616
| Can I convert a private channel to a shared channel (or vice versa)? | No, channel types are permanent. Create a new channel and migrate content manually. |
691-
| What should I do if files or tabs aren’t loading in a channel? | Refresh the app/browser, clear cache, try another device, and verify permissions. |
617+
| What should I do if files or tabs aren’t loading in a channel? | Refresh the app or browser, clear cache, try another device, and verify permissions. |
692618
| How do I report issues with shared or private channels? | Contact your IT admin or support team with: channel name, type, and error message or screenshot. |

0 commit comments

Comments
 (0)