内容
# M365 发布雷达 — Microsoft 365 和 Azure 变更跟踪 Copilot 代理 📡
**M365 发布雷达** 是一个用于 Microsoft 365 Copilot 的声明式代理,帮助 IT 管理员、工程师和技术团队掌握 Microsoft 365 和 Azure 的变更 — 从一个地方,以自然语言,提供丰富的自适应卡片响应。
> [!WARNING]
> **🧪 预览版 — 构建快速,仍在测试中。** 该解决方案是“快速编码”的,目前正在测试中。提前共享,以便社区可以尝试并提供反馈,但 **响应可能不 100% 准确或完整**。在采取行动之前,请始终与官方 [Microsoft 365 路线图](https://www.microsoft.com/microsoft-365/roadmap)、[Azure 更新](https://azure.microsoft.com/updates/) 和 Microsoft 365 管理中心的消息中心进行核实。
它统一了三个变更来源:
- 🗺️ **Microsoft 365 路线图** — 即将推出、开发中、正在推出、已推出和即将停止的 M365 功能。
- ☁️ **Azure 更新** — Azure 服务更新、产品类别、停用和安全相关变更。
- 📢 **消息中心** *(可选,管理员授权)* — 租户服务更新消息、公告和事件。
> 该项目是两个早期社区代理的继任者 — [**M365 Insider**](https://github.com/alexc-MSFT/m365-insider)(路线图)和 [**Message Center Pulse**](https://github.com/alexc-MSFT/mc-pulse)(消息中心)。它结合并现代化了两者,成为一个单一的代理。
---
## ✨ 功能
- 使用 **实时** Microsoft 发布通信(MRC)数据,以自然语言回答有关 **Microsoft 365 路线图** 和 **Azure 更新** 的问题 — 永远不会过时。
- 显示重要的详细信息:标题、状态、受影响的产品、可用性/GA 日期、停用和深链接回官方来源。
- 提供 **洞察**,而不仅仅是列表 — 主题、即将发生的变更和时间敏感的提示(预览开启,即将停用)。包括 **代码解释器** 功能,用于即时分析和分组返回的数据。
- 将结果呈现为一致的 **自适应卡片**。
- *(配置后)* 允许 **管理员** 检索 **Microsoft 365 消息中心** 帖子 — 按服务、类别、严重性、消息 ID、日期、标签和关键词过滤。
### 建议的提示
- *"在接下来的几个月内,哪些 Microsoft Teams 功能正在推出或达到普遍可用性?*
- *"显示我开发中或预览中的最新 Microsoft 365 Copilot 路线图项目。*
- *"哪些 Azure 服务已宣布在今年停用,什么时候生效?*
- *"给我 Microsoft 365 路线图功能 ID 81379 的完整详细信息。*
- *(启用消息中心)* *"显示我需要采取行动的最新消息中心帖子。*
- *(启用消息中心)* *"哪些最近的消息中心帖子影响 Exchange Online,哪些是‘计划变更’?*
---
## 📸 实战演示
> [!NOTE]
> 下面的图像是 **说明性模拟**,使用代理的真实自适应卡片字段、名称和图标重现了 Microsoft 365 Copilot 体验。它们不是实时屏幕截图,显示的路线图/消息中心项目是代表性的示例。
**路线图和 Azure 更新** — 自然语言问题以丰富的自适应卡片回答:

**消息中心** *(可选,管理员授权)* — 为管理员显示服务变更、公告和事件:

---
## 🏗️ 架构
M365 发布雷达在声明式代理后面托管 **两个插件**:
| 功能 | 插件 | 运行时 | 数据源 | 认证 |
| --- | --- | --- | --- | --- |
| 路线图 + Azure 更新 | `release-radar-plugin.json` | **远程 MCP 服务器** | Microsoft 发布通信 MCP 服务器 (`https://www.microsoft.com/releasecommunications/mcp`) | 无(公共) |
| 消息中心 | `message-center-plugin.json` | **OpenAPI(API 插件)** | Microsoft Graph 服务通信 API (`serviceAnnouncement/messages`) | 委托 OAuth(每用户管理员登录) |
由于路线图/Azure 使用未经身份验证的 MCP 服务器,因此这些功能 **开箱即用**。消息中心直接调用 Microsoft Graph,因此需要 **委托** 管理员身份验证 — 它在部署者配置之前保持休眠状态(参见下文)。
---
## 🚀 入门指南
> **先决条件**
> - [Node.js](https://nodejs.org/)(支持版本:22)
> - 具有 [Microsoft 365 Copilot 许可证](https://learn.microsoft.com/microsoft-365-copilot/extensibility/prerequisites#prerequisites) 的 [用于开发的 Microsoft 365 帐户](https://docs.microsoft.com/microsoftteams/platform/toolkit/accounts)
> - [Microsoft 365 代理工具包](https://aka.ms/teams-toolkit)(VS Code 扩展或 CLI)
1. 克隆此存储库。
2. 在 Visual Studio Code 中打开文件夹。
3. 使用 Microsoft 365 代理工具包登录到您的 Microsoft 365 帐户。
4. **配置** 代理(代理工具包 → *配置*,或 `atk provision --env local`)。路线图和 Azure 更新功能立即生效。
5. 在 Microsoft 365 Copilot 中打开代理并尝试一个提示。
消息中心 **默认关闭**,需要以下额外的设置。
---
## 📢 启用消息中心(可选)
消息中心帖子是从 **Microsoft Graph 服务通信 API** 使用 **委托** 身份验证检索的租户特定管理员数据。启用它是 一次性设置。
> **注意:** 此功能不打算取代第一方 **Microsoft 365 管理** 代理。对于完整的管理员覆盖,Microsoft 建议使用 [Microsoft 365 管理代理](https://learn.microsoft.com/en-us/copilot/microsoft-365/copilot-for-microsoft-365-admin)。M365 发布雷达专门涵盖消息中心帖子。
> **谁可以使用它:** 启用后,只有具有适当管理员角色的用户才能查询消息中心:
> - 全局管理员
> - 服务支持管理员
> - 消息中心读取者
>
> 查看 [服务通信 API 权限](https://learn.microsoft.com/en-us/graph/api/resources/service-communications-api-overview?view=graph-rest-1.0#permissions)。
### 1. 在 Microsoft Entra 中注册应用
1. 在 Microsoft Entra 中创建新的应用注册(例如“M365 发布雷达”)。
2. 复制 **应用程序(客户端)ID** 和 **目录(租户)ID**。
3. 创建一个 **客户端密钥** 并复制其 **值**。
4. 在 **API 权限** 下,添加 Microsoft Graph → **委托** → `ServiceMessage.Read.All`,然后 **授予管理员同意**。
5. 在 **身份验证** 下,添加一个 **Web** 重定向 URI:`https://teams.microsoft.com/api/platform/v1.0/oAuthRedirect`。
### 2. 在 Teams 开发者门户中注册 OAuth 客户端
1. 进入 [Teams 开发者门户](https://dev.teams.microsoft.com/) → **工具 → OAuth 客户端注册** → 创建新的注册。
2. 配置:
- **注册名称:** 例如“M365 发布雷达”
- **基本 URL:** `https://graph.microsoft.com/v1.0`
- **限制组织使用:** *仅限我的组织*
- **限制 Teams 应用使用:** *任何 Teams 应用*(用于测试/验证 — 为生产环境限制到您的应用)
- **客户端 ID / 客户端密钥:** 步骤 1 中的 Entra 应用值
- **授权端点:** `https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/authorize`
- **令牌端点:** `https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token`
- **刷新端点:** `https://login.microsoftonline.com/{TENANT_ID}/oauth2/v2.0/token`
- **范围:** `ServiceMessage.Read.All`
- **启用 PKCE:** 关闭
- **客户端密码身份验证方法:** 请求正文参数(默认)
3. 保存并复制生成的 **OAuth 客户端注册 ID**。
### 3. 配置代理
在环境文件中设置注册 ID,然后重新配置:
- **本地测试:** 将其放入 `env/.env.local`(gitignored):
```
MC_OAUTH_REGISTRATION_ID=<您的 OAuth 客户端注册 ID>
```
- **其他环境(开发/生产):** 将其放入 `env/.env.<env>.user`(gitignored)。提交的 `env/.env.<env>` 模板附带 `MC_OAUTH_REGISTRATION_ID=disabled`,因此代理包在消息中心关闭时干净地打包。
重新配置代理。在第一次消息中心查询时,每个管理员都会登录并同意一次。
> ⚠️ **永远不要提交您的真实 OAuth 客户端注册 ID。** 仅在 gitignored 文件中保留它(`env/.env.local`,`env/.env.*.user`)。参见 [安全](#-安全)。
---
## ⚙️ 配置参考
| 变量 | 位置 | 目的 |
| --- | --- | --- |
| `MC_OAUTH_REGISTRATION_ID` | `env/.env.local`,`env/.env.*.user` | OAuth 客户端注册 ID,用于启用消息中心。值为 `disabled`(默认)使其保持关闭,同时仍然干净地打包。 |
| `AZURE_AI_OPENAI_ENDPOINT`,`AZURE_AI_API_KEY`,`AZURE_AI_API_VERSION`,`AZURE_AI_MODEL_NAME` | `env/.env.<env>` | 用于运行代理 **评估**(可选)的 Azure OpenAI 凭据。 |
### 启用/禁用行为
- **关闭(默认):** `MC_OAUTH_REGISTRATION_ID=disabled`。路线图 + Azure 对所有人有效;消息中心操作存在但无法身份验证,代理礼貌地表示未启用。
- **开启:** 将变量设置为真实的注册 ID 并重新配置。
- **完全移除(可选):** 要完全移除消息中心,请从 `appPackage/declarativeAgent.json`(和两个消息中心对话起始器)中删除 `messageCenterPlugin` 操作,然后再打包。
---
## 🧪 评估代理
该项目在 `evals/prompts.json` 中包含一个示例评估数据集。
1. `npm install -g @microsoft/m365-copilot-eval`
2. 添加 `AZURE_AI_*` 变量(参见 [如何获取它们](https://learn.microsoft.com/en-us/microsoft-365/copilot/extensibility/evaluations-cli-get-env-values))。
3. 先配置代理,然后运行 `runevals`(或 `runevals --env dev`)。
[详细了解评估](https://learn.microsoft.com/en-us/microsoft-365/copilot/extensibility/evaluations-cli-overview)。
---
## 🎨 自定义
- **名称/品牌:** 编辑 `appPackage/manifest.json` 和 `appPackage/declarativeAgent.json`。
- **说明:** 精炼 `appPackage/instruction.txt`。
- **自适应卡片:** 在 `appPackage/` 和 `appPackage/adaptiveCards/` 中定制响应模板。
- **操作:** 根据需要添加更多 MCP 或 API 插件。
---
## 🔒 安全
- 机密和标识符 **不存储在源代码控制中**。`.gitignore` 排除 `env/.env.local`,所有 `env/.env.*.user` 文件和 `appPackage/build/`。
- **客户端密钥** 仅存在于 Entra 应用/Teams 开发者门户中 — 永远不会在此存储库中。
- 您的 **OAuth 客户端注册 ID** 应该只出现在 gitignored 环境文件中。已提交的 `env/.env.<env>` 模板使用 `MC_OAUTH_REGISTRATION_ID=disabled`。
- 在您的第一个提交之前,运行 `git status` 并确认没有 `env/.env.local` 或 `env/.env.*.user` 文件被暂存。
---
## 🗺️ 未来迭代
- 在单个响应中合并相关的消息中心帖子和路线图项目。
- “关注”路线图项目/消息中心帖子并总结更新。
- 请求时提供跟踪项目的电子邮件/Teams 摘要。
---
## 🤝 贡献
欢迎贡献!如果您想改进提示、过滤器、卡片或文档,请打开一个问题或提交一个 PR。
---
## 🛟 支持
此解决方案是 **Copilot 代理和平台生态系统(CAPE)团队** 提供的一个开源、社区提供的解决方案。它由微软员工和社区贡献者维护,**不是** 官方的微软产品 — 没有 SLA 或直接的微软支持。请通过 GitHub 问题报告问题。
---
## 📜 许可证
在 [MIT 许可证](LICENSE) 下许可。