Hermes Agent Wiki 非公式・日本語wiki

Microsoft Teams の会議

目次

Teams の会議パイプラインは、Microsoft Graph の会議イベントを Hermes に取り込み、まず文字起こしを取りにいき、必要なら録画と音声認識に切り替えて、整った要約を後段の届け先へ送りたいときに使います。

前提として、土台となるボットと認証情報の設定については Microsoft Teams を見てください。

> hermes gateway setup を実行して Teams Meetings を選ぶと、手順を案内してもらえます。

このページで扱うのは、設定と有効化です。

  • Graph の認証情報
  • webhook リスナーの設定
  • Teams への配信モード
  • パイプラインの設定の形

運用に入ってからの日々の作業、公開前の確認、運用担当者向けのワークシートについては、専用のガイドを見てください: Teams 会議パイプラインの運用

この機能でできること

パイプラインの流れは次のとおりです。

  1. Microsoft Graph の webhook イベントを受け取ります
  2. 会議を特定し、まず文字起こしの成果物を優先して取りにいきます
  3. 使える文字起こしがない場合は、録画のダウンロードと音声認識に切り替えます
  4. ジョブの状態と届け先の記録を、消えない形でローカルに保存します
  5. 要約を Notion、Linear、Microsoft Teams へ書き出せます

運用担当者の操作は CLI に集約されています(teams-pipeline サブコマンドは teams_pipeline プラグインが登録します。hermes plugins enable teams_pipeline を実行するか、config.yamlplugins.enabled: [teams_pipeline] を書いて有効にしてください)。

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

前提条件

会議パイプラインを有効にする前に、次がそろっているか確かめます。

  • 動作している Hermes のインストール
  • Teams へ送信したい場合は、すでにある Microsoft Teams ボットの設定
  • 購読したい会議リソースに必要な権限を持つ、Microsoft Graph のアプリケーション認証情報
  • Microsoft Graph が webhook を届けるために呼び出せる、公開された HTTPS URL
  • 録画と音声認識への切り替えを使いたい場合は、インストール済みの ffmpeg

ステップ 1: Microsoft Graph の認証情報を追加する

アプリ単位の Graph 認証情報を ~/.hermes/.env に追記します。

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

この認証情報は次で使われます。

  • Graph クライアントの土台部分
  • 購読を保守するコマンド
  • 会議の特定と成果物の取得
  • Teams 専用のアクセストークンを渡していない場合の、Graph 経由の Teams 送信

ステップ 2: Graph webhook のリスナーを有効にする

webhook のリスナーは msgraph_webhook という名前のゲートウェイプラットフォームです。最低限、これを有効にして clientState の値を設定します。

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

バインドするホストは config.yaml にあるプラットフォームの extra.host から読み取られます(MSGRAPH_WEBHOOK_HOST という環境変数はありません。webhook リスナーの説明を参照)。

リスナーが公開するのは次の 2 つです。

  • Graph からの通知を受ける /msgraph/webhook
  • 単純な稼働確認のための /health

公開 HTTPS のエンドポイントを、このリスナーへ流し込む必要があります。たとえば公開ドメインが https://ops.example.com なら、Graph の通知先 URL はふつう次のようになります。

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

ステップ 3: Teams への配信とパイプラインの挙動を設定する

会議パイプラインは、実行時の設定をすでにある teams プラットフォームの項目から読み取ります。パイプライン固有のつまみは teams.extra.meeting_pipeline の下に置きます。Teams への送信設定は、通常の Teams プラットフォームの設定面に置いたままです。

~/.hermes/config.yaml の例です。

platforms:
  msgraph_webhook:
    enabled: true
    extra:
      host: 127.0.0.1
      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"

      # outbound summary delivery
      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

0.0.0.0 のようにループバック以外のホストへリスナーをバインドする場合は、allowed_source_cidrs に Microsoft の webhook 送信元レンジも設定しなければなりません。ループバックへのバインド(127.0.0.1 / ::1)は、開発用トンネルやローカルのリバースプロキシと組み合わせる想定の形です。

Teams への配信モード

パイプラインは、既存の Teams プラグインの中で 2 通りの要約配信モードに対応しています。

incoming_webhook

Graph 経由でチャネルメッセージを作らず、Teams へ単純に webhook で投稿したいときに使います。

必要な設定は次のとおりです。

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

graph

Microsoft Graph を通して、Teams のチャットやチャネルへ Hermes に要約を投稿させたいときに使います。

指定できる宛先は次のとおりです。

  • chat_id
  • team_idchannel_id の組み合わせ
  • team_id と、既存の Teams プラットフォームの home_channel による代替指定

例です。

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

ステップ 4: ゲートウェイを起動する

設定を更新したら、いつもどおり Hermes を起動します。

hermes gateway run

Docker で Hermes を動かしている場合は、ふだんのデプロイと同じやり方でゲートウェイを起動してください。

リスナーの確認は次のとおりです。

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"

購読の保守や運用に入ってからの流れについては、ガイドへ進んでください: Teams 会議パイプラインの運用

検証

組み込みの検証スナップショットを実行します。

hermes teams-pipeline validate

あわせて確認しておくと役に立つコマンドです。

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

困ったときは

症状 確認すること
Graph の webhook 検証に失敗する 公開 URL が正しく到達できるか、Graph が /msgraph/webhook のパスちょうどを呼んでいるかを確かめます
hermes teams-pipeline list にジョブが出てこない msgraph_webhook が有効か、購読が正しい通知先 URL を指しているかを確かめます
文字起こし優先の取得がいつも失敗する 文字起こしリソースに対する Graph の権限と、その会議に文字起こしの成果物が実際にあるかを確かめます
録画への切り替えが失敗する ffmpeg が入っているか、Graph のアプリが録画の成果物にアクセスできるかを確かめます
Teams への要約配信が失敗する delivery_mode、宛先の ID、Teams の認証設定をもう一度見直します