agent_id を再利用してください。エージェントの作成については Managed Agents を、設定についてはエージェントの設定を参照してください。
前提条件
- 既存の Managed Agent とその
agent_id - 信頼できるサーバー用の Cartesia API キー、またはブラウザ・モバイルアプリ向けにサーバーで生成したエージェントアクセストークン
- マイクやファイルなどの入力ソースから音声を読み取り、サポートされるオーディオ形式のバイト列を生成するコード
- 同じ形式で返されるエージェント音声を再生または処理するコード
オーディオ形式
input_format は必須です。ヘッダーなしのモノラル音声を選択します:
エージェント音声も入力と同じ形式を使用します。
クイックスタート
この Node.js のセッションスケルトンは、信頼できるサーバー上で API キーを使用します。接続してsession_create を送信し、session_ready を待ち、返された base64 音声をバイト列に変換します。例の後に示す 3 つの音声統合ポイントを接続してください。
ws パッケージをインストールします:
agent-session.mjs として保存します:
agent-session.mjs
- 音声入力チャンクごとに
sendAudio(audioBytes)を呼び出します。audioBytesにはsession_createで選択したinput_formatのバイト列を渡します。この関数はそれを base64 エンコードして送信し、何も返しません。 playAudio(audioBytes)を、同じ形式のバイト列を再生キューに入れ、何も返さない関数に置き換えます。stopPlayback()を、引数を取らず、キュー済みの出力を破棄して現在の再生を停止し、何も返さない関数に置き換えます。
接続
X-API-Key ヘッダーで認証します。ブラウザおよびモバイルアプリケーションは access_token クエリパラメータを送信してください。クライアントアプリケーションで API キーを絶対に公開しないでください。トークンの取り扱いについてはクライアントアプリケーションの認証を参照してください。
接続は、オープンした時点のエージェントの現在のバージョンを取り込みます。設定変更は、すでに進行中の通話には影響しません。session_ready イベントは、解決された agent_version_id とその通話の call_id を報告します。
セッションの開始
接続から 10 秒以内に、最初のイベントとしてsession_create を送信します:
output_delivery のデフォルトは speaking_pace です。アプリケーションが独自の再生バッファを管理する場合は as_available を使用してください。エージェントにバックグラウンド音声が設定されている場合、as_available は使用できません。
音声を送信する前に session_ready を待ってください:
session_ready のすべてのフィールドについては Agent WebSocket API リファレンスを参照してください。
音声のストリーミング
すべてのイベントは JSON テキストフレームを使用します。audio_input と audio_output のどちらも、バイナリ音声バイト列を base64 エンコードしてイベントの audio 文字列に載せます。バイナリの WebSocket フレームは送信しないでください。
ユーザー音声は audio_input イベントとして送信します。
audio_output イベントを返します:
audio_output_clear を送信します(バージイン)。バッファ済みのエージェント音声を破棄し、直ちに再生を停止してください。このイベントはエージェント音声が再生されていないときにも届くことがあり、その場合はクリアすべきものはありません。
クライアントツール
エージェントがクライアントツールを呼び出すと、サーバーはclient_tool_call を送信します:
expects_response が true の場合、同じ tool_call_id で応答してください:
会話イベント
発話状態の UI、トランスクリプト、その他の音声以外のワークフローにはturn_started、turn_output_text_delta、turn_ended を使用します。アシスタントのテキストは turn_output_text_delta で逐次届きます。turn_ended.text には、どちらのロールについても確定テキストが含まれます。
エージェント音声は audio_output から再生してください。audio_output_clear が届いたら、キュー済みのエージェント音声を破棄して再生を停止してください。
セッションを終了する
クライアント側で正常に終了するときは、コード1000 で WebSocket をクローズします:
session_ready で返される call_id は、このセッションの通話記録を識別します。通話終了後、これを Get Call エンドポイントに渡すと通話記録とトランスクリプトを取得でき、Download Call Audio に渡すと通話音声をダウンロードできます。他の通話記録を探すには List Calls を使用してください。
エラーと接続の制限
サーバーはイベントを拒否するとerror イベントを送信します。回復可能なエラーは fatal: false を持ち、致命的なエラーの後には接続クローズが続きます。
- JSON メッセージは最大 32 KiB です。それより大きいメッセージはコード
1009でクローズされます。 - 有効なクライアントイベントがないまま 120 秒経過すると、サーバーは接続を閉じます。無音を含め、音声を継続的にストリーミングすることで接続は維持されます。WebSocket の ping フレームは、このアプリケーションレベルのタイマーをリセットしません。
- サーバーはプロトコルエラーにクローズコード
1008、内部障害に1011を使用します。