WebSocket
AIエージェントとのリアルタイムでインタラクティブな音声会話を作成
このドキュメントは、ElevenLabs WebSocket APIを直接統合するデベロッパー向けです。より簡単に利用するには、 ElevenLabsが提供する公式SDKの使用をご検討ください。
ElevenAgents WebSocket APIを使用すると、AIエージェントとのリアルタイムでインタラクティブな音声会話を実現できます。WebSocket接続を確立することで、オーディオ入力を送信し、オーディオ応答をリアルタイムで受信でき、自然な会話体験を作成できます。
wss://api.elevenlabs.io/v1/convai/conversation?agent_id={agent_id}認証
エージェントIDを使用する
パブリックエージェントでは、追加の認証なしでWebSocket URL内のagent_idを直接使用できます。
署名付きURLを使用する
プライベートエージェント、または認可が必要な会話では、サーバーから署名付きURLを取得します。サーバーはAPIキーを使用してElevenLabs APIと安全に通信します。
cURLを使用した例
リクエスト:
レスポンス:
WebSocketイベント
クライアントからサーバーへのイベント
クライアントからサーバーへは、次のイベントを送信できます。
コンテキスト更新
会話の状態を更新するために、会話を中断しないコンテキスト情報を送信します。これにより、進行中の会話フローを妨げずに追加のコンテキストを提供できます。
ユースケース:
- ユーザーのステータスや設定を更新する
- 環境コンテキストを提供する
- 背景情報を追加する
- ユーザーインターフェースの操作を追跡する
主なポイント:
- 現在の会話フローを中断しない
- 更新は会話履歴内のツール呼び出しとして組み込まれる
- 自然な対話を損なわずにコンテキストを維持できる
コンテキスト更新は非同期で処理され、サーバーからの直接的な応答は必要ありません。
Next.js実装例
この例では、ElevenLabs WebSocket APIを使用して、Next.jsでWebSocketベースの会話エージェントクライアントを実装する方法を示します。
この例ではマイク入力の処理にvoice-streamパッケージを使用していますが、オーディオのキャプチャと
エンコードは独自に実装できます。ここでは、ElevenLabs APIとのWebSocket接続とイベント処理を
示すことに焦点を当てています。
必要な依存関係をインストールする
まず、必要なパッケージをインストールします。
voice-streamパッケージはマイクへのアクセスとオーディオストリーミングを処理し、ElevenLabs APIで必要なbase64形式にオーディオを自動的にエンコードします。
この例ではスタイリングにTailwind CSSを使用しています。Next.jsプロジェクトにTailwindを追加するには:
続いて、Next.js向けTailwind CSS公式セットアップガイドに従ってください。
または、className属性を独自のCSSスタイルに置き換えることもできます。
次のステップ
- オーディオ再生:Web Audio APIまたはライブラリを使用して、独自のオーディオ再生システムを実装します。WebSocketはオーディオイベントをチャンク単位で送信するため、重複を防ぐオーディオキューイングを必ず処理してください。
- エラー処理:再試行ロジックとエラー回復の仕組みを追加する
- UIフィードバック:音声アクティビティと接続ステータスの視覚的なインジケーターを追加する
レイテンシー管理
スムーズな会話を実現するため、以下の戦略を実装してください。
- **アダプティブバッファリング:**ネットワーク状況に応じてオーディオバッファリングを調整します。
- **ジッターバッファ:**パケット到着時間のばらつきを平滑化するためにジッターバッファを実装します。
- **Ping-Pongモニタリング:**pingおよびpongイベントを使用して往復時間を測定し、それに応じて調整します。
セキュリティのベストプラクティス
- APIキーを定期的にローテーションし、環境変数に保存します。
- 不正利用を防ぐためにレート制限を実装します。
- マイクへのアクセスをユーザーに求める際は、その意図を明確に説明します。
- 最適化されたチャンク化:レイテンシーと効率のバランスを取るため、オーディオチャンクの長さを調整します。