Current Teams RSC permissions (manifest)
These are the existing resourceSpecific permissions in our Teams app manifest. They only apply inside the team/chat where the app is installed. For channels (team scope):ChannelMessage.Read.Group(Application) - receive all channel messages without @mentionChannelMessage.Send.Group(Application)Member.Read.Group(Application)Owner.Read.Group(Application)ChannelSettings.Read.Group(Application)TeamMember.Read.Group(Application)TeamSettings.Read.Group(Application)
ChatMessage.Read.Chat(Application) - receive all group chat messages without @mention
Example Teams manifest (redacted)
Minimal, valid example with the required fields. Replace IDs and URLs.Manifest caveats (must-have fields)
bots[].botIdmust match the Azure Bot App ID.webApplicationInfo.idmust match the Azure Bot App ID.bots[].scopesmust include the surfaces you plan to use (personal,team,groupChat).bots[].supportsFiles: trueis required for file handling in personal scope.authorization.permissions.resourceSpecificmust include channel read/send for channel traffic.
Updating an existing app
Capabilities: RSC only vs Graph
With Teams RSC only (app installed, no Graph API permissions)
Works:- Read channel message text content.
- Send channel message text content.
- Receive personal (DM) file attachments.
- Channel/group image or file contents (payload only includes an HTML stub).
- Downloading attachments stored in SharePoint/OneDrive.
- Reading message history beyond the live webhook event.
With Teams RSC + Microsoft Graph Application permissions
Adds:- Downloading hosted content (images pasted into messages).
- Downloading file attachments stored in SharePoint/OneDrive.
- Reading channel/chat message history via Graph.
RSC vs Graph API
Bottom line: RSC is for real-time listening; Graph API is for historical access. To catch up on missed messages while offline, you need Graph API with
ChannelMessage.Read.All (requires admin consent).
Graph-enabled media + history
Enable only the Microsoft Graph application permissions needed for the Teams scopes and data you use:- Entra ID (Azure AD) App Registration → add Graph Application permissions:
ChannelMessage.Read.Allfor channel attachments and channel history.Chat.Read.Allfor group-chat attachments and group-chat history.Files.Read.Allwhen attachment bytes must be downloaded from SharePoint/OneDrive storage; history-only setups do not need it.
- Grant admin consent for the tenant.
- Bump the Teams app manifest version, re-upload, and reinstall the app in Teams.
- Fully quit and relaunch Teams to clear cached app metadata.
Channel/group file recovery (graphMediaFallback)
Teams can remove file markers from the HTML activity sent to a bot. In that case, the Bot Framework activity is indistinguishable from an ordinary HTML message; the complete attachment reference exists only on the Graph copy of the message.
Enable the fallback after granting the permissions above:
false so existing installations do not gain extra Graph traffic or permission errors automatically.
User mentions: @mentions work out of the box for users already in the conversation. To dynamically search and mention users not in the current conversation, add User.Read.All (Application) permission and grant admin consent.