
Microsoft 365 Message Center档案馆
Microsoft 365 的 Message Center(消息中心) 很重要,它会通知我们所有微软云服务的更新,包括有的没的的更新以及的更新。
正因为有这些有的没的的更新,导致了大部分管理员都会忽略掉这些通知。
就好比写日记,正经人谁写日记啊?

你不写,我不写,总得有人写吧,那就让AI去写吧?
所以这个站点诞生了:
Microsoft 365 Message Center Archive
它的目标很简单:把 Microsoft 365 Message Center 变成一个可以浏览、搜索、分享的公开归档页面。
更重要的是,在原有项目基础上增加了 由世纪互联运营的 Microsoft 365 中国区 Message Center 数据,让全球云和中国云的消息可以放在同一个界面里查看。
技术栈:一个平平无奇的静态站点
这个网站不是一个复杂的后台系统,它更像是一个“提前把饭做好、访问时直接端上桌”的静态站。
主要技术栈包括:
- Next.js 13
- React 18
- TypeScript
- Tailwind CSS
- TanStack React Table
- Radix UI / shadcn 风格组件
- Lucide React 图标
- GitHub Actions
- Microsoft Graph API
next.config.mjs 里使用了:
output: 'export'这意味着构建时会把页面导出成静态文件。用户访问时,不需要现场查询 Graph,也不需要动态服务器实时渲染。数据已经在构建阶段准备好了。
简单说就是:
Graph 负责“进货”,Next.js 负责“摆货架”,用户只负责“逛超市”。
Gitee的用途
由于国内网络访问Github时好时坏,所以我把代码仓库放在了能稳定访问的Gitee上。
使用Gitee之后,需要增加额外的两步:
- 在Github上增加了一个
workflow,用来定时定量的同步国际版的数据。 - 通过本地
cron任务定时同步Gitee的数据源至本地。
两个脚本分别如下:
github-sync-to-gitee.yml
name: Sync to Gitee
on:
push:
branches:
- main
- master
schedule:
- cron: '0 * * * *'
workflow_dispatch:
jobs:
sync:
runs-on: ubuntu-latest
steps:
- name: Checkout source repo
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.GITEE_SSH_PRIVATE_KEY }}" > ~/.ssh/gitee_actions
chmod 600 ~/.ssh/gitee_actions
ssh-keyscan gitee.com >> ~/.ssh/known_hosts
- name: Configure git
run: |
git config --global user.name "github-actions[bot]"
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
- name: Add Gitee remote
run: |
git remote add gitee "${{ secrets.GITEE_REMOTE }}" || git remote set-url gitee "${{ secrets.GITEE_REMOTE }}"
- name: Push to Gitee
env:
GIT_SSH_COMMAND: "ssh -i ~/.ssh/gitee_actions -o StrictHostKeyChecking=yes"
run: |
git push gitee HEAD:main --forcegitee-sync-to-local.yml
#!/bin/bash
export PATH=/usr/bin:/bin
REPO_DIR="/path/Gitee_MC"
SRC_DATA_DIR="$REPO_DIR/@data/"
DST_DATA_DIR="/path/21V_MC/@data/"
LOG_FILE="/path/update_mc.log"
echo "==== $(date '+%F %T') start ====" >> $LOG_FILE
cd "$REPO_DIR" || exit 1
# 更新仓库
/usr/bin/git fetch origin >> $LOG_FILE 2>&1
/usr/bin/git reset --hard origin/main >> $LOG_FILE 2>&1
# 同步数据
/usr/bin/rsync -av --delete "$SRC_DATA_DIR" "$DST_DATA_DIR" >> $LOG_FILE 2>&1
echo "==== $(date '+%F %T') done ====" >> $LOG_FILE数据如何获取?
数据分为2部分,分别是全球云数据和中国云数据,全球云的数据是通过Github Action同步至Gitee仓库,然后写入:
@data/messages.json
@data/archive/其中 @data/messages.json 是全球云当前消息列表,@data/archive/ 用来保存全球云的历史消息。
而中国区的数据则是直接通过 Microsoft Graph 获取 Service Announcement Message,放在:
@21v_data/21v_message.json
@21v_data/21v_archive/有人问我,为什么全球云的数据不直接通过Graph API获取呢?
我说,我没有全球云的账号,所以不能调用全球云的API,只能通过Github拉别人的仓库。
最重要的一步:合并,但不打架
数据合并逻辑在:
lib/messages.ts这里同时导入两个数据源:
import dataMessages from '@/@data/messages.json'
import data21vMessages from '@/@21v_data/21v_message.json'合并策略很克制:
- 先保留全球云
@data/messages.json - 再加入 21Vianet 中不重复的消息
- 如果两个数据源里出现同一个 Message ID,以全球云数据为准
- 最后按
LastModifiedDateTime倒序排序
这相当于做了一个“主数据源优先”的合并层。UI 不需要知道消息到底来自全球云还是中国云,只要调用:
getAllMessages()
getMessageData(id)就可以拿到合并后的结果。
同一个按钮,跳到不同的管理中心
还有一个很实用的小细节:详情页里的 Message ID 可以跳回 Microsoft 365 管理中心。

但全球云和中国区的管理中心 URL 不一样,所以项目里做了来源判断:
getMessageCenterUrl(id)如果消息来自全球云,就跳到:
https://admin.microsoft.com/#/MessageCenter/:/messages/{id}如果消息来自 21Vianet,就跳到:
https://portal.partner.microsoftonline.cn/AdminPortal/Home#/MessageCenter/:/messages/{id}这让用户不需要思考“这条消息属于哪个云”。点进去,系统自己带路。
前端体验优化
首页是一个消息列表,使用 TanStack React Table 实现。它支持按 ID 和标题过滤,列表里可以看到:
- Message ID
- 标题
- 服务名称
- 最后更新时间
- 是否 Major Change
重大变更会有一个提示。服务名称用 Badge 展示,比如 Exchange、Teams、SharePoint、Microsoft 365 suite 等。

详情页则展示:
- Message ID
- Service
- Published / Last Updated
- Tag
- Roadmap ID
- Act by
- Platforms
- Summary
- More information
每条消息在构建时都会通过 generateStaticParams() 生成静态详情页,所以访问速度很直接:不是现场查数据库,而是打开一页已经生成好的档案卡。
自动化:让网站自己更新
项目里有2个GitHub Actions,服务器端有2个crontab jobs。通过这些自动化的流程让网站自己主动更新信息。
全球云数据同步通过 workflow 定时跑,站点构建也通过 workflow 定时部署。
已经Archive的消息怎么看?
目前Archive的策略是消息最后一次更新的日期超过一年的,会自动放到archive文件夹下,archive的消息是不展示的。
虽然不展示,但是消息依然是处于保留状态。如果想看的话,得加钱。

总结
Microsoft 365 全球云和中国区经常会有不同节奏的功能发布、管理入口和公告内容。对于做跨区域支持、迁移、合规或客户服务的人来说,只看任何一个区域云的消息是不够的。
这个站点现在可以把两边的消息放在一起:
- 搜索更方便
- 分享更方便
- 查历史更方便
- 对比全球云和中国区更方便
- 不必每次都登录管理中心才能看一条公告
它不是要替代租户里的 Message Center。真正做生产决策时,仍然应该以自己租户里的 Message Center 为准。因为不同租户看到的消息可能不同,订阅、区域、功能启用状态也会影响可见内容。
但作为一个公开归档和检索工具,它已经很实用。❤️❤️❤️