> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cartesia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Deepgram Flux から Cartesia Ink への移行

> Deepgram の /v2/listen WebSocket を Cartesia の /stt/turns/websocket に切り替えます。

Cartesia の [Realtime Speech-to-Text (Auto) API](/api-reference/stt/turns/websocket) は、Deepgram の Turn-based Audio (Flux) API と類似しています。
両 API とも WebSocket 経由でターンベースのイベントを発行するため、既存の Flux インテグレーションの移植は、主にフィールド名の変更と接続パラメータの更新です。

このガイドは WebSocket の直接利用を扱います。SDK 固有の例は近日公開予定です。

<Note>
  Ink 2 は現時点で英語のみをサポートしています。\
  今後数ヶ月のうちに他言語の追加を予定しています。
</Note>

## 接続

Deepgram の WebSocket URL と認証ヘッダーを Cartesia のものに置き換えます。

```diff theme={null}
- 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
```

```diff theme={null}
- Authorization: Token <DEEPGRAM_API_KEY>
+ X-API-Key: <CARTESIA_API_KEY>
```

ブラウザでは、WebSocket はリクエストヘッダーをサポートしません。代わりに、API バージョンを `cartesia_version` クエリパラメータで渡し、API キーの代わりに短命の [アクセストークン](/get-started/authenticate-your-client-applications) を `access_token` クエリパラメータで使用してください。

## クエリパラメータ

| Deepgram Flux               | Cartesia Ink 2                | 備考                                                                                           |
| --------------------------- | ----------------------------- | -------------------------------------------------------------------------------------------- |
| `model=flux-general-en`（必須） | `model=ink-2`（必須）             | 全オプションは [STT モデル](/build-with-cartesia/stt-models/latest) を参照してください。                         |
| `encoding=linear16`（必須）     | `encoding=pcm_s16le`（必須）      | `linear16` → `pcm_s16le`、`linear32` → `pcm_s32le`、`mulaw` → `pcm_mulaw`、`alaw` → `pcm_alaw`。 |
| `sample_rate`（必須）           | `sample_rate`（必須）             | 変更なし。                                                                                        |
| `language_hint`             | —                             | 現在は英語のみサポート。多言語対応は近日公開予定です！                                                                  |
| —                           | `cartesia_version=2026-03-01` | 詳細は [API の規約](/use-the-api/api-conventions#always-send-a-cartesia-version-header) を参照してください。 |
| `eager_eot_threshold`       | —                             | ターン検出はモデルによって制御されます。設定機能は近日公開予定です！                                                           |
| `eot_threshold`             | —                             | ターン検出はモデルによって制御されます。設定機能は近日公開予定です！                                                           |
| `eot_timeout_ms`            | —                             | ターン検出はモデルによって制御されます。設定機能は近日公開予定です！                                                           |
| `keyterm`                   | —                             | 近日公開！                                                                                        |

## 音声の送信

両 API とも、バイナリ WebSocket フレームとして生の音声を受け取ります。音声パイプラインの変更はなく、宣言した `encoding` と `sample_rate` にバイトが一致することを確認するだけです。

セッションをクローズするには、JSON エンコードされた WebSocket テキストフレームを送信します:

```diff theme={null}
- { "type": "CloseStream" }
+ { "type": "close" }
```

Cartesia には Flux の `Configure` 制御メッセージに相当するものはありません。エンドオブターンを設定する必要がないためです。

## イベントマッピング

Flux はすべてのターンイベントを単一の `TurnInfo` メッセージに `event` 判別子付きでラップします。Cartesia はイベントごとに 1 つのメッセージタイプを発行し、その型はトップレベルの `type` フィールドにあります。

| Deepgram Flux (`TurnInfo.event`) | Cartesia (`type`) | `transcript` を含むか？ |
| -------------------------------- | ----------------- | ------------------ |
| `StartOfTurn`                    | `turn.start`      | いいえ（Flux: はい）      |
| `Update`                         | `turn.update`     | はい                 |
| `EagerEndOfTurn`                 | `turn.eager_end`  | はい                 |
| `TurnResumed`                    | `turn.resume`     | いいえ（Flux: はい）      |
| `EndOfTurn`                      | `turn.end`        | はい                 |
| `Connected`                      | `connected`       | —                  |
| `Error`                          | `error`           | —                  |

Flux の `TurnInfo` メッセージ:

```json theme={null}
{
  "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` イベントになります:

```json theme={null}
{
  "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`

タイムスタンプ、エンドオブターン信頼度、多言語対応は近日公開予定です！

## イベントハンドラー

ハンドラーの分岐構造は変わりません。変わるのはメッセージの形状だけです。

```diff theme={null}
  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;
+   }
  };
```
