如何不加入Conferance监听Twilio实时通话?Stream使用遇阻求助
无需加入会议监听Twilio通话的解决方案
你遇到的问题核心是用错了<Connect>动词的场景,<Connect>是用来发起新的通话连接,而非附加到已有的通话上监听,所以才只会收到停止消息和流ID。以下是正确的实现方式:
核心思路
要监听正在进行的通话,需要将包含<Stream>的TwiML附加到目标通话上,而不是用<Connect>包裹<Stream>。
具体步骤
- 更新正在进行的通话TwiML
通过Twilio Calls API,将目标通话的处理地址指向返回<Stream>的TwiML接口:
POST /2010-04-01/Accounts/{你的AccountSid}/Calls/{目标CallSid}.json Content-Type: application/x-www-form-urlencoded Url=https://你的服务器地址/stream-twiml&Method=POST
- 返回正确的监听TwiML
上述接口/stream-twiml需要返回如下TwiML,注意要添加<Pause>保持通话连接,避免挂断:
<Response> <Stream url="wss://你的WebSocket服务地址" statusCallback="https://你的回调地址" /> <Pause length="3600" /> </Response>
- 排查现有代码问题
- 你用的
wss://chunderw-vpc-gll.twilio.com/signal是Twilio内部地址,必须替换成你自己的WebSocket服务地址,Twilio会把通话媒体流推送到这个地址。 <Connect>本身是建立新连接的动词,用来包裹<Stream>时,因为没有实际媒体流通过这个连接传输,所以Stream会立即停止。
- WebSocket服务要求
你的WebSocket服务需要正确处理Twilio的流协议:
- 接收初始的
start消息(包含流ID、媒体编码等信息) - 处理后续的音频媒体帧数据
- 确保服务可以被Twilio正常访问,无防火墙或权限拦截
- 回调事件排查
如果仍只收到stop事件,说明Stream启动失败,可检查:
- WebSocket连接是否建立成功
- Twilio是否能访问到你的WebSocket服务
- TwiML是否正确返回给通话
内容的提问来源于stack exchange,提问作者Anindita Chakraborty
相关产品推荐
相关产品推荐

