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 にストリーミングし、会議中に トランスクリプトイベント を参加者へ送ります。
参加者のリアルタイム文字起こしは、その参加者の preset で permissions.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 状態には最終結果を使います。
// 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 AliceRealtimeKit が会議後のトランスクリプト処理を終えると、ダウンロード URL を webhook で受け取るか、REST API で取得できます。非同期のバックエンド処理には webhook を使い、特定セッションのトランスクリプトを取りたい場合は REST API を使います。
RealtimeKit webhooks で meeting.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"
}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 の有効期限までに、ファイルをダウンロードするかコピーしてください。
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 で提供します。