Next.jsにおけるAgents Platformを使ったデータ収集と分析
Next.jsにおけるAgents Platformを使ったデータ収集と分析
Agents PlatformとNext.jsを使用して、通話後のWebhookでデータを収集・分析します。
チュートリアル · ElevenAgents クイックスタートを完了し、Next.jsプロジェクトをセットアップ済みであることを前提としています。
はじめに
このチュートリアルでは、会話を通じてユーザーから情報を収集し、そのデータを構造化された形式で分析・抽出して、通話後のWebhook経由でアプリケーションに送信する音声エージェントの構築方法を学びます。
必要なもの
- APIキーを持つElevenLabsアカウント。
- マシンにインストールされたNode.js v18以降。
セットアップ
新しいNext.jsプロジェクトを作成する
アプリケーションの出発点として、v0.dev Agents Platformテンプレートの使用をおすすめします。このテンプレートは、ElevenLabsエージェントがすでに統合された、本番環境対応のNext.jsアプリケーションです。
Agents Platformをセットアップする
インストールと設定の手順については、Next.jsガイドを参照してください。続けて、ここに戻って高度な機能を構築します。
エージェントの設定
クライアントツールを設定
ステップ間を移動するため、次のクライアントツールを設定します。
- 名前:
set_ui_state- 説明:このクライアントサイドツールを使用して、異なるUI状態間を移動します。
- 応答を待機:
true - 応答タイムアウト(秒):1
- パラメータ:
- データ型:string
- 識別子:step
- 必須:true
- 値の型:LLM Prompt
- 説明:UIで移動する先のステップ。システムプロンプトで定義されているステップのみを使用してください!
評価基準を設定
Analysisタブに移動し、新しい評価基準を追加します。
- 名前:
all_data_provided- プロンプト:ユーザーが作成したいエージェントの説明と、エージェントに持たせる音声の説明の両方を提供したかどうかを評価します。
データ収集を設定
通話後分析を使用して、会話からデータを抽出できます。AnalysisタブのData Collectionで、以下の項目を追加します。
- 識別子:
voice_descriptiondata-type:String- 説明:ユーザーがエージェントに持たせたい音声の説明に基づき、利用可能な場合は年齢、アクセント、トーン、キャラクターを含む簡潔な音声の説明を生成します。
- 識別子:
agent_descriptiondata-type:String- 説明:ユーザーが設計したいエージェントの説明に基づき、そのエージェントとして機能するようモデルをトレーニングするために使用できるプロンプトを生成します。
通話後Webhookを設定
通話後Webhookは、通話が終了し、分析とデータ抽出のステップが完了したことを通知するために使用します。
この例では、通話後Webhookで主に次の処理を行います。
voice_descriptionに基づいてカスタム音声デザインを作成します。- 提供された
agent_descriptionに基づいて、ユーザー用のElevenLabsエージェントを作成します。 - Redisに保存された会話状態からナレッジベースのドキュメントを取得し、そのナレッジベースをエージェントに紐付けます。
- カスタムElevenLabsエージェントとのチャット準備が整ったことをユーザーに通知するメールを送信します。
ローカルで実行する場合は、ローカルサーバーをインターネットに公開するためにngrokのようなツールが必要です。
Agents Platformの設定に移動し、Post-Call Webhookで新しいWebhookを作成して、ngrok URLを貼り付けます:https://<your-url>.ngrok-free.app/api/convai-webhook。
Webhookを保存すると、Webhookシークレットを受け取ります。後で.envファイルに設定する必要があるため、このシークレットは安全に保管してください。
高度な機能を統合
会話状態を保存するRedisデータベースを設定
この例では、会話状態の保存にRedisを使用します。これにより、通話終了後に会話状態からナレッジベースのドキュメントを取得できます。
Vercelにデプロイする場合は、Upstash for Redisインテグレーションを設定できます。または、無料のUpstashアカウントに登録して新しいデータベースを作成することもできます。
通話後メールの送信にResendを設定
この例では、ユーザーに通話後メールを送信するためにResendを使用します。そのためには、無料のResendアカウントを作成し、新しいAPIキーを設定する必要があります。
環境変数を設定
プロジェクトのルートに.envファイルを作成し、次の変数を追加します。
セキュリティと認証を設定
ElevenLabsエージェントを保護するには、エージェント設定のSecurityタブで認証を有効にする必要があります。
認証を有効にしたら、エージェントとの会話を開始するために、安全なサーバーサイド環境で署名付きURLを作成する必要があります。Next.jsでは、新しいAPIルートを設定することで実現できます。
会話セッションを開始
会話を開始するには、まずAPIルートを呼び出して署名付きURLを取得し、次にuseConversationフックを使用して会話セッションを設定します。
クライアントツールと動的変数
前述のエージェント設定では、エージェントが異なるUI状態間を移動できるように、set_ui_stateクライアントツールを登録しました。すべてを連携させるには、クライアントツールの実装をconversation.startSessionオプションに渡す必要があります。
ここでは、会話に動的変数を渡すこともできます。
ナレッジベースにドキュメントをアップロード
Trainingステップでは、エージェントがユーザーに対し、ドキュメントをアップロードするか、エージェントが利用できるようにすべき情報を含む公開WebサイトのURLを送信するよう求めます。ここでは、Next.js 15の新しいafter関数を使用して、バックグラウンドでドキュメントをアップロードできます。
フォーム送信時にナレッジベースの作成を処理する、新しいuploadサーバーアクションを作成します。すべてのナレッジベースドキュメントが作成されたら、会話IDとナレッジベースIDをRedisデータベースに保存します。
通話後Webhookの処理
通話後Webhookは、通話が終了し、分析とデータ抽出のステップが完了するとトリガーされます。
ここでは主に次の処理を行います。
- Webhookシークレットを検証し、Webhookペイロードを構築する。
voice_descriptionに基づいてカスタムボイスデザインを作成する。- ユーザーが提供した
agent_descriptionに基づいて、ユーザー向けのElevenLabsエージェントを作成する。 - Redisに保存された会話状態からナレッジベースのドキュメントを取得し、エージェントにナレッジベースを追加する。
- カスタムElevenLabsエージェントがチャット可能になったことをユーザーに知らせるメールを送信する。
各ステップを詳しく見ていきましょう。
Webhookシークレットを検証し、Webhookペイロードを構築する
Webhookリクエストを受け取ったら、まずWebhookシークレットを検証し、Webhookペイロードを構築します。
voice_descriptionに基づくカスタムボイスデザインの作成
Webhookペイロードのvoice_descriptionを使用して、カスタムボイスデザインを作成します。
Redisに保存された会話状態からナレッジベースのドキュメントを取得する
ドキュメントのアップロードにはWebhookデータの分析より時間がかかる場合があるため、ドキュメントのアップロードが完了するまでRedis内の会話状態をポーリングする必要があります。
提供されたagent_descriptionに基づいてユーザー向けのElevenLabsエージェントを作成する
提供されたagent_descriptionに基づいてユーザー向けのElevenLabsエージェントを作成し、新しく作成したボイスデザインとナレッジベースをエージェントに追加します。
カスタムElevenLabsエージェントがチャット可能になったことをユーザーに知らせるメールを送信する
エージェントを作成したら、カスタムElevenLabsエージェントがチャット可能になったことをユーザーに知らせるメールを送信できます。
Resendチームによる便利なツールnew.emailを使うと、メールテンプレートをバイブデザインできます。テンプレートに満足したら、新しいコンポーネントを作成し、エージェントIDをpropsとして追加します。
アプリを実行する
アプリをローカルでエンドツーエンドに実行するには、まずNext.js開発サーバーを起動し、別のターミナルでngrokトンネルを実行してWebhookハンドラーをインターネットに公開する必要があります。
- ターミナル1:
pnpm devを実行してNext.js開発サーバーを起動します。
- ターミナル2:
ngrok http 3000を実行してWebhookハンドラーをインターネットに公開します。
http://localhost:3000 を開き、自分の声でカスタムElevenLabsエージェントをデザインしましょう!