JavaScript SDK
ElevenAgents SDK:カスタマイズされた対話型音声エージェントを数分でデプロイできます。
インストール
パッケージマネージャーを使って、プロジェクトにパッケージをインストールします。
以前のバージョンからアップグレードしますか?npx skills add elevenlabs/packagesを実行して、AIコーディングエージェント向けの
elevenlabs:sdk-migrationスキルをインストールしてください。このスキルにより、インポートの変更とAPIの
更新を自動化できます。
使い方
このライブラリは主に、プレーンなJavaScriptプロジェクトでの開発や、特定のフレームワーク向けにカスタマイズされたライブラリの基盤として利用することを想定しています。 使用するフレームワークに専用ライブラリがあるかを確認することをおすすめします。 ただし、このライブラリはJavaScriptベースのあらゆるプロジェクトで使用できます。
会話を初期化する
まず、Conversation.startSessionを使用して新しい会話セッションを作成します。
これにより接続が確立され、マイクを使用してElevenLabs Agentsエージェントとの通信が開始されます。会話を開始する前に、マイクへのアクセスが必要な理由をアプリのUIで説明し、アクセスを許可できるようにすることを検討してください。
セッション設定
startSessionに渡すオプションで、セッションの確立方法を指定します。会話はパブリックエージェントまたはプライベートエージェントで開始できます。
パブリックエージェント
認証を必要としないエージェントでは、エージェントIDを使用して会話を開始できます。エージェントIDはElevenLabs UIから取得できます。
パブリックエージェントでは、IDを直接使用できます。
接続タイプは、会話モードに基づいて自動的に推測されます。音声会話ではWebRTCが使用され、
テキストのみの会話ではデフォルトでWebSocketが使用されます。必要に応じて、
connectionType: 'webrtc'またはconnectionType: 'websocket'を明示的に指定することもできます。
プライベートエージェント
会話に認可が必要な場合は、ElevenLabs APIを使用して署名付きURL(WebSocket接続タイプの場合)または会話トークン(WebRTCの場合)をリクエストし、それをクライアントに返す専用エンドポイントをサーバーに追加する必要があります。
以下はWebSocket接続の例です。
以下はWebRTCの例です。
トークンを取得したら、startSessionに渡すことでWebRTCを使用した会話が開始されます。
任意のコールバック
startSessionに渡すオプションでは、任意のコールバックも登録できます。
- onConnect - 会話のWebSocket接続が確立されたときに呼び出されるハンドラー。
- onDisconnect - 会話のWebSocket接続が終了したときに呼び出されるハンドラー。
- onMessage - 新しいテキストメッセージを受信したときに呼び出されるハンドラー。ユーザーの音声の暫定または確定の文字起こし、LLMが生成した応答を受け取れます。主に会話の文字起こしを処理するために使用します。
- onError - エラーが発生したときに呼び出されるハンドラー。
- onStatusChange - 接続ステータスが変わるたびに呼び出されるハンドラー。
connected、connecting、disconnected(初期状態)を指定できます。 - onModeChange - ステータスが変わったときに呼び出されるハンドラー。たとえば、エージェントが
speakingからlisteningに切り替わる場合や、その逆の場合です。 - onCanSendFeedbackChange - フィードバックの送信が可能または不可能になったときに呼び出されるハンドラー。
- onAudioAlignment - 音声アラインメントデータを受信したときに呼び出されるハンドラー。エージェントの発話に対する文字単位のタイミング情報を提供します。
すべてのクライアントイベントがエージェントでデフォルトで有効になっているわけではありません。コールバックを有効にしても イベントを受信できない場合は、ElevenLabsエージェントで対応するイベントが 有効になっていることを確認してください。ElevenLabsダッシュボードのエージェント設定にある「Advanced」タブで設定できます。
戻り値
startSessionは、セッションの制御に使用できる会話インスタンス(モードに応じてVoiceConversationまたはTextConversation)を返します。セッションを確立できない場合、このメソッドはエラーをスローします。ユーザーがマイクへのアクセスを拒否した場合や、接続に失敗した場合に発生することがあります。
endSession
会話を手動で終了するメソッドです。会話を終了し、WebSocketから切断します。 その後、会話インスタンスは使用できなくなるため、安全に破棄できます。
getId
会話IDを返すメソッドです。
setVolume
会話の出力音量を設定するメソッドです。0から1の範囲のvolumeフィールドを持つオブジェクトを受け取ります。
getInputVolume / getOutputVolume
現在の入出力音量を返すメソッドです。0は-100dB、1は-30dBとして、0から1のスケールで返します。
sendFeedback
エージェントにバイナリフィードバックを送信するメソッドです。trueはポジティブフィードバック、falseはネガティブフィードバックを表すboolean値を受け取ります。
フィードバックは常に直近のエージェント応答に紐づけられ、応答ごとに一度だけ送信できます。
onCanSendFeedbackChangeを監視すると、その時点でフィードバックを送信できるかどうかを確認できます。
sendContextualUpdate
エージェントにコンテキスト更新を送信するメソッドです。会話に直接関係しないものの、エージェントの応答に影響を与える可能性があるユーザーアクションをエージェントに通知するために使用できます。
sendUserMessage
エージェントにテキストメッセージを送信します。
ユーザーがマイクの代わりにメッセージを入力できるようにするために使用します。sendContextualUpdateとは異なり、これはユーザーメッセージとして扱われ、エージェントは会話で応答します。
sendUserActivity
ユーザーアクティビティをエージェントに通知します。
ユーザーアクティビティが検出された後、エージェントは少なくとも2秒間は発話を試みません。
ユーザーが入力中にエージェントが割り込むのを防ぐために使用できます。
setMicMuted
マイクをミュート/ミュート解除するメソッドです。
changeInputDevice
アクティブな音声会話中にオーディオ入力デバイスを変更できます。このメソッドは音声会話でのみ使用できます。
WebRTCモードでは、入力フォーマットとサンプルレートはそれぞれpcmと48000にハードコードされています。
入力デバイスの変更時にこれらの値を変更しても何も起こりません。
デバイスIDが無効な場合は、代わりにデフォルトのデバイスが使用されます。
changeOutputDevice
アクティブな音声会話中にオーディオ出力デバイスを変更できます。このメソッドは音声会話でのみ使用できます。
WebRTCモードでは、出力フォーマットとサンプルレートはそれぞれpcmと48000にハードコードされています。
出力デバイスの変更時にこれらの値を変更しても何も起こりません。
デバイスの切り替えは音声会話でのみ機能します。特定のdeviceIdが指定されていない場合は、
ブラウザのデフォルトのデバイス選択が使用されます。利用可能なデバイスは
MediaDevices.enumerateDevices()
APIで列挙できます。
getInputByteFrequencyData / getOutputByteFrequencyData
現在の入出力周波数データを含むUint8Arrayを返すメソッドです。詳しくはAnalyserNode.getByteFrequencyDataをご覧ください。
これらのメソッドは音声会話でのみ使用できます。WebRTCモードでは、オーディオはpcm_48000を
使用するようハードコードされているため、返されるデータを使った可視化ではWebSocket接続とは異なるパターンが表示される可能性があります。