Teams 会议接入——会议纪要自动生成
Hermes 消息平台接入第29篇:Teams 会议。AI 参会、记纪要、发总结。
这篇教程讲的是:如何让 Hermes 在你开完 Teams 会后,自动把会议内容整理成结构化纪要,并推送到 Notion、Linear 或 Teams 频道里——全程不用你手动记录。
想象一下:你刚开完一场一小时的客户会,还没回到工位,Hermes 已经把“谁说了什么、下一步谁做什么”整理好发到了项目群里。这就是我们今天要搭建的东西。
准备工作
你需要先有一个能跑起来的 Hermes 环境,以及一个 Teams 机器人(用于发送纪要)。另外,去 Azure 门户给应用注册好 Graph API 权限,并准备一个公网 HTTPS 地址(用于接收微软的会议事件通知)。如果希望“录音转文字”兜底,还要装好 ffmpeg。
第 1 步:填入 Graph 凭证
打开 ~/.hermes/.env,把下面几行填好:
MSGRAPH_TENANT_ID=<你的租户ID>
MSGRAPH_CLIENT_ID=<你的应用ID>
MSGRAPH_CLIENT_SECRET=<你的应用密钥>
这组凭证相当于 Hermes 的“门禁卡”,用来读取会议列表、下载转录稿和录音。
第 2 步:开启 Webhook 监听器
Webhook 就像一个“门铃”——微软一有会议动态,就按铃通知 Hermes。在 .env 里加上:
MSGRAPH_WEBHOOK_ENABLED=true
MSGRAPH_WEBHOOK_PORT=8646
MSGRAPH_WEBHOOK_CLIENT_STATE=<随便填一长串随机字符>
MSGRAPH_WEBHOOK_ACCEPTED_RESOURCES=communications/onlineMeetings
然后在 config.yaml 里把监听地址配好(注意:这里没有环境变量,只能写配置文件):
platforms:
msgraph_webhook:
enabled: true
extra:
host: 127.0.0.1
port: 8646
client_state: "replace-me"
accepted_resources:
- "communications/onlineMeetings"
最后,把你的公网域名(比如 https://ops.example.com)反向代理到这台机器的 8646 端口,通知地址就是:
https://ops.example.com/msgraph/webhook
第 3 步:配置纪要生成与发送
在 config.yaml 的 teams 平台下,增加 meeting_pipeline 配置块:
platforms:
teams:
enabled: true
extra:
client_id: "your-teams-client-id"
client_secret: "your-teams-client-secret"
tenant_id: "your-teams-tenant-id"
delivery_mode: "graph" # 或 incoming_webhook
team_id: "team-id"
channel_id: "channel-id"
meeting_pipeline:
transcript_min_chars: 80
transcript_required: false
transcription_fallback: true
ffmpeg_extract_audio: true
notion:
enabled: false
linear:
enabled: false
关键点:delivery_mode 有两种——graph 模式走官方接口发到指定频道;incoming_webhook 模式则用 Webhook 地址直接“扔”进某个频道,适合不想配 Graph 发送权限的场景。
第 4 步:启动网关
hermes gateway run
然后验证一下监听器是否活着:
curl http://localhost:8646/health
第 5 步:创建订阅
订阅就是“告诉微软:哪些会议事件要通知我”。用插件命令创建:
hermes teams-pipeline subscribe \
--resource communications/onlineMeetings/getAllTranscripts \
--notification-url https://ops.example.com/msgraph/webhook \
--client-state "$MSGRAPH_WEBHOOK_CLIENT_STATE"
hermes teams-pipeline subscribe \
--resource communications/onlineMeetings/getAllRecordings \
--notification-url https://ops.example.com/msgraph/webhook \
--client-state "$MSGRAPH_WEBHOOK_CLIENT_STATE"
⚠️ 重要警告:微软的 Graph 订阅72 小时就会过期,而且不会自动续期。上线前必须配置定时任务(比如 crontab)定期执行
hermes teams-pipeline maintain-subscriptions,否则三天后通知会悄悄断掉。
验证与排错
跑一下自检命令:
hermes teams-pipeline validate
hermes teams-pipeline token-health
hermes teams-pipeline subscriptions
常见问题速查:
| 问题 | 检查点 |
|---|---|
| Webhook 验证失败 | 公网地址是否可达、路径是否精确到 /msgraph/webhook |
| 列表里看不到任务 | msgraph_webhook 是否启用、订阅通知地址是否正确 |
| 转录稿一直拿不到 | Graph 权限是否包含 transcript 资源 |
| 录音兜底失败 | ffmpeg 是否安装、应用能否访问录音文件 |
| 纪要发不出去 | 核对 delivery_mode、目标 ID、Teams 认证配置 |
小结
到这里,你已经完成了 Teams 会议纪要自动化的全部核心配置:凭证、监听器、纪要管道、订阅。剩下的就是让定时任务守护订阅不过期,然后坐等第一份自动纪要诞生。
下篇预告:当纪要生成后,如何把它接入 Notion 和 Linear,实现“会议结束,任务自动进看板”——我们下期见。
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/messaging/teams