在 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 标签页的 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 Hook 设置对话会话。
客户端工具和动态变量
在前面的智能体配置中,已注册 set_ui_state 客户端工具,让智能体能够在不同 UI 状态之间导航。要将其整合起来,需要将客户端工具实现传递给 conversation.startSession 选项。
此处也可将动态变量传入对话。
将文档上传到知识库
在 Training 步骤中,智能体会要求用户上传文档,或提交包含智能体所需信息的公开网站 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 作为 prop 添加。
运行应用
要在本地端到端运行应用,首先需要启动 Next.js 开发服务器,然后在单独的终端中运行 ngrok 隧道,将 webhook 处理程序暴露到互联网。
- 终端 1:
- 运行
pnpm dev启动 Next.js 开发服务器。
- 运行
- 终端 2:
- 运行
ngrok http 3000,将 webhook 处理程序暴露到互联网。
- 运行
现在打开 http://localhost:3000,开始使用自己的音色设计自定义 ElevenLabs 智能体!