teams-meeting-pipeline

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Teams Meeting Pipeline

Teams 会议管道

Use this skill whenever the user asks about Microsoft Teams meeting summaries, transcripts, recordings, action items, Graph subscriptions, or any operational question about the Teams meeting pipeline. Works in any language — the triggers below are examples, not an exhaustive list.
Everything operator-facing is a
hermes teams-pipeline
subcommand run via the terminal tool. There are no new model tools for this pipeline — the CLI is the surface.
当用户询问Microsoft Teams会议摘要、转录文本、录制内容、行动项、Graph订阅或任何关于Teams会议管道的操作问题时,使用此技能。支持任意语言——以下触发词仅为示例,并非详尽列表。
所有面向操作人员的功能均为通过终端工具运行的
hermes teams-pipeline
子命令。此管道没有新的模型工具——CLI是唯一操作界面。

When to use this skill

何时使用此技能

The user is asking to:
  • summarize a Teams meeting / extract action items / pull meeting notes
  • check pipeline status, inspect a stored meeting job, or see recent meetings
  • replay / re-run a stored job that failed or needs a fresh summary
  • validate Microsoft Graph setup after changing env or config
  • troubleshoot "meeting summary never arrived" or "no new meetings are ingesting"
  • manage Graph webhook subscriptions (create, renew, delete, inspect)
  • set up automated subscription renewal (see pitfall below)
Multilingual trigger examples (not exhaustive):
  • English: "summarize the Teams meeting", "pipeline status", "replay job X"
  • Turkish: "Teams meeting özetle", "action item çıkar", "toplantı notu", "pipeline durumu", "replay job"
用户提出以下需求时:
  • 总结Teams会议/提取行动项/获取会议笔记
  • 检查管道状态、查看已存储的会议任务或查看近期会议
  • 重放/重新运行失败或需要生成新摘要的已存储任务
  • 在更改环境或配置后验证Microsoft Graph设置
  • 排查“从未收到会议摘要”或“没有新会议被导入”的问题
  • 管理Graph webhook订阅(创建、续订、删除、查看)
  • 设置自动订阅续订(见下方注意事项)
多语言触发示例(非详尽列表):
  • 英文:"summarize the Teams meeting", "pipeline status", "replay job X"
  • 土耳其语:"Teams meeting özetle", "action item çıkar", "toplantı notu", "pipeline durumu", "replay job"

Prerequisites

前置条件

Before using the pipeline, verify these are set in
~/.hermes/.env
:
bash
MSGRAPH_TENANT_ID=...
MSGRAPH_CLIENT_ID=...
MSGRAPH_CLIENT_SECRET=...
If any are missing, direct the user to the Azure app registration guide at
/docs/guides/microsoft-graph-app-registration
— they need an Azure AD app registration with admin-consented Graph application permissions before the pipeline will work.
使用管道前,请确认
~/.hermes/.env
中已配置以下内容:
bash
MSGRAPH_TENANT_ID=...
MSGRAPH_CLIENT_ID=...
MSGRAPH_CLIENT_SECRET=...
如果缺少任何一项,请引导用户查看位于
/docs/guides/microsoft-graph-app-registration
的Azure应用注册指南——他们需要一个已获得管理员同意的Graph应用权限的Azure AD应用注册,管道才能正常工作。

Command reference

命令参考

Status and inspection (start here)

状态与检查(从这里开始)

bash
hermes teams-pipeline validate              # config snapshot — run first after any change
hermes teams-pipeline token-health          # Graph token status
hermes teams-pipeline token-health --force-refresh   # force a fresh token acquisition
hermes teams-pipeline list                  # recent meeting jobs
hermes teams-pipeline list --status failed  # only failed jobs
hermes teams-pipeline show <job-id>         # full detail of one job
hermes teams-pipeline subscriptions         # current Graph webhook subscriptions
bash
hermes teams-pipeline validate              # 配置快照——任何更改后先运行此命令
hermes teams-pipeline token-health          # Graph令牌状态
hermes teams-pipeline token-health --force-refresh   # 强制获取新令牌
hermes teams-pipeline list                  # 近期会议任务
hermes teams-pipeline list --status failed  # 仅查看失败任务
hermes teams-pipeline show <job-id>         # 查看单个任务的完整详情
hermes teams-pipeline subscriptions         # 当前Graph webhook订阅

Re-running / debugging

重新运行/调试

bash
hermes teams-pipeline run <job-id>          # replay a stored job (re-summarize, re-deliver)
hermes teams-pipeline fetch --meeting-id <id>   # dry-run: resolve meeting + transcript without persisting
hermes teams-pipeline fetch --join-web-url "<url>"   # dry-run by join URL
bash
hermes teams-pipeline run <job-id>          # 重放已存储任务(重新生成摘要、重新交付)
hermes teams-pipeline fetch --meeting-id <id>   # 试运行:解析会议+转录文本但不持久化
hermes teams-pipeline fetch --join-web-url "<url>"   # 通过加入URL进行试运行

Subscription management

订阅管理

bash
hermes teams-pipeline subscribe \
  --resource communications/onlineMeetings/getAllTranscripts \
  --notification-url https://<your-public-host>/msgraph/webhook \
  --client-state "$MSGRAPH_WEBHOOK_CLIENT_STATE"

hermes teams-pipeline renew-subscription <sub-id> --expiration <iso-8601>
hermes teams-pipeline delete-subscription <sub-id>
hermes teams-pipeline maintain-subscriptions            # renew near-expiry ones
hermes teams-pipeline maintain-subscriptions --dry-run  # show what would be renewed
bash
hermes teams-pipeline subscribe \
  --resource communications/onlineMeetings/getAllTranscripts \
  --notification-url https://<your-public-host>/msgraph/webhook \
  --client-state "$MSGRAPH_WEBHOOK_CLIENT_STATE"

hermes teams-pipeline renew-subscription <sub-id> --expiration <iso-8601>
hermes teams-pipeline delete-subscription <sub-id>
hermes teams-pipeline maintain-subscriptions            # 续订即将过期的订阅
hermes teams-pipeline maintain-subscriptions --dry-run  # 显示将要续订的内容

Decision tree for common asks

常见请求决策树

  • User asks "why didn't I get a summary for today's meeting?" → start with
    list --status failed
    , then
    show <job-id>
    on the relevant row. If the job doesn't exist at all, check
    subscriptions
    — the webhook may have expired (see pitfall below).
  • User asks "is setup working?" →
    validate
    , then
    token-health
    , then
    subscriptions
    . If all three pass, request a test meeting and check
    list
    for a fresh row.
  • User asks "re-run summary for meeting X" →
    list
    to find the job ID,
    run <job-id>
    to replay. If it fails again,
    show <job-id>
    to inspect the error and
    fetch --meeting-id
    to dry-run the artifact resolution.
  • User asks "add meeting X to the pipeline" → usually you don't — the pipeline is subscription-driven, not per-meeting. If they want a specific past meeting summarized, use
    fetch
    to pull transcript +
    run
    after a job is created.
  • 用户询问“为什么我没有收到今天会议的摘要?” → 先运行
    list --status failed
    ,然后对相关行执行
    show <job-id>
    。如果任务根本不存在,检查
    subscriptions
    ——webhook可能已过期(见下方注意事项)。
  • 用户询问“设置是否正常?” → 运行
    validate
    ,然后
    token-health
    ,再
    subscriptions
    。如果三项都通过,请求一场测试会议并检查
    list
    是否有新条目。
  • 用户询问“重新运行会议X的摘要” → 使用
    list
    找到任务ID,执行
    run <job-id>
    重放。如果再次失败,使用
    show <job-id>
    查看错误信息,并使用
    fetch --meeting-id
    试运行工件解析。
  • 用户询问“将会议X添加到管道中” → 通常不需要——管道是由订阅驱动的,而非按会议单独添加。如果他们想要总结某个特定的过往会议,使用
    fetch
    拉取转录文本,然后在任务创建后执行
    run

Critical pitfall: Graph subscriptions expire in 72 hours

关键注意事项:Graph订阅72小时后过期

Microsoft Graph caps webhook subscriptions at 72 hours and will not auto-renew them. If
maintain-subscriptions
is not scheduled, meeting notifications silently stop arriving 3 days after any manual subscription creation.
When the user reports "the pipeline worked yesterday but nothing is arriving today":
  1. Run
    hermes teams-pipeline subscriptions
    — if it's empty or all entries show
    expirationDateTime
    in the past, that's the cause.
  2. Recreate with
    subscribe
    as shown above.
  3. Set up automated renewal immediately via
    hermes cron add
    , a systemd timer, or plain crontab. The operator runbook at
    /docs/guides/operate-teams-meeting-pipeline#automating-subscription-renewal-required-for-production
    has all three options. 12-hour interval is safe (6x headroom against the 72h limit).
Microsoft Graph将webhook订阅的有效期限制为72小时,并且不会自动续订。如果未计划运行
maintain-subscriptions
,在手动创建订阅3天后,会议通知会静默停止。
当用户反馈“管道昨天还能用,但今天没有任何内容进来”时:
  1. 运行
    hermes teams-pipeline subscriptions
    ——如果结果为空或所有条目的
    expirationDateTime
    都在过去,那就是问题所在。
  2. 按照上述示例使用
    subscribe
    重新创建订阅。
  3. 立即设置自动续订,可通过
    hermes cron add
    、systemd定时器或普通crontab实现。位于
    /docs/guides/operate-teams-meeting-pipeline#automating-subscription-renewal-required-for-production
    的操作人员手册提供了这三种选项。12小时的间隔是安全的(相对于72小时限制有6倍的余量)。

Other pitfalls

其他注意事项

  • Transcript not available yet. Teams takes some time after a meeting ends to generate the transcript artifact.
    fetch --meeting-id
    on a just-ended meeting may return empty. Wait 2-5 minutes and retry, or let the Graph webhook drive ingestion naturally.
  • Delivery mode mismatch. If summaries are produced (
    list
    shows success) but nothing lands in Teams, check
    platforms.teams.extra.delivery_mode
    and the matching target config (
    incoming_webhook_url
    OR
    chat_id
    OR
    team_id
    +
    channel_id
    ). The writer reads these from config.yaml or
    TEAMS_*
    env vars.
  • Graph app permissions. A token acquires cleanly (
    token-health
    passes) but Graph API calls return 401/403 when permissions were added but admin consent wasn't re-granted. Have the user revisit the app registration in the Azure portal and click "Grant admin consent" again.
  • 转录文本尚未生成。会议结束后,Teams需要一些时间来生成转录文本工件。对刚结束的会议执行
    fetch --meeting-id
    可能返回空结果。等待2-5分钟后重试,或让Graph webhook自然驱动导入。
  • 交付模式不匹配。如果已生成摘要(
    list
    显示成功)但未在Teams中收到,请检查
    platforms.teams.extra.delivery_mode
    以及对应的目标配置(
    incoming_webhook_url
    chat_id
    team_id
    +
    channel_id
    )。写入器会从config.yaml或
    TEAMS_*
    环境变量中读取这些配置。
  • Graph应用权限。令牌获取成功(
    token-health
    通过)但Graph API调用返回401/403错误,这可能是因为添加了权限但未重新获得管理员同意。让用户重新访问Azure门户中的应用注册,再次点击“授予管理员同意”。

Related docs

相关文档

Point the user to these when they need more depth than this skill covers:
  • Azure app registration walkthrough:
    /docs/guides/microsoft-graph-app-registration
  • Full pipeline setup:
    /docs/user-guide/messaging/teams-meetings
  • Operator runbook (renewal automation, troubleshooting, go-live checklist):
    /docs/guides/operate-teams-meeting-pipeline
  • Webhook listener setup:
    /docs/user-guide/messaging/msgraph-webhook
当用户需要比本技能更深入的内容时,引导他们查看以下文档:
  • Azure应用注册指南:
    /docs/guides/microsoft-graph-app-registration
  • 完整管道设置:
    /docs/user-guide/messaging/teams-meetings
  • 操作人员手册(续订自动化、故障排查、上线检查清单):
    /docs/guides/operate-teams-meeting-pipeline
  • Webhook监听器设置:
    /docs/user-guide/messaging/msgraph-webhook