アーカイブ機能

本記事では、文字起こし結果をクラウドストレージへアーカイブする方法を説明します。

概要

文字起こしセッション開始時にクラウドストレージの情報を指定すると、文字起こしセッション終了後にセッション内の文字起こし結果が JSONL ファイルとしてアップロードされます。

サンプルコードをもとに、文字起こし機能が付いた会議アプリの実装方法について説明します。基本的な利用方法はクイックスタートと同様です。

対応クラウドストレージ

以下のクラウドストレージに対応しています。

  • Google Cloud Storage
  • Amazon S3
  • Wasabi

事前準備

利用するクラウドストレージを準備してください。準備方法は、録音・録画クイックスタートのクラウドストレージの準備を参照してください。

ストレージ設定例

Google Cloud Storage

const gcsConfig = { service: "GOOGLE_CLOUD_STORAGE", credential: JSON.stringify({ // サービスアカウントの鍵のJSONファイルの内容をコピーペーストする type: "", project_id: "", private_key_id: "", private_key: "", client_email: "", client_id: "", auth_uri: "", token_uri: "", auth_provider_x509_cert_url: "", client_x509_cert_url: "", }), bucket: "", };

Amazon S3

const s3Config = { service: "AMAZON_S3", bucket: "", accessKeyId: "", secretAccessKey: "", region: "", };

Wasabi

const wasabiConfig = { service: "WASABI", bucket: "", accessKeyId: "", secretAccessKey: "", endpoint: "", };

ストレージの指定

POST /rooms/:roomName/start で STT セッションを開始する際に、archive.storageConfig を指定します。

app.post("/rooms/:roomName/start", async (req, res) => { const { roomName } = req.params; const { authorization } = req.headers; const roomId = roomNameIdMap[roomName]; const tokenStr = (authorization ?? "").replace(/^Bearer\s*/, ""); if (roomId !== tokenHashRoomIdMap[sha256(tokenStr)]) { res.status(403).send({ message: "Forbidden" }); return; } const { sttMode, locales } = req.body; const response = await fetch(`${sttApiBaseUrl}/rooms/${roomId}/sessions`, { method: "POST", headers: { "Content-Type": "application/json", Authorization: `Bearer ${createSkyWayAdminAuthToken()}`, }, body: JSON.stringify({ mode: sttMode.toUpperCase(), locales, archive: { // Amazon S3を使う場合は s3Config // Wasabiを使う場合は wasabiConfig storageConfig: gcsConfig, }, }), }); const json = await response.json(); if (!response.ok) { res.status(500).send({ message: json.error.message }); return; } res.status(200).send({ id: json.id }); });

それ以外の設定、起動方法はクイックスタートと同様です。

セッション終了後、そのセッションで作成された全ての文字起こし結果がアップロードされます。セッション終了からアップロード完了まで、約5分程度かかります。

アップロードされるファイルのパス

クラウドストレージ上のファイルのパスは room_{roomId}/stt_{sessionId}.jsonl になります。

アップロードされるファイルの形式

transcription モード、translation モードにおいてそれぞれ、以下の形式の JSON が改行区切りになっている JSONL ファイルとして保存されます。

transcription モード

{ "timestamp": string, // ISO8601 形式, "memberId": "member-id", "memberName": "member-name", "text": "文字起こし結果" }

translation モード

{ "timestamp": string, // ISO8601 形式, "memberId": "member-id", "memberName": "member-name", "texts": [ { "locale": "ja-JP", "text": "文字起こし結果" }, { "locale": "en-US", "text": "translated text" } ] }

アップロードのリトライ

文字起こし結果のアップロードが失敗した場合、自動的にリトライされます。 リトライの仕様は以下の通りです。

  • リトライ対象: クラウドストレージがステータスコード 429 または 500〜599 を返した場合
  • 最大試行時間: 24 時間(86400 秒)
    • この時間内でバックオフリトライされます