Twilio 上的语音智能体
Twilio 提供了一个 Media Streams API,可将电话通话的原始音频发送到 WebSocket 服务器。您可以使用此设置将语音智能体概述连接到 Twilio。您可以使用 websocket 模式下的默认 Realtime Session 传输机制,将来自 Twilio 的事件连接到 Realtime Session。不过,这要求您设置正确的音频格式并自行调整中断时机,因为电话通话自然会比基于 Web 的对话产生更高的延迟。
为了改善设置体验,我们创建了一个专用传输层,用于处理与 Twilio 的连接,包括中断处理和音频转发。
-
确保您拥有 Twilio 账户和 Twilio 电话号码。
-
设置一个用于验证 Twilio 请求的服务器。
如果您在本地开发,则需要配置类似
ngrok或 Cloudflare Tunnel 的本地隧道,使 Twilio 能够访问您的本地服务器。在创建传输层或连接到 OpenAI 之前,服务器必须验证传入呼叫 Webhook 和 WebSocket 升级请求中的X-Twilio-Signature。请使用 Twilio 官方请求验证器、账户的主 Auth Token,以及已配置的公共 URL。请勿根据请求的 Host 或转发标头推导该 URL。TwilioRealtimeTransportLayer接收的是已经过身份验证的 WebSocket;此适配器不会验证 HTTP 请求。 -
安装扩展包以安装 Twilio 适配器:
终端窗口 npm install @openai/agents-extensions -
导入适配器和模型,以连接到您的
RealtimeSession:import { TwilioRealtimeTransportLayer } from '@openai/agents-extensions';import { RealtimeAgent, RealtimeSession } from '@openai/agents/realtime';const agent = new RealtimeAgent({name: 'My Agent',});// Authenticate the HTTP webhook and WebSocket upgrade in your server first.// Create a new transport mechanism that will bridge the connection between Twilio and// the OpenAI Realtime API.const twilioTransport = new TwilioRealtimeTransportLayer({twilioWebSocket: websocketConnection,});const session = new RealtimeSession(agent, {// set your own transporttransport: twilioTransport,}); -
将您的
RealtimeSession连接到 Twilio:import type { RealtimeSession } from '@openai/agents/realtime';// Connect only after the server has authenticated the Twilio WebSocket upgrade.async function connectAuthenticatedSession(session: RealtimeSession,apiKey: string,) {await session.connect({ apiKey });}
您期望 RealtimeSession 支持的所有事件和行为都将按预期工作,包括工具调用、护栏等。有关如何将 RealtimeSession 与语音智能体配合使用的更多信息,请阅读语音智能体概述。
提示与注意事项
Section titled “提示与注意事项”-
速度至关重要。
为了接收来自 Twilio 的所有必要事件和音频,您应在经过身份验证的 WebSocket 连接可用后尽快创建
TwilioRealtimeTransportLayer实例,并立即调用session.connect()。 -
原始 Twilio 事件的访问。
如果您想访问 Twilio 发送的原始事件,可以监听
RealtimeSession实例上的transport_event事件。来自 Twilio 的每个事件都具有twilio_message类型,并包含一个存有原始事件数据的message属性。 -
调试日志的查看。
有时您可能会遇到需要进一步了解具体情况的问题。使用
DEBUG=openai-agents*环境变量可显示 Agents SDK 的所有调试日志。或者,您也可以使用DEBUG=openai-agents:extensions:twilio*,仅启用 Twilio 适配器的调试日志。
完整服务器示例
Section titled “完整服务器示例”可运行的 Twilio 示例包含经过身份验证的 Fastify 路由和 Realtime Session 设置。其 README 介绍了服务器端所需的 OPENAI_API_KEY、TWILIO_AUTH_TOKEN 和 TWILIO_PUBLIC_BASE_URL 设置。公共基础 URL 是不含路径前缀、查询字符串或片段的 HTTPS 源。当隧道的公共源发生变化时,请更新此设置。
服务器会在打开 Realtime 连接之前拒绝签名无效的呼叫和升级请求。Twilio Media Stream URL 使用 wss://,且不支持查询参数。有关自定义参数,请参阅 Twilio Stream 文档。