Встречи Microsoft Teams

Use the Teams meeting pipeline when you want Hermes to ingest Microsoft Graph meeting events, fetch transcripts first, fall back to recordings plus STT when needed, and deliver a structured summary to downstream sinks.

Эта страница посвящена настройке и включению:

Для операций на 2-й день, проверок перед запуском и рабочего листа оператора используйте отдельное руководство: Operate the Teams Meeting Pipeline.

Что делает эта функция

Конвейер:

  1. receives Microsoft Graph webhook events

  2. resolves the meeting and prefers transcript artifacts first

  3. falls back to recording download plus STT when no usable transcript is available

  4. stores durable job state and sink records locally

  5. can write summaries to Notion, Linear, and Microsoft Teams

Действия оператора выполняются из CLI (подкоманда teams-pipeline регистрируется плагином teams_pipeline — включите его через hermes plugins enable teams_pipeline или задайте plugins.enabled: [teams_pipeline] в config.yaml):

hermes teams-pipeline validate
hermes teams-pipeline list
hermes teams-pipeline maintain-subscriptions

Предварительные требования

Перед включением конвейера встреч убедитесь, что у вас есть:

Шаг 1: Добавьте учётные данные Microsoft Graph

Добавьте учётные данные только для приложения Graph в ~/.hermes/.env:

MSGRAPH_TENANT_ID=<tenant-id>
MSGRAPH_CLIENT_ID=<client-id>
MSGRAPH_CLIENT_SECRET=<client-secret>

Эти учётные данные используются:

Шаг 2: Включите слушатель вебхука Graph

Слушатель вебхука — это платформы шлюза с именем msgraph_webhook. Как минимум, включите его и задайте значение состояния клиента:

MSGRAPH_WEBHOOK_ENABLED=true
MSGRAPH_WEBHOOK_PORT=8646
MSGRAPH_WEBHOOK_CLIENT_STATE=<random-shared-secret>
MSGRAPH_WEBHOOK_ACCEPTED_RESOURCES=communications/onlineMeetings

Слушатель предоставляет:

Вам нужно направить ваш публичный HTTPS-конечный пункт на этот слушатель. Например, если ваш публичный домен https://ops.example.com, ваш URL уведомлений Graph обычно будет:

https://ops.example.com/msgraph/webhook

Шаг 3: Настройка доставки в Teams и поведения конвейера

Конвейер встреч считывает свою конфигурацию выполнения из существующей записи платформы teams. Параметры конвейера находятся в teams.extra.meeting_pipeline. Исходящая доставка Teams остаётся на обычной поверхности конфигурации платформы Teams.

Пример ~/.hermes/config.yaml:

platforms:
  msgraph_webhook:
    enabled: true
    extra:
      port: 8646
      client_state: "replace-me"
      accepted_resources:
        - "communications/onlineMeetings"

  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" # or incoming_webhook
      team_id: "team-id"
      channel_id: "channel-id"
      # incoming_webhook_url: "https://..."

      meeting_pipeline:
        transcript_min_chars: 80
        transcript_required: false
        transcription_fallback: true
        ffmpeg_extract_audio: true
        notion:
          enabled: false
        linear:
          enabled: false

Режимы доставки в Teams

Конвейер поддерживает два режима доставки резюме в Teams внутри существующего плагина Teams.

incoming_webhook

Используйте этот режим, когда вам нужна простая отправка вебхука в Teams без создания сообщений в канале через Graph.

Обязательная конфигурация:

platforms:
  teams:
    enabled: true
    extra:
      delivery_mode: "incoming_webhook"
      incoming_webhook_url: "https://..."

graph

Используйте этот режим, когда вы хотите, чтобы Hermes отправлял резюме через Microsoft Graph в чат или канал Teams.

Поддерживаемые цели:

Пример:

platforms:
  teams:
    enabled: true
    extra:
      delivery_mode: "graph"
      team_id: "team-id"
      channel_id: "channel-id"

Шаг 4: Запуск шлюза

Запустите Hermes в обычном режиме после обновления конфигурации:

hermes gateway run

Или, если вы запускаете Hermes в Docker, запустите шлюз тем же способом, который вы уже используете для вашего развёртывания.

Проверьте слушатель:

curl http://localhost:8646/health

Шаг 5: Создание подписок Graph

Используйте CLI плагина для создания и проверки подписок.

Примеры:

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"

warning Подписки Graph истекают через 72 часа

Microsoft Graph ограничивает подписки на вебхуки 72 часами и не продлевает их автоматически. Вы ДОЛЖНЫ запланировать hermes teams-pipeline maintain-subscriptions до запуска в продакшен, иначе уведомления молча прекратятся через три дня после любого ручного создания подписки. See Automating subscription renewal in the operator runbook — three options (Hermes cron, systemd timer, plain crontab).

For subscription maintenance and day-2 operator flows, continue with the guide: Operate the Teams Meeting Pipeline.

Валидация

Запустите встроенную проверку состояния:

hermes teams-pipeline validate

Полезные дополнительные проверки:

hermes teams-pipeline token-health
hermes teams-pipeline subscriptions

Диагностика проблем

Проблема Что проверить
Ошибка проверки вебхука Graph Убедитесь, что публичный URL правильный и доступный, и что Graph вызывает точный путь /msgraph/webhook
Задачи не появляются в hermes teams-pipeline list Убедитесь, что msgraph_webhook включён и подписки указывают на правильный URL уведомлений
Transcript-first никогда не успешен Проверьте разрешения Graph для ресурсов транскриптов и существует ли артефакт транскрипта для этой встречи
Резервный вариант с записью не работает Убедитесь, что ffmpeg установлен и приложение Graph имеет доступ к артефактам записей
Доставка резюме в Teams не работает Перепроверьте delivery_mode, идентификаторы целей и конфигурацию аутентификации Teams