返回内容列表

Agora Rotary Dial Phone

通过交互式 3D 转盘电话与实时 AI 角色通话。

TypeScript进阶zicojiao
体验 DemoGitHub
The Fortune Line English interface with a 3D rotary telephone, locked safe, and game instructions
体验 Demo

英语界面 · 需要麦克风

实践教程

本教程目录

Agora Rotary Dial Phone

一个使用 Three.js 构建、由 Agora Conversational AI 驱动的交互式旋转拨号电话。

License: MIT Three.js Agora

English · 简体中文

在线体验 →

Agora Rotary Dial Phone 界面

拿起听筒,拨打 555-0193,即可与 Elon 风格的 AI 进行实时对话。每个数字都必须 转到金属限位器,等拨盘回转后才会完成输入,就像使用真实的旋转拨号电话一样。

亮点

  • 程序化 3D 场景 — 使用 Three.js 渲染 Art Deco 电话、桌面布景、材质和 联系卡片。
  • 拟真旋转拨号 — 支持拨号孔交互、金属限位检测、回转运动、脉冲计数和机械音效。
  • 实时语音通话 — 通过 Agora RTC 传输麦克风和远端 AI 音频,并可通过 RTM 实时更新状态。
  • 稳定的通话生命周期 — 包含签名通话凭证、Token 续期、授权挂断、超时处理和 统一清理流程。
  • 响应式交互 — 同时适配桌面和移动端,并明确展示加载、权限、连接和错误状态。

工作原理

  1. 拿起听筒,接通线路。
  2. 将拨盘上的每个数字拖到金属限位器,然后松开。
  3. 完整拨出 555-0193 后,服务端创建独立的 Agora 频道并返回与频道绑定的凭证。
  4. Conversational AI Agent 加入通话,五分钟倒计时开始。
  5. 挂断、离开页面、通话超时或发生错误时,系统会释放 Agent、RTC/RTM 客户端、 麦克风、听筒和拨盘状态。

快速开始

环境要求

  • Node.js 22 或更高版本
  • pnpm 11.6.0
  • 一个包含 App ID 和 App Certificate 的 Agora 项目
  • 一个 Fish Audio API Key
  • 支持 WebGL、Web Audio 和麦克风的浏览器

本地运行

bash
git clone https://github.com/zicojiao/agora-rotary-dial-phone.git
cd agora-rotary-dial-phone
corepack enable
pnpm install
cp .env.example .env.local
pnpm dev

配置 .env.local 后,打开 http://localhost:3000, 拿起听筒并拨打 555-0193。

生产环境中的麦克风权限需要 HTTPS;浏览器允许在 localhost 上进行本地开发。

环境变量

变量使用范围是否必需用途
NEXT_PUBLIC_AGORA_APP_ID浏览器和服务端是Agora 项目 App ID;按设计可公开
NEXT_AGORA_APP_CERTIFICATE仅服务端是签发 Agora RTC 和 RTM Token
NEXT_PUBLIC_AGENT_UID浏览器和服务端否Agent RTC UID;默认值为 123456
FISH_AUDIO_API_KEY仅服务端是授权 Fish Audio TTS 请求
CALL_TICKET_SECRET仅服务端是签发通话和 Agent 停止凭证

使用以下命令生成通话凭证密钥:

bash
openssl rand -hex 32

声音选择和 Fish Audio 后端配置位于 lib/fishAudio.ts。

项目结构

路径用途
app/Next.js 页面外壳和仅服务端使用的通话 API 路由
components/React 通话编排、RTC 运行时和状态界面
src/Three.js 场景、程序化电话、拨号物理、音频和浏览器事件
lib/Agora 配置、Fish Audio 设置和签名通话凭证
spec/物理交互、生命周期、安全性、麦克风和 API 契约测试

验证

bash
pnpm lint
pnpm typecheck
pnpm test
pnpm build
pnpm audit --prod

测试使用模拟的通话创建流程,不会启动真实的 Agora 或 Fish Audio 会话。

部署

将项目部署到 Vercel 或其他支持 Next.js 的平台,然后添加所需的环境变量。

自行托管时,运行 pnpm build,然后运行 pnpm start。

许可证

本项目基于 MIT License 开源。