You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Twilio呼入通话场景下未向WebSocket发送媒体流数据的问题求助

Twilio呼入通话场景下未向WebSocket发送媒体流数据的问题求助

我现在碰到了一个Twilio的配置难题,想请教下各位:我的核心需求是——当有人拨打我的Twilio号码时,系统要完成两个动作:一是把呼叫转接到我的手机,二是把通话的实时音频流推送到我的服务器上。

目前我已经搞定了**外呼(outbound)的场景:通过Web应用发起呼叫到我的手机时,音频流能正常传输到我的WebSocket服务。但切换到呼入(inbound)**场景时,Twilio就完全没把数据发送到我的WebSocket了,这可把我愁坏了。

我当前的实现代码(基于Express)

1. Twilio号码绑定的/voice端点

这是处理呼入请求的核心端点,返回TwiML指令:

app.post('/voice', (req, res) => {
  var msg = JSON.parse(JSON.stringify(req.body))
  var to = msg.To;
  var from = msg.From;

  let response = `
    <Response>
      <Say>Please Leave a message</Say>
      <Start>
        <Stream url="wss://NGROK_TUNNEL_URL/transcribe" track="inbound_track"/>
      </Start>
      <Dial callerId="${to}">
        ${targetPhone}
      </Dial>
      <Pause length="10"></Pause>
    </Response>
  `

  res
    .header('Content-Type', 'text/xml')
    .status(200)
    .send(response);
});

2. 处理媒体流的WebSocket端点(/transcribe)

这段代码是参考Twilio官方示例仓库改的:

app.ws('/transcribe', (ws, req) => {
  console.log(`[ws] open`)
  new MediaStreamHandler(ws, clientWebSockets)
});

class MediaStreamHandler {
  constructor(connection: any) {
    connection.on('message', this.processMessage.bind(this));
    connection.on('close', this.close.bind(this));
    connection.on('error', this.error.bind(this))
  }

  processMessage(message: any) {
    var msg = JSON.parse(message);
    switch (msg.event) {
      case "connected":
        console.log(`[ws]: connected.`);
        break;
      case "start":
        console.log(`[ws]: start`)
        break;
      case "media":
        console.log(`[ws]: media sent`)
        break;
      case "stop":
        console.log(`Call Has Ended`);
        break;
    }
  }

  close() {
    console.log('[ws] closed');
  }

  error(err: any) {
    console.log(`[ws] Error: ${err}`)
  }
}

当前测试结果

当有呼入请求时:

  • Twilio确实会调用我的/voice端点,也成功将呼叫转接到了我的目标手机
  • 查看Twilio的呼叫日志,没有任何报错,返回的TwiML响应格式完全正确
  • <Stream>标签里配置的WebSocket URL(用ngrok做的公网隧道)是有效的,外呼场景下能正常使用

但问题在于:Twilio只会用GET请求访问一次我的/transcribe端点,之后就没有任何后续动作了——WebSocket连接根本没真正建立起来,我的服务器也收不到任何connected、start或者media类型的事件消息。

有没有大佬能帮我排查下问题出在哪呀?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 14:33:08