TEN Framework Voice Assistant SIP Plivo Server:独立 HTTP 服务架构与实战部署指南
人工智能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),仅供参考

相关新闻

LanceDB Node.js SDK 索引统计:IndexStatistics 接口字段详解与实战

LanceDB Node.js SDK 索引统计:IndexStatistics 接口字段详解与实战

向量数据库数据库人工智能后端 【免费下载链接】lancedb Developer-friendly OSS embedded retrieval library for multimodal AI. Search More; Manage Less. 项目地址: https://gitcode.com/gh_mirrors/la/lancedb 点击查看 免费下载 导读 IndexStatistics 是 L…

2026/9/26 10:35:44 阅读更多 →
Sage数学软件实战:用矩阵与行列式实现采购数据分析

Sage数学软件实战:用矩阵与行列式实现采购数据分析

简介:一份面向 SAGE ERP 系统采购模块用户与实施顾问的操作手册,重点讲解从供应商基础数据维护、供应商报价,到采购订单、收货与退货的完整业务流程。资源详细区分了“折百”与“不折百”两种订单模式,围绕含量、净数量、毛数量、…

2026/9/26 21:36:25 阅读更多 →
OOMWOO 系统架构解析:ROS2 开源扫地机器人的 CPU/MCU 双处理器架构与接口合同

OOMWOO 系统架构解析:ROS2 开源扫地机器人的 CPU/MCU 双处理器架构与接口合同

智能硬件机器人嵌入式物联网 【免费下载链接】oomwoo Open-source vacuum robot cleaner 项目地址: https://gitcode.com/gh_mirrors/oo/oomwoo 点击查看 免费下载 本文以 OOMWOO 项目的权威架构文档 docs/ARCHITECTURE.md 为主线,结合仓库内的串行协议…

2026/9/25 17:44:29 阅读更多 →

最新新闻

STM32F1 PWR寄存器级低功耗设计与实战避坑指南

STM32F1 PWR寄存器级低功耗设计与实战避坑指南

1. 项目概述:为什么STM32的PWR模块不是“按个开关”那么简单你手里的STM32F103C8T6最小系统板,跑着LED闪烁和串口打印,功耗测出来是8mA——看起来挺稳。但当你把它装进电池供电的野外传感器节点,标称续航6个月,实测两周…

2026/9/27 10:55:01 阅读更多 →
网站开发企业部门图解步骤拆解费用真相

网站开发企业部门图解步骤拆解费用真相

网站开发企业部门图解步骤拆解费用真相 别信那些“一口价全包”的鬼话,找建站公司最怕的就是最后被加钱,或者花大钱买个烂站。我做了十年这行,见过太多企业因为不懂【网站开发企业部门】的分工与报价逻辑,白白多掏几万块冤枉钱。今天不讲虚的,直接用…

2026/9/27 10:55:01 阅读更多 →
ng-zorro-antd Popconfirm 隐藏箭头:`nzPopconfirmShowArrow` 属性原理与实战指南

ng-zorro-antd Popconfirm 隐藏箭头:`nzPopconfirmShowArrow` 属性原理与实战指南

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 Popconfirm(气泡确认框)是 ng-zorro-antd 中用于轻量确认交互…

2026/9/27 10:55:01 阅读更多 →
GitHub Desktop 源码中的编译期占位符替换机制:Webpack DefinePlugin 与平台条件编译实战

GitHub Desktop 源码中的编译期占位符替换机制:Webpack DefinePlugin 与平台条件编译实战

开发工具桌面应用 【免费下载链接】desktop Fork of GitHub Desktop to support various Linux distributions 项目地址: https://gitcode.com/gh_mirrors/des/desktop 点击查看 免费下载 GitHub Desktop 是一个基于 Electron 的跨平台 Git 客户端,代码…

2026/9/27 10:55:01 阅读更多 →
在 React Native 中为文本装饰指定颜色:NativeWind v2 `decoration-*` 工具类实战指南

在 React Native 中为文本装饰指定颜色:NativeWind v2 `decoration-*` 工具类实战指南

移动开发跨平台前端 【免费下载链接】nativewind The utility-first workflow you love from Tailwind CSS in your React Native applications. 项目地址: https://gitcode.com/gh_mirrors/na/nativewind 点击查看 免费下载 text-decoration-color(文本…

2026/9/27 10:55:01 阅读更多 →
KubeVela v1.2 版本深度解析:VelaUX 控制台、Addon 生态与新一代资源治理架构

KubeVela v1.2 版本深度解析:VelaUX 控制台、Addon 生态与新一代资源治理架构

云原生DevOps运维微服务 【免费下载链接】kubevela The Modern Application Platform. 项目地址: https://gitcode.com/gh_mirrors/ku/kubevela 点击查看 免费下载 KubeVela 是一个面向云原生应用交付的现代应用平台,本文以仓库内 CHANGELOG-1.2.md 为骨…

2026/9/27 10:54:01 阅读更多 →

日新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:34 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:34 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/27 0:00:34 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/27 9:12:14 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/25 20:29:31 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/26 22:52:30 阅读更多 →