---
summary: "Microsoft Teams 应用清单、RSC 权限以及每个功能所需的图形权限"
read_when:
- "构建或更新 Teams 应用清单"
- "决定授予 RSC 或 Microsoft Graph 权限"
- "频道图像或历史记录丢失"
title: "Microsoft Teams 清单和权限"
sidebarTitle: "清单和权限"
---
Teams 应用清单、其声明的特定于资源的同意权限以及解锁媒体和历史记录的 Microsoft 图形权限。
## 当前 Teams RSC 权限(清单)
这些是我们的 Teams 应用清单中的 **现有资源特定权限**。它们仅适用于安装应用程序的 team/chat 内部。
**适用于频道(团队范围):**
- `ChannelMessage.Read.Group`(应用程序)-接收所有没有@mention的通道消息
- `ChannelMessage.Send.Group`(应用)
- `Member.Read.Group`(应用)
- `Owner.Read.Group`(应用)
- `ChannelSettings.Read.Group`(应用)
- `TeamMember.Read.Group`(应用)
- `TeamSettings.Read.Group`(应用)
**适用于群聊:**
- `ChatMessage.Read.Chat`(应用程序)-接收所有没有@mention的群聊消息
通过 Teams CLI 添加 RSC 权限:
```bash
teams app rsc add ChannelMessage.Read.Group --type Application
```
## Teams 清单示例(已脱敏)
带有必填字段的最小有效示例。替换 ID 和 URL。
```json5
{
$schema: "https://developer.microsoft.com/en-us/json-schemas/teams/v1.23/MicrosoftTeams.schema.json",
manifestVersion: "1.23",
version: "1.0.0",
id: "00000000-0000-0000-0000-000000000000",
name: { short: "OpenClaw" },
developer: {
name: "Your Org",
websiteUrl: "https://example.com",
privacyUrl: "https://example.com/privacy",
termsOfUseUrl: "https://example.com/terms",
},
description: { short: "OpenClaw in Teams", full: "OpenClaw in Teams" },
icons: { outline: "outline.png", color: "color.png" },
accentColor: "#5B6DEF",
bots: [
{
botId: "11111111-1111-1111-1111-111111111111",
scopes: ["personal", "team", "groupChat"],
isNotificationOnly: false,
supportsCalling: false,
supportsVideo: false,
supportsFiles: true,
},
],
webApplicationInfo: {
id: "11111111-1111-1111-1111-111111111111",
},
authorization: {
permissions: {
resourceSpecific: [
{ name: "ChannelMessage.Read.Group", type: "Application" },
{ name: "ChannelMessage.Send.Group", type: "Application" },
{ name: "Member.Read.Group", type: "Application" },
{ name: "Owner.Read.Group", type: "Application" },
{ name: "ChannelSettings.Read.Group", type: "Application" },
{ name: "TeamMember.Read.Group", type: "Application" },
{ name: "TeamSettings.Read.Group", type: "Application" },
{ name: "ChatMessage.Read.Chat", type: "Application" },
],
},
},
}
```
### 清单注意事项(必需字段)
- `bots[].botId` **必须** 与 Azure Bot App ID 匹配。
- `webApplicationInfo.id` **必须** 与 Azure Bot App ID 匹配。
- `bots[].scopes` 必须包含你计划使用的范围(`personal`、`team`、`groupChat`)。
- 在个人范围内进行文件处理时,需要 `bots[].supportsFiles: true`。
- `authorization.permissions.resourceSpecific` 必须包含用于通道流量的通道 read/send。
### 更新现有应用
```bash
# Download, edit, and re-upload the manifest
teams app manifest download manifest.json
# Edit manifest.json locally...
teams app manifest upload manifest.json
# Version is auto-bumped if content changed
```
更新后,请在每个团队中重新安装该应用,并且**完全退出并重新启动 Teams**(而不只是关闭窗口),以清除缓存的应用元数据。
手动更新清单(不使用 CLI)
1. 使用新的设置更新 `manifest.json`。
2. **增加 `version` 字段**(e.g.、`1.0.0` → `1.1.0`)。
3. **重新压缩**清单及图标(`manifest.json`、`outline.png`、`color.png`)。
4. 上传新的 zip:
- **Teams 管理中心:** Teams 应用 → 管理应用 → 找到你的应用 → 上传新版本。
- **旁加载:** Teams → 应用 → 管理你的应用 → 上传自定义应用。
## 功能:仅 RSC 与 Graph 对比
### 使用 **Teams 仅 RSC**(已安装应用,无 Graph API 权限)
可用:
- 读取频道消息的 **文本** 内容。
- 发送频道消息的 **文本** 内容。
- 接收 **个人(DM)** 文件附件。
NOT 是否有效:
- Channel/group **图像或文件内容**(有效负载仅包括HTML存根)。
- 下载SharePoint/OneDrive.中存储的附件
- 读取超出实时 webhook 事件之外的消息历史记录。
### 使用 **Teams RSC + Microsoft Graph 应用程序权限**
新增:
- 下载托管内容(粘贴到消息中的图片)。
- 下载SharePoint/OneDrive.中存储的文件附件
- 通过图表读取 channel/chat 消息历史记录。
### RSC 与 Graph API 对比
| 能力 | RSC 权限 | 图API |
| ----------------------- | -------------------- | ----------------------------------- |
| **实时消息** | 是(通过 webhook) | 否(仅轮询) |
| **历史消息** | No | 是(可以查询历史记录) |
| **设置复杂度** | 仅需应用清单 | 需要管理员同意 + token 流程 |
| **离线可用** | 否(必须运行中) | 是(可随时查询) |
**结论:** RSC 用于实时监听;Graph API 用于历史访问。若要在离线期间补取错过的消息,你需要带有 `ChannelMessage.Read.All` 的 Graph API(需要管理员同意)。
## 启用 Graph 的媒体 + 历史记录
仅启用 Teams 范围和您使用的数据所需的 Microsoft 图形应用程序权限:
1. Entra ID(Azure AD)**应用注册** → 添加 Graph **应用程序权限**:
- `ChannelMessage.Read.All` 用于频道附件和频道历史记录。
- `Chat.Read.All` 用于群聊附件和群聊历史记录。
- 当附件字节必须从 SharePoint/OneDrive 存储中下载时使用 `Files.Read.All`;仅历史记录的配置不需要它。
2. **向租户授予管理员同意**。
3. 提升 Teams 应用 **manifest 版本**,重新上传,并**在 Teams 中重新安装该应用**。
4. **完全退出并重新启动 Teams**,以清除缓存的应用元数据。
### Channel/group 文件恢复 (`graphMediaFallback`)
Teams 可能会从发送给 bot 的 HTML 活动中移除文件标记。在这种情况下,Bot Framework activity 与普通 HTML 消息无法区分;完整的附件引用只存在于该消息的 Graph 副本中。
在授予上述权限后启用该回退:
```json5
{
channels: {
msteams: {
graphMediaFallback: true,
},
},
}
```
这仅适用于频道和群聊。它会在 HTML activity 没有产生可直接下载的媒体时增加一次 Graph 消息查询,包括普通消息或仅提及消息。默认值为 `false`,因此现有安装不会自动获得额外的 Graph 流量或权限错误。
**用户提到:** @mentions 对于已经在对话中的用户来说是开箱即用的。要动态搜索和提及不在当前对话中的用户 ****,请添加 `User.Read.All`(应用程序)权限并授予管理员同意。