Skip to main content
Cartesia の Realtime Speech-to-Text (Auto) API は、Deepgram の Turn-based Audio (Flux) API と類似しています。 両 API とも WebSocket 経由でターンベースのイベントを発行するため、既存の Flux インテグレーションの移植は、主にフィールド名の変更と接続パラメータの更新です。 このガイドは WebSocket の直接利用を扱います。SDK 固有の例は近日公開予定です。
Ink 2 は現時点で英語のみをサポートしています。
今後数ヶ月のうちに他言語の追加を予定しています。

接続

Deepgram の WebSocket URL と認証ヘッダーを Cartesia のものに置き換えます。
- wss://api.deepgram.com/v2/listen?model=flux-general-en&encoding=linear16&sample_rate=16000
+ wss://api.cartesia.ai/stt/turns/websocket?model=ink-2&encoding=pcm_s16le&sample_rate=16000
- Authorization: Token <DEEPGRAM_API_KEY>
+ X-API-Key: <CARTESIA_API_KEY>
ブラウザでは、WebSocket はリクエストヘッダーをサポートしません。代わりに、API バージョンを cartesia_version クエリパラメータで渡し、API キーの代わりに短命の アクセストークンaccess_token クエリパラメータで使用してください。

クエリパラメータ

Deepgram FluxCartesia Ink 2備考
model=flux-general-en(必須)model=ink-2(必須)全オプションは STT モデル を参照してください。
encoding=linear16(必須)encoding=pcm_s16le(必須)linear16pcm_s16lelinear32pcm_s32lemulawpcm_mulawalawpcm_alaw
sample_rate(必須)sample_rate(必須)変更なし。
language_hint現在は英語のみサポート。多言語対応は近日公開予定です!
cartesia_version=2026-03-01詳細は API の規約 を参照してください。
eager_eot_thresholdターン検出はモデルによって制御されます。設定機能は近日公開予定です!
eot_thresholdターン検出はモデルによって制御されます。設定機能は近日公開予定です!
eot_timeout_msターン検出はモデルによって制御されます。設定機能は近日公開予定です!
keyterm近日公開!

音声の送信

両 API とも、バイナリ WebSocket フレームとして生の音声を受け取ります。音声パイプラインの変更はなく、宣言した encodingsample_rate にバイトが一致することを確認するだけです。 セッションをクローズするには、JSON エンコードされた WebSocket テキストフレームを送信します:
- { "type": "CloseStream" }
+ { "type": "close" }
Cartesia には Flux の Configure 制御メッセージに相当するものはありません。エンドオブターンを設定する必要がないためです。

イベントマッピング

Flux はすべてのターンイベントを単一の TurnInfo メッセージに event 判別子付きでラップします。Cartesia はイベントごとに 1 つのメッセージタイプを発行し、その型はトップレベルの type フィールドにあります。
Deepgram Flux (TurnInfo.event)Cartesia (type)transcript を含むか?
StartOfTurnturn.startいいえ(Flux: はい)
Updateturn.updateはい
EagerEndOfTurnturn.eager_endはい
TurnResumedturn.resumeいいえ(Flux: はい)
EndOfTurnturn.endはい
Connectedconnected
Errorerror
Flux の TurnInfo メッセージ:
{
  "type": "TurnInfo",
  "event": "EndOfTurn",
  "turn_index": 0,
  "transcript": "Hi I need to cancel my subscription please.",
  "words": [...],
  "end_of_turn_confidence": 0.7,
  "audio_window_start": 0.0,
  "audio_window_end": 1.7
}
これは Ink 2 の turn.end イベントになります:
{
  "type": "turn.end",
  "transcript": "Hi I need to cancel my subscription please.",
  "request_id": "2ff8af53-4d38-479d-8287-58940f01c701"
}
Deepgram Flux と同様に、transcript はターン内で累積的です。 Ink 2 には 発行されるトランスクリプトはすべて確定 (final) であるという追加の利点があります。モデルが確信を持つまで単語は発行されません。後続のイベントは、それ以前のイベントで送られたテキストを変更することなく、トランスクリプトに追加するだけです。

同等機能のないフィールド

Cartesia は以下を発行しません:
  • turn_index
  • audio_window_start
  • audio_window_end
  • words
  • end_of_turn_confidence
  • sequence_id
  • languages
  • languages_hinted
タイムスタンプ、エンドオブターン信頼度、多言語対応は近日公開予定です!

イベントハンドラー

ハンドラーの分岐構造は変わりません。変わるのはメッセージの形状だけです。
  ws.onmessage = (message) => {
    const data = JSON.parse(message.data);
-   if (data.type !== "TurnInfo") return;
-   switch (data.event) {
-     case "StartOfTurn":    onTurnStart(); break;
-     case "Update":         onTranscriptUpdate(data.transcript); break;
-     case "EagerEndOfTurn": prepareReply(data.transcript); break;
-     case "TurnResumed":    cancelReply(); break;
-     case "EndOfTurn":      finalizeReply(data.transcript); break;
-   }
+   switch (data.type) {
+     case "turn.start":     onTurnStart(); break;
+     case "turn.update":    onTranscriptUpdate(data.transcript); break;
+     case "turn.eager_end": prepareReply(data.transcript); break;
+     case "turn.resume":    cancelReply(); break;
+     case "turn.end":       finalizeReply(data.transcript); break;
+   }
  };