资讯动态

TEN Framework Voice Assistant SIP Plivo Server:独立 HTTP 服务架构与实战部署指南

发布时间:2026/9/23 22:34:15 来源:尧图企业网站定制
人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载导读本文围绕 TEN-framework 仓库中ai_agents/agents/examples/voice-assistant-sip-plivo/server/下的独立 Plivo 服务器展开讲解一个从main_python扩展迁移而来的、无框架依赖的 FastAPI 服务它负责 Plivo 电话的配置加载、健康检查与 tenapp 子进程生命周期管理而 WebSocket 音频流与 STT→LLM→TTS 语音对话管线仍由 tenapp 内的main_python扩展承载。读完本文你将掌握该服务器的环境变量配置、启动方式、HTTP 接口语义、进程管理原理以及它与完整 voice-assistant-sip-plivo 示例前端、ngrok、TMAN Designer的协作关系。一、服务器定位职责分离的“配置与进程管家”server/目录是 voice-assistant-sip-plivo 示例中一个独立可运行的 FastAPI 应用。值得注意其 README.md 标题写作 Voice Assistant SIP Twilio Server属模板复制遗留实际集成对象是PlivoTwilio 的竞品服务商源码与依赖均以 Plivo 为准。该服务器的核心设计是职责分离HTTP 管理面由本服务器FastAPI uvicorn提供 REST API负责配置下发、健康检查、tenapp 进程拉起与监控媒体面WebSocket 音频流、呼叫应答 XML/webhook/answer、状态回调/webhook/status等实时语音逻辑全部由 tenapp 应用main_python扩展处理对应实现位于 tenapp/ten_packages/extension/main_python/server.py。从源码看PlivoServer类在start_server()中先启动 tenapp 子进程执行./scripts/start.sh随后才监听自身端口一旦 tenapp 进程退出监控线程会主动向自身发送SIGTERM关闭整个服务器见 plivo_server.py。因此本服务器实际上承担了轻量级进程管理器 配置服务的双重角色。二、安装与依赖服务器为纯 Python 实现依赖集中在 requirements.txt依赖用途fastapiREST API 框架uvicorn[standard]ASGI 服务器plivoPlivo REST 客户端本服务器仅用于配置透传pydantic配置模型校验PlivoServerConfig继承BaseModel说明requirements.txt 特意注明 WebSocket 与音频处理audioop不属于本服务器职责前者由main_python扩展处理后者是 Python 标准库无需额外安装。在完整示例中安装通过 Taskfile 编排Taskfile.ymlcd ai_agents/agents/examples/voice-assistant-sip-plivo task install该命令依次执行tman install安装 tenapp 依赖、./scripts/install_python_deps.sh安装 Python 依赖、bun install安装前端依赖。若仅需本服务器可直接在server/目录下用 pip 安装上述依赖。三、配置环境变量与命令行参数3.1 环境变量服务器通过环境变量加载配置全部定义在PlivoServerConfigplivo_server.py中环境变量默认值说明PLIVO_AUTH_ID空字符串Plivo Auth ID必填PLIVO_AUTH_TOKEN空字符串Plivo Auth Token必填PLIVO_FROM_NUMBER空字符串发起外呼的 Plivo 号码必填PLIVO_HTTP_PORT8080本服务器监听端口进程管理面PLIVO_PUBLIC_SERVER_URL空字符串无协议公网地址如your-domain.com:9000同时用于媒体流与 webhook本地调试用 ngrok 暴露PLIVO_USE_HTTPSfalsewebhook 使用 HTTPS 或 HTTPPLIVO_USE_WSSfalse媒体流使用 WSS 或 WS设置示例export PLIVO_AUTH_IDyour_plivo_auth_id export PLIVO_AUTH_TOKENyour_plivo_auth_token export PLIVO_FROM_NUMBER1234567890 export PLIVO_HTTP_PORT8080 export PLIVO_PUBLIC_SERVER_URLyour-domain.com:9000 export PLIVO_USE_HTTPStrue export PLIVO_USE_WSStrue注意PLIVO_USE_HTTPS/PLIVO_USE_WSS的解析逻辑为os.getenv(..., false).lower() true即只有显式设置为字符串true才启用其余值一律视为false。3.2 命令行参数通过 main.py 提供的 argparse 入口可以覆盖两个关键配置参数默认值说明--tenapp-dir空回退为server/../tenapptenapp 应用目录用于定位启动脚本--port8080覆盖PLIVO_HTTP_PORT指定服务器监听端口命令行参数优先级高于环境变量load_config()中以args.port覆盖PLIVO_HTTP_PORT以args.tenapp_dir覆盖默认路径main.py。四、启动服务器4.1 启动方式# 方式一通过 Taskfile推荐位于示例根目录 cd ai_agents/agents/examples/voice-assistant-sip-plivo task run-api-server # 等价于python3 main.py --tenapp-dir ../tenapp # 方式二直接运行 cd ai_agents/agents/examples/voice-assistant-sip-plivo/server python3 main.py # 方式三指定 tenapp 目录与端口 python3 main.py --tenapp-dir /path/to/tenapp --port 90004.2 启动时序与生命周期从PlivoServer.start_server()plivo_server.py可还原完整启动流程解析配置环境变量 CLI 参数_start_tenapp_process()在 tenapp 目录下执行./scripts/start.sh该脚本设置PYTHONPATH、LD_LIBRARY_PATH、NODE_PATH后 execbin/main见 tenapp/scripts/start.sh并以os.setsid创建独立进程组启动守护线程_monitor_tenapp_process()每秒轮询 tenapp 进程状态等待 2 秒后以 uvicorn 启动 FastAPI 应用若 tenapp 进程意外退出守护线程记录退出码并向自身发送SIGTERM触发整体关闭关闭时_stop_tenapp_process()向进程组发送SIGTERM10 秒内未退出则升级为SIGKILL强制结束。main()中还注册了SIGINT/SIGTERM信号处理器plivo_server.py保证 CtrlC 或系统终止信号下能优雅清理子进程。4.3 日志入口main.py使用logging.basicConfig同时输出到标准输出与/tmp/plivo_server.logPlivoServer内部使用logging.getLogger(plivo_process_manager)格式为%(asctime)s - %(name)s - %(levelname)s - %(message)stenapp 子进程的 stdout/stderr 直接透传到父进程控制台便于统一观察。五、HTTP API 端点PlivoServer仅注册两个端点plivo_server.py与 README 描述的调用管理语义略有差异这里以源码为准方法路径说明GET/health健康检查返回{status: healthy, server_time: ISO时间}GET/api/config返回服务器与 tenapp 配置供前端展示/api/config的返回结构包含plivo_from_number、server_port、tenapp_port默认 9000可从PLIVO_PUBLIC_SERVER_URL中冒号后的端口解析出来、tenapp_url、public_server_url、use_https/use_wss以及按协议拼接好的media_ws_urlwss://url/media和webhook_urlhttps://url/webhook/status。注意真正的外呼、查询、挂断、应答与状态回调接口并不在本服务器上而是在 tenapp 内main_python扩展的 server.py 中其端口为 tenapp 的 9000# 发起外呼tenapp 9000 端口 curl -X POST http://localhost:9000/api/call \ -H Content-Type: application/json \ -d {phone_number: 1234567890, message: Hello from AI assistant!} # 查询单个呼叫 curl http://localhost:9000/api/call/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx # 列出所有呼叫 curl http://localhost:9000/api/calls # 停止呼叫 curl -X DELETE http://localhost:9000/api/call/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxtenapp 侧完整的 REST 端点还包括POST /webhook/answer返回 Plivo XML 应答与POST /webhook/status状态回调。六、与完整示例的协作关系本服务器是 voice-assistant-sip-plivo 示例的一个组件完整运行task run会同时拉起四个进程Taskfile.yml组件端口职责tenappmain_python扩展9000呼叫控制、WebSocket 媒体流、STT/LLM/TTS 对话管线本服务器Plivo Configuration Server8080tenapp 进程管理、配置下发、健康检查前端frontend3000Web 控制界面TMAN Designer49483可视化修改 tenapp 图配置ngrok动态公网地址将本地服务暴露为PLIVO_PUBLIC_SERVER_URLPlivo 侧的 webhook 与媒体流 URL 通过环境变量PLIVO_PUBLIC_SERVER_URL统一注入tenapp 内的PlivoCallServer会根据plivo_use_https/plivo_use_wss组装answer_url、status_url与 WebSocket 地址见 server.py。tenapp 的完整图配置STTdeepgram、LLMopenai、TTSelevenlabs、main_controlmain_python 等节点位于 tenapp/property.json其中main_control节点的plivo_server_port: 9000正是上面提到的 tenapp 端口。七、与原代码的差异与设计要点README 总结了该服务器从main_python扩展迁移后的五点改进独立运行完全独立无外部框架依赖可脱离 TEN runtime 单独启动配置管理以环境变量驱动配置便于容器化与多环境部署日志系统采用 Python 标准logging同时落盘/tmp/plivo_server.log模块化设计PlivoServerConfig配置模型、PlivoServer服务器与进程管理、main.pyCLI 入口职责清晰关注点分离WebSocket 与音频处理留在main_python扩展本服务器只做 HTTP 管理面。这种管理面独立、媒体面留在扩展的拆分使开发者可以复用 TEN 框架的实时语音管线同时用轻量 FastAPI 服务处理 Plivo 账号配置、健康探测与进程守护是 SIP 类语音助手落地时常见的部署形态。八、注意事项确保 Plivo 账号的PLIVO_AUTH_ID、PLIVO_AUTH_TOKEN、PLIVO_FROM_NUMBER配置正确否则外呼创建会失败PLIVO_PUBLIC_SERVER_URL必须为 Plivo 可达的公网地址本地调试请配合 start-with-ngrok.sh 暴露服务并将 ngrok 域名填入该环境变量防火墙需放行本服务器端口默认 8080、tenapp 端口9000以及前端端口3000本服务器只提供 HTTP 管理面端点呼叫的应答、状态回调与媒体流全部由main_python扩展处理排查问题时请同时查看 tenapp 子进程的控制台输出。赞分享人工智能AI Agent多模态语音AI 应用【免费下载链接】ten-frameworkOpen-source framework for conversational voice AI agents项目地址https://gitcode.com/TEN-framework/ten-framework点击查看免费下载相关推荐TEN Framework 语音助手前端实战基于 Next.js 构建 Plivo SIP 双向呼叫控制面板TEN Framework 语音助手前端实战基于 Next.js 构建 Plivo SIP 双向呼叫控制面板 导读 本文以 voice assistant s人工智能AI Agent多模态语音AI 应用用 EasyOCR 搭建 LiteParse 独立 OCR 服务部署、HTTP API 与接入实战用 EasyOCR 搭建 LiteParse 独立 OCR 服务部署、HTTP API 与接入实战 LiteParse 除了内置的 Tesseract OCROCR文档在 Vercel 上部署独立 Node.js HTTP 服务器examples/node 通用 Node 框架预设实战指南在 Vercel 上部署独立 Node.js HTTP 服务器 examples/node 通用 Node 框架预设实战指南 本指南围绕本仓库 exampleCLI后端云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价