基于树莓派与Twilio实现双向通话的问题求助
树莓派+Jabra+Twilio双向通话问题解决指南
一、通话立即挂断的核心原因
你当前的逻辑没把树莓派端作为通话的有效接入终端。Twilio的<Dial>是用来将现有呼叫转接到另一号码,但你的树莓派并没有被Twilio识别为可连接的通话节点,手机接听后,Twilio找不到对应的音频源对接,所以直接触发挂断。
二、Twilio原生支持双向通话,但要匹配终端类型
Twilio完全支持双向通话,但你的场景里,树莓派(搭配Jabra音箱)属于自定义音频终端,不能通过普通号码转接实现,必须用Media Streams API把树莓派的音频流接入Twilio的通话链路。
三、具体解决步骤
1. 替换<Dial>为<Connect>指令
发起呼叫后,Twilio请求的TwiML要返回<Connect>来关联你的树莓派WebSocket服务,示例TwiML:
<?xml version="1.0" encoding="UTF-8"?> <Response> <Connect> <Stream url="wss://你的树莓派公网WebSocket地址"/> </Connect> </Response>
2. 树莓派端处理音频流
- 用Python音频库(比如
pyaudio)捕获Jabra麦克风的输入音频,同时接收Twilio传回的音频并播放到Jabra音箱。 - 通过WebSocket和Twilio的Media Streams建立连接,把捕获的音频转成PCMU(μ-law)编码后发送给Twilio,同时解码Twilio传来的PCMU音频进行播放。
3. 确保树莓派WebSocket可被Twilio访问
Twilio需要主动连接你的树莓派WebSocket服务,所以树莓派要么有公网IP,要么用内网穿透工具把本地WebSocket端口映射到公网。
四、关键补充
你之前的代码只是触发了手机的呼叫请求,但没有把树莓派的音频链路接入Twilio通话系统,导致手机接听后无有效音频对接,Twilio会自动挂断。只有把树莓派作为通话一端通过流媒体方式接入,才能实现完整的双向交互式通话。
内容的提问来源于stack exchange,提问作者Nathan Hubens
相关产品推荐
相关产品推荐

