关于 teams-migration
TeamsMigration 是用于迁移和导出 Microsoft Teams 聊天内容的技能,面向需要将聊天消息转入团队频道或保存备份的用户。它保留发送者归属、时间戳、图片和附件,并通过 `teams-mcp` 读取消息、通过 Microsoft Graph API 批量发布。
主要功能
- 01迁移聊天内容到团队频道
- 02导出聊天消息为 JSON
- 03分页读取完整消息
- 04保留发送者与时间信息
- 05通过 Graph API 批量发布并限流
适用场景
- 01将会议聊天迁移到团队频道
- 02备份群聊或会议聊天
- 03批量转发多条聊天消息
- 04检查迁移消息数量与内容
MCP 相关
使用 `teams-mcp` MCP 服务读取 Teams 聊天消息;高容量批量发布则直接调用 Microsoft Graph API。
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ julianobarbosa/ claude-code-skills --skill teams-migration安装后在 Claude Code 中输入/teams-migration确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
Tools/MigrateChat.mjsWorkflows/ExportChat.mdMigrateChat.md详细介绍
自定义
执行前,请检查以下位置是否有用户自定义设置:
~/.claude/skills/PAI/USER/SKILLCUSTOMIZATIONS/TeamsMigration/
如果此目录存在,请加载并应用其中找到的任何 PREFERENCES.md、配置或资源。这些内容会覆盖默认行为。如果目录不存在,则使用技能默认设置。
语音通知
调用此技能后,必须先发送此通知,再执行任何其他操作。
-
发送语音通知:
curl -s -X POST http://localhost:8888/notify \ -H "Content-Type: application/json" \ -d '{"message": "Running the WORKFLOWNAME workflow in the TeamsMigration skill to ACTION"}' \ > /dev/null 2>&1 & -
输出文本通知:
Running the **WorkflowName** workflow in the **TeamsMigration** skill to ACTION...
TeamsMigration
将 MS Teams 会议聊天或群聊内容迁移到团队频道,同时保留发送者归属、时间戳、图片和附件。使用 teams-mcp MCP 服务读取内容,并直接使用 Microsoft Graph API 进行大批量发布,支持自动刷新令牌和速率限制。
工作流路由
| 工作流 | 触发语句 | 文件 |
|---|---|---|
| MigrateChat | “迁移聊天”“将聊天复制到频道”“移动消息” | Workflows/MigrateChat.md |
| ExportChat | “导出聊天”“备份聊天”“下载消息” | Workflows/ExportChat.md |
示例
示例 1:将会议聊天迁移到团队频道
User: "Migrate the Teams meeting chat to the DevOps channel"
--> Invokes MigrateChat workflow
--> Verifies auth, fetches all messages with pagination
--> Filters system/deleted messages, reverses to chronological order
--> Posts each message with sender + timestamp attribution
--> Verifies count parity and spot-checks content
示例 2:将聊天消息导出到本地文件
User: "Export all messages from our DevOps chat"
--> Invokes ExportChat workflow
--> Fetches all messages with full pagination
--> Saves to JSON file with metadata
快速参考
- MCP 服务:
@floriscornel/teams-mcp(npm) - 身份验证文件:
~/.msgraph-mcp-auth.json - 令牌缓存:
~/.teams-mcp-token-cache.json - 身份验证命令:
npx @floriscornel/teams-mcp@latest authenticate - 迁移工具:
Tools/MigrateChat.mjs(Node.js,无依赖项)
关键经验
- Graph API 不支持
descending: false——按降序获取,然后反转数组 download_message_hosted_content仅适用于频道消息,不适用于聊天消息- 通过
~/.teams-mcp-token-cache.json中的 MSAL 刷新令牌自动刷新令牌 - 速率限制通过遵循 429 响应中的
Retry-After标头处理 - **批量发布(50 条以上消息)**应直接通过 Graph API 使用
Tools/MigrateChat.mjs,而不是调用 MCP 工具 - 账户必须拥有 Teams 许可证——没有许可证时,
Chat.*端点会失败(403)
注意事项
- **Graph API 会忽略聊天消息中的
descending: false:**端点仍会静默返回降序结果。请始终按降序获取,然后在本地反转数组——如果假设结果为升序,消息就会以反向时间顺序发布到目标位置。 - **
download_message_hosted_content仅适用于频道消息,不适用于聊天消息:**会议聊天或群聊中的图片需要通过/chats/{id}/messages/{id}/hostedContents使用不同的代码路径。对聊天消息调用此工具会返回 404,并显示容易误导的“找不到内容”。 - **
~/.teams-mcp-token-cache.json中的 MSAL 刷新令牌在闲置 90 天后过期:**长时间未操作后的首次迁移会因AADSTS700082而失败。重新运行npx @floriscornel/teams-mcp@latest authenticate——令牌刷新会静默进行,直到不再静默。 - **调用账户必须拥有 Teams 许可证,才能使用
Chat.*Graph 端点:**没有许可证的服务账户会返回 403,错误文本提及权限,而非许可证。排查 Graph 作用域前,请使用az ad user show --id <upn> --query assignedLicenses确认。 - **MCP 工具调用的每秒速率限制约为 50 条消息:**通过 MCP 层进行批量迁移会遭到限流,耗时数小时。对于 50 条以上的消息,请绕过 MCP,直接使用
Tools/MigrateChat.mjs调用 Graph,并处理Retry-After。 - **发布时,发送者名称会保留在正文文本中,而非元数据中:**目标频道会显示迁移机器人为作者,原发送者则嵌入消息文本。按作者进行的合规/eDiscovery 查询将完全找不到迁移内容。
评论
支持 Markdown