把 Twilio Elastic SIP Trunking 接入 OpenAI Realtime API 只要搞定 Project ID 和 TLS 端口就能通

设计师小李 初级 1天前 704 浏览 11 点赞 约 2 分钟

想在 OpenAI 的 Realtime API 里接真实电话,最稳的方案就是用 Twilio 的 Elastic SIP Trunking。简单来说,就是把 Twilio 当成一个语音网关,把打进来的电话通过 SIP 协议转发给 OpenAI。核心步骤只有三步:给 Twilio 绑定号码、配置 Origination URI 指向 OpenAI、并在 OpenAI 侧订阅 incoming 事件。

如何配置 Twilio 端的 SIP 转发

在 Twilio 控制台配置 Elastic SIP Trunking 时,最关键的是把呼叫指向 OpenAI 的服务器。

一、首先把你的 Twilio 电话号码分配到对应的 SIP trunk 中。

二、设置 Trunk 的 Origination URI。这里必须严格遵守这个格式,否则 OpenAI 认不出是谁在调用:

sip:<OPENAI_PROJECT_ID>@sip.api.openai.com;transport=tls

注意,这里的 <OPENAI_PROJECT_ID> 必须替换成你实际的 OpenAI 项目 ID,而且这个 ID 必须和你配置 Webhook 的项目完全一致。

三、传输协议必须选择 TLS,端口号固定用 5061。如果用了 UDP 或 TCP 很容易在握手阶段就挂掉。

四、在 OpenAI 的 Webhook 配置界面,记得订阅 realtime.call.incoming 这个事件,这样电话打进来时,OpenAI 才会给你发通知。

没收到 Webhook 事件怎么排查

如果电话打进来但你的服务器没收到事件,别对着代码死磕,先去看 Twilio 的 Call Logs 和 SIP 响应码。只要看到 4xx 或 5xx 错误,基本就出在以下这几个点:

  • URI 格式错误: 检查发往 OpenAI 的 Request-URI 里是否真的带了 Project ID。你可以抓包看一眼 outbound SIP INVITE 的第一行,正常的应该是:
把 Twilio Elastic SIP Trunking 接入 OpenAI Realtime API 只要搞定 Project ID 和 TLS 端口就能通
INVITE sip:<OPENAI_PROJECT_ID>@sip.api.openai.com SIP/2.0
  • TLS 握手失败: 检查端口 5061 是否畅通,TLS 配置是否有误。
  • 项目 ID 错位: 检查 Twilio 填的 ID 和 Webhook 所在的项目是不是同一个。
另外还有几个隐蔽的坑: 1. Webhook 必须是 OpenAI 项目级别的,不能写成 Twilio 的 Webhook。 2. 你的 Webhook 接口必须是公网可访问的,且响应必须足够快(返回 2xx),否则 OpenAI 可能会认为超时。 3. 验证签名时,必须使用未经修改的 raw request body,不要用框架自动解析后的 JSON。 4. 用来接听电话的 API Key 必须属于同一个 OpenAI 项目。

怎么正确接听这个电话

收到 realtime.call.incoming 事件后,你不能直接开始对话,必须先显式地接听这个呼叫。

调用 OpenAI 的这个接口:

POST /v1/realtime/calls/{call_id}/accept

记得把 {call_id} 替换成事件里传过来的 ID。如果你在这个环节卡住了或者没调用,OpenAI 最终会自动拒绝或终止这个通话。

处理 Request-URI 被篡改的问题

在实际操作中,有些 Twilio 的配置会导致 Request-URI 的用户部分(即 Project ID 那块)被替换成了被叫方的 E.164 电话号码。如果发生了这种情况,OpenAI 无法识别项目 ID,通话会直接失败。

解决办法有两种:
1. 弃用直接的 Trunk 转发,改用 TwiML 的 <Sip> 标签来指定目的地。
2. 在 Twilio 和 OpenAI 之间加一层 SBC(会话边界控制器),强制在转发时保留 OpenAI 的 Project ID。

AI编程openaiRealtime APITwilioSIP

全部回复 (3)

想当场把话说完?进全球 AI 聊天室,登录就能开口。

老阿凯 中级 1天前

配置 Origination URI 时千万别漏了那个 TLS 端口,我上次因为没写端口号死活调不通,折腾了一整晚才发现是这破事。

0 回复
杭漂码农 专家 1天前

订阅 incoming 事件这块儿得快,响应慢了直接被掐断,我上次调的时候就卡在这儿气得想摔键盘。

0 回复
早八人AI炼丹师 专家 1天前

只写 Project ID 哪够,不把 TLS 证书配置好根本跑不通,这坑你居然给跳过了。

0 回复

发表回复

支持 Markdown 格式