Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

文字起こし

最終更新 Markdown で表示Agent セットアップ

RealtimeKit は、Cloudflare Workers AI を使った 2 つの文字起こしモードを提供します。

モード モデル 処理タイミング 用途
リアルタイム Deepgram Nova-3 会議中 参加者向けのライブ字幕
会議後 Whisper Large v3 Turbo 会議終了後 トランスクリプトファイルwebhooks

RealtimeKit は、参加者ごとの音声ストリームを個別に処理します。最終的なトランスクリプトで話者を識別しやすくなります。

Free プランの Workers AI 処理上限を避けるため、Workers Paid プランへのアップグレードを推奨します。詳細は 料金と Free プランの上限 を参照してください。

リアルタイム文字起こし

リアルタイム文字起こしは、参加者の音声を Workers AI 上の Deepgram Nova-3 にストリーミングし、会議中に トランスクリプトイベント を参加者へ送ります。

リアルタイム文字起こしを有効にする

参加者のリアルタイム文字起こしは、その参加者の presetpermissions.transcription_enabled: true を設定すると有効になります。どの参加者の音声を文字起こしするかを選べます。たとえば、スピーカーの音声だけを文字起こしし、オーディエンスの音声は対象外にできます。

既存の preset を更新するには、Update a preset API を使います。

curl -X PATCH "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/presets/$PRESET_ID" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "permissions": {
      "transcription_enabled": true
    }
  }'

preset を作成する場合は、Create a preset API を参照してください。

RealtimeKit が文字起こしするのは、permissions.transcription_enabled: true の preset で参加した参加者の音声だけです。

会議中、RealtimeKit はクライアント SDK にトランスクリプトの更新をストリーミングします。meeting.ai.transcripts から既存のトランスクリプトを取得するか、meeting.ai.on("transcript", ...) で新しいトランスクリプトイベントを待ち受ける方法は、リアルタイムのトランスクリプトを利用する を参照してください。

文字起こし設定を構成する

preset は、誰の音声を文字起こしするかを制御します。ミーティング設定は、RealtimeKit がその音声をどう文字起こしするかを制御します。ai_config.transcription で、話し言葉 の指定、固有名詞の認識強化、特定ミーティングの不適切表現フィルターを設定できます。

curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/meetings" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Weekly product review",
    "ai_config": {
      "transcription": {
        "language": "en-US",
        "keywords": ["RealtimeKit", "Cloudflare"],
        "profanity_filter": false
      }
    }
  }'
オプション デフォルト 説明
language string en-US 文字起こしの言語コード
keywords string[] [] 認識を強化する語(名前、専門用語)
profanity_filter boolean false 不適切な表現をフィルターする

リアルタイムで対応している言語

リアルタイム文字起こしは、Workers AI 上の Deepgram Nova-3 を使います。

Workers AI 上の Nova-3 は、文字起こしで次の言語に対応しています。

言語 コード
英語 en, en-US, en-AU, en-GB, en-IN, en-NZ
スペイン語 es, es-419
フランス語 fr, fr-CA
ドイツ語 de, de-CH
ヒンディー語 hi
ロシア語 ru
ポルトガル語 pt, pt-BR, pt-PT
日本語 ja
イタリア語 it
オランダ語 nl

上に挙げたすべての言語を対象に、多言語を自動検出するには multi を使います。

言語を指定しない場合、モデルは en-US を既定とします。精度を高めるには、音声に合う言語コードを明示的に設定してください。

リアルタイムのトランスクリプトを利用する

リアルタイム文字起こしは、中間結果と最終結果の更新をクライアント SDK に送ります。ライブ字幕には中間結果を使い、履歴や保存する UI 状態には最終結果を使います。

Client SDK

// Get transcript entries already received by the client.
const transcripts = meeting.ai.transcripts;

// Listen for transcript updates during the meeting.
meeting.ai.on("transcript", (transcript) => {
	if (transcript.isPartialTranscript) {
		updateLiveCaption(transcript.peerId, transcript.transcript);
		return;
	}

	appendFinalTranscript(transcript);
});

トランスクリプトのペイロード

{
	"id": "1a2b3c4d-5678-90ab-cdef-1234567890ab",
	"name": "Alice",
	"peerId": "4f5g6h7i-8j9k-0lmn-opqr-1234567890st",
	"userId": "uvwxyz-1234-5678-90ab-cdefghijklmn",
	"customParticipantId": "abc123xyz",
	"transcript": "Hello everyone",
	"isPartialTranscript": false,
	"timestamp": 1716700000000
}
フィールド 説明
id トランスクリプト項目の一意な ID
name 話した参加者の表示名
peerId 話した参加者の peer ID。再参加すると変わります。
userId 参加者の永続 ID
customParticipantId 参加者追加時に設定した識別子
transcript 文字起こしテキスト
isPartialTranscript 中間更新は true、最終更新は false
timestamp Unix エポック時刻(ミリ秒)

会議後の文字起こし

会議後の文字起こしは、会議終了後に Workers AI 上の Whisper Large v3 Turbo でトランスクリプトを生成し、webhook または REST API で配信します。話者を識別するため、RealtimeKit は各参加者の音声を個別に処理してから 最終トランスクリプト を作成します。

会議後の文字起こしを有効にする

会議後の文字起こしは、ミーティング作成時に有効にできます。transcribe_on_end: true を設定すると、会議終了後にトランスクリプトを生成します。トランスクリプトが揃ったあと 要約 も自動生成するには、summarize_on_end: true を設定します。

curl -X POST "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/meetings" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Weekly product review",
    "transcribe_on_end": true,
    "summarize_on_end": true,
    "ai_config": {
      "transcription": {
        "language": "en"
      }
    }
  }'

トランスクリプトの言語は ai_config.transcription.language で指定します。対応する値は 会議後の文字起こしで対応している言語 を参照してください。transcribe_on_end を設定しない場合、RealtimeKit は会議後のトランスクリプトを生成しません。

会議後の文字起こしで対応している言語

会議後の文字起こしは、Whisper Large v3 Turbo の言語コードに対応しています。ai_config.transcription.language を省略すると、Whisper が話し言葉を検出します。

よく使う言語コードは次のとおりです。

言語 コード 言語 コード 言語 コード
英語 en スペイン語 es フランス語 fr
ドイツ語 de ヒンディー語 hi ポルトガル語 pt
日本語 ja イタリア語 it オランダ語 nl
ロシア語 ru 中国語 zh 広東語 yue

会議後の文字起こしで使えるその他の言語コード

言語 コード
アフリカーンス語 af
アルバニア語 sq
アムハラ語 am
アラビア語 ar
アッサム語 as
アゼルバイジャン語 az
バシキール語 ba
バスク語 eu
ベラルーシ語 be
ベンガル語 bn
ボスニア語 bs
ブルトン語 br
ブルガリア語 bg
カタロニア語 ca
クロアチア語 hr
チェコ語 cs
デンマーク語 da
エストニア語 et
フェロー語 fo
フィンランド語 fi
ガリシア語 gl
ジョージア語 ka
ギリシャ語 el
グジャラート語 gu
ハイチ語 ht
ハウサ語 ha
ハワイ語 haw
ヘブライ語 he
ハンガリー語 hu
アイスランド語 is
インドネシア語 id
ジャワ語 jw
カンナダ語 kn
カザフ語 kk
クメール語 km
韓国語 ko
ラオ語 lo
ラテン語 la
ラトビア語 lv
リンガラ語 ln
リトアニア語 lt
ルクセンブルク語 lb
マケドニア語 mk
マダガスカル語 mg
マレー語 ms
マラヤーラム語 ml
マルタ語 mt
マオリ語 mi
マラーティー語 mr
モンゴル語 mn
ミャンマー語 my
ネパール語 ne
ノルウェー語 no
ノルウェー語(ニーノシュク) nn
オック語 oc
パシュトー語 ps
ペルシア語 fa
ポーランド語 pl
パンジャーブ語 pa
ルーマニア語 ro
サンスクリット語 sa
セルビア語 sr
ショナ語 sn
シンド語 sd
シンハラ語 si
スロバキア語 sk
スロベニア語 sl
ソマリ語 so
スンダ語 su
スワヒリ語 sw
スウェーデン語 sv
タガログ語 tl
タジク語 tg
タミル語 ta
タタール語 tt
テルグ語 te
タイ語 th
チベット語 bo
トルクメン語 tk
トルコ語 tr
ウクライナ語 uk
ウルドゥー語 ur
ウズベク語 uz
ベトナム語 vi
ウェールズ語 cy
イディッシュ語 yi
ヨルバ語 yo

出力形式

会議後のトランスクリプトは、複数の形式で取得できます。アプリのワークフローには CSV または JSON を使い、字幕ファイルが必要な場合は SRT または VTT を使います。

形式 用途
CSV 表計算とデータ分析
JSON プログラムからのアクセス
SRT 動画の字幕ファイル
VTT Web 動画のキャプション(<track> 要素)

"1000","peer-123","user-456","cust-789","Alice","Hello everyone"
"3000","peer-234","user-567","cust-890","Bob","Hi Alice"

CSV の各行は、開始時刻(ミリ秒)、peer ID、user ID、カスタム参加者 ID、参加者名、文字起こしテキストの順です。

[
	{
		"startTime": 1000,
		"endTime": 2500,
		"sentence": "Hello everyone",
		"peerData": {
			"id": "peer-123",
			"userId": "user-456",
			"displayName": "Alice",
			"cpi": "cust-789",
			"joinedAt": "2024-08-07T10:15:29.000Z",
			"leftAt": ""
		}
	}
]
1
00:00:01,000 --> 00:00:02,500
Alice: Hello everyone

2
00:00:03,000 --> 00:00:04,500
Bob: Hi Alice

会議後のトランスクリプトを利用する

RealtimeKit が会議後のトランスクリプト処理を終えると、ダウンロード URL を webhook で受け取るか、REST API で取得できます。非同期のバックエンド処理には webhook を使い、特定セッションのトランスクリプトを取りたい場合は REST API を使います。

Webhook

RealtimeKit webhooksmeeting.transcript イベントを設定します。

{
	"event": "meeting.transcript",
	"meeting": {
		"id": "bbb8940e-1b97-402a-97d6-2708b7feca41",
		"title": "Weekly sync",
		"endedAt": "2026-06-03T10:30:00.000Z",
		"createdAt": "2026-06-03T10:00:00.000Z",
		"sessionId": "05e57591-d89e-45c9-ae44-08dc1eaad0e0",
		"startedAt": "2026-06-03T10:00:00.000Z",
		"status": "LIVE",
		"organizedBy": {
			"id": "c94c437b-592a-4a39-b9e2-47ef1451e43b",
			"name": "Example organization"
		}
	},
	"transcriptDownloadUrl": "https://example.com/transcript.csv",
	"transcriptDownloadUrlExpiry": "2026-06-10T10:30:00.000Z"
}

REST API

Fetch the complete transcript for a session を参照してください。

curl -X GET "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/realtime/kit/$APP_ID/sessions/$SESSION_ID/transcript" \
  -H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

トランスクリプトの利用期間

トランスクリプトは、会議終了後 7 日間 利用できます。webhook または REST API が返す URL の有効期限までに、ファイルをダウンロードするかコピーしてください。

料金と Free プランの上限

RealtimeKit のデフォルトの文字起こしは、各参加者の音声トラックを記録し、Workers AI で処理します。Workers AI の利用料は、会議時間ではなく参加者の音声分数に応じた 音声モデルの料金 で、Cloudflare アカウントに請求されます。

Workers Free プランでは、Workers AI に 1 日 10,000 Neurons が含まれます。1 日 10,000 Neurons を超えて使う場合は、Workers Paid プラン にアップグレードします。Workers Paid にも同じ 1 日 10,000 Neurons の無料枠があり、超過分は 1,000 Neurons あたり $0.011 で請求されます。

Workers Paid プランへのアップグレードは、Cloudflare ダッシュボードの アカウントを管理 から行えます。

RealtimeKit の文字起こしは、次の Workers AI 音声モデル料金を使います。

文字起こしモード Workers AI モデル 音声 1 分あたりの Neurons
会議後 @cf/openai/whisper-large-v3-turbo 46.63
リアルタイム @cf/deepgram/nova-3 WebSocket 836.36

データの処理と保存

RealtimeKit の文字起こしは、マネージドな文字起こしワークフローです。文字起こしを有効にすると、RealtimeKit は参加者の音声を Workers AI で処理し、トランスクリプト出力 を RealtimeKit 管理のストレージに保存します。

リアルタイム文字起こしでは、RealtimeKit は文字起こしが有効な参加者の音声を Workers AI にストリーミングし、会議中にトランスクリプト更新を参加者へ送ります。

会議後の文字起こしでは、RealtimeKit は会議終了後に各参加者の音声を個別に処理し、最終トランスクリプトファイルを作成して、webhook または REST API で提供します。

役に立ちましたか?