アーカイブ機能
本記事では、文字起こし結果をクラウドストレージへアーカイブする方法を説明します。
概要
文字起こしセッション開始時にクラウドストレージの情報を指定すると、文字起こしセッション終了時にセッション内の文字起こし結果が JSONL ファイルとしてアップロードされます。
サンプルコードをもとに、文字起こし機能が付いた会議アプリの実装方法について説明します。基本的な利用方法はクイックスタートと同様です。
事前準備
利用するクラウドストレージを準備してください。準備方法は、録音・録画クイックスタートのクラウドストレージの準備を参照してください。
ストレージ設定例
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 } = 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(),
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分程度かかります。
アップロードされるファイルの形式
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": [
{
"language": "ja",
"text": "文字起こし結果"
},
{
"language": "en",
"text": "translated text"
}
]
}