mcpField
T
teams-migration

teams-migration

github.com/julianobarbosa生产力1455 次安装2 天前更新
代码仓库

关于 teams-migration

TeamsMigration 是用于迁移和导出 Microsoft Teams 聊天内容的技能,面向需要将聊天消息转入团队频道或保存备份的用户。它保留发送者归属、时间戳、图片和附件,并通过 `teams-mcp` 读取消息、通过 Microsoft Graph API 批量发布。

主要功能

  1. 01迁移聊天内容到团队频道
  2. 02导出聊天消息为 JSON
  3. 03分页读取完整消息
  4. 04保留发送者与时间信息
  5. 05通过 Graph API 批量发布并限流

适用场景

  1. 01将会议聊天迁移到团队频道
  2. 02备份群聊或会议聊天
  3. 03批量转发多条聊天消息
  4. 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.mjs
Workflows/
ExportChat.md
MigrateChat.md

详细介绍

自定义

执行前,请检查以下位置是否有用户自定义设置: ~/.claude/skills/PAI/USER/SKILLCUSTOMIZATIONS/TeamsMigration/

如果此目录存在,请加载并应用其中找到的任何 PREFERENCES.md、配置或资源。这些内容会覆盖默认行为。如果目录不存在,则使用技能默认设置。

语音通知

调用此技能后,必须先发送此通知,再执行任何其他操作。

  1. 发送语音通知:

    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 &
    
  2. 输出文本通知:

    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