1. Zoom録画をトリガーに設定
• Zoomで録画が完了したときにZapierで処理を開始するよう設定。
2. Zapierで中間処理
• 録画データ(文字起こしファイル含む)を取得し、Dify APIに送信。
• 必要な評価結果を取得。
3. Slackに送信
• Difyから返された結果をSlackに投稿。
1. Zapierの基本設定
1. Zapierアカウント作成またはログイン
• Zapier にアクセスしてアカウントを作成、またはログインします。
2. Zap作成
• 「Create Zap」ボタンをクリックして新しいZapを作成します。
2. トリガー: Zoom録画が完了したとき
1. Trigger Appを設定
• アプリ検索で「Zoom」を選択。
2. Trigger Eventを選択
Zoomの設定で、録画が完了した際にWebhook通知を送信するように設定します。
このWebhook通知をZapierのトリガーとして使用します。
• 「Recording Completed」を選択。
• このトリガーは、Zoomで録画が完了したときに発火します。
3. Zoomアカウントを接続
• ZoomアカウントをZapierに接続します(OAuth認証を使用)。
• 必要なアクセス権限を付与します。
4. テストトリガー
• 既存のZoom録画データを使ってトリガーが正常に動作することを確認します。
3. アクション1: Zoom録画データの処理
1. 録画URLを取得
• トリガーのデータから録画ファイル(または文字起こしファイル)のURLを取得します。
1. ベースURL:https://api.dify.ai/v1
2. 文字起こしファイルを扱う際のエンドポイント:
• ファイルアップロード: /files/upload
• チャットメッセージ送信: /chat-messages
1. ファイルアップロードの例
Zoomから提供された文字起こしファイルのURLをDifyに渡すには、まずファイルをアップロードします。以下はリクエストボディの構造例です:
{
"file": {
"type": "document",
"transfer_method": "remote_url",
"url": "https://us06web.zoom.us/rec/download/your_transcription_file.vtt"
},
"user": "unique_user_identifier"
}
リクエストボディ(例: ファイルアップロード)
4. アクション2: Difyでスクリプトを評価
1. Dify Webhookを設定
Zoomから取得したデータをDifyに渡すプロセスを自動化できます。
• Zapierから「Webhook by Zapier」をアクションとして追加。
• Action Eventに「Custom Request」を選択。
2. Webhookリクエスト設定
• Method: POST
• URL: Dify APIエンドポイント
(例: https://api.dify.ai/evaluate)
• Headers:
• Authorization: Bearer YOUR_DIFY_API_KEY
• Content-Type: application/json
• Body
{
"text": "{{Recording Transcript URL}}"
}
• {{Recording Transcript URL}} はZoomから取得した文字起こしURL。
3. テストリクエスト
• Dify APIが正しく応答するか確認します。
• 正常に動作すれば評価結果が返されます。
• 実際の音声ファイルをZoomから取得するプロセスはDifyの責任範囲です。
• Zapierは単にURLを転送するだけで、実際のファイル取得処理には関与しません。
5. アクション3: Slackに結果を送信
1. Slackアクションを追加
• アクションアプリとして「Slack」を選択。
• 「Send a Channel Message」を選択。
2. Slackアカウントを接続
• SlackアカウントをZapierに接続します。
• 送信先のチャンネルを指定。
3. メッセージ内容を設定
• 評価結果をメッセージに含めるために、Difyから返されたデータを動的に挿入。
• 例: 「Zoom録画の評価結果です: {{評価結果}}」
4. テストメッセージ送信
• 正常にSlackにメッセージが送信されることを確認。
6. Zapの有効化
1. Zapの保存
• Zap全体の設定を保存します。
2. Zapを有効化
• 上部のトグルスイッチをオンにしてZapをアクティブにします。
Zoomの設定
Zoomの録画をクラウドに保存する設定に切り替えるにはZoomの有料プラン(Pro以上)でのみ利用可能です。
Zoomからデータ取得時の認証について
Zoomからデータ取得時に認証が不要な場合
1. パブリックに共有可能なURLを使用している場合
• Zoomの録画ファイル(動画、音声、文字起こしなど)のURLがパブリック共有可能に設定されている場合、認証なしでアクセス可能です。
• 例: 録画ファイルの「Share URL」や「Download URL」が認証なしでアクセス可能に設定されている。
2. トリガー型Webhookを利用している場合
• ZoomのWebhook機能を利用してデータがZapierなどに送信される場合、事前認証されたデータが直接渡されるため、追加の認証は不要です。
3. Zapierで事前に認証済みの接続を利用している場合
• ZapierでZoomアカウントを認証している場合、その認証を経由してデータを取得している可能性があります。この場合、認証はバックグラウンドで処理されています。
各コード解説
index.ts
はサーバーのエントリーポイントです。主な機能は以下の通りです:
- Express サーバーの初期化: HTTPリクエストを処理するためのルーティングとミドルウェアを設定。
- Vite 開発サーバーの統合:
setupVite
を呼び出して、開発環境でのフロントエンドコードのホットリロードを提供。 - WebSocketサーバーのセットアップ:
registerRoutes
経由で WebSocket サーバーをセットアップ。 - CORS や MIME タイプの設定: 静的ファイル(特に
.wasm
ファイル)の提供時に適切な MIME タイプや CORS を設定。 - エラーハンドリング: 全てのエラーをキャッチして適切なレスポンスを返す。
- HTTP ルート設定:
/api/health
: サーバーの状態確認用。/api/meeting-status
: ミーティング状態を返す(ここでは固定値)。- WebSocketサーバーの初期化:
/ws
エンドポイントを介して WebSocket サーバーを提供。- WebSocket メッセージを処理するロジックは
websocket.ts
に委譲。
- 音声処理のロジック:
- Google Cloud Speech-to-Text を利用して、音声データを文字起こし。
- 音声データは WebSocket 経由で Base64 エンコードされた形式で受信。
- メッセージの優先度分析:
- キーワードの頻出度合いから、メッセージの重要度(low/medium/high)を決定。
- WebSocket メッセージ処理:
- 音声データ (
type: "audio"
) のみを処理する。
エラー
zoom-meeting-container の常時レンダリングをすることで