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