Kotlin SDK
ElevenAgents SDK:Androidアプリ向けのカスタマイズ可能でインタラクティブな音声エージェントを数分で導入できます。
ElevenAgentsの仕組みについては、ElevenAgentsの概要を ご覧ください。
インストール
アプリレベルのbuild.gradleファイルに以下の依存関係を追加して、AndroidプロジェクトにElevenLabs SDKを追加します。
このSDKを使用したAndroidアプリの例は こちらで確認できます。
要件
- Android APIレベル21(Android 5.0)以上
- API呼び出し用のインターネット権限
- 音声入力用のマイク権限
- HTTPS呼び出し用のネットワークセキュリティ設定
セットアップ
マニフェストの設定
必要な権限をAndroidManifest.xmlに追加します。
実行時の権限
Android 6.0(APIレベル23)以降では、実行時にマイク権限をリクエストする必要があります。
使用方法
ApplicationクラスまたはメインアクティビティでElevenLabs SDKを初期化します。
以下のいずれかで会話セッションを開始します。
- パブリックエージェント:
agentIdを渡す - プライベートエージェント:バックエンドで発行した
conversationTokenを渡す(APIキーをクライアントに公開しないでください)。
ElevenAgentsにはマイクへのアクセスが必要です。特に実行時の権限が必要なAndroid 6.0以降では、会話を開始する前にアプリのUIで権限について説明し、リクエストすることを検討してください。
サーバー側でツールがexpects_response=falseに設定されている場合は、executeからnullを返し、
ツールの結果をエージェントに送信しないようにします。
パブリックエージェントとプライベートエージェント
- パブリックエージェント(認証なし):
ConversationConfigでagentIdを指定して初期化します。SDKはデバイス上のAPIキーを必要とせず、ElevenLabsから会話トークンをリクエストします。 - プライベートエージェント(認証あり):
ConversationConfigでconversationTokenを指定して初期化します。サーバーがElevenLabs APIキーを使用して、ElevenLabsから会話トークンをリクエストします。
クライアントツール
クライアントツールを登録すると、エージェントがデバイス上のローカル機能を呼び出せるようになります。
エージェントがclient_tool_callを発行すると、SDKは対応するツールを実行し、client_tool_resultで応答します。ツールが登録されていない場合は、onUnhandledClientToolCallが呼び出され、応答が想定されていれば失敗結果がエージェントに返されます。
コールバックの概要
- onConnect - WebRTC接続が確立されたときに呼び出されます。会話IDを返します。
- onMessage - 新しいメッセージを受信したときに呼び出されます。ユーザー音声の暫定または最終文字起こし、LLMが生成した応答、デバッグメッセージなどが含まれます。ソース(
"ai"または"user")と生のJSONメッセージを提供します。 - onModeChange - 会話モードが変更されたときに呼び出されます。エージェントが話している(
"speaking")か、聞いている("listening")かを示す際に役立ちます。 - onStatusChange - 会話ステータスが変更されたときに呼び出されます(
"connected"、"connecting"、または"disconnected")。 - onCanSendFeedbackChange - フィードバック送信の可否が変わったときに呼び出されます。フィードバックボタンを有効または無効にします。
- onUnhandledClientToolCall - エージェントがデバイスに登録されていないクライアントツールをリクエストしたときに呼び出されます。
- onVadScore - 音声アクティビティ検出スコアが変わったときに呼び出されます。範囲は0から1で、値が高いほど音声である確信度が高くなります。
- onAudioAlignment - オーディオアラインメントデータを受信したときに呼び出され、エージェント音声の文字単位のタイミング情報を提供します。
すべてのクライアントイベントが、エージェントでデフォルトで有効になっているわけではありません。コールバックを有効にしても イベントを受信できない場合は、ElevenLabsエージェントで対応するイベントが 有効になっていることを確認してください。ElevenLabsダッシュボードのエージェント設定にある「Advanced」タブで設定できます。
メソッド
startSession
startSessionメソッドはWebRTC接続を開始し、マイクを使用してElevenLabs Agentsエージェントとの通信を開始します。
パブリックエージェント
パブリックエージェント(認証が有効になっていないエージェント)の場合は、agentIdのみが必要です。エージェントIDはElevenLabs UIから取得できます。
プライベートエージェント
プライベートエージェントの場合は、ElevenLabs APIから取得したconversationTokenを渡す必要があります。このトークンの生成にはElevenLabs APIキーが必要です。
conversationTokenの有効期限は10分です。次に、トークンをstartSessionメソッドに渡します。プライベートエージェントではconversationTokenのみが必要です。
必要に応じて、会話内でユーザーを識別するためのユーザーIDを渡せます。これは独自の顧客識別子にできます。サーバーに送信される会話開始データに含まれます。
endSession
会話を手動で終了するメソッドです。接続を切断して会話を終了します。
sendUserMessage
アクティブな会話中にエージェントへテキストメッセージを送信します。エージェントからの応答がトリガーされます。
sendContextualUpdate
応答をトリガーしないコンテキスト情報をエージェントに送信します。
sendFeedback
会話品質に関するフィードバックを提供します。これによりエージェントのパフォーマンス向上に役立ちます。フィードバックが許可されているときに高評価/低評価のUIを有効にするには、onCanSendFeedbackChangeを使用します。
sendUserActivity
中断を防ぐため、ユーザーアクティビティをエージェントに通知します。ユーザーがアプリを操作中で、エージェントに発話を一時停止させたい場合、たとえばチャットでユーザーが入力中の場合に役立ちます。
エージェントはこのシグナルを受信した後、約2秒間発話を一時停止します。
getId
会話IDを取得します。
ミュート/ミュート解除
session.isMutedを監視し、UIラベルを「ミュート」と「ミュート解除」の間で更新します。
プロパティ
status
現在の会話ステータスを取得します。
ProGuard/R8
縮小/難読化を行う場合は、GsonモデルとLiveKitが保持されるようにしてください。ルール例(必要に応じて調整):
トラブルシューティング
- 実行時にマイク権限が付与されていることを確認してください
- 再接続が停止する場合は、アプリが
session.endSession()を呼び出していること、および再接続前に新しいセッションインスタンスを開始していることを確認してください - エミュレーターでは、オーディオ入力/出力ルートが動作していることを確認してください。物理デバイスのほうが安定して動作する傾向があります
実装例
実装例については、ElevenLabs Android SDKリポジトリのサンプルアプリをご覧ください。このアプリでは以下を紹介しています。
- ワンタップでの接続/切断
- 発話中/リスニング中のインジケーター
- UIで有効/無効を切り替えるフィードバックボタン
sendUserActivity()による入力中インジケーター- 入力欄からのコンテキストメッセージとユーザーメッセージ
- マイクのミュート/ミュート解除ボタン